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