Skip to content

misc: replace regex-based type parser with character-based one #772

misc: replace regex-based type parser with character-based one

misc: replace regex-based type parser with character-based one #772

Triggered via pull request August 16, 2023 10:25
Status Success
Total duration 49s
Artifacts

mutation.yml

on: pull_request
Mutation tests
37s
Mutation tests
Fit to window
Zoom out
Zoom in

Annotations

10 warnings
Mutation tests: src/Type/Parser/LexingParser.php#L45
Escaped Mutant for Mutator "NotIdentical": --- Original +++ New @@ @@ continue; } if ($char === '"' || $char === "'") { - if ($current !== null) { + if ($current === null) { $symbols[] = $current; $current = null; }
Mutation tests: src/Type/Parser/LexingParser.php#L58
Escaped Mutant for Mutator "GreaterThan": --- Original +++ New @@ @@ } if (in_array($char, $separators, true)) { $count = count($symbols); - if ($char === ':' && $current === null && $count > 0 && $symbols[$count - 1] === ':') { + if ($char === ':' && $current === null && $count >= 0 && $symbols[$count - 1] === ':') { $symbols[$count - 1] = '::'; continue; }
Mutation tests: src/Type/Parser/LexingParser.php#L99
Escaped Mutant for Mutator "Continue_": --- Original +++ New @@ @@ { foreach ($symbols as $key => $symbol) { if (!str_contains($symbol, "@anonymous\x00")) { - continue; + break; } if (count($symbols) >= $key + 3) { $symbols[$key] = $symbol . $symbols[$key + 1] . $symbols[$key + 2];
Mutation tests: src/Type/Parser/LexingParser.php#L102
Escaped Mutant for Mutator "DecrementInteger": --- Original +++ New @@ @@ if (!str_contains($symbol, "@anonymous\x00")) { continue; } - if (count($symbols) >= $key + 3) { + if (count($symbols) >= $key + 2) { $symbols[$key] = $symbol . $symbols[$key + 1] . $symbols[$key + 2]; } array_splice($symbols, $key + 1, 2);
Mutation tests: src/Type/Parser/LexingParser.php#L102
Escaped Mutant for Mutator "Plus": --- Original +++ New @@ @@ if (!str_contains($symbol, "@anonymous\x00")) { continue; } - if (count($symbols) >= $key + 3) { + if (count($symbols) >= $key - 3) { $symbols[$key] = $symbol . $symbols[$key + 1] . $symbols[$key + 2]; } array_splice($symbols, $key + 1, 2);
Mutation tests: src/Utility/Reflection/DocParser.php#L77
Escaped Mutant for Mutator "CastString": --- Original +++ New @@ @@ $types = []; preg_match_all('/@(phpstan|psalm)-type\\s+(?<name>[a-zA-Z]\\w*)\\s*=?\\s*(?<type>.*)/', $doc, $matches); foreach ($matches['name'] as $key => $name) { - $types[(string) $name] = self::findType($matches['type'][$key]); + $types[$name] = self::findType($matches['type'][$key]); } return $types; }
Mutation tests: src/Utility/Reflection/DocParser.php#L106
Escaped Mutant for Mutator "ArrayOneItem": --- Original +++ New @@ @@ $class = $matches['class'][$key]; $types[$class][] = $name; } - return $types; + return count($types) > 1 ? array_slice($types, 0, 1, true) : $types; } /** * @param ReflectionClass<object> $reflection
Mutation tests: src/Utility/Reflection/DocParser.php#L123
Escaped Mutant for Mutator "UnwrapArrayMap": --- Original +++ New @@ @@ return []; } preg_match_all('/@(phpstan-|psalm-)?extends\\s+(?<type>.+)/', $doc, $matches); - return array_map(static fn(string $type): string => self::findType($type), $matches['type']); + return $matches['type']; } private static function annotationType(string $string, string $annotation, bool $left = true) : ?string {
Mutation tests: src/Utility/Reflection/DocParser.php#L129
Escaped Mutant for Mutator "TrueValue": --- Original +++ New @@ @@ preg_match_all('/@(phpstan-|psalm-)?extends\\s+(?<type>.+)/', $doc, $matches); return array_map(static fn(string $type): string => self::findType($type), $matches['type']); } - private static function annotationType(string $string, string $annotation, bool $left = true) : ?string + private static function annotationType(string $string, string $annotation, bool $left = false) : ?string { foreach (["@phpstan-{$annotation}", "@psalm-{$annotation}", "@{$annotation}"] as $case) { $pos = $left ? strpos($string, $case) : strrpos($string, $case);
Mutation tests: src/Utility/Reflection/DocParser.php#L161
Escaped Mutant for Mutator "NotIdentical": --- Original +++ New @@ @@ $delimiters = []; $mustBe = []; foreach (str_split($string) as $char) { - if ($mustBe !== [] && $char !== ' ') { + if ($mustBe !== [] && $char === ' ') { if (!in_array($char, $mustBe, true)) { break; }