File tree Expand file tree Collapse file tree 1 file changed +126
-7
lines changed Expand file tree Collapse file tree 1 file changed +126
-7
lines changed Original file line number Diff line number Diff line change @@ -754,17 +754,136 @@ private function getExpressionResolvers(): array
754
754
)
755
755
);
756
756
},
757
- ];
757
+ 'contains ' => static function (Scope $ scope , Arg $ value , Arg $ subString ): Expr {
758
+ if ($ scope ->getType ($ subString ->value )->isNonEmptyString ()->yes ()) {
759
+ return new BooleanAnd (
760
+ new BooleanAnd (
761
+ new FuncCall (
762
+ new Name ('is_string ' ),
763
+ [$ value ]
764
+ ),
765
+ new NotIdentical (
766
+ $ value ->value ,
767
+ new String_ ('' )
768
+ )
769
+ ),
770
+ new GreaterOrEqual (
771
+ new FuncCall (
772
+ new Name ('strpos ' ),
773
+ [$ value ]
774
+ ),
775
+ new LNumber (0 )
776
+ )
777
+ );
778
+ }
758
779
759
- foreach (['contains ' , 'startsWith ' , 'endsWith ' ] as $ name ) {
760
- $ this ->resolvers [$ name ] = function (Scope $ scope , Arg $ value , Arg $ subString ) use ($ name ): array {
780
+ return new BooleanAnd (
781
+ new FuncCall (
782
+ new Name ('is_string ' ),
783
+ [$ value ]
784
+ ),
785
+ new GreaterOrEqual (
786
+ new FuncCall (
787
+ new Name ('strpos ' ),
788
+ [$ value ]
789
+ ),
790
+ new LNumber (0 )
791
+ )
792
+ );
793
+ },
794
+ 'startsWith ' => static function (Scope $ scope , Arg $ value , Arg $ subString ): Expr {
761
795
if ($ scope ->getType ($ subString ->value )->isNonEmptyString ()->yes ()) {
762
- return self ::createIsNonEmptyStringAndSomethingExprPair ($ name , [$ value , $ subString ]);
796
+ return new BooleanAnd (
797
+ new BooleanAnd (
798
+ new FuncCall (
799
+ new Name ('is_string ' ),
800
+ [$ value ]
801
+ ),
802
+ new NotIdentical (
803
+ $ value ->value ,
804
+ new String_ ('' )
805
+ )
806
+ ),
807
+ new Identical (
808
+ new FuncCall (
809
+ new Name ('strpos ' ),
810
+ [$ value , $ subString ]
811
+ ),
812
+ new LNumber (0 )
813
+ )
814
+ );
763
815
}
764
816
765
- return [$ this ->resolvers ['string ' ]($ scope , $ value ), null ];
766
- };
767
- }
817
+ return new BooleanAnd (
818
+ new FuncCall (
819
+ new Name ('is_string ' ),
820
+ [$ value ]
821
+ ),
822
+ new Identical (
823
+ new FuncCall (
824
+ new Name ('strpos ' ),
825
+ [$ value , $ subString ]
826
+ ),
827
+ new LNumber (0 )
828
+ )
829
+ );
830
+ },
831
+ 'endsWith ' => static function (Scope $ scope , Arg $ value , Arg $ subString ): Expr {
832
+ if ($ scope ->getType ($ subString ->value )->isNonEmptyString ()->yes ()) {
833
+ return new BooleanAnd (
834
+ new BooleanAnd (
835
+ new FuncCall (
836
+ new Name ('is_string ' ),
837
+ [$ value ]
838
+ ),
839
+ new NotIdentical (
840
+ $ value ->value ,
841
+ new String_ ('' )
842
+ )
843
+ ),
844
+ new Identical (
845
+ new FuncCall (
846
+ new Name ('strpos ' ),
847
+ [$ value , $ subString ]
848
+ ),
849
+ new BinaryOp \Minus (
850
+ new FuncCall (
851
+ new Name ('strlen ' ),
852
+ [$ value ]
853
+ ),
854
+ new FuncCall (
855
+ new Name ('strlen ' ),
856
+ [$ subString ]
857
+ )
858
+ )
859
+ )
860
+ );
861
+ }
862
+
863
+ return new BooleanAnd (
864
+ new FuncCall (
865
+ new Name ('is_string ' ),
866
+ [$ value ]
867
+ ),
868
+ new Identical (
869
+ new FuncCall (
870
+ new Name ('strpos ' ),
871
+ [$ value , $ subString ]
872
+ ),
873
+ new BinaryOp \Minus (
874
+ new FuncCall (
875
+ new Name ('strlen ' ),
876
+ [$ value ]
877
+ ),
878
+ new FuncCall (
879
+ new Name ('strlen ' ),
880
+ [$ subString ]
881
+ )
882
+ )
883
+ )
884
+ );
885
+ },
886
+ ];
768
887
769
888
$ assertionsResultingAtLeastInNonEmptyString = [
770
889
'startsWithLetter ' ,
You can’t perform that action at this time.
0 commit comments