From 079eba6c952098451f326df3ad195548ca3982c4 Mon Sep 17 00:00:00 2001 From: Younes ENNAJI Date: Sun, 1 Nov 2026 13:13:39 +0000 Subject: [PATCH] Read regex shapes with PHPRegex instead of the generated parser The shapes of preg_match(), preg_match_all() and preg_replace_callback() are read from the AST and the capture shape analysis of PHPRegex, a PCRE2 pattern parser that runs on PHP 7.4. The generated parser, its grammar, its build script and the phplrt runtime are removed, and ignoreErrors patterns are validated with the same parser. Patterns are read for the analysed PHP version and the PCRE2 version it bundles; a pcreVersion parameter, or config.platform.lib-pcre in composer.json, can set that version. With bleeding edge, RegularExpressionPatternRule also reports a pattern the running PHP compiles but the analysed PHP does not. A new test matches every constant pattern of the preg_* fixtures with the engine, on generated subjects and with every flag combination, and checks that the inferred type accepts what the engine writes. preg_match() and preg_match_all() lose the 0 from their return type when the pattern is sure to match, read from PHPRegex's pattern info: /(.*)/ is typed 1|false where /^(.*)$/ keeps 0|1|false, as it returns 0 on "a\nb". From an offset, only a pattern proven from any offset drops the 0. --- .typos.toml | 2 - CLAUDE.md | 15 +- Makefile | 8 - build/phpstan.neon | 3 - build/regex-parser/.gitignore | 1 - build/regex-parser/RegexGrammar.pp3 | 382 --- build/regex-parser/composer.json | 13 - build/regex-parser/composer.lock | 2049 ----------------- build/regex-parser/generate.php | 54 - composer.json | 9 +- composer.lock | 85 +- conf/bleedingEdge.neon | 1 + conf/config.neon | 2 + conf/parametersSchema.neon | 2 + phpcs.xml | 2 - poc/README.md | 54 + poc/README.template.md | 44 + poc/bin/extract-suites.php | 181 ++ poc/bin/measure.php | 204 ++ poc/bin/report.php | 222 ++ poc/bin/subjects.php | 59 + poc/bin/verify.php | 90 + poc/data/pcre2.json.gz | Bin 0 -> 943248 bytes poc/data/php-src.json.gz | Bin 0 -> 78328 bytes poc/witnesses/pcre2.json | 702 ++++++ poc/witnesses/pcre2.md | 678 ++++++ poc/witnesses/php-src.json | 32 + poc/witnesses/php-src.md | 30 + src/Analyser/ArgumentsHandler.php | 9 + .../ResultCache/ResultCacheManager.php | 5 + src/Command/IgnoredRegexValidator.php | 94 +- .../ValidateIgnoredErrorsExtension.php | 15 +- src/Php/PcreVersion.php | 87 + src/Php/PcreVersionFactory.php | 57 + src/Php/PcreVersionFactoryFactory.php | 51 + .../Regexp/RegularExpressionPatternRule.php | 12 +- .../PregMatchDynamicReturnTypeExtension.php | 89 + .../PregMatchParameterOutTypeExtension.php | 2 +- .../Php/PregMatchTypeSpecifyingExtension.php | 25 +- ...placeCallbackArrayClosureTypeExtension.php | 90 + ...regReplaceCallbackClosureTypeExtension.php | 2 +- .../PregSplitDynamicReturnTypeExtension.php | 102 +- src/Type/Php/RegexArrayShapeMatcher.php | 296 ++- ...aceFunctionsDynamicReturnTypeExtension.php | 100 +- src/Type/Regex/PHPRegexReader.php | 177 ++ src/Type/Regex/Parser/RegexNode.php | 65 - src/Type/Regex/Parser/RegexParser.php | 1376 ----------- .../Regex/Parser/RegexSyntaxException.php | 11 - src/Type/Regex/RegexAstWalkResult.php | 103 +- src/Type/Regex/RegexCapturingGroup.php | 29 + src/Type/Regex/RegexExpressionHelper.php | 2 +- src/Type/Regex/RegexGroupList.php | 59 - src/Type/Regex/RegexGroupParser.php | 1115 +++------ src/Type/Regex/RegexGroupPlacement.php | 61 + src/Type/Regex/RegexGroupWalkResult.php | 135 -- src/Type/Regex/RegexTopology.php | 93 + stubs/core.stub | 13 +- .../ResultCacheManagerCollectedDataTest.php | 2 + tests/PHPStan/Analyser/data/bug-11292.php | 2 +- .../PHPStan/Analyser/data/bug-15297-php73.php | 6 +- tests/PHPStan/Analyser/data/param-out.php | 4 +- tests/PHPStan/Analyser/nsrt/bug-11293.php | 18 +- tests/PHPStan/Analyser/nsrt/bug-11311.php | 42 +- tests/PHPStan/Analyser/nsrt/bug-11438.php | 65 + tests/PHPStan/Analyser/nsrt/bug-11589.php | 32 + tests/PHPStan/Analyser/nsrt/bug-11602.php | 25 + tests/PHPStan/Analyser/nsrt/bug-11746.php | 41 + tests/PHPStan/Analyser/nsrt/bug-12126.php | 12 +- tests/PHPStan/Analyser/nsrt/bug-12210.php | 2 +- tests/PHPStan/Analyser/nsrt/bug-12242.php | 4 +- tests/PHPStan/Analyser/nsrt/bug-12997.php | 48 + tests/PHPStan/Analyser/nsrt/bug-14314.php | 10 +- tests/PHPStan/Analyser/nsrt/bug-14490.php | 39 + tests/PHPStan/Analyser/nsrt/bug-14575.php | 36 +- tests/PHPStan/Analyser/nsrt/bug-14710.php | 34 +- tests/PHPStan/Analyser/nsrt/bug-14784.php | 6 +- tests/PHPStan/Analyser/nsrt/bug-14809.php | 8 +- tests/PHPStan/Analyser/nsrt/bug-14820.php | 20 +- tests/PHPStan/Analyser/nsrt/bug-14909.php | 18 + tests/PHPStan/Analyser/nsrt/bug-15018.php | 31 + tests/PHPStan/Analyser/nsrt/bug-15297.php | 4 +- tests/PHPStan/Analyser/nsrt/bug-6859.php | 2 +- tests/PHPStan/Analyser/nsrt/bug11384.php | 2 +- .../nsrt/by-ref-writeback-native-type.php | 8 +- tests/PHPStan/Analyser/nsrt/count-type.php | 2 +- .../nsrt/equality-narrowing-new-world.php | 6 +- .../non-empty-string-replace-functions.php | 9 +- .../Analyser/nsrt/phpregex-participation.php | 81 + .../Analyser/nsrt/preg_match_all_shapes.php | 40 +- .../PHPStan/Analyser/nsrt/preg_match_php7.php | 5 +- .../PHPStan/Analyser/nsrt/preg_match_php8.php | 5 +- .../Analyser/nsrt/preg_match_shapes.php | 412 ++-- .../Analyser/nsrt/preg_match_shapes_php80.php | 10 +- .../Analyser/nsrt/preg_match_shapes_php82.php | 16 +- .../nsrt/preg_replace_callback_shapes.php | 22 +- tests/PHPStan/Analyser/nsrt/preg_split.php | 5 + .../Command/IgnoredRegexValidatorTest.php | 11 +- ...nexistentOffsetInArrayDimFetchRuleTest.php | 2 +- .../CallToFunctionParametersRuleTest.php | 34 +- .../Rules/Functions/data/bug-10396.php | 51 + ...arExpressionPatternRuleAnalysedPhpTest.php | 77 + .../RegularExpressionPatternRuleTest.php | 3 + .../Rules/Regexp/data/analysed-php-82.neon | 2 + .../data/regex-pattern-analysed-php.php | 8 + .../Variables/NullCoalesceRulePhp73Test.php | 2 +- .../Php/RegexArrayShapeMatcherEngineTest.php | 219 ++ .../Type/Regex/PHPRegexBackendParityTest.php | 249 ++ .../Type/Regex/RegexShapeReadingTest.php | 696 ++++++ turbo-ext/src/ArgumentsHandler.cpp | 20 + 109 files changed, 6173 insertions(+), 5534 deletions(-) delete mode 100644 build/regex-parser/.gitignore delete mode 100644 build/regex-parser/RegexGrammar.pp3 delete mode 100644 build/regex-parser/composer.json delete mode 100644 build/regex-parser/composer.lock delete mode 100644 build/regex-parser/generate.php create mode 100644 poc/README.md create mode 100644 poc/README.template.md create mode 100644 poc/bin/extract-suites.php create mode 100644 poc/bin/measure.php create mode 100644 poc/bin/report.php create mode 100644 poc/bin/subjects.php create mode 100644 poc/bin/verify.php create mode 100644 poc/data/pcre2.json.gz create mode 100644 poc/data/php-src.json.gz create mode 100644 poc/witnesses/pcre2.json create mode 100644 poc/witnesses/pcre2.md create mode 100644 poc/witnesses/php-src.json create mode 100644 poc/witnesses/php-src.md create mode 100644 src/Php/PcreVersion.php create mode 100644 src/Php/PcreVersionFactory.php create mode 100644 src/Php/PcreVersionFactoryFactory.php create mode 100644 src/Type/Php/PregMatchDynamicReturnTypeExtension.php create mode 100644 src/Type/Php/PregReplaceCallbackArrayClosureTypeExtension.php create mode 100644 src/Type/Regex/PHPRegexReader.php delete mode 100644 src/Type/Regex/Parser/RegexNode.php delete mode 100644 src/Type/Regex/Parser/RegexParser.php delete mode 100644 src/Type/Regex/Parser/RegexSyntaxException.php create mode 100644 src/Type/Regex/RegexGroupPlacement.php delete mode 100644 src/Type/Regex/RegexGroupWalkResult.php create mode 100644 src/Type/Regex/RegexTopology.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-11438.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-11589.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-11602.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-11746.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-12997.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-14490.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-14909.php create mode 100644 tests/PHPStan/Analyser/nsrt/bug-15018.php create mode 100644 tests/PHPStan/Analyser/nsrt/phpregex-participation.php create mode 100644 tests/PHPStan/Rules/Functions/data/bug-10396.php create mode 100644 tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleAnalysedPhpTest.php create mode 100644 tests/PHPStan/Rules/Regexp/data/analysed-php-82.neon create mode 100644 tests/PHPStan/Rules/Regexp/data/regex-pattern-analysed-php.php create mode 100644 tests/PHPStan/Type/Php/RegexArrayShapeMatcherEngineTest.php create mode 100644 tests/PHPStan/Type/Regex/PHPRegexBackendParityTest.php create mode 100644 tests/PHPStan/Type/Regex/RegexShapeReadingTest.php diff --git a/.typos.toml b/.typos.toml index 76112c559a0..262c9605bf6 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,8 +1,6 @@ [files] extend-exclude = [ ".git/", - # generated by `make regex-parser`, contains lexer regexes - "src/Type/Regex/Parser/RegexParser.php", ] ignore-hidden = false diff --git a/CLAUDE.md b/CLAUDE.md index 7766526269e..31861e9df02 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -187,14 +187,13 @@ Collects structural information about a class during AST traversal: properties, ### Regex parser (`src/Type/Regex/`) -`RegexGroupParser` parses regex patterns to infer `preg_match()` array shapes (via `RegexArrayShapeMatcher`) and `IgnoredRegexValidator` uses it to validate `ignoreErrors` patterns. The parser itself is generated by [phplrt](https://github.com/phplrt/phplrt): +`RegexGroupParser` reads regex patterns to infer `preg_match()` array shapes (via `RegexArrayShapeMatcher`) and `IgnoredRegexValidator` uses the same reader to validate `ignoreErrors` patterns. Patterns are parsed by [PHPRegex](https://github.com/php-regex/php-regex), from the `php-regex/regex-parser-php74` package (its PHP 7.4 compatible build, so it works after the PHAR is downgraded): -- **Grammar**: `build/regex-parser/RegexGrammar.pp3` (phplrt `.pp3` format, derived from Hoa's regex grammar). The reducers in the grammar build a tree of `PHPStan\Type\Regex\Parser\RegexNode` objects (`#capturing`, `#alternation`, `#quantification`, `token`, ...) that `RegexGroupParser` walks. -- **Generated parser**: `src/Type/Regex/Parser/RegexParser.php`. Never edit it by hand. Change the grammar and regenerate, then commit both files together. -- **Regenerating**: `make regex-parser`. It installs the phplrt compiler into `build/regex-parser/vendor` (separate `build/regex-parser/composer.json`, needs PHP 8.4+) and runs `build/regex-parser/generate.php`. The script targets PHP 8.1 syntax and post-processes the output so that the PHAR's PHP 7.4 downgrader can handle it (first-class callables become `\Closure::fromCallable()`) and adds `@throws` to `parse()`. -- **Runtime**: the generated parser only needs the phplrt runtime, which comes from the `ondrejmirtes/phplrt-runtime` fork (a PHP 7.4 compatible downgrade of the `phplrt/*` runtime packages that replaces them). The compiler is a build-time dependency only and is never shipped. -- Parse failures throw `Phplrt\Contracts\Parser\Exception\ParserExceptionInterface` or `RegexSyntaxException`; callers treat both as "pattern not supported" and infer no shape. -- After changing the grammar or `RegexGroupParser`, run the regex tests: `tests/PHPStan/Analyser/nsrt/preg_*.php`, `tests/PHPStan/Type/Php/`, `tests/PHPStan/Type/Regex/` and `tests/PHPStan/Rules/Regexp/`. +- **Reader**: `PHPRegexReader` parses a pattern for the analysed PHP version and the PCRE2 version it bundles (`pcreVersion` parameter, or `config.platform.lib-pcre` in composer.json, see `PcreVersion`). A pattern the analysed engine refuses, or that the library cannot read, gets no shape. +- **Shapes**: the type of each group comes from the library's capture shape analysis (`CaptureShapeAnalyzer`: participation, values, length, digit and truthiness facts, per-branch arms). `RegexGroupParser` only walks the tree to place each group: its parent group and the alternation branch it belongs to. +- Library exceptions implement `PHPRegex\Parser\Exception\ExceptionInterface`; callers treat them as "pattern not supported" and infer no shape. +- `RegexArrayShapeMatcherEngineTest` matches every constant pattern of the `preg_*` fixtures with the engine and checks that the inferred type accepts what the engine writes. +- After changing `RegexGroupParser` or `RegexArrayShapeMatcher`, run the regex tests: `tests/PHPStan/Analyser/nsrt/preg_*.php`, `tests/PHPStan/Type/Php/`, `tests/PHPStan/Type/Regex/` and `tests/PHPStan/Rules/Regexp/`. ## Extension points @@ -350,4 +349,4 @@ When adding or editing PHPDoc comments in this codebase, follow these guidelines - `nette/neon` - Configuration file format - `react/child-process`, `react/async` - Parallel analysis - `symfony/console` - CLI interface -- `ondrejmirtes/phplrt-runtime` - PHP 7.4 compatible fork of the phplrt runtime, runs the regex parser generated from `build/regex-parser/RegexGrammar.pp3` (`make regex-parser`) +- `php-regex/regex-parser-php74` - PHP 7.4 compatible build of the PHPRegex parser, reads regex patterns for `preg_*()` shapes and `ignoreErrors` diff --git a/Makefile b/Makefile index d996514c8b7..5ac3b28b597 100644 --- a/Makefile +++ b/Makefile @@ -178,14 +178,6 @@ phpstan-generate-baseline-php: phpstan-pro: php -d memory_limit=450M bin/phpstan --pro -# Regenerates src/Type/Regex/Parser/RegexParser.php from -# build/regex-parser/RegexGrammar.pp3 with the phplrt compiler. The compiler -# needs PHP 8.4+, the generated parser only needs the phplrt runtime. -.PHONY: regex-parser -regex-parser: - composer install --working-dir build/regex-parser - php build/regex-parser/generate.php - name-collision: php vendor/bin/detect-collisions --configuration build/collision-detector.json diff --git a/build/phpstan.neon b/build/phpstan.neon index e4c1650ff6a..d07ecd57ac5 100644 --- a/build/phpstan.neon +++ b/build/phpstan.neon @@ -39,9 +39,6 @@ parameters: - ../tests/PHPStan/Reflection/MixedTypeTest.php - ../tests/e2e/magic-setter/* - ../tests/PHPStan/Rules/Properties/UninitializedPropertyRuleTest.php - - ../tests/PHPStan/Command/IgnoredRegexValidatorTest.php - - ../src/Command/IgnoredRegexValidator.php - - ../src/Type/Regex/Parser/RegexParser.php exceptions: uncheckedExceptionClasses: - 'PHPStan\ShouldNotHappenException' diff --git a/build/regex-parser/.gitignore b/build/regex-parser/.gitignore deleted file mode 100644 index 22d0d82f809..00000000000 --- a/build/regex-parser/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor diff --git a/build/regex-parser/RegexGrammar.pp3 b/build/regex-parser/RegexGrammar.pp3 deleted file mode 100644 index 4b9f58b237a..00000000000 --- a/build/regex-parser/RegexGrammar.pp3 +++ /dev/null @@ -1,382 +0,0 @@ -// -// Hoa -// -// -// @license -// -// New BSD License -// -// Copyright © 2007-2017, Hoa community. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Hoa nor the names of its contributors may be -// used to endorse or promote products derived from this software without -// specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Grammar \Hoa\Regex\Grammar. -// -// Provide grammar of PCRE (Perl Compatible Regular Expression)for the LL(k) -// parser. More informations at http://pcre.org/pcre.txt, sections pcrepattern & -// pcresyntax. -// -// @copyright Copyright © 2007-2017 Hoa community. -// @license New BSD License -// -// Ported to the phplrt PP3 grammar format by the PHPStan project. -// The generated parser lives in src/Type/Regex/Parser/RegexParser.php, -// regenerate it with `make regex-parser`. - - -%pragma root Expression - -// Character classes. -// The "fc" variants are followed by a "]" which is a literal and does not close the class. -%token T_NEGATIVE_CLASS_FC \[\^\] -> state(class) -%token T_CLASS_FC \[\] -> state(class) -%token T_NEGATIVE_CLASS \[\^ -> state(class) -%token T_CLASS \[ -> state(class) -%token class:T_POSIX_CLASS \[:\^?[a-z]+:\] -%token class:T_CLASS_NESTED \[ -%token class:T_CLASS_CLOSE \] -> exit() -%token class:T_RANGE \- -// \b means backspace in character classes -%token class:T_CLASS_CHARACTER \\(?:[aefnrtb]|c[\x00-\x7f]) -%token class:T_CLASS_DYNAMIC_CHARACTER \\(?:[0-7]{3}|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}) -%token class:T_CLASS_CHARACTER_TYPE \\(?:[CdDhHNRsSvVwWX]|[pP]{[^}]+}) -%token class:T_CLASS_LITERAL \\.|.|\n - -// Internal options. -%token T_INTERNAL_OPTION \(\?[imsxnJUX^]*-?[imsxnJUX^]+\) - -// Lookahead and lookbehind assertions. -%token T_LOOKAHEAD \(\?= -%token T_NEGATIVE_LOOKAHEAD \(\?! -%token T_LOOKBEHIND \(\?<= -%token T_NEGATIVE_LOOKBEHIND \(\?\) -%token T_ABSOLUTE_REFERENCE \(\?\((\d+)\) -%token T_RELATIVE_REFERENCE \(\?\(([\+\-]\d+)\) -%token T_ASSERTION_REFERENCE \(\?\( - -// Comments. -%token T_COMMENT \(\?#(.*?)(?name). -%token T_NAMED_BACKREFERENCE \(\?P=\w+\) -%token T_SUBROUTINE \(\?(?:R|[+-]?\d+|&\w+|P>\w+)\) - -// Groups. -%token T_NAMED_CAPTURING \(\?P?<(.+?)(? -%token T_NON_CAPTURING \(\?: -%token T_NON_CAPTURING_INTERNAL_OPTION \(\?[imsxnJUX^]*-?[imsxnJUX^]+: -%token T_NON_CAPTURING_RESET \(\?\| -%token T_ATOMIC_GROUP \(\?> -%token T_CAPTURING \( -%token T_CAPTURING_CLOSE \) - -// Quantifiers (by default, greedy). -%token T_ZERO_OR_ONE_POSSESSIVE \?\+ -%token T_ZERO_OR_ONE_LAZY \?\? -%token T_ZERO_OR_ONE \? -%token T_ZERO_OR_MORE_POSSESSIVE \*\+ -%token T_ZERO_OR_MORE_LAZY \*\? -%token T_ZERO_OR_MORE \* -%token T_ONE_OR_MORE_POSSESSIVE \+\+ -%token T_ONE_OR_MORE_LAZY \+\? -%token T_ONE_OR_MORE \+ -%token T_EXACTLY_N \{[0-9]+\} -%token T_N_TO_M_POSSESSIVE \{[0-9]+,[0-9]+\}\+ -%token T_N_TO_M_LAZY \{[0-9]+,[0-9]+\}\? -%token T_N_TO_M \{[0-9]+,[0-9]+\} -%token T_N_OR_MORE_POSSESSIVE \{[0-9]+,\}\+ -%token T_N_OR_MORE_LAZY \{[0-9]+,\}\? -%token T_N_OR_MORE \{[0-9]+,\} - -// Alternation. -%token T_ALTERNATION \| - -// Literals. -%token T_CHARACTER \\(?:[aefnrt]|c[\x00-\x7f]) -%token T_DYNAMIC_CHARACTER \\(?:[0-7]{3}|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}) -%token T_CHARACTER_TYPE \\(?:[CdDhHNRsSvVwWX]|[pP]{[^}]+}) -%token T_ANCHOR \\[bBAZzG]|\^|\$ -%token T_MATCH_POINT_RESET \\K -// Subroutine calls \g, \g'1' and backreferences \1, \g1, \g{-1}, \g{name}, \k, \k'name', \k{name}. -// Octal escapes like \012 are matched as dynamic characters above. -%token T_SUBROUTINE_G \\g(?:<[^>]+>|'[^']+') -%token T_BACKREFERENCE \\(?:[1-9]\d*|g[+-]?\d+|g\{[+-]?\w+\}|k<\w+>|k'\w+'|k\{\w+\}) -%token T_LITERAL \\.|.|\n - -Expression -> { - return new RegexNode('#expression', children: \is_array($children) ? $children : [$children]); -} - : Alternation()? - ; - -Alternation -> { - if (!\is_array($children)) { - return $children; - } - $nodes = []; - $isAlternation = false; - foreach ($children as $child) { - if ($child instanceof TokenInterface) { - $isAlternation = true; - $child = new RegexNode('token', 'alternation', $child->value); - } - $nodes[] = $child; - } - if (!$isAlternation) { - return $children[0] ?? []; - } - return new RegexNode('#alternation', children: $nodes); -} - : Concatenation()? ( Concatenation()?)* - ; - -Concatenation -> { - if (!\is_array($children)) { - return $children; - } - if (\count($children) === 1) { - return $children[0]; - } - return new RegexNode('#concatenation', children: $children); -} - : (InternalOptions() | Assertion() | Quantification() | Condition())+ - ; - -InternalOptions -> { - return new RegexNode('#internal_options', children: [ - new RegexNode('token', 'internal_option', $children->value), - ]); -} - : - ; - -Condition -> { - $reference = \array_shift($children); - switch ($reference->id) { - case self::T_NAMED_REFERENCE: - \array_unshift($children, new RegexNode('token', 'capturing_name', $reference->captures[0])); - return new RegexNode('#namedcondition', children: $children); - case self::T_ABSOLUTE_REFERENCE: - \array_unshift($children, new RegexNode('token', 'index', $reference->captures[0])); - return new RegexNode('#absolutecondition', children: $children); - case self::T_RELATIVE_REFERENCE: - \array_unshift($children, new RegexNode('token', 'index', $reference->captures[0])); - return new RegexNode('#relativecondition', children: $children); - default: - return new RegexNode('#assertioncondition', children: $children); - } -} - : ( - - | - | - | Alternation()? ::T_CAPTURING_CLOSE:: - ) - Alternation()? - ::T_CAPTURING_CLOSE:: - ; - -Assertion -> { - $assertion = \array_shift($children); - $ids = [ - self::T_LOOKAHEAD => '#lookahead', - self::T_NEGATIVE_LOOKAHEAD => '#negativelookahead', - self::T_LOOKBEHIND => '#lookbehind', - self::T_NEGATIVE_LOOKBEHIND => '#negativelookbehind', - ]; - return new RegexNode($ids[$assertion->id], children: $children); -} - : ( | | | ) - Alternation()? - ::T_CAPTURING_CLOSE:: - ; - -Quantification -> { - if (!\is_array($children)) { - return $children; - } - if (\count($children) === 1) { - return $children[0]; - } - return new RegexNode('#quantification', children: [ - $children[0], - new RegexNode('token', \strtolower(\substr($children[1]->name, 2)), $children[1]->value), - ]); -} - : (CharacterClass() | Capturing() | Literal()) Quantifier()? - ; - -Quantifier - : | | - | | | - | | | - | - | | | - | | | - ; - -CharacterClass -> { - $tokens = $children->children; - $close = \array_pop($tokens); - if ($close === null || $close->name !== 'T_CLASS_CLOSE') { - throw new RegexSyntaxException('Unclosed character class'); - } - - $nodes = []; - if ($children->id === self::T_NEGATIVE_CLASS_FC || $children->id === self::T_CLASS_FC) { - $nodes[] = new RegexNode('token', '_class', ']'); - } - - $literalNames = [ - 'T_CLASS_CHARACTER' => 'character', - 'T_CLASS_DYNAMIC_CHARACTER' => 'dynamic_character', - 'T_CLASS_CHARACTER_TYPE' => 'character_type', - 'T_CLASS_LITERAL' => 'literal', - ]; - - $count = \count($tokens); - $i = 0; - // ? ( | | range() ? | literal() )* ? - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - while ($i < $count) { - $token = $tokens[$i]; - if ($token->name === 'T_POSIX_CLASS') { - $nodes[] = new RegexNode('token', 'posix_class', $token->value); - $i++; - continue; - } - if ($token->name === 'T_CLASS_NESTED') { - $nodes[] = new RegexNode('token', 'class_', $token->value); - $i++; - continue; - } - if (!isset($literalNames[$token->name])) { - break; - } - $literal = new RegexNode('token', $literalNames[$token->name], $token->value); - if ( - $i + 2 < $count - && $tokens[$i + 1]->name === 'T_RANGE' - && isset($literalNames[$tokens[$i + 2]->name]) - ) { - $nodes[] = new RegexNode('#range', children: [ - $literal, - new RegexNode('token', $literalNames[$tokens[$i + 2]->name], $tokens[$i + 2]->value), - ]); - $i += 3; - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - continue; - } - $nodes[] = $literal; - $i++; - } - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - if ($i !== $count) { - throw new RegexSyntaxException('Unexpected token in character class'); - } - - $negative = $children->id === self::T_NEGATIVE_CLASS_FC || $children->id === self::T_NEGATIVE_CLASS; - return new RegexNode($negative ? '#negativeclass' : '#class', children: $nodes); -} - : | | | - ; - -Capturing -> { - if (!\is_array($children)) { - $children = [$children]; - } - $opening = \array_shift($children); - switch ($opening->id) { - case self::T_MARKER: - return new RegexNode('#mark', children: [ - new RegexNode('token', 'name', $opening->captures[0]), - ]); - case self::T_COMMENT: - return new RegexNode('#comment', children: $opening->captures[0] === '' ? [] : [ - new RegexNode('token', 'comment', $opening->captures[0]), - ]); - case self::T_NAMED_CAPTURING: - \array_unshift($children, new RegexNode('token', 'capturing_name', $opening->captures[0])); - return new RegexNode('#namedcapturing', children: $children); - case self::T_NON_CAPTURING: - return new RegexNode('#noncapturing', children: $children); - case self::T_NON_CAPTURING_INTERNAL_OPTION: - \array_unshift($children, new RegexNode('token', 'non_capturing_internal_option', $opening->value)); - return new RegexNode('#noncapturing', children: $children); - case self::T_NON_CAPTURING_RESET: - return new RegexNode('#noncapturingreset', children: $children); - case self::T_ATOMIC_GROUP: - return new RegexNode('#atomicgroup', children: $children); - default: - return new RegexNode('#capturing', children: $children); - } -} - : - | - | ( - - | - | - | - | - | - ) - Alternation()? - ::T_CAPTURING_CLOSE:: - ; - -Literal -> { - $names = [ - self::T_NAMED_BACKREFERENCE => 'backreference', - self::T_SUBROUTINE_G => 'subroutine', - ]; - - return new RegexNode('token', $names[$children->id] ?? \strtolower(\substr($children->name, 2)), $children->value); -} - : - | - | - | - | - | - | - | - | - | - ; diff --git a/build/regex-parser/composer.json b/build/regex-parser/composer.json deleted file mode 100644 index 4432594d8fa..00000000000 --- a/build/regex-parser/composer.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "phpstan/regex-parser-generator", - "description": "Generates src/Type/Regex/Parser/RegexParser.php from RegexGrammar.pp3", - "type": "project", - "license": ["MIT"], - "require": { - "php": "^8.4", - "phplrt/compiler": "^4.2.4" - }, - "config": { - "sort-packages": true - } -} diff --git a/build/regex-parser/composer.lock b/build/regex-parser/composer.lock deleted file mode 100644 index 99c7fa52c60..00000000000 --- a/build/regex-parser/composer.lock +++ /dev/null @@ -1,2049 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "893c1c7b6bf054bfe0d0fb737629d08c", - "packages": [ - { - "name": "phplrt/compiler", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/compiler.git", - "reference": "b093fc0b5c045d2632bea351137980263f3c82e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/compiler/zipball/b093fc0b5c045d2632bea351137980263f3c82e7", - "reference": "b093fc0b5c045d2632bea351137980263f3c82e7", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0", - "php": "^8.1", - "phplrt/exception": "^4.2", - "phplrt/lexer-builder": "^4.2", - "phplrt/parser-builder": "^4.2", - "phplrt/source": "^4.2", - "psr/log": "^3.0", - "symfony/console": "^6.4|^7.0|^8.0", - "twig/twig": "^3.30" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "bin": [ - "bin/phplrt" - ], - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Compiler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt component for compiling a grammar file into a lexer and a parser", - "homepage": "https://github.com/phplrt", - "keywords": [ - "compiler", - "generator", - "grammar", - "lexer", - "parser", - "pp2" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/compiler" - }, - "time": "2026-10-16T08:44:06+00:00" - }, - { - "name": "phplrt/exception", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/exception.git", - "reference": "b5df39f3661b8651baba684bb17f0d69ad366f98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/exception/zipball/b5df39f3661b8651baba684bb17f0d69ad366f98", - "reference": "b5df39f3661b8651baba684bb17f0d69ad366f98", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/lexer-contracts": "^4.2", - "phplrt/parser-contracts": "^4.2", - "phplrt/position": "^4.2", - "phplrt/source": "^4.2" - }, - "require-dev": { - "ext-intl": "*", - "ext-mbstring": "*", - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Exception\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt library to display parsing errors", - "homepage": "https://github.com/phplrt", - "keywords": [ - "error", - "exception", - "formatter", - "parsing", - "printer" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/exception" - }, - "time": "2026-10-15T12:10:17+00:00" - }, - { - "name": "phplrt/lexer", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/lexer.git", - "reference": "ced66a094f69d4f874d70923eabda290ac1ef63e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/lexer/zipball/ced66a094f69d4f874d70923eabda290ac1ef63e", - "reference": "ced66a094f69d4f874d70923eabda290ac1ef63e", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "php": "^8.1", - "phplrt/lexer-contracts": "^4.2", - "phplrt/source-contracts": "^4.2" - }, - "provide": { - "phplrt/lexer-contracts-implementation": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phplrt/exception": "^4.2", - "phplrt/lexer-builder": "^4.2", - "phplrt/source": "^4.2", - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant", - "phplrt/exception": "Renders the syntax errors along with the fragment of the source code they occurred in" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt lexer library that can be used for scanners implementation using PCRE", - "homepage": "https://github.com/phplrt", - "keywords": [ - "lexer", - "parsing", - "regex", - "scanner", - "stream", - "token", - "tokenizer" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/lexer" - }, - "time": "2026-10-12T23:29:56+00:00" - }, - { - "name": "phplrt/lexer-builder", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/lexer-builder.git", - "reference": "4280d42b54638a02f65e76ed365651260107b908" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/lexer-builder/zipball/4280d42b54638a02f65e76ed365651260107b908", - "reference": "4280d42b54638a02f65e76ed365651260107b908", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/exception": "^4.2", - "phplrt/lexer": "^4.2", - "phplrt/source-contracts": "^4.2", - "psr/log": "^3.0" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Lexer\\Builder\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt component for assembling a lexer", - "homepage": "https://github.com/phplrt", - "keywords": [ - "build", - "compiler", - "lexer", - "parsing", - "regex", - "scanner", - "stream", - "token", - "tokenizer" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/lexer-builder" - }, - "time": "2026-10-16T08:43:44+00:00" - }, - { - "name": "phplrt/lexer-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/lexer-contracts.git", - "reference": "8df53e70664674b0defeaa1212056b38ca3685f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/lexer-contracts/zipball/8df53e70664674b0defeaa1212056b38ca3685f6", - "reference": "8df53e70664674b0defeaa1212056b38ca3685f6", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/source-contracts": "^4.2" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt lexer abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "lexer", - "parsing", - "regex", - "standards", - "stream", - "token", - "tokenizer" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/lexer-contracts" - }, - "time": "2026-10-15T12:09:22+00:00" - }, - { - "name": "phplrt/parser", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/parser.git", - "reference": "5ce04660ed44b22c4c595b6a8a180f97ef16c2fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/parser/zipball/5ce04660ed44b22c4c595b6a8a180f97ef16c2fe", - "reference": "5ce04660ed44b22c4c595b6a8a180f97ef16c2fe", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "php": "^8.1", - "phplrt/lexer": "^4.2", - "phplrt/parser-contracts": "^4.2", - "phplrt/position": "^4.2", - "phplrt/source-contracts": "^4.2" - }, - "provide": { - "phplrt/parser-contracts-implementation": "^4.0" - }, - "require-dev": { - "phplrt/exception": "^4.2", - "phplrt/parser-builder": "^4.2", - "phplrt/source": "^4.2", - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant", - "phplrt/exception": "Renders the syntax errors along with the fragment of the source code they occurred in" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Parser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt parser library", - "homepage": "https://github.com/phplrt", - "keywords": [ - "LPeg", - "language", - "lookahead", - "parser", - "peg", - "php", - "tracing" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/parser" - }, - "time": "2026-10-16T08:43:49+00:00" - }, - { - "name": "phplrt/parser-builder", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/parser-builder.git", - "reference": "898c27614ec7a6e52d68a9fb1450281516a91192" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/parser-builder/zipball/898c27614ec7a6e52d68a9fb1450281516a91192", - "reference": "898c27614ec7a6e52d68a9fb1450281516a91192", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/exception": "^4.2", - "phplrt/lexer": "^4.2", - "phplrt/lexer-builder": "^4.2", - "phplrt/parser": "^4.2", - "phplrt/source-contracts": "^4.2", - "psr/log": "^3.0" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Parser\\Builder\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt component for assembling a parser", - "homepage": "https://github.com/phplrt", - "keywords": [ - "LPeg", - "build", - "compiler", - "parser", - "peg", - "regex" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/parser-builder" - }, - "time": "2026-10-16T08:45:09+00:00" - }, - { - "name": "phplrt/parser-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/parser-contracts.git", - "reference": "472a952aaaa4bea475a60a9c876abdee74a4e4bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/parser-contracts/zipball/472a952aaaa4bea475a60a9c876abdee74a4e4bc", - "reference": "472a952aaaa4bea475a60a9c876abdee74a4e4bc", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/lexer-contracts": "^4.2", - "phplrt/source-contracts": "^4.2" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Parser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt parser abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "abstractions", - "analysis", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "language", - "parser", - "php", - "standards", - "syntax" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/parser-contracts" - }, - "time": "2026-10-15T12:08:13+00:00" - }, - { - "name": "phplrt/position", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/position.git", - "reference": "2f4bcfa40967a9c73b7b772d5c3a42ee801aff46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/position/zipball/2f4bcfa40967a9c73b7b772d5c3a42ee801aff46", - "reference": "2f4bcfa40967a9c73b7b772d5c3a42ee801aff46", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/position-contracts": "^4.2", - "phplrt/position-factory-contracts": "^4.2", - "phplrt/source-contracts": "^4.2" - }, - "provide": { - "phplrt/position-contracts-implementation": "^4.0", - "phplrt/position-factory-contracts-implementation": "^4.0" - }, - "require-dev": { - "phplrt/source": "^4.2", - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Position\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt position package", - "homepage": "https://github.com/phplrt", - "keywords": [ - "analyzing", - "column", - "line", - "location", - "offset", - "position", - "source" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/position" - }, - "time": "2026-10-12T23:31:53+00:00" - }, - { - "name": "phplrt/position-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/position-contracts.git", - "reference": "b63daaea00c7dae74b222a94d97cbc8f2be3a162" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/position-contracts/zipball/b63daaea00c7dae74b222a94d97cbc8f2be3a162", - "reference": "b63daaea00c7dae74b222a94d97cbc8f2be3a162", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Position\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt position abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "column", - "line", - "location", - "position", - "source" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/position-contracts" - }, - "time": "2026-10-12T22:31:16+00:00" - }, - { - "name": "phplrt/position-factory-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/position-factory-contracts.git", - "reference": "cef59452df997b220207781ae4bf1b9ef28fb64c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/position-factory-contracts/zipball/cef59452df997b220207781ae4bf1b9ef28fb64c", - "reference": "cef59452df997b220207781ae4bf1b9ef28fb64c", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/position-contracts": "^4.2", - "phplrt/source-contracts": "^4.2" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Position\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt position factory abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "column", - "factory", - "line", - "location", - "position", - "source" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/position-factory-contracts" - }, - "time": "2026-10-12T23:31:42+00:00" - }, - { - "name": "phplrt/source", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/source.git", - "reference": "2df423fb5a05fd16f1d8889123a2944a6e806c69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/source/zipball/2df423fb5a05fd16f1d8889123a2944a6e806c69", - "reference": "2df423fb5a05fd16f1d8889123a2944a6e806c69", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/source-contracts": "^4.2", - "phplrt/source-factory-contracts": "^4.2" - }, - "provide": { - "phplrt/source-contracts-implementation": "^4.0", - "phplrt/source-factory-contracts-implementation": "^4.0" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "files": [ - "src/polyfill.php" - ], - "psr-4": { - "Phplrt\\Source\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "The phplrt sources package", - "homepage": "https://github.com/phplrt", - "keywords": [ - "abstraction", - "directory", - "file", - "file system", - "fs", - "reader" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/source" - }, - "time": "2026-10-12T23:32:11+00:00" - }, - { - "name": "phplrt/source-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/source-contracts.git", - "reference": "6fcd59e10d586bfd4e387aff3d387b00c4080462" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/source-contracts/zipball/6fcd59e10d586bfd4e387aff3d387b00c4080462", - "reference": "6fcd59e10d586bfd4e387aff3d387b00c4080462", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Source\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt source abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "disk", - "file", - "io", - "read", - "source" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/source-contracts" - }, - "time": "2026-10-12T22:31:34+00:00" - }, - { - "name": "phplrt/source-factory-contracts", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/phplrt/source-factory-contracts.git", - "reference": "59a7070f6e520ecc03b9544d88edfa2ea874e9bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phplrt/source-factory-contracts/zipball/59a7070f6e520ecc03b9544d88edfa2ea874e9bb", - "reference": "59a7070f6e520ecc03b9544d88edfa2ea874e9bb", - "shasum": "" - }, - "require": { - "php": "^8.1", - "phplrt/source-contracts": "^4.2" - }, - "require-dev": { - "phpstan/phpstan": "^2.3", - "testo/testo": "^0.10.45" - }, - "suggest": { - "llm/skills": "Delivers the bundled phplrt agent skill (a lexer/parser authoring guide) into your AI coding assistant" - }, - "type": "library", - "extra": { - "skills": { - "sources": [ - { - "ref": "self.version", - "from": "github", - "package": "phplrt/phplrt" - } - ] - }, - "branch-alias": { - "dev-main": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Phplrt\\Contracts\\Source\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" - } - ], - "description": "A set of phplrt source factory abstractions", - "homepage": "https://github.com/phplrt", - "keywords": [ - "disk", - "factory", - "file", - "io", - "read", - "source" - ], - "support": { - "issues": "https://github.com/phplrt/phplrt/issues", - "source": "https://github.com/phplrt/source-factory-contracts" - }, - "time": "2026-10-12T23:30:56+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "symfony/console", - "version": "v8.1.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/630e74196a2635ec0f06c12bd3fb47cfedf85157", - "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php85": "^1.32", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4.6|^8.0.6" - }, - "conflict": { - "symfony/dependency-injection": "<8.1", - "symfony/event-dispatcher": "<8.1" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^8.1", - "symfony/event-dispatcher": "^8.1", - "symfony/filesystem": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/lock": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/stopwatch": "^7.4|^8.0", - "symfony/uid": "^7.4|^8.0", - "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v8.1.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-10-12T19:11:16+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-05T06:23:12+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.43.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", - "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-09-25T15:46:47+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.43.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", - "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.43.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-09-23T22:02:09+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.43.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-09-24T15:19:04+00:00" - }, - { - "name": "symfony/polyfill-php85", - "version": "v1.43.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", - "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php85\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-09-25T15:46:47+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.7.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", - "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-07-27T15:39:01+00:00" - }, - { - "name": "symfony/string", - "version": "v8.1.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/07fb208558f941eab50ec49c89c2a6a93fb11f01", - "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v8.1.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-10-03T15:16:03+00:00" - }, - { - "name": "twig/twig", - "version": "v3.30.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/8c737079b726af72ff8ef3c595be9f6a810ea1ef", - "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef", - "shasum": "" - }, - "require": { - "php": ">=8.1.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "php-cs-fixer/shim": "^3.0@stable", - "phpstan/phpstan": "^2.0@stable", - "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Resources/core.php", - "src/Resources/debug.php", - "src/Resources/escaper.php", - "src/Resources/string_loader.php" - ], - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.30.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2026-09-25T13:20:01+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^8.4" - }, - "platform-dev": {}, - "plugin-api-version": "2.9.0" -} diff --git a/build/regex-parser/generate.php b/build/regex-parser/generate.php deleted file mode 100644 index 0f6dca9c2f5..00000000000 --- a/build/regex-parser/generate.php +++ /dev/null @@ -1,54 +0,0 @@ -load(FileSource::createFromPathname(__DIR__ . '/RegexGrammar.pp3')) - ->generate() - ->withNamespaceName('PHPStan\Type\Regex\Parser') - ->withClassName('RegexParser') - ->withClassImport('Phplrt\Contracts\Lexer\TokenInterface') - ->withClassModifier(ClassModifier::Final) - ->withTargetPhpVersion(TargetPhpVersion::Php81) - ->withoutContractsPreloading(); - -// PHPStan's source is downgraded to PHP 7.4 for the PHAR, -// and the downgrader does not handle first-class callable syntax. -$code = preg_replace( - '~\bself::(reduce\w+)\(\.\.\.\)~', - '\Closure::fromCallable([self::class, \'$1\'])', - $code, - -1, - $count, -); -if ($code === null || $count === 0) { - fwrite(STDERR, "Could not replace first-class callables in the generated parser.\n"); - exit(1); -} - -// ParserInterface::parse() declares @throws \Throwable, narrow it down -// to what this parser and its reducers actually throw. -$code = str_replace( - " public function parse(\\Phplrt\\Contracts\\Source\\ReadableInterface \$source): mixed\n", - " /**\n * @throws \\Phplrt\\Contracts\\Parser\\Exception\\ParserExceptionInterface\n * @throws RegexSyntaxException\n */\n public function parse(\\Phplrt\\Contracts\\Source\\ReadableInterface \$source): mixed\n", - $code, - $count, -); -if ($count !== 1) { - fwrite(STDERR, "Could not add @throws to the generated parse() method.\n"); - exit(1); -} - -file_put_contents($output, $code); -echo sprintf("Generated %s\n", $output); diff --git a/composer.json b/composer.json index f8114f00410..e75e925fa01 100644 --- a/composer.json +++ b/composer.json @@ -34,7 +34,7 @@ "ondrejmirtes/better-reflection": "6.75.0.4", "ondrejmirtes/composer-attribute-collector": "^1.2.0", "ondrejmirtes/php-merge": "^4.1", - "ondrejmirtes/phplrt-runtime": "4.2.4.1", + "php-regex/regex-parser-php74": "2.x-dev#11e3725b746bb7d53732874fc4966f8798ead333", "phpstan/php-8-stubs": "0.4.43", "phpstan/phpdoc-parser": "2.4.1", "react/child-process": "^0.7", @@ -142,5 +142,10 @@ "prefer-stable": true, "bin": [ "bin/phpstan" - ] + ], + "repositories": [{ + "name": "phpregex", + "type": "vcs", + "url": "https://github.com/php-regex/regex-parser-php74" + }] } diff --git a/composer.lock b/composer.lock index 71d8e2207b8..6f7f0437725 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b4aec40b93330400ac2e7427e2d76f11", + "content-hash": "c90fa93a149b20edc0d2f20b4913d73c", "packages": [ { "name": "clue/ndjson-react", @@ -1536,74 +1536,76 @@ "time": "2025-12-09T08:32:19+00:00" }, { - "name": "ondrejmirtes/phplrt-runtime", - "version": "4.2.4.1", + "name": "php-regex/regex-parser-php74", + "version": "2.x-dev", "source": { "type": "git", - "url": "https://github.com/ondrejmirtes/phplrt-runtime.git", - "reference": "0a9b3058a8f857f5e2428a5b5040e29bce7017a0" + "url": "https://github.com/php-regex/regex-parser-php74.git", + "reference": "6eb39faf0f26bd40e3fd0ba6112fd3e0a37bd7cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ondrejmirtes/phplrt-runtime/zipball/0a9b3058a8f857f5e2428a5b5040e29bce7017a0", - "reference": "0a9b3058a8f857f5e2428a5b5040e29bce7017a0", + "url": "https://api.github.com/repos/php-regex/regex-parser-php74/zipball/6eb39faf0f26bd40e3fd0ba6112fd3e0a37bd7cf", + "reference": "6eb39faf0f26bd40e3fd0ba6112fd3e0a37bd7cf", "shasum": "" }, "require": { - "ext-json": "*", - "ext-pcre": "*", "php": "^7.4 || ^8.0", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.27" + "symfony/polyfill-mbstring": "^1.31", + "symfony/polyfill-php80": "^1.31", + "symfony/polyfill-php81": "^1.31" }, - "replace": { - "phplrt/lexer": "self.version", - "phplrt/lexer-contracts": "self.version", - "phplrt/parser": "self.version", - "phplrt/parser-contracts": "self.version", - "phplrt/position": "self.version", - "phplrt/position-contracts": "self.version", - "phplrt/position-factory-contracts": "self.version", - "phplrt/runtime": "self.version", - "phplrt/source": "self.version", - "phplrt/source-contracts": "self.version", - "phplrt/source-factory-contracts": "self.version" + "suggest": { + "ext-intl": "To resolve \\N{name} escapes by Unicode name.", + "psr/cache": "To share the AST cache through a PSR-6 pool.", + "psr/simple-cache": "To share the AST cache through a PSR-16 cache." }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "Phplrt\\Lexer\\": "src/Lexer", - "Phplrt\\Parser\\": "src/Parser", - "Phplrt\\Source\\": "src/Source", - "Phplrt\\Position\\": "src/Position", - "Phplrt\\Contracts\\Lexer\\": "src/Contracts/Lexer", - "Phplrt\\Contracts\\Parser\\": "src/Contracts/Parser", - "Phplrt\\Contracts\\Source\\": "src/Contracts/Source", - "Phplrt\\Contracts\\Position\\": "src/Contracts/Position" + "PHPRegex\\Parser\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Kirill Nesmeyanov", - "email": "nesk@xakep.ru" + "name": "Younes ENNAJI", + "email": "younes.ennaji.pro@gmail.com", + "homepage": "https://www.linkedin.com/in/yoeunes/", + "role": "Developer" } ], - "description": "phplrt runtime (lexer, parser, source, position and their contracts) downgraded to PHP 7.4", - "homepage": "https://github.com/phplrt/phplrt", + "description": "The PHPRegex parser built to run on hosts PHP 7.4-8.0. On PHP 8.1+, install php-regex/regex-parser instead.", + "homepage": "https://github.com/php-regex/regex-parser-php74", + "keywords": [ + "ast", + "lexer", + "parser", + "pcre", + "pcre2", + "regex", + "validation" + ], "support": { - "issues": "https://github.com/ondrejmirtes/phplrt-runtime/issues", - "source": "https://github.com/ondrejmirtes/phplrt-runtime/tree/4.2.4.1" + "issues": "https://github.com/php-regex/regex-parser-php74/issues", + "source": "https://github.com/php-regex/regex-parser-php74", + "docs": "https://php-regex.com/reference/api/" }, - "time": "2026-10-26T17:32:05+00:00" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/yoeunes" + } + ], + "time": "2026-10-31T13:29:51+00:00" }, { "name": "phpstan/php-8-stubs", @@ -5936,7 +5938,8 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "jetbrains/phpstorm-stubs": 20 + "jetbrains/phpstorm-stubs": 20, + "php-regex/regex-parser-php74": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/conf/bleedingEdge.neon b/conf/bleedingEdge.neon index 7098877fb44..ef08f5a3572 100644 --- a/conf/bleedingEdge.neon +++ b/conf/bleedingEdge.neon @@ -34,3 +34,4 @@ parameters: unusedVariable: true unusedParameters: true reuseCollectedDataRuleErrors: true + checkRegexPatternForAnalysedPhp: true diff --git a/conf/config.neon b/conf/config.neon index 0eb6c0c764b..5c3b2770fa0 100644 --- a/conf/config.neon +++ b/conf/config.neon @@ -66,6 +66,7 @@ parameters: unusedVariable: false unusedParameters: false reuseCollectedDataRuleErrors: false + checkRegexPatternForAnalysedPhp: false fileExtensions: - php checkAdvancedIsset: false @@ -121,6 +122,7 @@ parameters: buffer: 134217728 # 128 MB loadLimit: 1.0 phpVersion: null + pcreVersion: null polluteScopeWithLoopInitialAssignments: true polluteScopeWithAlwaysIterableForeach: true polluteScopeWithBlock: true diff --git a/conf/parametersSchema.neon b/conf/parametersSchema.neon index 62dab9d9c3b..bec388b3765 100644 --- a/conf/parametersSchema.neon +++ b/conf/parametersSchema.neon @@ -63,6 +63,7 @@ parametersSchema: unusedVariable: bool() unusedParameters: bool() reuseCollectedDataRuleErrors: bool() + checkRegexPatternForAnalysedPhp: bool() ]) fileExtensions: listOf(string()) checkAdvancedIsset: bool() @@ -129,6 +130,7 @@ parametersSchema: max: schema(int(), min(70100), max(80699)) ]) ), nullable()) + pcreVersion: schema(string(), pattern('^\d{2}\.\d{2}(-[^ ]+)?( .*)?$'), nullable()) polluteScopeWithLoopInitialAssignments: bool() polluteScopeWithAlwaysIterableForeach: bool() polluteScopeWithBlock: bool() diff --git a/phpcs.xml b/phpcs.xml index 98e0caae54d..5a9b9e83855 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -118,8 +118,6 @@ src/Type/TypeResult.php - build/regex-parser/vendor/* - src/Type/Regex/Parser/RegexParser.php compiler/tests/*/data/ tests/*/Fixture/ tests/*/cache/ diff --git a/poc/README.md b/poc/README.md new file mode 100644 index 00000000000..4bcc59f768c --- /dev/null +++ b/poc/README.md @@ -0,0 +1,54 @@ +# Checked against the engine + +Each pattern of the PCRE2 and php-src test suites is matched with `preg_match()` and `preg_match_all()` on many subjects, with every flag combination, and the array the engine writes is checked against the type PHPStan infers for the call. A type the engine contradicts is one PHPStan says cannot hold that array. The same scripts run on an upstream `2.3.x` checkout, where patterns are read by the parser generated by phplrt, and on this branch, where they are read by PHPRegex. + +| | phplrt | PHPRegex | +|---|---|---| +| PCRE2 test suite (testdata/testinput*) (3,178 patterns): types the engine contradicts | 70 | 0 | +| php-src ext/pcre tests (205 patterns): types the engine contradicts | 3 | 0 | +| PCRE2 test suite (testdata/testinput*): patterns with no `preg_match()` shape | 589 | 0 | +| php-src ext/pcre tests: patterns with no `preg_match()` shape | 8 | 0 | + +Every contradicted pattern has one witness in `poc/witnesses/`: the pattern, the call, the subject, what the engine writes, and both types. `php poc/bin/verify.php ` replays all of them: on upstream `2.3.x` every witness is refused, on this branch every witness is accepted. + +## What the generated parser reads differently + +Each contradicted pattern is counted once, under the first row it matches, in the order of the table. + +| what the generated parser reads differently | patterns | witness | the engine writes | phplrt | PHPRegex | +|---|---|---|---|---|---| +| A `(?#...)` comment is read as pattern syntax | 2 | `~L(?#(\|++` writes the witnesses and this README from `README.template.md`: + +``` +php poc/bin/measure.php ../phpstan-upstream poc/data/pcre2.json.gz /tmp/poc +php poc/bin/measure.php . poc/data/pcre2.json.gz /tmp/poc +php poc/bin/report.php /tmp/poc +``` + +The engine decides what a pattern matches, so the witnesses hold for the PCRE2 release they were recorded with; `verify.php` skips, and names, a witness the running engine writes differently. + +## The sets + +- `pcre2.json.gz`: every pattern of `testdata/testinput*` of PCRE2Project/pcre2 (commit be940c4) whose modifiers PHP has, with the subject lines that follow it. One pattern is left out: `\K` inside a lookbehind makes `preg_replace_callback()` of PHP fail on the negative length of the match. +- `php-src.json.gz`: every literal pattern of a `preg_*()` call in `ext/pcre/tests` of php/php-src (branch PHP-8.6, commit 02ddcc5ee2), with the string literals of the same test. + +`poc/bin/extract-suites.php` writes both from checkouts of the two projects. Subjects are added with `poc/bin/subjects.php`: samples written by the PHPRegex generator, variations of them, the literals of the pattern, random strings over its characters, and a fixed list of edge strings. + +Recorded with PHP 8.4.27 and PCRE2 10.49, `pcre.jit` off, against upstream `2.3.x` at 8134126bc. diff --git a/poc/README.template.md b/poc/README.template.md new file mode 100644 index 00000000000..344b8826dd2 --- /dev/null +++ b/poc/README.template.md @@ -0,0 +1,44 @@ +# Checked against the engine + +Each pattern of the PCRE2 and php-src test suites is matched with `preg_match()` and `preg_match_all()` on many subjects, with every flag combination, and the array the engine writes is checked against the type PHPStan infers for the call. A type the engine contradicts is one PHPStan says cannot hold that array. The same scripts run on an upstream `2.3.x` checkout, where patterns are read by the parser generated by phplrt, and on this branch, where they are read by PHPRegex. + +{totals} + +Every contradicted pattern has one witness in `poc/witnesses/`: the pattern, the call, the subject, what the engine writes, and both types. `php poc/bin/verify.php ` replays all of them: on upstream `2.3.x` every witness is refused, on this branch every witness is accepted. + +## What the generated parser reads differently + +Each contradicted pattern is counted once, under the first row it matches, in the order of the table. + +{families} + +## Reproducing + +Replay the witnesses, a few seconds each side: + +``` +git fetch https://github.com/phpstan/phpstan-src.git 2.3.x +git worktree add --detach ../phpstan-upstream FETCH_HEAD +composer install -d ../phpstan-upstream +php poc/bin/verify.php ../phpstan-upstream +php poc/bin/verify.php . +``` + +Measure a set again, a few minutes each side; once both sides are measured, `php poc/bin/report.php ` writes the witnesses and this README from `README.template.md`: + +``` +php poc/bin/measure.php ../phpstan-upstream poc/data/pcre2.json.gz /tmp/poc +php poc/bin/measure.php . poc/data/pcre2.json.gz /tmp/poc +php poc/bin/report.php /tmp/poc +``` + +The engine decides what a pattern matches, so the witnesses hold for the PCRE2 release they were recorded with; `verify.php` skips, and names, a witness the running engine writes differently. + +## The sets + +- `pcre2.json.gz`: every pattern of `testdata/testinput*` of PCRE2Project/pcre2 (commit be940c4) whose modifiers PHP has, with the subject lines that follow it. One pattern is left out: `\K` inside a lookbehind makes `preg_replace_callback()` of PHP fail on the negative length of the match. +- `php-src.json.gz`: every literal pattern of a `preg_*()` call in `ext/pcre/tests` of php/php-src (branch PHP-8.6, commit 02ddcc5ee2), with the string literals of the same test. + +`poc/bin/extract-suites.php` writes both from checkouts of the two projects. Subjects are added with `poc/bin/subjects.php`: samples written by the PHPRegex generator, variations of them, the literals of the pattern, random strings over its characters, and a fixed list of edge strings. + +Recorded with PHP 8.4.27 and PCRE2 10.49, `pcre.jit` off, against upstream `2.3.x` at 8134126bc. diff --git a/poc/bin/extract-suites.php b/poc/bin/extract-suites.php new file mode 100644 index 00000000000..08b0725e102 --- /dev/null +++ b/poc/bin/extract-suites.php @@ -0,0 +1,181 @@ + + * holds php-src/ext/pcre/tests (php/php-src, branch PHP-8.6) and + * pcre2/testdata (PCRE2Project/pcre2). + */ +require __DIR__ . '/../../vendor/autoload.php'; + +use PhpParser\Node\Expr\FuncCall; +use PhpParser\Node\Name; +use PhpParser\Node\Scalar\String_; +use PhpParser\NodeFinder; +use PhpParser\ParserFactory; + +[$self, $dir, $outPhp, $outPcre] = $argv; + +/** + * Patterns left out: a \K inside a lookbehind sets the start of the match + * past its end, and preg_replace_callback() of PHP fails on the negative + * length ("Possible integer overflow in memory allocation"). + */ +const LEFT_OUT = ['#a|(?(DEFINE)(?\Ka))(?<=(?&sneaky))b#']; + +/** @param array> $rows */ +function write(string $file, array $rows): void { + $out = []; + foreach ($rows as $pattern => $subjects) { + $pattern = (string) $pattern; + // a pattern JSON cannot hold, raw bytes past UTF-8, is left out + if (in_array($pattern, LEFT_OUT, true) || @preg_match($pattern, '') === false || !mb_check_encoding($pattern, 'UTF-8')) { + continue; + } + $subjects = array_values(array_unique($subjects)); + $out[] = ['pattern' => $pattern, 'subjects' => array_map('base64_encode', array_slice($subjects, 0, 200))]; + } + file_put_contents($file, json_encode($out, JSON_UNESCAPED_SLASHES)); + fwrite(STDERR, basename($file) . ': ' . count($out) . " patterns\n"); +} + +// --- php-src: every preg_* call whose pattern is a literal, with the literal subjects of the file +$parser = (new ParserFactory())->createForHostVersion(); +$finder = new NodeFinder(); +$php = []; +foreach (glob("$dir/php-src/ext/pcre/tests/*.phpt") as $file) { + $text = file_get_contents($file); + if (!preg_match('/--FILE--\R(.*?)(?=\R--[A-Z_]+--)/s', $text, $m)) { + continue; + } + try { + $ast = $parser->parse($m[1]) ?? []; + } catch (Throwable) { + continue; + } + $literals = array_map(static fn (String_ $s): string => $s->value, $finder->findInstanceOf($ast, String_::class)); + foreach ($finder->findInstanceOf($ast, FuncCall::class) as $call) { + if (!$call->name instanceof Name || !str_starts_with($call->name->toLowerString(), 'preg_')) { + continue; + } + $arg = $call->getArgs()[0]->value ?? null; + $patterns = []; + if ($arg instanceof String_) { + $patterns[] = $arg->value; + } elseif ($arg instanceof PhpParser\Node\Expr\Array_) { + foreach ($arg->items as $item) { + if ($item !== null && $item->value instanceof String_) { + $patterns[] = $item->value->value; + } + } + } + foreach ($patterns as $pattern) { + $php[$pattern] = [...($php[$pattern] ?? []), ...$literals]; + } + } +} +write($outPhp, $php); + +// --- PCRE2: each pattern with the subject lines that follow it +function unescape(string $s, bool $utf): string { + $map = ['a' => "\x07", 'b' => "\x08", 'e' => "\x1b", 'f' => "\f", 'n' => "\n", 'r' => "\r", 't' => "\t", 'v' => "\v"]; + $out = ''; + for ($i = 0, $n = strlen($s); $i < $n; $i++) { + $c = $s[$i]; + if ($c !== '\\' || $i + 1 >= $n) { + $out .= $c; + continue; + } + $d = $s[++$i]; + if (isset($map[$d])) { + $out .= $map[$d]; + } elseif ($d === 'x' && ($s[$i + 1] ?? '') === '{' && preg_match('/\G\{([0-9a-fA-F]+)\}/', $s, $mm, 0, $i + 1)) { + $cp = hexdec($mm[1]); + $out .= $utf ? (mb_chr((int) $cp, 'UTF-8') ?: '') : chr((int) $cp & 0xFF); + $i += strlen($mm[0]); + } elseif ($d === 'x' && preg_match('/\G[0-9a-fA-F]{1,2}/', $s, $mm, 0, $i + 1)) { + $out .= chr((int) hexdec($mm[0])); + $i += strlen($mm[0]); + } elseif ($d === 'o' && preg_match('/\G\{([0-7]+)\}/', $s, $mm, 0, $i + 1)) { + $cp = octdec($mm[1]); + $out .= $utf ? (mb_chr((int) $cp, 'UTF-8') ?: '') : chr((int) $cp & 0xFF); + $i += strlen($mm[0]); + } elseif (ctype_digit($d) && preg_match('/\G[0-7]{1,3}/', $s, $mm, 0, $i)) { + $out .= chr((int) octdec($mm[0]) & 0xFF); + $i += strlen($mm[0]) - 1; + } else { + $out .= $d; + } + } + + return $out; +} + +const FLAGS = ['i' => 'i', 'caseless' => 'i', 'm' => 'm', 'multiline' => 'm', 's' => 's', 'dotall' => 's', 'x' => 'x', 'extended' => 'x', + 'n' => 'n', 'no_auto_capture' => 'n', 'utf' => 'u', 'dupnames' => 'J', 'ungreedy' => 'U', 'dollar_endonly' => 'D', 'anchored' => 'A']; +// display-only or match-time modifiers of pcre2test that do not change what one match writes +const IGNORED = ['B', 'I', 'aftertext', 'allaftertext', 'g', 'altglobal', 'mark', 'info', 'jit', 'jitverify', 'fullbincode', 'bincode', + 'debug', 'memory', 'stackguard', 'allusedtext', 'startchar', 'hex', 'expand', 'locale', 'framesize', 'find_limits', 'push', 'pushcopy', + 'callout_info', 'tables', 'use_length', 'posix', 'perlcompat', 'no_start_optimize', 'no_dotstar_anchor', 'no_auto_possess', 'auto_callout', 'S']; + +$pcre = []; +foreach (glob("$dir/pcre2/testdata/testinput*") as $file) { + $lines = preg_split('/\R/', file_get_contents($file)) ?: []; + for ($i = 0, $n = count($lines); $i < $n; $i++) { + $line = $lines[$i]; + if ($line === '' || $line[0] === '#' || ctype_space($line[0]) || ctype_alnum($line[0]) || $line[0] === '\\') { + continue; + } + $delim = $line[0]; + $text = $line; + // a pattern may run over several lines until its closing delimiter + while (!preg_match('/^' . preg_quote($delim, '/') . '((?:\\\\.|[^\\\\])*?)' . preg_quote($delim, '/') . '([^' . preg_quote($delim, '/') . ']*)$/s', $text, $pm) && $i + 1 < $n) { + $text .= "\n" . $lines[++$i]; + } + if (!isset($pm[1])) { + continue; + } + [$body, $mods] = [$pm[1], trim($pm[2])]; + $flags = ''; + $usable = true; + foreach ($mods === '' ? [] : preg_split('/\s*,\s*/', $mods) as $mod) { + $name = explode('=', $mod)[0]; + if (isset(FLAGS[$name])) { + $flags .= FLAGS[$name]; + } elseif (in_array($name, IGNORED, true)) { + continue; + } elseif (preg_match('/^[imsxn]+$/', $name)) { + $flags .= $name; + } else { + $usable = false; + } + } + $subjects = []; + while ($i + 1 < $n && $lines[$i + 1] !== '' && ctype_space($lines[$i + 1][0])) { + $subject = ltrim($lines[++$i]); + if (str_starts_with($subject, '\\=')) { + continue; + } + if (str_contains($subject, '\\=')) { + continue; // per-subject modifiers change the match + } + $subjects[] = unescape($subject, str_contains($flags, 'u')); + } + if (!$usable || str_contains($body, '/')) { + // PHP delimits with "/" below: a pattern holding one keeps its own delimiter only when it is not "/" + if (!$usable) { + continue; + } + } + $phpDelim = str_contains($body, '#') ? '~' : '#'; + if (str_contains($body, $phpDelim)) { + continue; + } + $pattern = $phpDelim . $body . $phpDelim . count_chars($flags, 3); + $pcre[$pattern] = [...($pcre[$pattern] ?? []), ...$subjects]; + } +} +write($outPcre, $pcre); diff --git a/poc/bin/measure.php b/poc/bin/measure.php new file mode 100644 index 00000000000..796e4e658c6 --- /dev/null +++ b/poc/bin/measure.php @@ -0,0 +1,204 @@ + + * + * The checkout is either this branch (PHPRegex) or an upstream 2.3.x + * checkout (the parser generated by phplrt). Writes, in : + * - ..types.jsonl: the type inferred for each pattern and call, + * - ..refusals.jsonl: each engine result the type does not accept, + * with the key it fails on and why, + * - ..stats.json. + * + * Calls measured, each with every flag combination: preg_match(), + * preg_match_all() (matched, and maybe matched), and the subject preg_match() + * narrows. The pcre.jit setting is turned off so a JIT bug of the running + * PCRE2 cannot crash the run. + */ + +[$self, $root, $setFile, $outDir] = $argv + [null, null, null, null]; +if ($root === null || $setFile === null || $outDir === null) { + fwrite(STDERR, "usage: php poc/bin/measure.php \n"); + exit(2); +} + +require $root . '/vendor/autoload.php'; + +use PHPStan\Testing\PHPStanTestCase; +use PHPStan\TrinaryLogic; +use PHPStan\Type\Constant\ConstantIntegerType; +use PHPStan\Type\Constant\ConstantStringType; +use PHPStan\Type\ConstantTypeHelper; +use PHPStan\Type\Php\RegexArrayShapeMatcher; +use PHPStan\Type\Regex\RegexGroupParser; +use PHPStan\Type\Type; +use PHPStan\Type\VerbosityLevel; + +final class PocContainer extends PHPStanTestCase +{ + + public static function get(string $class): object + { + return self::getContainer()->getByType($class); + } + +} + +ini_set('pcre.jit', '0'); + +$side = class_exists('PHPStan\Type\Regex\PHPRegexReader') ? 'phpregex' : 'phplrt'; +$set = basename($setFile, '.json.gz'); +$rows = json_decode((string) file_get_contents('compress.zlib://' . $setFile), true); +@mkdir($outDir, 0777, true); + +/** @var RegexArrayShapeMatcher $matcher */ +$matcher = PocContainer::get(RegexArrayShapeMatcher::class); +/** @var RegexGroupParser $groupParser */ +$groupParser = PocContainer::get(RegexGroupParser::class); +$matchPatternType = new ReflectionMethod($matcher, 'matchPatternType'); + +$O = PREG_OFFSET_CAPTURE; +$N = PREG_UNMATCHED_AS_NULL; +$P = PREG_PATTERN_ORDER; +$S = PREG_SET_ORDER; +$calls = [ + ['match', null], ['match', $O], ['match', $N], ['match', $O | $N], + ['all', null], ['all', $S], ['all', $P | $O], ['all', $S | $O], ['all', $P | $N], ['all', $S | $N], ['all', $P | $O | $N], ['all', $S | $O | $N], + ['allmaybe', null], ['allmaybe', $S], ['allmaybe', $S | $O | $N], ['allmaybe', $P | $O | $N], +]; + +/** + * A type as PHPStan prints it, with the bytes past UTF-8 a class without u + * reads written \xHH, so the JSON keeps them. + */ +function poc_describe(?Type $type): ?string +{ + if ($type === null) { + return null; + } + $text = $type->describe(VerbosityLevel::precise()); + + return mb_check_encoding($text, 'UTF-8') ? $text : (string) preg_replace_callback('/[\x80-\xff]/', static fn (array $byte): string => sprintf('\\x%02x', ord($byte[0])), $text); +} + +$json = static fn (array $row): string => json_encode($row, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n"; +$types = fopen("$outDir/$set.$side.types.jsonl", 'w'); +$refusals = fopen("$outDir/$set.$side.refusals.jsonl", 'w'); +$stats = ['patterns' => 0, 'shapes' => 0, 'noShape' => 0, 'checks' => 0, 'refusals' => 0]; + +/** + * Why the type does not accept the engine result: the first key of the + * closest array of the type that fails, and how. + * + * @param array $value + * @return array{key: int|string|null, reason: string} + */ +function poc_reason(Type $type, array $value): array +{ + $best = null; + foreach ($type->getConstantArrays() as $shape) { + $issues = []; + foreach ($value as $key => $item) { + $keyType = is_int($key) ? new ConstantIntegerType($key) : new ConstantStringType($key); + if ($shape->hasOffsetValueType($keyType)->no()) { + $issues[] = ['key' => $key, 'reason' => 'absent']; + continue; + } + $itemType = $shape->getOffsetValueType($keyType); + if (!$itemType->isSuperTypeOf(ConstantTypeHelper::getTypeFromValue($item))->yes()) { + $issues[] = ['key' => $key, 'reason' => poc_holds_falsy($item) && !$itemType->isSuperTypeOf(new ConstantStringType('0'))->yes() ? 'falsy' : 'value']; + } + } + foreach ($shape->getKeyTypes() as $i => $keyType) { + $key = $keyType->getValue(); + if (!array_key_exists($key, $value) && !in_array($i, $shape->getOptionalKeys(), true)) { + $issues[] = ['key' => $key, 'reason' => 'present']; + } + } + if ($issues !== [] && ($best === null || count($issues) < count($best))) { + $best = $issues; + } + } + + return $best[0] ?? ['key' => null, 'reason' => 'value']; +} + +/** + * Whether a value written for a key holds '0' or '', where a falsy + * string typed non-falsy or non-empty is the commonest refusal. + */ +function poc_holds_falsy(mixed $item): bool +{ + if (is_array($item)) { + foreach ($item as $part) { + if (poc_holds_falsy($part)) { + return true; + } + } + + return false; + } + + return $item === '0' || $item === ''; +} + +foreach ($rows as $row) { + $pattern = $row['pattern']; + if (@preg_match($pattern, '') === false) { + continue; + } + $stats['patterns']++; + $subjects = array_map('base64_decode', $row['subjects']); + + $walk = $groupParser->parseGroups($pattern); + $narrow = $walk === null ? null : ($side === 'phpregex' ? $walk->getSubjectNarrowType() : $walk->getSubjectBaseType()); + fwrite($types, $json(['p' => $pattern, 'c' => 'subject', 't' => poc_describe($narrow)])); + if ($narrow !== null) { + foreach ($subjects as $subject) { + if (@preg_match($pattern, $subject) !== 1) { + continue; + } + $stats['checks']++; + if (!$narrow->isSuperTypeOf(new ConstantStringType($subject))->yes()) { + $stats['refusals']++; + fwrite($refusals, $json(['p' => $pattern, 'c' => 'subject', 's' => base64_encode($subject), 'e' => base64_encode(serialize($subject)), 't' => poc_describe($narrow), 'key' => null, 'reason' => 'subject'])); + } + } + } + + foreach ($calls as [$call, $flags]) { + $all = $call !== 'match'; + $type = $matchPatternType->invoke($matcher, new ConstantStringType($pattern), $flags === null ? null : new ConstantIntegerType($flags), $call === 'allmaybe' ? TrinaryLogic::createMaybe() : TrinaryLogic::createYes(), $all); + $label = $call . ':' . ($flags ?? 'null'); + fwrite($types, $json(['p' => $pattern, 'c' => $label, 't' => poc_describe($type)])); + if ($type === null) { + $stats['noShape']++; + continue; + } + $stats['shapes']++; + $seen = []; + foreach ($subjects as $subject) { + $matches = []; + $result = $all ? @preg_match_all($pattern, $subject, $matches, $flags ?? $P) : @preg_match($pattern, $subject, $matches, $flags ?? 0); + if ($result === false || ($call !== 'allmaybe' && $result === 0)) { + continue; + } + $key = serialize($matches); + if (isset($seen[$key])) { + continue; + } + $seen[$key] = true; + $stats['checks']++; + if ($type->isSuperTypeOf(ConstantTypeHelper::getTypeFromValue($matches))->no()) { + $stats['refusals']++; + fwrite($refusals, $json(['p' => $pattern, 'c' => $label, 's' => base64_encode($subject), 'e' => base64_encode($key), 't' => poc_describe($type)] + poc_reason($type, $matches))); + } + } + } +} + +file_put_contents("$outDir/$set.$side.stats.json", json_encode($stats, JSON_PRETTY_PRINT) . "\n"); +fwrite(STDERR, "$set $side " . json_encode($stats) . "\n"); diff --git a/poc/bin/report.php b/poc/bin/report.php new file mode 100644 index 00000000000..59ccad4d409 --- /dev/null +++ b/poc/bin/report.php @@ -0,0 +1,222 @@ + + * + * For every pattern the phplrt side types against the engine, keeps one + * witness, the first call refused, preferring preg_match() without flags, + * and writes it with the PHPRegex type of the same call to + * poc/witnesses/.json and .md. Prints the totals as a Markdown table. + */ + +[$self, $outDir] = $argv + [null, null]; +if ($outDir === null) { + fwrite(STDERR, "usage: php poc/bin/report.php \n"); + exit(2); +} + +const SETS = [ + 'pcre2' => 'PCRE2 test suite (testdata/testinput*)', + 'php-src' => 'php-src ext/pcre tests', +]; + +const REASONS = [ + 'falsy' => "a value that can be '0' or '' is typed non-falsy or non-empty", + 'value' => 'a value outside the type of its key', + 'absent' => 'a key the engine writes is typed absent', + 'present' => 'a key the engine leaves out is typed present', + 'subject' => 'the subject is narrowed further than the match proves', +]; + +const FLAGS = [PREG_OFFSET_CAPTURE => 'PREG_OFFSET_CAPTURE', PREG_UNMATCHED_AS_NULL => 'PREG_UNMATCHED_AS_NULL', PREG_SET_ORDER => 'PREG_SET_ORDER']; + +/** + * @return list> + */ +function poc_lines(string $file): array +{ + if (!is_file($file)) { + return []; + } + + return array_map(static fn (string $line): array => json_decode($line, true), file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: []); +} + +function poc_call(string $label): string +{ + if ($label === 'subject') { + return 'subject of preg_match()'; + } + [$call, $flags] = explode(':', $label); + $names = []; + foreach (FLAGS as $flag => $name) { + if ($flags !== 'null' && ((int) $flags & $flag) !== 0) { + $names[] = $name; + } + } + $function = $call === 'match' ? 'preg_match()' : ($call === 'all' ? 'preg_match_all()' : 'preg_match_all(), maybe matched'); + + return $names === [] ? $function : $function . ', ' . implode(' | ', $names); +} + +function poc_cell(string $text): string +{ + // bytes past UTF-8, as a class without u reads them, are written \xHH + if (!mb_check_encoding($text, 'UTF-8')) { + $text = (string) preg_replace_callback('/[\x80-\xff]/', static fn (array $byte): string => sprintf('\\x%02x', ord($byte[0])), $text); + } + + return str_replace(['|', "\n"], ['\\|', '\\n'], $text); +} + +function poc_value(string $serialized): string +{ + $value = unserialize(base64_decode($serialized)); + + $json = json_encode($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + + return is_string($value) || $json === false ? str_replace("\n", ' ', var_export($value, true)) : $json; +} + +$totals = []; +foreach (SETS as $set => $label) { + $types = []; + foreach (poc_lines("$outDir/$set.phpregex.types.jsonl") as $row) { + $types[$row['p'] . "\0" . $row['c']] = $row['t']; + } + $noShape = ['phplrt' => [], 'phpregex' => []]; + $patterns = []; + foreach (['phplrt', 'phpregex'] as $side) { + foreach (poc_lines("$outDir/$set.$side.types.jsonl") as $row) { + $patterns[$row['p']] = true; + if ($row['c'] === 'match:null' && $row['t'] === null) { + $noShape[$side][$row['p']] = true; + } + } + } + + $witnesses = []; + foreach (poc_lines("$outDir/$set.phplrt.refusals.jsonl") as $row) { + $known = $witnesses[$row['p']] ?? null; + if ($known !== null && ($known['call'] === 'match:null' || $row['c'] !== 'match:null')) { + continue; + } + $witnesses[$row['p']] = [ + 'pattern' => $row['p'], + 'call' => $row['c'], + 'subject' => $row['s'], + 'engine' => $row['e'], + 'reason' => $row['reason'], + 'key' => $row['key'], + 'phplrt' => $row['t'], + 'phpregex' => $types[$row['p'] . "\0" . $row['c']] ?? null, + ]; + } + $witnesses = array_values($witnesses); + $refusedOnPhpregex = []; + foreach (poc_lines("$outDir/$set.phpregex.refusals.jsonl") as $row) { + $refusedOnPhpregex[$row['p']] = true; + } + + file_put_contents(__DIR__ . "/../witnesses/$set.json", json_encode($witnesses, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE) . "\n"); + + $reasons = array_count_values(array_column($witnesses, 'reason')); + $md = "# $label\n\nOne witness for each of the " . count($witnesses) . " patterns whose inferred type the engine contradicts with the parser generated by phplrt. `php poc/bin/verify.php` replays them.\n\n"; + foreach (REASONS as $reason => $text) { + $md .= '- ' . $text . ': ' . ($reasons[$reason] ?? 0) . "\n"; + } + $md .= "\n| pattern | call | subject | the engine writes | phplrt | PHPRegex | why |\n|---|---|---|---|---|---|---|\n"; + foreach ($witnesses as $w) { + $md .= sprintf( + "| `%s` | %s | `%s` | `%s` | `%s` | `%s` | %s |\n", + poc_cell($w['pattern']), + poc_call($w['call']), + poc_cell(var_export(base64_decode($w['subject']), true)), + poc_cell(poc_value($w['engine'])), + poc_cell((string) $w['phplrt']), + poc_cell($w['phpregex'] ?? 'no shape'), + ($w['key'] === null ? '' : 'key `' . $w['key'] . '`: ') . REASONS[$w['reason']], + ); + } + $md .= "\n## Patterns the parser generated by phplrt infers no shape for\n\n" . count($noShape['phplrt']) . " patterns, `preg_match()` without flags.\n\n| pattern | PHPRegex |\n|---|---|\n"; + foreach (array_keys($noShape['phplrt']) as $pattern) { + $md .= sprintf("| `%s` | `%s` |\n", poc_cell($pattern), poc_cell($types[$pattern . "\0match:null"] ?? 'no shape')); + } + file_put_contents(__DIR__ . "/../witnesses/$set.md", $md); + + $totals[$set] = [ + 'patterns' => count($patterns), + 'phplrt' => count($witnesses), + 'phpregex' => count($refusedOnPhpregex), + 'phplrtNoShape' => count($noShape['phplrt']), + 'phpregexNoShape' => count($noShape['phpregex']), + ]; +} + +$table = "| | phplrt | PHPRegex |\n|---|---|---|\n"; +foreach ($totals as $set => $t) { + $table .= sprintf("| %s (%s patterns): types the engine contradicts | %d | %d |\n", SETS[$set], number_format($t['patterns']), $t['phplrt'], $t['phpregex']); +} +foreach ($totals as $set => $t) { + $table .= sprintf("| %s: patterns with no `preg_match()` shape | %d | %d |\n", SETS[$set], $t['phplrtNoShape'], $t['phpregexNoShape']); +} + +// Each contradicted pattern once, under the first family it matches, in this order. +$families = [ + ['a `(?#...)` comment is read as pattern syntax', static fn (array $w, string $p, string $m): bool => str_contains($p, '(?#')], + ['a lone `\\E` is read as a quantifiable atom', static fn (array $w, string $p, string $m): bool => preg_match('/\\\\E/', $p) === 1 && !str_contains($p, '\\Q')], + ['`\\Q...\\E` is read as pattern syntax', static fn (array $w, string $p, string $m): bool => str_contains($p, '\\Q')], + ['a `MARK` name under `/x` loses the `#comment` the engine keeps in it', static fn (array $w, string $p, string $m): bool => $w['key'] === 'MARK'], + ['a class without `/u` is read as characters where the engine reads bytes', static fn (array $w, string $p, string $m): bool => preg_match('/[\x80-\xff]/', $p) === 1 && !str_contains($m, 'u') && $w['reason'] === 'value'], + ['`(?n)` and `/n`: groups that do not capture are typed as captured', static fn (array $w, string $p, string $m): bool => str_contains($p, '(?n') || str_contains($m, 'n')], + ['an inline `(?x)` is not read: skipped whitespace is typed as text', static fn (array $w, string $p, string $m): bool => str_contains($p, '(?x)')], + ['an inline `(?i)`, `(?i:...)` or `(?^i)` is not read: a caseless match is typed by its spelling', static fn (array $w, string $p, string $m): bool => preg_match('/\(\?\^?i[):]/', $p) === 1 && $w['reason'] === 'value'], + ['`\\d` and `[[:digit:]]` under `/u` or `(*UCP)` read Unicode digits, which are not numeric strings', static fn (array $w, string $p, string $m): bool => $w['reason'] === 'value' && preg_match('/\\\\d|\[:digit:\]|\\\\p\{?N/', $p) === 1], + ["a value that can be `'0'` or `''` is typed `non-falsy-string` or `non-empty-string`: `\\w`, `\\S`, `.`, `\\p{N}`, `\\X`, `[[:alnum:]]`, negated classes, lookbehinds", static fn (array $w, string $p, string $m): bool => $w['reason'] === 'falsy'], +]; +$examples = ['/\pN/', '/(\d)/u', '/(?i)(a)/', '/(?x)( a )/', '/\Q(a)\E/', '/(?n)(a)(?b)/']; +$all = []; +foreach (array_keys(SETS) as $set) { + foreach (json_decode((string) file_get_contents(__DIR__ . "/../witnesses/$set.json"), true) as $w) { + $all[] = $w; + } +} +$used = []; +$familyTable = "| what the generated parser reads differently | patterns | witness | the engine writes | phplrt | PHPRegex |\n|---|---|---|---|---|---|\n"; +foreach ($families as [$label, $test]) { + $members = []; + foreach ($all as $i => $w) { + $modifiers = preg_match('/[a-zA-Z]*$/', $w['pattern'], $tail) === 1 ? $tail[0] : ''; + if (!isset($used[$i]) && $test($w, $w['pattern'], $modifiers)) { + $members[] = $w; + $used[$i] = true; + } + } + if ($members === []) { + continue; + } + $example = $members[0]; + foreach ($members as $w) { + if (in_array($w['pattern'], $examples, true)) { + $example = $w; + break; + } + } + $familyTable .= sprintf( + "| %s | %d | `%s` on `%s` | `%s` | `%s` | `%s` |\n", + ucfirst($label), + count($members), + poc_cell($example['pattern']), + poc_cell(var_export(base64_decode($example['subject']), true)), + poc_cell(poc_value($example['engine'])), + poc_cell((string) $example['phplrt']), + poc_cell($example['phpregex'] ?? 'no shape'), + ); +} + +$readme = (string) file_get_contents(__DIR__ . '/../README.template.md'); +file_put_contents(__DIR__ . '/../README.md', strtr($readme, ['{totals}' => rtrim($table), '{families}' => rtrim($familyTable)])); +echo $table, "\n", $familyTable; diff --git a/poc/bin/subjects.php b/poc/bin/subjects.php new file mode 100644 index 00000000000..40b51cf7bd4 --- /dev/null +++ b/poc/bin/subjects.php @@ -0,0 +1,59 @@ + php poc/bin/subjects.php + * It runs with the PHPRegex monorepo (https://github.com/php-regex/php-regex), + * whose generator is not part of the parser package this branch installs. + */ +require getenv('PHPREGEX_ROOT') . '/vendor/autoload.php'; +use PHPRegex\Generator\SampleGenerator; +ini_set('pcre.jit', '0'); +$in = json_decode(file_get_contents($argv[1]), true); +$fixed = ['', '0', '1', '00', '01', '10', 'a', 'A', 'b', 'c', 'x', 'y', 'z', 'ab', 'aa', 'abc', 'cd', "a\n", "\n", "a\nb", "\na", "\r\n", "a\r\n", "0\n", "1\n", ' ', ' 1', '1 ', '-1', '-', '1.5', '.5', '1.', '٣', '١٢', '0٣', '0', '12', '߀', '१', "\u{212A}", 'k', 'K', "\u{17F}", 's', 'S', 'ss', 'ß', 'ẞ', 'é', 'É', "e\u{301}", 'ı', 'İ', 'i', 'I', 'σ', 'Σ', 'ς', 'st', 'st', "\x00", "\xff", "a\xffb", "\xc3", '#', 'a#b', 'm', 'n', 'aab', 'aba', 'bab', 'xy', 'xyz', 'ba', 'bc', 'ac', 'abab', '123', '2026-10', '0.0', 'foo', 'bar', '_', '0a', 'a0', 'ab0', '٠', '9', '٩']; +$out = []; +$t0 = microtime(true); +foreach ($in as $i => $row) { + $pat = $row['pattern']; + $subs = []; + $gen = new SampleGenerator(3); + for ($s = 1; $s <= 10; $s++) { + $gen->setSeed(crc32($pat) + $s); + try { $subs[] = $gen->generate($pat); } catch (\Throwable $e) { break; } + } + $samples = $subs; + // mutations of generated samples + foreach ($samples as $smp) { + $subs[] = $smp . "\n"; + $subs[] = "\n" . $smp; + $subs[] = 'x' . $smp . 'x'; + $subs[] = substr($smp, 0, -1); + $subs[] = substr($smp, 1); + $subs[] = strtoupper($smp); + $subs[] = strtolower($smp); + $subs[] = strtr($smp, '0123456789', '0000000000'); + $subs[] = str_replace(['0','1','2','3','4','5','6','7','8','9'], ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'], $smp); + $subs[] = str_replace(['k','K','s','S'], ["\u{212A}", "\u{212A}", "\u{17F}", "\u{17F}"], $smp); + $subs[] = $smp . $smp; + } + // literals of the body + $body = $pat; + preg_match_all('/[A-Za-z0-9]+/', $body, $lm); + foreach (array_slice(array_unique($lm[0]), 0, 12) as $lit) { $subs[] = $lit; $subs[] = $lit . "\n"; } + // random over alphabet + $alpha = array_values(array_unique(array_merge(mb_str_split(preg_replace('/[\\\\()\[\]{}?*+|^$]/', '', $body) ?? '') ?: [], ['0', '1', 'a', 'b', ' ', "\n", '٣', 'K']))); + mt_srand(crc32($pat)); + for ($r = 0; $r < 25; $r++) { + $len = mt_rand(0, 8); $s = ''; + for ($k = 0; $k < $len; $k++) $s .= $alpha[mt_rand(0, count($alpha) - 1)]; + $subs[] = $s; + } + $subs = array_merge($subs, $fixed); + $subs = array_values(array_unique(array_map('strval', $subs))); + $out[] = ['pattern' => $pat, 'src' => $row['src'], 'samples' => count($samples), 'subjects' => array_map('base64_encode', $subs)]; + if ($i % 500 === 0) fwrite(STDERR, "$i " . round(microtime(true) - $t0) . "s\n"); +} +file_put_contents($argv[2], json_encode($out, JSON_UNESCAPED_SLASHES)); diff --git a/poc/bin/verify.php b/poc/bin/verify.php new file mode 100644 index 00000000000..1001ba7efdc --- /dev/null +++ b/poc/bin/verify.php @@ -0,0 +1,90 @@ + + * + * For each witness, the engine runs the call again and must write what the + * witness recorded; the type the checkout infers for the call then accepts + * the result or refuses it. On an upstream 2.3.x checkout every witness is + * refused; on this branch every witness is accepted. + */ + +[$self, $root] = $argv + [null, null]; +if ($root === null) { + fwrite(STDERR, "usage: php poc/bin/verify.php \n"); + exit(2); +} + +require $root . '/vendor/autoload.php'; + +use PHPStan\Testing\PHPStanTestCase; +use PHPStan\TrinaryLogic; +use PHPStan\Type\Constant\ConstantIntegerType; +use PHPStan\Type\Constant\ConstantStringType; +use PHPStan\Type\ConstantTypeHelper; +use PHPStan\Type\Php\RegexArrayShapeMatcher; +use PHPStan\Type\Regex\RegexGroupParser; + +final class PocContainer extends PHPStanTestCase +{ + + public static function get(string $class): object + { + return self::getContainer()->getByType($class); + } + +} + +ini_set('pcre.jit', '0'); + +$side = class_exists('PHPStan\Type\Regex\PHPRegexReader') ? 'PHPRegex' : 'phplrt'; +/** @var RegexArrayShapeMatcher $matcher */ +$matcher = PocContainer::get(RegexArrayShapeMatcher::class); +/** @var RegexGroupParser $groupParser */ +$groupParser = PocContainer::get(RegexGroupParser::class); +$matchPatternType = new ReflectionMethod($matcher, 'matchPatternType'); + +$engineDiffers = 0; +foreach (glob(__DIR__ . '/../witnesses/*.json') ?: [] as $file) { + $counts = ['accepted' => 0, 'refused' => 0, 'maybe' => 0, 'no shape' => 0]; + foreach (json_decode((string) file_get_contents($file), true) as $w) { + $pattern = $w['pattern']; + $subject = base64_decode($w['subject']); + if ($w['call'] === 'subject') { + $written = $subject; + $result = @preg_match($pattern, $subject); + $walk = $groupParser->parseGroups($pattern); + $type = $walk === null ? null : ($side === 'PHPRegex' ? $walk->getSubjectNarrowType() : $walk->getSubjectBaseType()); + $value = new ConstantStringType($subject); + } else { + [$call, $flags] = explode(':', $w['call']); + $flags = $flags === 'null' ? null : (int) $flags; + $written = []; + $result = $call === 'match' + ? @preg_match($pattern, $subject, $written, $flags ?? 0) + : @preg_match_all($pattern, $subject, $written, $flags ?? PREG_PATTERN_ORDER); + $type = $matchPatternType->invoke($matcher, new ConstantStringType($pattern), $flags === null ? null : new ConstantIntegerType($flags), $call === 'allmaybe' ? TrinaryLogic::createMaybe() : TrinaryLogic::createYes(), $call !== 'match'); + $value = ConstantTypeHelper::getTypeFromValue($written); + } + + if ($result === false || serialize($written) !== base64_decode($w['engine'])) { + $engineDiffers++; + fwrite(STDERR, sprintf("the engine of this PHP (PCRE2 %s) writes something else for %s on %s\n", PCRE_VERSION, $pattern, var_export($subject, true))); + continue; + } + + if ($type === null) { + $counts['no shape']++; + continue; + } + $verdict = $type->isSuperTypeOf($value); + $counts[$verdict->yes() ? 'accepted' : ($verdict->no() ? 'refused' : 'maybe')]++; + } + printf("%-12s %s: %s\n", basename($file, '.json'), $side, json_encode($counts)); +} + +if ($engineDiffers > 0) { + fwrite(STDERR, "$engineDiffers witnesses were recorded with another PCRE2 release and were skipped\n"); +} diff --git a/poc/data/pcre2.json.gz b/poc/data/pcre2.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d29302d4a0c8c593e709c87979e27c7eccf42e2c GIT binary patch literal 943248 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

MuK18$~k(Z#ILLnl^f@rC|9y;6XoKM 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 ocDKeva2=J0ciU1u-HX30{PE98BIA$osht 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 z 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%0Aimr&^3Vs^X$@(m+JhQ5r4T)QB1Y%ayyASj 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

+f+cTXza-ei?O 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

@@9Nb?`wVGY3gs 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

    YG;wiyTlpDH(Piay6WkIp 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

    rT~7QT2W^v27%m9&5(0dC~(W-uPA9 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 K1=;QO=>G@81aY+h literal 0 HcmV?d00001 diff --git a/poc/data/php-src.json.gz b/poc/data/php-src.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b5fc4c4f0705076a5dcc74236e1491ced2f81584 GIT binary patch literal 78328 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 literal 0 HcmV?d00001 diff --git a/poc/witnesses/pcre2.json b/poc/witnesses/pcre2.json new file mode 100644 index 00000000000..4acb11687bd --- /dev/null +++ b/poc/witnesses/pcre2.json @@ -0,0 +1,702 @@ +[ + { + "pattern": "#^[^ab\\]cde]#", + "call": "match:null", + "subject": "MCMjI2FiSw==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^[^]cde]#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^a*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^a*?\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(?<=(?<=(?<=a)b)c).#", + "call": "match:null", + "subject": "YWJjMA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(?<=ab(cd(?<=...))).#", + "call": "match:null", + "subject": "YWJjZDA=", + "engine": "YToyOntpOjA7czoxOiIwIjtpOjE7czoyOiJjZCI7fQ==", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, 'cd'}", + "phpregex": "array{non-empty-string, 'cd'}" + }, + { + "pattern": "#.c*#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(?(1)abz)(.)#", + "call": "match:null", + "subject": "MA==", + "engine": "YToyOntpOjA7czoxOiIwIjtpOjE7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, non-empty-string}", + "phpregex": "array{non-empty-string, non-empty-string}" + }, + { + "pattern": "#a*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "# *\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#a*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#=*\\w#", + "call": "match:null", + "subject": "MDBhMSAKYTE=", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\d*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\d*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\D*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\D*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\s*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\s*\\w#", + "call": "match:null", + "subject": "MGI=", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\S*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\S*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\w*\\S#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\w*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\W*\\S#", + "call": "match:null", + "subject": "MGHZow==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\W*\\w#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#a*[^a]#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "# *\\H#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\x0b*\\V#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(\\R*)(.)#s", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#(\\R)*(.)#s", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#((?>\\r\\n|\\n|\\x0b|\\f|\\r|\\x85)*)(.)#s", + "call": "match:null", + "subject": "MCA1MWIuSzg=", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#^(a)*+(\\w)#", + "call": "match:null", + "subject": "MHd3", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, ''|'a', non-empty-string}" + }, + { + "pattern": "#^(?:a)*+(\\w)#", + "call": "match:null", + "subject": "MHdiCks6OjE=", + "engine": "YToyOntpOjA7czoxOiIwIjtpOjE7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, non-empty-string}", + "phpregex": "array{non-empty-string, non-empty-string}" + }, + { + "pattern": "~(*: A \\ and #comment\n \\ B)x~x", + "call": "match:null", + "subject": "eA==", + "engine": "YToyOntpOjA7czoxOiJ4IjtzOjQ6Ik1BUksiO3M6MjY6IiBBIFwgYW5kICNjb21tZW50CiAgICAgXCBCIjt9", + "reason": "value", + "key": "MARK", + "phplrt": "array{0: non-falsy-string, MARK?: \" A \\\\ and \\n \\\\ B\"}", + "phpregex": "array{0: 'x', MARK?: \" A \\\\ and #comment\\n \\\\ B\"}" + }, + { + "pattern": "~L(?#(|++|b?).#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#.x*#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\p{sc=Common}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\p{Script=Zyyy}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\p{Common}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#a*\\x{100}*\\w#u", + "call": "match:null", + "subject": "MAp3MHc=", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PC#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PL#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PM#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PP#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PS#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\PZ#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^(\\X*)(.)#u", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#^(\\X*?)(.)#u", + "call": "match:null", + "subject": "MC4=", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#^\\X#u", + "call": "match:null", + "subject": "MHUgdWIKS2E=", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^[\\P{Yi}]#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\X*(.)#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToyOntpOjA7czoxOiIwIjtpOjE7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, non-empty-string}", + "phpregex": "array{non-empty-string, non-empty-string}" + }, + { + "pattern": "#(?<=\\d{2,3}|áBC).#u", + "call": "match:null", + "subject": "MDAwYw==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(\\R*)(.)#su", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#(\\R)*(.)#su", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#^\\p{Xan}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^[\\p{Xan}]#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^\\p{Xwd}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^[\\p{Xwd}]#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#(\\X*)(.)#su", + "call": "match:null", + "subject": "MA==", + "engine": "YTozOntpOjA7czoxOiIwIjtpOjE7czowOiIiO2k6MjtzOjE6IjAiO30=", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string, string, non-empty-string}", + "phpregex": "array{non-empty-string, string, non-empty-string}" + }, + { + "pattern": "#^\\P{Xuc}#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#^[\\P{Xuc}]#u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\pN+\\z#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "#\\pN+#", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "~L(?#(|++\r\n\|\n\|\x0b\|\f\|\r\|\x85)*)(.)#s` | preg_match() | `'0 51b.K8'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^(a)*+(\w)#` | preg_match() | `'0ww'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, ''\|'a', non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^(?:a)*+(\w)#` | preg_match() | `'0wb\nK::1'` | `["0","0"]` | `array{non-falsy-string, non-empty-string}` | `array{non-empty-string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `~(*: A \ and #comment\n \ B)x~x` | preg_match() | `'x'` | `{"0":"x","MARK":" A \\ and #comment\n \\ B"}` | `array{0: non-falsy-string, MARK?: " A \\ and \n \\ B"}` | `array{0: 'x', MARK?: " A \\ and #comment\n \\ B"}` | key `MARK`: a value outside the type of its key | +| `~L(?#(\|++\|b?).#` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#.x*#` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\p{sc=Common}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\p{Script=Zyyy}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\p{Common}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#a*\x{100}*\w#u` | preg_match() | `'0\nw0w'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PC#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PL#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PM#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PP#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PS#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\PZ#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^(\X*)(.)#u` | preg_match() | `'0'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^(\X*?)(.)#u` | preg_match() | `'0.'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\X#u` | preg_match() | `'0u ub\nKa'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^[\P{Yi}]#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#\X*(.)#u` | preg_match() | `'0'` | `["0","0"]` | `array{non-falsy-string, non-empty-string}` | `array{non-empty-string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#(?<=\d{2,3}\|áBC).#u` | preg_match() | `'000c'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#(\R*)(.)#su` | preg_match() | `'0'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#(\R)*(.)#su` | preg_match() | `'0'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\p{Xan}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^[\p{Xan}]#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\p{Xwd}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^[\p{Xwd}]#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#(\X*)(.)#su` | preg_match() | `'0'` | `["0","","0"]` | `array{non-falsy-string, string, non-empty-string}` | `array{non-empty-string, string, non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^\P{Xuc}#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#^[\P{Xuc}]#u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#\pN+\z#` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `#\pN+#` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `~L(?#(\|++abc>([^()]\|\((?1)*\))*\d+)(,(?P>elem))*)\]#` | `array{0: non-falsy-string, 1: non-empty-string, elem: numeric-string, 2: numeric-string, 3?: non-falsy-string}` | +| `#\[((?P\d+)(,(?P>elem))*)?\]#` | `array{0: non-falsy-string, 1: non-empty-string, elem: numeric-string, 2: numeric-string, 3?: non-falsy-string}\|array{non-falsy-string}` | +| `#[ab]{1}+#` | `array{'a'\|'b'}` | +| `#()(?1){1}#` | `array{'', ''}` | +| `#()(?1)#` | `array{'', ''}` | +| `#[^()]*(?:\((?R)\)[^()]*)*#` | `array{string}` | +| `#[^()]*(?:\((?>(?R))\)[^()]*)*#` | `array{string}` | +| `#[^()]*(?:\((?R)\))*[^()]*#` | `array{string}` | +| `#(?:\((?R)\))*[^()]*#` | `array{string}` | +| `#(?:\((?R)\))\|[^()]*#` | `array{string}` | +| `#^((?Pa1)\|(?Pa2)b)#J` | `array{0: 'a1'\|'a2b', 1: 'a1'\|'a2b', A: 'a1', 2: 'a1'}\|array{0: 'a1'\|'a2b', 1: 'a1'\|'a2b', A: 'a2', 2: '', 3: 'a2'}` | +| `#(?\|(?)(?)(?)\|(?)(?)(?))#J` | `array{0: '', a: '', 1: '', b: '', 2: '', 3: ''}` | +| `#^(?Pa)(?Pb)#J` | `array{0: 'ab', A: 'a'\|'b', 1: 'a', 2: 'b'}` | +| `#^(?Pa)(?Pb)\|cd#J` | `array{'ab'\|'cd'}\|array{0: 'ab'\|'cd', A: 'a'\|'b', 1: 'a', 2: 'b'}` | +| `#^(?Pa)(?Pb)\|cd(?Pef)(?Pgh)#J` | `array{0: 'ab'\|'cdefgh', A: 'a'\|'b', 1: 'a', 2: 'b'}\|array{0: 'ab'\|'cdefgh', A: 'ef'\|'gh', 1: '', 2: '', 3: 'ef', 4: 'gh'}` | +| `#(?J)^((?Pa1)\|(?Pa2)b)#` | `array{0: 'a1'\|'a2b', 1: 'a1'\|'a2b', A: 'a1', 2: 'a1'}\|array{0: 'a1'\|'a2b', 1: 'a1'\|'a2b', A: 'a2', 2: '', 3: 'a2'}` | +| `#^(?Pa) (?J:(?Pb)(?Pc)) (?Pd)#` | `array{0: 'a bc d', A: 'a', 1: 'a', B: 'b'\|'c', 2: 'b', 3: 'c', C: 'd', 4: 'd'}` | +| `#(?P25[0-5]\|2[0-4]\d\|[01]?\d?\d)(?:\.(?P>B)){3}#` | `array{0: non-falsy-string, B: numeric-string, 1: numeric-string}` | +| `#(?x)(?'xyz'y)#` | `array{0: 'xy', abc: 'x', 1: 'x', xyz: 'y', 2: 'y'}` | +| `#^(?P>abc)(?x\|y)#` | `array{0: 'xx'\|'xy'\|'yx'\|'yy', abc: 'x'\|'y', 1: 'x'\|'y'}` | +| `#^(?P>abc)(?Px\|y)#` | `array{0: 'xx'\|'xy'\|'yx'\|'yy', abc: 'x'\|'y', 1: 'x'\|'y'}` | +| `#^(?1)(abc)#` | `array{'abcabc', 'abc'}` | +| `#^(?P>abc)[()](?)#` | `array{0: '('\|')', abc: '', 1: ''}` | +| `#^(?P>abc)\Q()\E(?)#` | `array{0: '()', abc: '', 1: ''}` | +| `#^(?P>abc)[a\Q(]\E(](?)#` | `array{0: '('\|']'\|'a', abc: '', 1: ''}` | +| `#(?=(?'abc'\w+))\k:#` | `array{0: non-falsy-string, abc: non-empty-string, 1: non-empty-string}` | +| `#(?'abc'a\|b)(?d\|e)\k{2}#J` | `array{0: non-falsy-string, abc: 'a'\|'b'\|'d'\|'e', 1: 'a'\|'b', 2: 'd'\|'e'}` | +| `#(?'abc'a\|b)(?d\|e)(?&abc){2}#J` | `array{0: 'adaa'\|'adab'\|'adba'\|'adbb'\|'aeaa'\|'aeab'\|'aeba'\|'aebb'\|'bdaa'\|'bdab'\|'bdba'\|'bdbb'\|'beaa'\|'beab'\|'beba'\|'bebb', abc: 'a'\|'b'\|'d'\|'e', 1: 'a'\|'b', 2: 'd'\|'e'}` | +| `#(?&abc)X(?P)#` | `array{0: 'PXP', abc: 'P', 1: 'P'}` | +| `#(?1)X(?P)#` | `array{0: 'PXP', abc: 'P', 1: 'P'}` | +| `#(?:a(?&abc)b)*(?x)#` | `array{0: lowercase-string&non-falsy-string, abc: 'x', 1: 'x'}` | +| `#(?:a(?&abc)b){1,5}(?x)#` | `array{0: 'axbaxbaxbaxbaxbx'\|'axbaxbaxbaxbx'\|'axbaxbaxbx'\|'axbaxbx'\|'axbx', abc: 'x', 1: 'x'}` | +| `#(?:a(?&abc)b){2,5}(?x)#` | `array{0: 'axbaxbaxbaxbaxbx'\|'axbaxbaxbaxbx'\|'axbaxbaxbx'\|'axbaxbx', abc: 'x', 1: 'x'}` | +| `#(?:a(?&abc)b){2,}(?x)#` | `array{0: lowercase-string&non-falsy-string, abc: 'x', 1: 'x'}` | +| `#(abc)(?i:(?1))#` | `array{'abcabc', 'abc'}` | +| `#(abc)(?:(?i)(?1))#` | `array{'abcabc', 'abc'}` | +| `#(ab\|c)(?-1)#` | `array{'abab'\|'abc'\|'cab'\|'cc', 'ab'\|'c'}` | +| `#xy(?+1)(abc)#` | `array{'xyabcabc', 'abc'}` | +| `#(x)(?\|(abc)\|(xyz))(x)#` | `array{'xabcx'\|'xxyzx', 'x', 'abc'\|'xyz', 'x'}` | +| `#(x)(?\|(abc)(pqr)\|(xyz))(x)#` | `array{'xabcpqrx'\|'xxyzx', 'x', ''\|'abc'\|'xyz', ''\|'pqr', 'x'}` | +| `#A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I#` | `array{string}` | +| `#^a+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#a+b?c+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#a+b?(*PRUNE)c+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#a+b?(*COMMIT)c+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#a+b?(*SKIP)c+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#a+b?(*THEN)c+(*FAIL)#` | `array{lowercase-string&non-falsy-string}` | +| `#(*CR)a.b#` | `array{non-falsy-string}` | +| `#(*CRLF)a.b#` | `array{non-falsy-string}` | +| `#(*ANY).*#` | `array{string}` | +| `#(*ANYCRLF).*#` | `array{string}` | +| `#(*CRLF).*#` | `array{string}` | +| `#(*NUL)^.*#` | `array{string}` | +| `#(*NUL)^.*#s` | `array{string}` | +| `#(*NUL)^X\NY#` | `array{non-falsy-string}` | +| `#(*BSR_ANYCRLF)a\Rb#` | `array{lowercase-string&non-falsy-string}` | +| `#(*BSR_UNICODE)a\Rb#` | `array{lowercase-string&non-falsy-string}` | +| `#(*BSR_ANYCRLF)(*CRLF)a\Rb#` | `array{lowercase-string&non-falsy-string}` | +| `#(*CRLF)(*BSR_UNICODE)a\Rb#` | `array{lowercase-string&non-falsy-string}` | +| `#(*CRLF)(*BSR_ANYCRLF)(*CR)ab#` | `array{'ab'}` | +| `#^(?+1)(?x\|y){0}z#` | `array{'xz'\|'yz'}` | +| `#(?1)[]a()b](abc)#` | `array{'abc(abc'\|'abc)abc'\|'abc]abc'\|'abcaabc'\|'abcbabc', 'abc'}` | +| `#(?1)[^]a()b](abc)#` | `array{non-falsy-string, 'abc'}` | +| `#(?2)[]a()b](abc)(xyz)#` | `array{'xyz(abcxyz'\|'xyz)abcxyz'\|'xyz]abcxyz'\|'xyzaabcxyz'\|'xyzbabcxyz', 'abc', 'xyz'}` | +| `#(?!)?a#` | `array{'a'}` | +| `#(?(?=.*b)b\|^)#` | `array{string}` | +| `#(?(?=b).*b\|^d)#` | `array{non-empty-string}` | +| `#(?(?=.*b).*b\|^d)#` | `array{non-empty-string}` | +| `#(*NO_START_OPT)xyz#` | `array{'xyz'}` | +| `#(*NO_AUTO_POSSESS)a+b#` | `array{lowercase-string&non-falsy-string}` | +| `#^"((?(?=[a])[^"])\|b)*"$#` | `array{0: non-falsy-string, 1?: string}` | +| `#^X(?&N)(a)(?\|(b)\|(q))(c)(d)(?Y)#` | `array{0: 'XYabcdY'\|'XYaqcdY', 1: 'a', 2: 'b'\|'q', 3: 'c', 4: 'd', N: 'Y', 5: 'Y'}` | +| `#Z(*F)#` | `array{'Z'}` | +| `#(?&word)(?&element)(?(DEFINE)(?<[^m][^>]>[^<])(?\w*+))#` | `array{non-falsy-string}` | +| `#(?&word)(?&element)(?(DEFINE)(?<[^\d][^>]>[^<])(?\w*+))#` | `array{non-falsy-string}` | +| `#(ab)(x(y)z(cd(*ACCEPT)))pq#` | `array{string, string, string, string, string}` | +| `#^(?a\|b\gc)#` | `array{0: non-falsy-string, name: non-falsy-string, 1: non-falsy-string}` | +| `#^(?a\|b\g'name'c)#` | `array{0: non-falsy-string, name: non-falsy-string, 1: non-falsy-string}` | +| `#^(a\|b\g<1>c)#` | `array{non-falsy-string, non-falsy-string}` | +| `#^(a\|b\g'1'c)#` | `array{non-falsy-string, non-falsy-string}` | +| `#^(a\|b\g'-1'c)#` | `array{non-falsy-string, non-falsy-string}` | +| `#(^(a\|b\g<-1>c))#` | `array{non-falsy-string, non-falsy-string, non-falsy-string}` | +| `#(?-i:\g)(?i:(?a))#` | `array{0: non-falsy-string, name: non-falsy-string, 1: non-falsy-string}` | +| `#(?i:\g)(?-i:(?a))#` | `array{0: 'aa', name: 'a', 1: 'a'}` | +| `#(?-i:\g<+1>)(?i:(a))#` | `array{non-falsy-string, non-falsy-string}` | +| `~(?=(?(?#simplesyntax)\$(?[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?[a-zA-Z0-9_\x{7f}-\x{ff}]+\|\$\g)\]\|->\g(\(.*?\))?)?\|(?#simple syntax withbraces)\$\{(?:\g(?\[(?:\g\|'(?:\\.\|[^'\\])*'\|"(?:\g\|\\.\|[^"\\])*")\])?\|\g\|\$\{\g\})\}\|(?#complexsyntax)\{(?\$(?\g(\g*\|\(.*?\))?)(?:->\g)*\|\$\g\|\$\{\g\})\}))\{~` | `array{0: '{', regex: non-falsy-string, 1: non-falsy-string, name?: string, 2?: string, index?: string, 3?: string, 4?: string, indices?: string, 5?: string, complex?: string, 6?: string, segment?: string, 7?: string, 8?: string}` | +| `#(?a\|b\|c)\g*#` | `array{0: lowercase-string&non-falsy-string, n: 'a'\|'b'\|'c', 1: 'a'\|'b'\|'c'}` | +| `#^X(?7)(a)(?\|(b)\|(q)(r)(s))(c)(d)(Y)#` | `array{'XYabcdY'\|'XYaqrscdY', 'a', ''\|'b'\|'q', ''\|'r', ''\|'s', 'c', 'd', 'Y'}` | +| `#(?<=b(?1)\|zzz)(a)#` | `array{'a', 'a'}` | +| `#(a\|bc)(?1)#` | `array{'aa'\|'abc'\|'bca'\|'bcbc', 'a'\|'bc'}` | +| `#(?:a(?[0-5])\|b(?[4-7]))c(?()d\|e)#J` | `array{0: non-falsy-string, digit: '0'\|'1'\|'2'\|'3'\|'4'\|'5', 1: '0'\|'1'\|'2'\|'3'\|'4'\|'5'}\|array{0: non-falsy-string, digit: '4'\|'5'\|'6'\|'7', 1: '', 2: '4'\|'5'\|'6'\|'7'}` | +| `#^(?&t)*+(?(DEFINE)(?.))$#` | `array{string}` | +| `#^(?&t)*(?(DEFINE)(?.))$#` | `array{string}` | +| `#(*COMMIT:X)#` | `array{0: '', MARK?: 'X'}` | +| `#A(*COMMIT)B#` | `array{'AB'}` | +| `#A(*THEN)B\|A(*THEN)C#` | `array{'AB'\|'AC'}` | +| `#A(*PRUNE)B\|A(*PRUNE)C#` | `array{'AB'\|'AC'}` | +| `#(*COMMIT)ABC#` | `array{'ABC'}` | +| `#(?>.(*ACCEPT))*?5#` | `array{string}` | +| `#(.(*ACCEPT))*?5#` | `array{0: string, 1?: string}` | +| `#(.(*ACCEPT))5#` | `array{string, string}` | +| `#(.(*ACCEPT))*5#` | `array{0: string, 1?: string}` | +| `#(?1)(?:(b(*ACCEPT))){0}#` | `array{string}` | +| `#(?1)(?:(b(*ACCEPT))){0}c#` | `array{string}` | +| `#(?1)(?:((*ACCEPT))){0}c#` | `array{string}` | +| `#^.*?(?(?=a)a\|b(*THEN)c)#` | `array{non-empty-string}` | +| `#^.*?(?(?=a)a\|bc)#` | `array{non-empty-string}` | +| `#^.*?(?(?=a)a(*THEN)b\|c)#` | `array{non-empty-string}` | +| `#^.*?(?(?=a)a(*THEN)b)c#` | `array{non-falsy-string}` | +| `#^.*?(a(*THEN)b)c#` | `array{non-falsy-string, 'ab'}` | +| `#^.*?(a(*THEN)b\|z)c#` | `array{non-falsy-string, 'ab'\|'z'}` | +| `#^.*?(z\|a(*THEN)b)c#` | `array{non-falsy-string, 'ab'\|'z'}` | +| `#(*MARK:A)(*SKIP:B)(C\|X)#` | `array{0: 'C'\|'X', 1: 'C'\|'X', MARK?: 'A'}` | +| `#(*:A)A+(*SKIP:A)(B\|Z)#` | `array{0: non-falsy-string&uppercase-string, 1: 'B'\|'Z', MARK?: 'A'}` | +| `#(?=a*(*ACCEPT)b)c#` | `array{string}` | +| `#(?1)c(?(DEFINE)((*ACCEPT)b))#` | `array{string}` | +| `#(?>(*ACCEPT)b)c#` | `array{string}` | +| `#(?(DEFINE)(a(?2)\|b)(b(?1)\|a))(?:(?1)\|(?2))#` | `array{string}` | +| `#(a(?2)\|b)(b(?1)\|a)(?:(?1)\|(?2))#` | `array{non-falsy-string, non-falsy-string, non-falsy-string}` | +| `#(a(?2)\|b)(b(?1)\|a)(?1)(?2)#` | `array{non-falsy-string, non-falsy-string, non-falsy-string}` | +| `#(abc)(?1)#` | `array{'abcabc', 'abc'}` | +| `#(?=abc){3}abc#` | `array{'abc'}` | +| `#(?=abc)+abc#` | `array{lowercase-string&non-falsy-string}` | +| `#(?=abc)++abc#` | `array{lowercase-string&non-falsy-string}` | +| `#(?=abc){0}xyz#` | `array{'xyz'}` | +| `#(?=(a))?.#` | `array{0: non-empty-string, 1?: 'a'}` | +| `#(?=(a))??.#` | `array{0: non-empty-string, 1?: 'a'}` | +| `#^(?=(a)){0}b(?1)#` | `array{'ba'}` | +| `#(?(DEFINE)(a))?b(?1)#` | `array{'ba'}` | +| `#^(?=(?1))?[az]([abc])d#` | `array{'aad'\|'abd'\|'acd'\|'zad'\|'zbd'\|'zcd', 'a'\|'b'\|'c'}` | +| `#^(?!a){0}\w+#` | `array{non-empty-string}` | +| `#(?<=(abc))?xyz#` | `array{0: 'xyz', 1?: 'abc'}` | +| `#.(*F)#` | `array{non-empty-string}` | +| `#a(*SKIP)c\|b(*ACCEPT)\|#` | `array{string}` | +| `#a(*SKIP)c\|b(*ACCEPT)cd(*ACCEPT)\|x#` | `array{string}` | +| `#a*(*ACCEPT)b#` | `array{string}` | +| `#(*ACCEPT)a#` | `array{string}` | +| `#z(*ACCEPT)a#` | `array{string}` | +| `#(.)(\1\|a(?2))#` | `array{non-empty-string, non-empty-string, string}` | +| `#\1\|(.)(?R)\1#` | `array{0: string, 1?: non-empty-string}` | +| `#(.)((?(1)c\|a)\|a(?2))#` | `array{non-falsy-string, non-empty-string, non-empty-string}` | +| `#(?(?=c)c\|d)++Y#` | `array{non-falsy-string}` | +| `#(?(?=c)c\|d)*+Y#` | `array{non-falsy-string}` | +| `#(a)(?2){0,1999}?(b)#` | `array{lowercase-string&non-falsy-string, 'a', 'b'}` | +| `#(a)(?(DEFINE)(b))(?2){0,1999}?(?2)#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#AB(C(D))(E(F))?(?(?=\2)(?=\4))#` | `array{non-falsy-string, 'CD', 'D', 'EF', 'F'}\|array{non-falsy-string, 'CD', 'D'}` | +| `#.*?a(*PRUNE)b#` | `array{non-falsy-string}` | +| `#.*?a(*SKIP)b#` | `array{non-falsy-string}` | +| `#(?:(a)+(?C1)bb\|aa(?C2)b)#` | `array{0: lowercase-string&non-falsy-string, 1?: 'a'}` | +| `#(?:(a)++(?C1)bb\|aa(?C2)b)#` | `array{0: lowercase-string&non-falsy-string, 1?: 'a'}` | +| `#(?:(?>(a))(?C1)bb\|aa(?C2)b)#` | `array{0: 'aab'\|'abb', 1?: 'a'}` | +| `#(?:(?1)(?C1)x\|ab(?C2))((a)){0}#` | `array{'ab'\|'ax'}` | +| `#(?1)(?C1)((a)(?C2)){0}#` | `array{'a'}` | +| `#(?:(a)+(?C1)bb\|aa(?C2)b)++#` | `array{0: lowercase-string&non-falsy-string, 1?: 'a'}` | +| `#^(?(?=a)aa\|bb)#` | `array{non-falsy-string}` | +| `#(?C1)^(?C2)(?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)\|(?C8)b(?C9)b(?C10))(?C11)#` | `array{non-falsy-string}` | +| `#aaaaa(*COMMIT)(*PRUNE)b\|a+c#` | `array{lowercase-string&non-falsy-string}` | +| `#(?!a(*COMMIT)b)ac\|ad#` | `array{'ac'\|'ad'}` | +| `#^(?!a(*THEN)b\|ac)..#` | `array{non-falsy-string}` | +| `#^(?=a(*THEN)b\|ac)#` | `array{''}` | +| `#\A.*?(?:a\|b(*THEN)c)#` | `array{non-falsy-string}` | +| `#\A.*?(?:a\|b(*THEN)c)++#` | `array{non-falsy-string}` | +| `#\A.*?(?:a\|b(*THEN)c\|d)#` | `array{non-falsy-string}` | +| `#(?:(a(*MARK:X)a+(*SKIP:X)b)){0}(?:(?1)\|aac)#` | `array{0: lowercase-string&non-falsy-string, MARK?: 'X'}` | +| `#\A.*?(a\|b(*THEN)c)#` | `array{non-falsy-string, 'a'\|'bc'}` | +| `#^(A(*THEN)B\|A(*THEN)D)#` | `array{'AB'\|'AD', 'AB'\|'AD'}` | +| `#(?!b(*THEN)a)bn\|bnn#` | `array{'bn'\|'bnn'}` | +| `#(?(?=b(*SKIP)a)bn\|bnn)#` | `array{non-falsy-string}` | +| `#(?=b(*THEN)a\|)bn\|bnn#` | `array{'bn'\|'bnn'}` | +| `#(?\|(?f)\|(?b))#J` | `array{0: 'b'\|'f', n: 'b'\|'f', 1: 'b'\|'f'}` | +| `#(?:b(?R)a\|a+)#` | `array{non-falsy-string}` | +| `#(?:b(?0)a\|a+)#` | `array{non-falsy-string}` | +| `#(?b(?&r)a\|x)a+#` | `array{0: non-falsy-string, r: non-falsy-string, 1: non-falsy-string}` | +| `#(?:b(?R)a\|a+b)#` | `array{non-falsy-string}` | +| `#(?:b(?R)a\|[ac]+)#` | `array{non-falsy-string}` | +| `#a{4}+#` | `array{'aaaa'}` | +| `#[A-[!xxx!]]+#` | `array{non-falsy-string}` | +| `#(((a\2)\|(a*)\g<-1>))*a?#` | `array{string, lowercase-string\|non-falsy-string, lowercase-string\|non-falsy-string, non-falsy-string, lowercase-string}\|array{string}` | +| `#^(?(?=abc)\w{3}:\|\d\d)$#` | `array{non-falsy-string}` | +| `#(?(?=ab)ab)#` | `array{string}` | +| `#(?(R)a+\|(?R)b)#` | `array{non-empty-string}` | +| `#(*NOTEMPTY)a*?b*?#` | `array{lowercase-string}` | +| `#(*NOTEMPTY_ATSTART)a*?b*?#` | `array{lowercase-string}` | +| `#(?(VERSION=8)yes\|no){3}#` | `array{non-falsy-string}` | +| `#((?=(?(?=(?(?=(?(?=()))))))))#` | `array{0: '', 1: '', 2?: ''}` | +| `#(?(?=)==)(((((((((?=)))))))))#` | `array{string, '', '', '', '', '', '', '', ''}` | +| `#(?a)\|(?b)#J` | `array{0: 'a'\|'b', A: 'a', 1: 'a'}\|array{0: 'a'\|'b', A: 'b', 1: '', 2: 'b'}` | +| `#(*NO_DOTSTAR_ANCHOR)(?s).*\d#` | `array{non-empty-string}` | +| `#^(?)(?:(?a)\|b)(?()A\|B)#J` | `array{0: non-falsy-string, AA: ''\|'a', 1: '', 2?: 'a'}` | +| `#^(?:(?X)\|)(?:(?a)\|b)\k{AA}#J` | `array{0: non-falsy-string, AA?: ''\|'a'\|'X', 1?: ''\|'X', 2?: 'a'}` | +| `#(?(?J)(?1(111111)11\|)1\|1\|)(?()1)#` | `array{0: string, N111: ''\|'1'\|'111111111'\|'1111111111', 1: ''\|'1'\|'1111111111', 2?: ''\|'111111111', 3?: '111111'}` | +| `#(?(?J)(?))(?-J)\k#` | `array{0: string, N: '', 1: '', 2: ''}` | +| `#(?(?=0)(?=00)?00765)#` | `array{string}` | +| `#(?(?=0)(?=00)?00765\|(?!3).56)#` | `array{non-falsy-string}` | +| `#((?2){0,1999}())?#` | `array{'', '', ''}\|array{''}` | +| `#((?+1)(\1))#` | `array{string, string, string}` | +| `#a(?C"a)b""c")#` | `array{'a'}` | +| `#ab(?C" any text with spaces ")cde#` | `array{'abcde'}` | +| `#^a(b)c(?C1)def#` | `array{'abcdef', 'b'}` | +| `#^a(b)c(?C"AB")def#` | `array{'abcdef', 'b'}` | +| `#^a(b)c(?C{AB})def#` | `array{'abcdef', 'b'}` | +| `~(?C`a``b`)(?C'a''b')(?C"a""b")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})~` | `array{''}` | +| `#(?:a(?C`code`)){3}#` | `array{'aaa'}` | +| `#^(?(?C25)(?=abc)abcd\|xyz)#` | `array{non-falsy-string}` | +| `#^(?(?C$abc$)(?=abc)abcd\|xyz)#` | `array{non-falsy-string}` | +| `#^ab(?C'first')cd(?C"second")ef#` | `array{'abcdef'}` | +| `#(?:a(?C`code`)){3}X#` | `array{'aaaX'}` | +| `#(?(?!)^)#` | `array{string}` | +| `#(?(?!)a\|b)#` | `array{non-empty-string}` | +| `#(*NO_JIT)((?2)+)((?1)){#` | `array{non-falsy-string, string, string}` | +| `#X((?2)()*+){2}+#` | `array{0: non-falsy-string&uppercase-string, 1: ''\|numeric-string, 2?: ''}` | +| `#X((?2)()*+){2}#` | `array{0: non-falsy-string&uppercase-string, 1: ''\|numeric-string, 2?: ''}` | +| `~(?x:((?'a')) # comment (with parentheses) and \| vertical\n(?-x:#not a comment (?'b')) # this is a comment ()\n(?'c')) # not a comment (?'d')~` | `array{0: '#not a comment # not a comment ', 1: '', a: '', 2: '', b: '', 3: '', c: '', 4: '', d: '', 5: ''}` | +| `#(?\|(?'a')(2)(?'b')\|(?'a')(?'a')(3))#J` | `array{0: '2'\|'3', a: ''\|'2', 1: '', 2: ''\|'2', b: ''\|'3', 3: ''\|'3'}` | +| `#.((?2)(?R)\|\1\|$)()#` | `array{non-empty-string, string, ''}` | +| `#.((?3)(?R)()(?2)\|\1\|$)()#` | `array{non-empty-string, string, '', ''}` | +| `#(((?(R)){0,2}) (?'x'((?'R')((?'R')))))#J` | `array{0: non-falsy-string, 1: non-falsy-string, 2: string, x: '', 3: '', 4: '', R: '', 5: '', 6: '', 7: ''}` | +| `#(((?(X)){0,2}) (?'x'((?'X')((?'X')))))#J` | `array{0: non-falsy-string, 1: non-falsy-string, 2: string, x: '', 3: '', 4: '', X: '', 5: '', 6: '', 7: ''}` | +| `#(((?(R)){0,2}) (?'x'((?'X')((?'R')))))#` | `array{0: non-falsy-string, 1: non-falsy-string, 2: string, x: '', 3: '', 4: '', X: '', 5: '', 6: '', R: '', 7: ''}` | +| `#(?J)(?'d'(?'d'\g{d}))#` | `array{0: string, d: string, 1: string, 2: string}` | +| `#(?J:(?\|(?'R')(\k'R')\|((?'R'))))#` | `array{0: string, R: string, 1: '', 2: string}` | +| `#^(?:(?(1)x\|)+)+$()#` | `array{string, ''}` | +| `#(?(R))*+#` | `array{string}` | +| `~((?x)(?#))#(?'abc')~` | `array{0: '#', 1: '', abc: '', 2: ''}` | +| `#[[:\\](?'abc')[a:]#` | `array{0: '::'\|':a'\|'[:'\|'[a'\|'\\:'\|'\\a', abc: '', 1: ''}` | +| `#()(?(R)0)*+#` | `array{string, ''}` | +| `#(?(?C{\Q})(?!(?'abc')))#` | `array{0: string, abc: '', 1: ''}\|array{string}` | +| `#(?1){3918}(((((0(\k'R'))))(?J)(?'R'(?'R'\3){99})))#` | `array{0: non-falsy-string, 1: non-empty-string, 2: non-empty-string, 3: non-empty-string, 4: non-empty-string, 5: non-empty-string, 6: string, R: string, 7: string, 8: string}` | +| `#(?\|(aaa)\|(b))(?1)#` | `array{'aaaaaa'\|'baaa', 'aaa'\|'b'}` | +| `#(?\|(?'a'aaa)\|(?'a'b))\k'a'#` | `array{0: non-falsy-string, a: 'aaa'\|'b', 1: 'aaa'\|'b'}` | +| `#(?\|(?'a'aaa)\|(?'a'b))(?'a'cccc)\k'a'#J` | `array{0: non-falsy-string, a: 'aaa'\|'b'\|'cccc', 1: 'aaa'\|'b', 2: 'cccc'}` | +| `#.*?a(*PRUNE)b#s` | `array{non-falsy-string}` | +| `#^a(*PRUNE)b#s` | `array{'ab'}` | +| `#0(?0)\|(1)(*THEN)(*SKIP:0)(*FAIL)#` | `array{0: non-empty-string, 1?: '1'}` | +| `#((*MARK:A))++a(*SKIP:B)b#` | `array{0: lowercase-string&non-falsy-string, 1: '', MARK?: 'A'}` | +| `#(^aa(*MARK:X)a(*SKIP:X)c\|(?!^)a+b)#` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, MARK?: 'X'}` | +| `#(^aa(*MARK:X)a(*SKIP:Y)c\|(?!^)a+b)#` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, MARK?: 'X'}` | +| `#(^aa(*MARK:Y)a(*SKIP:X)c\|(?!^)a+b)#` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, MARK?: 'Y'}` | +| `#(^aa(*MARK:X)a(*SKIP:XX)c\|(?!^)a+b)#` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, MARK?: 'X'}` | +| `#(^aa(*MARK:XX)a(*SKIP:X)c\|(?!^)a+b)#` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, MARK?: 'XX'}` | +| `#(?'abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFG'justright)#` | `array{0: 'justright', abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFG: 'justright', 1: 'justright'}` | +| `#\n(?-x):?#x` | `array{''\|':'}` | +| `#(*MARK:A\x00b)#` | `array{0: '', MARK?: 'A\\x00b'}` | +| `#"(*MARK:A" 00 "b)"#` | `array{0: '""', MARK?: 'A" 00 "b'}` | +| `#(?<=((?C)0))#` | `array{'', '0'}` | +| `#ab(?C1)c#` | `array{'abc'}` | +| `#'ab(?C1)c'#` | `array{'\'abc\''}` | +| `#(?<=(?1))((?s))#A` | `array{'', ''}` | +| `#((?(?C'')\Q\E(?!((?(?C'')(?!X=X));=)r*X=X));=)#` | `array{0: non-falsy-string, 1: non-falsy-string, 2?: non-falsy-string}` | +| `#(?a)(?b)\g{b}\g{a}\g{a}\g{a}\g{a}(?xx)(?zz)#J` | `array{0: non-falsy-string, a: 'a'\|'xx', 1: 'a', b: 'b'\|'zz', 2: 'b', 3: 'xx', 4: 'zz'}` | +| `#(?1)(A(*COMMIT)\|B)D#` | `array{'AAD'\|'ABD'\|'BAD'\|'BBD', 'A'\|'B'}` | +| `#(?1){2}(a)#` | `array{'aaa', 'a'}` | +| `#(?1){2,4}(a)#` | `array{'aaa'\|'aaaa'\|'aaaaa', 'a'}` | +| `#^(?:\n(?:A\| (?:B\|B(*ACCEPT)) (?<=(.)) D)\n(Z)\n)+$#x` | `list{0: string, 1?: string, 2?: string}` | +| `#(a(?C1)(b)(c)d)+#` | `array{lowercase-string&non-falsy-string, 'abcd', 'b', 'c'}` | +| `#(a(*MARK:m)(*ACCEPT)){0}(?1)#` | `array{0: string, MARK?: 'm'}` | +| `#\d{0,3}(*:abc)(?C1)xxx#` | `array{0: lowercase-string&non-falsy-string, MARK?: 'abc'}` | +| `#(*CRLF)^X.+?Z#` | `array{non-falsy-string}` | +| `#(*BSR_ANYCRLF)^X\R+?Z#` | `array{non-falsy-string&uppercase-string}` | +| `#^(X(*THEN)Y\|AB){0}(?1)#` | `array{'AB'\|'XY'}` | +| `#^(?!A(?C1)B)C#` | `array{'C'}` | +| `#^(?(?!A(?C1)B)C)#` | `array{string}` | +| `#(*NO_JIT)(a+)b#` | `array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string}` | +| `#(*NO_JIT)a+(?C'XXX')b#` | `array{lowercase-string&non-falsy-string}` | +| `#(?(DEFINE)(?a?))^(?&optional_a)a$#` | `array{'a'\|'aa'}` | +| `#(?(DEFINE)(?a?)X)^(?&optional_a)a$#` | `array{'a'\|'aa'}` | +| `#^(a?)b(?1)a#` | `array{'aba'\|'abaa'\|'ba'\|'baa', ''\|'a'}` | +| `#^(a?)+b(?1)a#` | `array{lowercase-string&non-falsy-string, ''\|'a'}` | +| `#^(a?)++b(?1)a#` | `array{lowercase-string&non-falsy-string, ''\|'a'}` | +| `#(?<=(?=.){4,5}x)#` | `array{''}` | +| `#a(*PRUNE:X)bc\|qq#` | `array{0: 'abc'\|'qq', MARK?: 'X'}` | +| `#a(*THEN:X)bc\|qq#` | `array{0: 'abc'\|'qq', MARK?: 'X'}` | +| `#(?(?=^))b#` | `array{non-falsy-string}` | +| `#(?(?=^)\|)b#` | `array{non-falsy-string}` | +| `#(?(?=^)\|^)b#` | `array{non-falsy-string}` | +| `#(?(1)^())+b#` | `array{0: non-falsy-string, 1?: ''}` | +| `#(?(1)^()\|^)+b#` | `array{0: non-falsy-string, 1?: ''}` | +| `#(?(1)^()\|^)*b#` | `array{0: non-falsy-string, 1?: ''}` | +| `#(?(1)^a()\|^a)+b#` | `array{0: non-falsy-string, 1?: ''}` | +| `#(?(1)^\|^(a))+b#` | `array{0: non-falsy-string, 1?: 'a'}` | +| `#(?(1)^a()\|^a)*b#` | `array{0: non-falsy-string, 1?: ''}` | +| `#(*COMMIT:XX)^abc#` | `array{0: 'abc', MARK?: 'XX'}` | +| `#(*ACCEPT:XX)^abc#` | `array{0: string, MARK?: 'XX'}` | +| `#a(?:(*ACCEPT))??bc#` | `array{string}` | +| `#a(*ACCEPT)??bc#` | `array{string}` | +| `#a(*ACCEPT:XX)??bc#` | `array{0: string, MARK?: 'XX'}` | +| `#(?\|(a)\|(bcde))(c)\2#` | `array{non-falsy-string, 'a'\|'bcde', 'c'}` | +| `#(?\|(a)\|(bcde))(c)\1#` | `array{non-falsy-string, 'a'\|'bcde', 'c'}` | +| `#(?\|(?'A'a)\|(?'A'bcde))(?'B'c)\k'B'(?'A')#J` | `array{0: non-falsy-string, A: ''\|'a'\|'bcde', 1: 'a'\|'bcde', B: 'c', 2: 'c', 3: ''}` | +| `#(?\|(?'A'a)\|(?'A'bcde))(?'B'c)\k'A'(?'A')#J` | `array{0: non-falsy-string, A: ''\|'a'\|'bcde', 1: 'a'\|'bcde', B: 'c', 2: 'c', 3: ''}` | +| `#A(?:(*ACCEPT))?B#` | `array{string}` | +| `#(A(*ACCEPT)??B)C#` | `array{string, string}` | +| `#\A(*pla:.*\b(\w++))(?>.*?\b\1\b){3}#` | `array{string, non-empty-string}` | +| `#\A(*napla:.*\b(\w++))(?>.*?\b\1\b){3}#` | `array{string, non-empty-string}` | +| `#\A(?*.*\b(\w++))(?>.*?\b\1\b){3}#` | `array{string, non-empty-string}` | +| `#(*plb:(.)..\|(.)...)(\1\|\2)#` | `array{string, string, string, string}` | +| `#(*naplb:(.)..\|(.)...)(\1\|\2)#` | `array{string, string, string, string}` | +| `#(?<*(.)..\|(.)...)(\1\|\2)#` | `array{string, string, string, string}` | +| `#(*non_atomic_positive_lookahead:ab)#` | `array{''}` | +| `#(*non_atomic_positive_lookbehind:ab)#` | `array{''}` | +| `#(*pla:ab+)#` | `array{''}` | +| `#(*napla:ab+)#` | `array{''}` | +| `#(*napla:)+#` | `array{''\|numeric-string}` | +| `#(*naplb:)+#` | `array{''\|numeric-string}` | +| `#(*napla:^x\|^y)#` | `array{''}` | +| `#(*napla:abc\|abd)#` | `array{''}` | +| `#(*napla:a\|(.)(*ACCEPT)zz)\1..#` | `array{0: string, 1?: string}` | +| `#(*napla:a(*ACCEPT)zz\|(.))\1..#` | `array{0: string, 1?: string}` | +| `#(*napla:a\|(*COMMIT)(.))\1\1#` | `array{0: string, 1?: non-empty-string}` | +| `#(*napla:a\|(.))\1\1#` | `array{0: string, 1?: non-empty-string}` | +| `#(*naplb:ab?c\|PQ)...#` | `array{non-falsy-string}` | +| `#^(?\|(\*)(*napla:\S*_(\2?+.+))\|(\w)(?=\S*_(\2?+\1)))+_\2$#` | `array{non-falsy-string, non-empty-string, string}` | +| `#^(?\|(\*)(*napla:\S*_(\3?+.+))\|(\w)(?=\S*_((\2?+\1))))+_\2$#` | `array{0: non-falsy-string, 1: non-empty-string, 2: string, 3?: string}` | +| `#^((\1+)(?C)\|\d)+133X$#` | `array{0: non-falsy-string, 1: string, 2?: string}` | +| `#"(*MARK:>" 00 "<).."#` | `array{0: non-falsy-string, MARK?: '>" 00 "<'}` | +| `#"(*MARK:>" 00 "<).(?C1)."#` | `array{0: non-falsy-string, MARK?: '>" 00 "<'}` | +| `#(?=.{10}(?1))x(\K){0}#` | `array{string}` | +| `#(?=.{10}(.))(*scs:(1)(?2))x(\K){0}#` | `array{string, non-empty-string}` | +| `#(?=.{5}(?1))\d*(\K){0}#` | `array{string}` | +| `#(?>this line\s*((?R)\|)\K)#` | `array{string, string}` | +| `#(?>this line\s*((?R)\|)(*MARK:A))#` | `array{0: non-falsy-string, 1: string, MARK?: 'A'}` | +| `#(?(?a)\|(?Pb))(?P=same))+#J` | `array{0: non-falsy-string, same?: ''\|'a'\|'b', 1?: ''\|'a', 2?: 'b'}` | +| `#(*ACCEPT)+#` | `array{string}` | +| `#a?(?=b(*COMMIT)c\|)d#` | `array{'ad'\|'d'}` | +| `#(?=b(*COMMIT)c\|)d#` | `array{'d'}` | +| `#(*MARK:a/y_)#` | `array{0: '', MARK?: 'a/y_'}` | +| `#(a)(*scs:(1)b)*c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)*?c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)*+c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)+c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)+?c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)++c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#(a)(*scs:(1)b)?c#` | `array{'ac', 'a'}` | +| `#(a)(*scs:(1)b)??c#` | `array{'ac', 'a'}` | +| `#(a)(*scs:(1)b)?+c#` | `array{'ac', 'a'}` | +| `#(a)(*scs:(1)b){3}c#` | `array{'ac', 'a'}` | +| `#(a)(*scs:(1)b){3,5}?c#` | `array{'ac', 'a'}` | +| `#(a)(*scs:(1)b){3,}+c#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#([a-z]++)(*scs:(1)(stx)\|(ne))(.)#` | `array{non-falsy-string, lowercase-string&non-falsy-string, ''\|'stx', ''\|'ne', non-empty-string}` | +| `~(?[a-z]++)##(*scan_substring:('XX').*(..)$)\2~` | `array{0: non-falsy-string, XX: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: non-falsy-string}` | +| `~([a-z])([a-z]++)(#+)(*scs:(2)(ab.))~` | `array{0: lowercase-string&non-falsy-string, 1: 'a'\|'b'\|'c'\|'d'\|'e'\|'f'\|'g'\|'h'\|'i'\|'j'\|'k'\|'l'\|'m'\|'n'\|'o'\|'p'\|'q'\|'r'\|'s'\|'t'\|'u'\|'v'\|'w'\|'x'\|'y'\|'z', 2: lowercase-string&non-falsy-string, 3: non-falsy-string, 4?: non-falsy-string}` | +| `#(?:(?[a-z]++)\|(?[0-9]++)\|$)(*scan_substring:('YYY')((?.).*\k$))#J` | `array{0: lowercase-string, YYY: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: '', 3?: string, START?: non-empty-string, 4?: non-empty-string}\|array{0: lowercase-string, YYY: numeric-string, 1: '', 2: numeric-string, 3?: string, START?: non-empty-string, 4?: non-empty-string}\|array{0: lowercase-string, YYY?: '', 1?: '', 2?: '', 3?: string, START?: non-empty-string, 4?: non-empty-string}` | +| `~([a-zA-Z]+)(*scs:(1).*?(?[A-Z]+)(*scan_substring:('ABC').*(.)\3))#+~` | `array{0: non-falsy-string, 1: non-falsy-string, ABC?: uppercase-string, 2?: uppercase-string, 3?: non-empty-string}` | +| `#([a-zA-Z]+)(*scs:(1)(xy\|ab(*ACCEPT)cd))#` | `array{0: string, 1: string, 2?: string}` | +| `#(?[a-zA-Z]+)(*scs:('AA')(ab(*ACCEPT)cd\|xy))#` | `array{0: string, AA: string, 1: string, 2?: string}` | +| `~([a-z]++)##(*scs:(1)(abc))?!~` | `array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: 'abc'}` | +| `~([a-z]++)##(*scs:(1)(abc))??(?(2)!\|:)~` | `array{0: non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: 'abc'}` | +| `~([a-z]++)##(*scs:(1)(abc)\|xyz){8}(?(2)!\|:)~` | `array{0: non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: 'abc'}` | +| `~[A-Z]{3}([A-Z]++)#(*scs:(1)(?<=BC)XY)#~` | `array{non-falsy-string&uppercase-string, non-falsy-string&uppercase-string}` | +| `#()(\w++)=(*scs:(2)(?=abc))(\w++)#` | `array{non-falsy-string, '', non-empty-string, non-empty-string}` | +| `#(\d++)(*scs:(1)\d+\z)(\w+)#` | `array{non-falsy-string, numeric-string, non-empty-string}` | +| `#(\d++)(*scs:(1)\d+\Z)(\w+)#` | `array{non-falsy-string, numeric-string, non-empty-string}` | +| `#(\d++)(*scs:(1)\d+$)(\w+)#` | `array{non-falsy-string, numeric-string, non-empty-string}` | +| `#([a-z]{2})[a-z](*scs:(1)(.*?))\2$#` | `array{0: non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: string}` | +| `~^(([a-z]([a-z]*+))(*scs:(2).(?=(?1)\|$)\3)\|#){5}~` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: lowercase-string, 3?: lowercase-string}` | +| `#(*scs:(1)a)(a)\|x#` | `array{0: 'a'\|'x', 1?: 'a'}` | +| `#(*scs:()a)(?a)(?b)(?c)(?d)\|x#J` | `array{'abcd'\|'x'}\|array{0: 'abcd'\|'x', GOOD_NAME: 'a'\|'b'\|'c'\|'d', 1: 'a', 2: 'b', 3: 'c', 4: 'd'}` | +| `#(*scs:(1)a)?(a)#` | `array{'a', 'a'}` | +| `#(*scs:(1)a)??(a)#` | `array{'a', 'a'}` | +| `#x(?\|(*scs:(1)(?<=(.)))\|()){8}#` | `array{0: 'x', 1?: string}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE)x)).+\|(.+)#` | `array{non-empty-string, '', '', non-empty-string}\|array{non-empty-string, 'a', 'b'}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr)x)).+\|(.+)#` | `array{0: non-empty-string, 1: '', 2: '', 3: non-empty-string, MARK?: 'markstr'}\|array{0: non-empty-string, 1: 'a', 2: 'b', MARK?: 'markstr'}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr))).+\|(.+)#` | `array{0: non-empty-string, 1: '', 2: '', 3: non-empty-string, MARK?: 'markstr'}\|array{0: non-empty-string, 1: 'a', 2: 'b', MARK?: 'markstr'}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT)x)).+\|(.+)#` | `array{non-empty-string, '', '', non-empty-string}\|array{non-empty-string, 'a', 'b'}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr)x)).+\|(.+)#` | `array{0: non-empty-string, 1: '', 2: '', 3: non-empty-string, MARK?: 'markstr'}\|array{0: non-empty-string, 1: 'a', 2: 'b', MARK?: 'markstr'}` | +| `#(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr))).+\|(.+)#` | `array{0: non-empty-string, 1: '', 2: '', 3: non-empty-string, MARK?: 'markstr'}\|array{0: non-empty-string, 1: 'a', 2: 'b', MARK?: 'markstr'}` | +| `#(abc)(def)(*scs:(1)(*scs:(2)de(*SKIP)x)).+\|(.+)#` | `array{non-empty-string, '', '', non-empty-string}\|array{non-empty-string, 'abc', 'def'}` | +| `#(abc)(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+\|(.+)#` | `array{non-empty-string, '', '', non-empty-string}\|array{non-empty-string, 'abc', 'def'}` | +| `#(?<=(abc))(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+\|(ef.+)#` | `array{non-falsy-string, '', '', non-falsy-string}\|array{non-falsy-string, 'abc', 'def'}` | +| `#(abc)(def)(*scs:(2)(?:(*scs:(1)abc(*SKIP:notfound)x\|abcd\|(abc)))).+#` | `array{0: non-falsy-string, 1: 'abc', 2: 'def', 3?: 'abc'}` | +| `#(abc)(def)(*MARK:markstr)(*scs:(2)(?:(*scs:(1)abc(*SKIP:markstr)x))).+\|(.+)#` | `array{0: non-empty-string, 1: '', 2: '', 3: non-empty-string, MARK?: 'markstr'}\|array{0: non-empty-string, 1: 'abc', 2: 'def', MARK?: 'markstr'}` | +| `~^([a-z]++)(?:((?6))\|((?7))\|((?8))\|(#))(?(DEFINE)((*scs:(1)abc(*PRUNE)d))((*scs:(1)abc(*COMMIT)e))((*scs:(1)abc(*SKIP)f)))~` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2: '', 3?: '', 4?: '', 5?: '#'}` | +| `#\b(\w++)(*scs:(1)^)#` | `array{non-empty-string, non-empty-string}` | +| `#(?:(?'A'a)\|(?b))(*scs:('A')b)c#J` | `array{0: 'ac'\|'bc', A: 'a', 1: 'a'}\|array{0: 'ac'\|'bc', A: 'b', 1: '', 2: 'b'}` | +| `#(xyz)(abc)(*scs:(-1)abc)(*scs:(-2)\1)#` | `array{'xyzabc', 'xyz', 'abc'}` | +| `~^([a-z]++)#(*scs:(1)a\|ab\|abc\|abcd\|abcde\|abcdef\|(abcdefg))\2~` | `array{0: non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: 'abcdefg'}` | +| `#^([a-z]++)(*scs:(1)(a+)(*THEN)b\|(a+)(*THEN)c\|(aa))#` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: lowercase-string, 3?: lowercase-string, 4?: 'aa'}` | +| `#^([a-z]++)(*scs:(1)((a+)(*THEN)b)\|(a+)(*THEN)c\|(aa))#` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: lowercase-string, 3?: lowercase-string, 4?: lowercase-string, 5?: 'aa'}` | +| `#^([a-z]++)(*scs:(1)((a+)(*THEN)b))?#` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: lowercase-string, 3?: lowercase-string&non-falsy-string}` | +| `#^([a-z]++)(*scs:(1)(abc\|(a+)(*THEN)b))?#` | `list{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: lowercase-string, 3?: lowercase-string&non-falsy-string}` | +| `~^(?:(.){20,30}#\|([a-z]++)(*scs:(1)(a+)(*THEN)b){20,30}#\|(.){20,30}!)~` | `array{non-falsy-string, '', '', '', non-empty-string}\|array{non-falsy-string, '', lowercase-string&non-falsy-string, lowercase-string&non-falsy-string}\|array{non-falsy-string, non-empty-string}` | +| `#(?:(abc)\|(?def)\|ghi)(*scs:(1,'PP').(.))#` | `array{0: 'abc'\|'def'\|'ghi', 1: '', PP: 'def', 2: 'def', 3?: non-empty-string}\|array{0: 'abc'\|'def'\|'ghi', 1?: ''\|'abc', PP?: '', 2?: '', 3?: non-empty-string}` | +| `#(?:(?abc)\|(?def)\|(ghi)\|(?'NN'jkl)\|mno)(*scs:('MM',3,).(.))#J` | `array{0: 'abc'\|'def'\|'ghi'\|'jkl'\|'mno', MM: '', 1: '', 2: '', 3: '', NN: 'jkl', 4: 'jkl', 5?: non-empty-string}\|array{0: 'abc'\|'def'\|'ghi'\|'jkl'\|'mno', MM: 'abc', 1: 'abc', 2?: '', 3?: '', NN?: '', 4?: '', 5?: non-empty-string}\|array{0: 'abc'\|'def'\|'ghi'\|'jkl'\|'mno', MM: 'def', 1: '', 2: 'def', 3?: '', NN?: '', 4?: '', 5?: non-empty-string}\|array{0: 'abc'\|'def'\|'ghi'\|'jkl'\|'mno', MM?: '', 1?: '', 2?: '', 3?: ''\|'ghi', NN?: '', 4?: '', 5?: non-empty-string}` | +| `#f(?:(*scs:(+1,+2)(?<=(.)))\|()){16}#` | `list{0: 'f', 1?: string, 2?: ''}` | +| `#(?a)(*scan_substring:(1,'AA',1,)a)b#` | `array{0: 'ab', AA: 'a', 1: 'a'}` | +| `#()()()(?<=ab(*scs:(1,2,3))cd)xyz#` | `array{'xyz', '', '', ''}` | +| `#()()()(?<=ab(*ACCEPT)(*scs:(1,2,3))cd\|efg)xyz#` | `array{string, string, string, string}` | +| `#(a)(*scs:(1)a(*ACCEPT))bbb#` | `array{string, string}` | +| `#(a)(b+)(*scs:(1)a(*ACCEPT))(\2)#` | `array{0: string, 1: string, 2: string, 3?: string}` | +| `#(a)(b)(c)(d)(*scs:(4,3,1,2,2,1,3,3,4,4)x)#` | `array{'abcd', 'a', 'b', 'c', 'd'}` | +| `#(?a)(?b)(?c)(d)(*scs:(2,3,1,1,,)abc)#J` | `array{0: 'abcd', n: 'a'\|'b'\|'c', 1: 'a', 2: 'b', 3: 'c', 4: 'd'}` | +| `#(?a)(?b)(?c)(d)(*scs:(2,1,1,,)abc)#J` | `array{0: 'abcd', n: 'a'\|'b'\|'c', 1: 'a', 2: 'b', 3: 'c', 4: 'd'}` | +| `#(?a)(?b)(?c)(d)(?e)(?f)(*scs:(,5,3,2,1,4,1,4,,6,,)abc)#J` | `array{0: 'abcdef', n: 'a'\|'b'\|'c', 1: 'a', 2: 'b', 3: 'c', 4: 'd', m: 'e'\|'f', 5: 'e', 6: 'f'}` | +| `#a(?C)b#` | `array{'ab'}` | +| `#(?[\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n&\n))))))))))))))])#` | `array{non-empty-string}` | +| `#(?[\d-[1]]).(?.))(?1('id'))(.)#` | `array{0: non-falsy-string, 1: non-falsy-string, 2: non-empty-string, id: non-empty-string, 3: non-empty-string, 4: non-empty-string}` | +| `#^(?1(3,2,2,3,2))(?1(3))(?(DEFINE)(a(.)b(.)c))#` | `array{non-falsy-string, '', non-empty-string, non-empty-string}\|array{non-falsy-string}` | +| `~(?1(2))#(?1(3))#(?1(4))#(?(DEFINE)((.)\2(.)\3(.)\4))~` | `array{non-falsy-string, '', non-empty-string, non-empty-string, non-empty-string}\|array{non-falsy-string}` | +| `~^(?1(1,2)){2,4}(?(DEFINE)((..)#))xx#~` | `array{non-falsy-string, non-falsy-string, non-falsy-string}\|array{non-falsy-string}` | +| `~^(?1(1,2)){2,}+(?(DEFINE)((..)#))!~` | `array{non-falsy-string, non-falsy-string, non-falsy-string}\|array{non-falsy-string}` | +| `#^(?1)(?(DEFINE)(<(?2(3,4))><\4\3>)((..)(..)))#` | `array{non-falsy-string}` | +| `~(?1)#(?(DEFINE)(a(.(*ACCEPT).)b))~` | `array{string}` | +| `#^(?>(?1()))!(?(DEFINE)((?..)(?..)))\|abcde#J` | `array{0: non-falsy-string, 1: '', n: non-falsy-string, 2: non-falsy-string, 3: non-falsy-string}\|array{non-falsy-string}` | +| `#<(?:[^<>]*?(?:(AB)[^<>]*\|)(?:\|(?R(1))))+>#` | `array{0: non-falsy-string, 1?: 'AB'}` | +| `~(?:(?1())#){4}(?(DEFINE)((?()\2)(?.{3})))$~` | `array{0: non-falsy-string, 1: '', prefix: non-falsy-string, 2: non-falsy-string}\|array{non-falsy-string}` | +| `~ # Define the routine "weekendday" which matches Saturday or Sunday, and\n # returns the Sat/Sun prefix as \k.\n (?(DEFINE)(?(?\|(?Sat)urday\|(?Sun)day)))\n # Call the routine. Matches "Saturday,Sat" or "Sunday,Sun".\n (?&weekendday()),\k ~x` | `array{0: non-falsy-string, weekendday: '', 1: '', short: 'Sat'\|'Sun', 2: 'Sat'\|'Sun'}\|array{non-falsy-string}` | +| `#()()()(?2(2,3,2,3,2))#` | `array{'', '', '', ''}` | +| `#(?(R)(Sat)urday\|(?R(1)),\1)#` | `array{0: non-empty-string, 1?: 'Sat'}` | +| `#(?(DEFINE)((Sat)urday))(?1(2)),\2#` | `array{non-falsy-string, '', 'Sat'}\|array{non-falsy-string}` | +| `#(?(DEFINE)((Sat)urday))(?-2(-1)),\2#` | `array{non-falsy-string, '', 'Sat'}\|array{non-falsy-string}` | +| `#(?+1(+2)),\2(?(DEFINE)((Sat)urday))#` | `array{non-falsy-string, '', 'Sat'}\|array{non-falsy-string}` | +| `#(?(DEFINE)(?(?Sat)urday))(?&fn('ret')),\k#` | `array{0: non-falsy-string, fn: '', 1: '', ret: 'Sat', 2: 'Sat'}\|array{non-falsy-string}` | +| `#(?(DEFINE)(?(?Sat)urday))(?P>fn()),\k#` | `array{0: non-falsy-string, fn: '', 1: '', ret: 'Sat', 2: 'Sat'}\|array{non-falsy-string}` | +| `#(?(DEFINE)((Sat)urday))(?1),\2#` | `array{non-falsy-string}` | +| `#(?(DEFINE)((Sat)(urday)))(?1(2,3)),\2,\3#` | `array{non-falsy-string, '', 'Sat', 'urday'}\|array{non-falsy-string}` | +| `#(?C1)A\K(?C2)B(?C3)C#` | `array{string}` | +| `#A\K(?C"after")BC#` | `array{string}` | +| `#A\K(?C1)B\K(?C2)C#` | `array{string}` | +| `#A(?:B\K(?C1)D\|(?C2)B)(?C3)C#` | `array{string}` | +| `#A\K(?(?C1)(?=B)B\|D)C#` | `array{string}` | +| `#(?(DEFINE)(?A\K(?C1)B))(?&x)(?C2)C#` | `array{string}` | +| `#A\K(?C1)B#` | `array{string}` | +| `#(?C1)A\K(?C2)B#` | `array{string}` | +| `#(?C1)A(?C2)B(?C3)C#` | `array{'ABC'}` | +| `#(?(?&NAME_PAT))\s+(?(?&ADDRESS_PAT))\n (?(DEFINE)\n (?[a-z]+)\n (?\d+)\n )#x` | `array{0: lowercase-string&non-falsy-string, NAME: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, ADDR: numeric-string, 2: numeric-string}` | +| `#^(?:((.)(?1)\2\|)\|((.)(?3)\4\|.))$#i` | `list{0: string, 1: string, 2?: string, 3?: non-empty-string, 4?: non-empty-string}` | +| `#(?:(?foo)\|(?bar))\k#J` | `array{0: non-falsy-string, n: 'bar', 1: '', 2: 'bar'}\|array{0: non-falsy-string, n: 'foo', 1: 'foo'}` | +| `#a[--0]z#` | `array{'a-z'\|'a.z'\|'a/z'\|'a0z'}` | +| `#[-----]#` | `array{'-'}` | +| `#[------]#` | `array{'-'}` | +| `#[!------]#` | `array{'!'\|'"'\|'#'\|'$'\|'%'\|'&'\|'\''\|'('\|')'\|'*'\|'+'\|','\|'-'}` | +| `#^[\pL](abc)(?1)#` | `array{non-falsy-string, 'abc'}` | +| `#(?(?=.*b)(?=.*b)\pL\|.*c)#` | `array{non-empty-string}` | +| `#^(*script_run:.{4})#u` | `array{non-falsy-string}` | +| `#^(*sr:.{4}\|..)#u` | `array{non-falsy-string}` | +| `#^(*atomic_script_run:.{4}\|..)#u` | `array{non-falsy-string}` | +| `#^(*asr:.*)#u` | `array{string}` | +| `#^(?>(*sr:.*))#u` | `array{string}` | +| `#^(*sr:.*)#u` | `array{string}` | +| `#^(*sr:\x{2e80}*)#u` | `array{string}` | +| `#^(*sr:\x{2e80}*)\x{2e80}#u` | `array{non-falsy-string}` | +| `#^(*sr:.*)Test#u` | `array{non-falsy-string}` | +| `#^(*sr:(.{2})){2}#u` | `array{non-falsy-string, non-falsy-string}` | +| `#^(*sr:\S*)#u` | `array{string}` | +| `#(?:]]X#` | `array{'X'}` | +| `#^(?1)\p{Nd}{3}(a)#` | `array{lowercase-string&non-falsy-string, 'a'}` | +| `#\p{Nd}{0,3}[\pL](*:abc)(?C1)xxx#` | `array{0: non-falsy-string, MARK?: 'abc'}` | +| `#(*CRLF)^X.+?Z#u` | `array{non-falsy-string}` | +| `#(*BSR_ANYCRLF)^X\R+?Z#u` | `array{non-falsy-string&uppercase-string}` | +| `#^(\p{Adlam}+)(\p{Bhaiksuki}+)(\p{Marchen}+)(\p{Newa}+)(\p{Osage}+)\n (\p{Tangut}+)(\p{Masaram_Gondi}+)(\p{Nushu}+)(\p{Soyombo}+)\n (\p{Zanabazar_Square}+)#ux` | `array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string}` | +| `#^(?:(\X)(?C))+$#u` | `array{non-empty-string, non-empty-string}` | +| `#^(\p{Dogra}+)(\p{Gunjala_Gondi}+)(\p{Hanifi_Rohingya}+)(\p{Makasar}+)\n (\p{Medefaidrin}+)(\p{Old_Sogdian}+)(\p{Sogdian}+)#ux` | `array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string}` | +| `#^(*sr:.*(*ACCEPT))#u` | `array{string}` | +| `#^(*sr:.{4})#u` | `array{non-falsy-string}` | +| `#s(?r)s(?-r)s(?r:s)s#iu` | `array{non-falsy-string}` | +| `#(.) (?r:\1)#iu` | `array{non-falsy-string, non-empty-string}` | +| `#(?:(?ss)\|(?kk)) \k#Jiu` | `array{0: non-falsy-string, A: non-falsy-string, 1: '', 2: non-falsy-string}\|array{0: non-falsy-string, A: non-falsy-string, 1: non-falsy-string}` | +| `#(?:(?s)\|(?k)) \k{3,}!#Jiu` | `array{0: non-falsy-string, A: non-falsy-string, 1: '', 2: non-falsy-string}\|array{0: non-falsy-string, A: non-falsy-string, 1: non-falsy-string}` | +| `#(*TURKISH_CASING)(.) \1#iu` | `array{non-falsy-string, non-empty-string}` | +| `#(*UCP)(*UTF)[[:alnum:]](?aP:[[:alnum:]])[[:alnum:]]#` | `array{non-falsy-string}` | +| `#1(abc\|xyz)2(?1)3#` | `array{'1abc2abc3'\|'1abc2xyz3'\|'1xyz2abc3'\|'1xyz2xyz3', 'abc'\|'xyz'}` | +| `#^(a*\w\|ab)=(?1)#` | `array{non-falsy-string, non-empty-string}` | +| `#^(?(?!abc)\d\d\|\w{3}:)$#` | `array{non-falsy-string}` | +| `#abc(?C1)xyz#` | `array{'abcxyz'}` | +| `#(?[[\p{Ll}]+[\p{Nd}]])#` | `array{non-empty-string}` | +| `#(?[[\p{Ll}Z]&[\p{Lu}a]])#` | `array{non-empty-string}` | +| `#(a(?1)b)#` | `array{non-falsy-string, non-falsy-string}` | +| `#(a(?1)+b)#` | `array{non-falsy-string, non-falsy-string}` | +| `#(?Pa)...(?P=a)bbb(?P>a)d#` | `array{0: non-falsy-string, a: 'a', 1: 'a'}` | +| `#abc(?C255)de(?C)f#` | `array{'abcdef'}` | +| `#abc(d\|e)(*THEN)x(123(*THEN)4\|567(b\|q)(*THEN)xx)#` | `array{0: 'abcdx1234'\|'abcdx567bxx'\|'abcdx567qxx'\|'abcex1234'\|'abcex567bxx'\|'abcex567qxx', 1: 'd'\|'e', 2: '1234'\|'567bxx'\|'567qxx', 3?: 'b'\|'q'}` | +| `~(?1)(?#?'){2}(a)~` | `array{'aaa', 'a'}` | +| `#(?1)()((((((\1++))\x85)+)\|))#` | `array{string, '', string, string, non-falsy-string, non-falsy-string, string, string}\|array{string, '', string, string}` | +| `#(?(1)(?1)){8,}+()#` | `array{string, ''}` | +| `#(?(1)\|a(?1)b){2,}+()#` | `array{string, ''}` | diff --git a/poc/witnesses/php-src.json b/poc/witnesses/php-src.json new file mode 100644 index 00000000000..696f28202db --- /dev/null +++ b/poc/witnesses/php-src.json @@ -0,0 +1,32 @@ +[ + { + "pattern": "/.*\\p{N}/", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "/\\G\\w/u", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + }, + { + "pattern": "~\\A.~", + "call": "match:null", + "subject": "MA==", + "engine": "YToxOntpOjA7czoxOiIwIjt9", + "reason": "falsy", + "key": 0, + "phplrt": "array{non-falsy-string}", + "phpregex": "array{non-empty-string}" + } +] diff --git a/poc/witnesses/php-src.md b/poc/witnesses/php-src.md new file mode 100644 index 00000000000..a78dafb6705 --- /dev/null +++ b/poc/witnesses/php-src.md @@ -0,0 +1,30 @@ +# php-src ext/pcre tests + +One witness for each of the 3 patterns whose inferred type the engine contradicts with the parser generated by phplrt. `php poc/bin/verify.php` replays them. + +- a value that can be '0' or '' is typed non-falsy or non-empty: 3 +- a value outside the type of its key: 0 +- a key the engine writes is typed absent: 0 +- a key the engine leaves out is typed present: 0 +- the subject is narrowed further than the match proves: 0 + +| pattern | call | subject | the engine writes | phplrt | PHPRegex | why | +|---|---|---|---|---|---|---| +| `/.*\p{N}/` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `/\G\w/u` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | +| `~\A.~` | preg_match() | `'0'` | `["0"]` | `array{non-falsy-string}` | `array{non-empty-string}` | key `0`: a value that can be '0' or '' is typed non-falsy or non-empty | + +## Patterns the parser generated by phplrt infers no shape for + +8 patterns, `preg_match()` without flags. + +| pattern | PHPRegex | +|---|---| +| `#\[(right)\](((?R)\|[^[]+?\|\[)*)\[/\1\]#siU` | `array{0: non-falsy-string, 1: non-falsy-string, 2: string, 3?: string}` | +| `/((?1)?z)/` | `array{non-falsy-string, non-falsy-string}` | +| `/(?J)(?:(?foo)\|(?bar))(?baz)/` | `array{0: 'barbaz'\|'foobaz', g: 'bar', 1: '', 2: 'bar', h: 'baz', 3: 'baz'}\|array{0: 'barbaz'\|'foobaz', g: 'foo', 1: 'foo', 2: '', h: 'baz', 3: 'baz'}` | +| `/(?P[abc])(*MARK:value)/` | `array{0: 'a'\|'b'\|'c', MARK: 'a'\|'b'\|'c'\|'value', 1: 'a'\|'b'\|'c'}` | +| `/(*NO_JIT)^(A{1,2}B)+$$/` | `array{non-falsy-string&uppercase-string, 'AAB'\|'AB'}` | +| `~(*NO_JIT)(a)*~` | `array{0: lowercase-string, 1?: 'a'}` | +| `/s(?r)s(?-r)s(?r:s)s/iu` | `array{non-falsy-string}` | +| `/(?[ac])(?\d)\|(?[b])/J` | `array{0: lowercase-string&non-falsy-string, chr: 'a'\|'c', 1: 'a'\|'c', num: numeric-string, 2: numeric-string}\|array{0: lowercase-string&non-falsy-string, chr: 'b', 1: '', num: '', 2: '', 3: 'b'}` | diff --git a/src/Analyser/ArgumentsHandler.php b/src/Analyser/ArgumentsHandler.php index 4e84ba02c59..dae56478e02 100644 --- a/src/Analyser/ArgumentsHandler.php +++ b/src/Analyser/ArgumentsHandler.php @@ -625,6 +625,15 @@ public function processArgs( } $argContext = $context->enterDeep(); if (!$arg->unpack && $arg->value instanceof Expr\Array_) { + if ($parameter !== null) { + // an extension can type the closures of an array literal by describing the whole array + $overwritingParameterType = $this->getParameterTypeFromParameterClosureTypeExtension($callLike, $calleeReflection, $parameter, $scopeToPass); + if ($overwritingParameterType !== null) { + $parameterType = $overwritingParameterType; + $parameterNativeType = $this->getParameterTypeFromParameterClosureTypeExtension($callLike, $calleeReflection, $parameter, $scopeToPass->doNotTreatPhpDocTypesAsCertain()) ?? $parameterNativeType; + $passedToTypeResolver = null; + } + } $argContext = $argContext->enterPassedToType($parameterType, $parameterNativeType); if ($passedToTypeResolver !== null) { $argContext = $argContext->enterPassedToTypeResolver($passedToTypeResolver); diff --git a/src/Analyser/ResultCache/ResultCacheManager.php b/src/Analyser/ResultCache/ResultCacheManager.php index f43162ea10c..614434fb80b 100644 --- a/src/Analyser/ResultCache/ResultCacheManager.php +++ b/src/Analyser/ResultCache/ResultCacheManager.php @@ -30,6 +30,7 @@ use PHPStan\Internal\ArrayHelper; use PHPStan\Internal\ComposerHelper; use PHPStan\Php\ComposerPhpVersionFactory; +use PHPStan\Php\PcreVersion; use PHPStan\Php\PhpVersion; use PHPStan\PhpDoc\StubFilesProvider; use PHPStan\Reflection\BetterReflection\SourceStubber\ExtensionVersionProvider; @@ -236,6 +237,7 @@ public function __construct( #[AutowiredParameter(ref: '%rootDir%')] private string $anchorDirectory, private PhpVersion $phpVersion, + private PcreVersion $pcreVersion, private ComposerPhpVersionFactory $composerPhpVersionFactory, private FileStatSignatures $fileStatSignatures, private ValueDependencyCollector $valueDependencyCollector, @@ -3084,6 +3086,9 @@ private function getMeta(array $allAnalysedFiles, ?array $projectConfigArray): a // below come from its require section, which is not in composer.lock's content hash either, // so a composer update need not move anything else in this metadata. 'phpVersionForAnalysis' => [$this->phpVersion->getVersionId(), $this->phpVersion->getSource()], + // regex shapes depend on the PCRE2 version, which can come from the pcreVersion + // parameter or from config.platform.lib-pcre in composer.json + 'pcreVersionForAnalysis' => [$this->pcreVersion->getVersionId(), $this->pcreVersion->getSource()], 'composerPhpVersionRange' => [ $composerMinPhpVersion !== null ? $composerMinPhpVersion->getVersionId() : null, $composerMaxPhpVersion !== null ? $composerMaxPhpVersion->getVersionId() : null, diff --git a/src/Command/IgnoredRegexValidator.php b/src/Command/IgnoredRegexValidator.php index cfcfb22524c..80884e94581 100644 --- a/src/Command/IgnoredRegexValidator.php +++ b/src/Command/IgnoredRegexValidator.php @@ -3,25 +3,23 @@ namespace PHPStan\Command; use Nette\Utils\Strings; -use Phplrt\Contracts\Parser\Exception\ParserExceptionInterface; -use Phplrt\Source\StringSource; +use PHPRegex\Parser\Exception\ExceptionInterface; +use PHPRegex\Parser\Node\AlternationNode; +use PHPRegex\Parser\Node\AnchorNode; +use PHPRegex\Parser\Node\NodeInterface; +use PHPRegex\Parser\Node\SequenceNode; use PHPStan\PhpDoc\TypeStringResolver; use PHPStan\PhpDocParser\Parser\ParserException; -use PHPStan\ShouldNotHappenException; -use PHPStan\Type\ObjectType; -use PHPStan\Type\Regex\Parser\RegexNode; -use PHPStan\Type\Regex\Parser\RegexParser; -use PHPStan\Type\Regex\Parser\RegexSyntaxException; +use PHPStan\Type\Regex\PHPRegexReader; use PHPStan\Type\VerbosityLevel; use function count; -use function strrpos; use function substr; final class IgnoredRegexValidator { public function __construct( - private RegexParser $parser, + private PHPRegexReader $reader, private TypeStringResolver $typeStringResolver, ) { @@ -29,27 +27,24 @@ public function __construct( public function validate(string $regex): IgnoredRegexValidatorResult { - $regex = $this->removeDelimiters($regex); + ['body' => $regex, 'modifiers' => $modifiers, 'delimiter' => $delimiter] = $this->reader->split($regex); try { - $ast = $this->parser->parse(StringSource::createFromString($regex)); - } catch (ParserExceptionInterface | RegexSyntaxException) { + $root = $this->reader->read($regex, $modifiers, $delimiter); + } catch (ExceptionInterface) { return new IgnoredRegexValidatorResult(ignoredTypes: [], anchorsInTheMiddle: false, allErrorsIgnored: false); } - if (!$ast instanceof RegexNode) { - throw new ShouldNotHappenException(); - } - if (Strings::match($regex, '~(?getIgnoredTypes($ast), - anchorsInTheMiddle: $this->hasAnchorsInTheMiddle($ast), + ignoredTypes: $this->getIgnoredTypes($root->pattern, $root->source ?? $regex), + anchorsInTheMiddle: $this->hasAnchorsInTheMiddle($root->pattern), allErrorsIgnored: false, ); } @@ -57,20 +52,15 @@ public function validate(string $regex): IgnoredRegexValidatorResult /** * @return array */ - private function getIgnoredTypes(RegexNode $ast): array + private function getIgnoredTypes(NodeInterface $ast, string $source): array { - $alternation = $ast->getChildren()[0] ?? null; - if ($alternation === null) { - return []; - } - - if ($alternation->getId() !== '#alternation') { + if (!$ast instanceof AlternationNode) { return []; } $types = []; - foreach ($alternation->getChildren() as $child) { - $text = $this->getText($child); + foreach ($ast->alternatives as $alternative) { + $text = $this->getText($alternative, $source); if ($text === null) { continue; } @@ -86,7 +76,7 @@ private function getIgnoredTypes(RegexNode $ast): array continue; } - if ($type instanceof ObjectType) { + if ($type->isObject()->yes()) { continue; } @@ -102,27 +92,15 @@ private function getIgnoredTypes(RegexNode $ast): array return $types; } - private function removeDelimiters(string $regex): string - { - $delimiter = substr($regex, 0, 1); - $endDelimiterPosition = strrpos($regex, $delimiter); - if ($endDelimiterPosition === false) { - throw new ShouldNotHappenException(); - } - - return substr($regex, 1, $endDelimiterPosition - 1); - } - - private function getText(RegexNode $treeNode): ?string + /** + * Returns the text of a branch as written in the pattern, escapes included. + */ + private function getText(NodeInterface $node, string $source): ?string { - if ($treeNode->getId() === 'token') { - return $treeNode->getValueValue(); - } - - if ($treeNode->getId() === '#concatenation') { + if ($node instanceof SequenceNode) { $fullText = ''; - foreach ($treeNode->getChildren() as $child) { - $text = $this->getText($child); + foreach ($node->children as $child) { + $text = $this->getText($child, $source); if ($text === null) { continue; } @@ -137,20 +115,26 @@ private function getText(RegexNode $treeNode): ?string return $fullText; } - return null; + if ($node->getChildren() !== []) { + return null; + } + + return substr($source, $node->getStartPosition(), $node->getEndPosition() - $node->getStartPosition()); } - private function hasAnchorsInTheMiddle(RegexNode $ast): bool + private function hasAnchorsInTheMiddle(NodeInterface $ast): bool { - if ($ast->getId() === 'token') { - return $ast->getValueToken() === 'anchor' && $ast->getValueValue() === '$'; + if ($ast instanceof AnchorNode) { + return $ast->value === '$'; } - $childrenCount = count($ast->getChildren()); - foreach ($ast->getChildren() as $i => $child) { + + $children = $ast instanceof SequenceNode ? $ast->children : $ast->getChildren(); + $childrenCount = count($children); + foreach ($children as $i => $child) { $has = $this->hasAnchorsInTheMiddle($child); if ( $has - && ($ast->getId() !== '#concatenation' || $i !== $childrenCount - 1) + && (!$ast instanceof SequenceNode || $i !== $childrenCount - 1) ) { return true; } diff --git a/src/DependencyInjection/ValidateIgnoredErrorsExtension.php b/src/DependencyInjection/ValidateIgnoredErrorsExtension.php index 4cfdb396799..0027faad722 100644 --- a/src/DependencyInjection/ValidateIgnoredErrorsExtension.php +++ b/src/DependencyInjection/ValidateIgnoredErrorsExtension.php @@ -12,6 +12,7 @@ use PHPStan\File\FileExcluder; use PHPStan\Php\ComposerPhpVersionFactory; use PHPStan\Php\ConfiguredPhpVersionRangeHelper; +use PHPStan\Php\PcreVersionFactory; use PHPStan\Php\PhpVersion; use PHPStan\PhpDoc\DirectTypeNodeResolverExtensionRegistryProvider; use PHPStan\PhpDoc\TypeNodeResolver; @@ -31,7 +32,8 @@ use PHPStan\Type\DirectTypeAliasResolverProvider; use PHPStan\Type\ObjectType; use PHPStan\Type\OperatorTypeSpecifyingExtensionRegistry; -use PHPStan\Type\Regex\Parser\RegexParser; +use PHPStan\Type\Regex\PHPRegexReader; +use PHPStan\Type\Regex\RegexExpressionHelper; use PHPStan\Type\Type; use PHPStan\Type\TypeAliasResolver; use PHPStan\Type\UnaryOperatorTypeSpecifyingExtensionRegistry; @@ -67,7 +69,6 @@ public function loadConfiguration(): void return; } - $parser = new RegexParser(); $reflectionProvider = new DummyReflectionProvider(); $reflectionProviderProvider = new DirectReflectionProviderProvider($reflectionProvider); @@ -89,10 +90,16 @@ public function loadConfiguration(): void try { $composerPhpVersionFactory = new ComposerPhpVersionFactory([]); $constantResolver = new ConstantResolver($reflectionProviderProvider, [], new ConfiguredPhpVersionRangeHelper(null, $composerPhpVersionFactory), container: null); + $initializerExprTypeResolver = new InitializerExprTypeResolver($constantResolver, $reflectionProviderProvider, new PhpVersion(PHP_VERSION_ID), new OperatorTypeSpecifyingExtensionRegistry(new DirectExtensionsCollection([])), new UnaryOperatorTypeSpecifyingExtensionRegistry(new DirectExtensionsCollection([])), new OversizedArrayBuilder(), true); $phpDocParserConfig = new ParserConfig([]); $ignoredRegexValidator = new IgnoredRegexValidator( - $parser, + // ignoreErrors patterns are matched by the running PHP + new PHPRegexReader( + new PhpVersion(PHP_VERSION_ID), + (new PcreVersionFactory(null, null))->create(), + new RegexExpressionHelper($initializerExprTypeResolver), + ), new TypeStringResolver( new Lexer($phpDocParserConfig), new TypeParser($phpDocParserConfig, new ConstExprParser($phpDocParserConfig)), @@ -122,7 +129,7 @@ public function resolveTypeAlias(string $aliasName, NameScope $nameScope): ?Type }), $constantResolver, - new InitializerExprTypeResolver($constantResolver, $reflectionProviderProvider, new PhpVersion(PHP_VERSION_ID), new OperatorTypeSpecifyingExtensionRegistry(new DirectExtensionsCollection([])), new UnaryOperatorTypeSpecifyingExtensionRegistry(new DirectExtensionsCollection([])), new OversizedArrayBuilder(), true), + $initializerExprTypeResolver, reportUnsafeArrayStringKeyCasting: null, ), ), diff --git a/src/Php/PcreVersion.php b/src/Php/PcreVersion.php new file mode 100644 index 00000000000..d37a90cbad3 --- /dev/null +++ b/src/Php/PcreVersion.php @@ -0,0 +1,87 @@ +source; + } + + public function getSourceLabel(): string + { + switch ($this->source) { + case self::SOURCE_RUNTIME: + return 'runtime'; + case self::SOURCE_CONFIG: + return 'config'; + case self::SOURCE_COMPOSER_PLATFORM_PCRE: + return 'config.platform.lib-pcre in composer.json'; + } + + return 'unknown'; + } + + public function getVersionId(): int + { + return $this->versionId; + } + + public function getVersionString(): string + { + return sprintf('%d.%02d', intdiv($this->versionId, 100), $this->versionId % 100); + } + +} diff --git a/src/Php/PcreVersionFactory.php b/src/Php/PcreVersionFactory.php new file mode 100644 index 00000000000..661d876594b --- /dev/null +++ b/src/Php/PcreVersionFactory.php @@ -0,0 +1,57 @@ +version !== null) { + try { + return PcreVersion::fromString($this->version, PcreVersion::SOURCE_CONFIG); + } catch (InvalidArgumentException $exception) { + throw new InvalidArgumentException(sprintf( + 'Invalid pcreVersion configuration: %s Fix the "pcreVersion" parameter, or remove it to read the running engine.', + $exception->getMessage(), + ), previous: $exception); + } + } + + if ($this->composerPcreVersion !== null) { + try { + return PcreVersion::fromString($this->composerPcreVersion, PcreVersion::SOURCE_COMPOSER_PLATFORM_PCRE); + } catch (InvalidArgumentException $exception) { + throw new InvalidArgumentException(sprintf( + 'Invalid composer platform package: %s Fix "config.platform.lib-pcre" in composer.json, or remove it to read the running engine.', + $exception->getMessage(), + ), previous: $exception); + } + } + + try { + return PcreVersion::fromRuntime(); + } catch (InvalidArgumentException) { + // unknown PCRE_VERSION format + return PcreVersion::fromString( + PcreTarget::bundledWith(PHP_VERSION_ID)->pcreVersion, + PcreVersion::SOURCE_RUNTIME, + ); + } + } + +} diff --git a/src/Php/PcreVersionFactoryFactory.php b/src/Php/PcreVersionFactoryFactory.php new file mode 100644 index 00000000000..d6f84558a56 --- /dev/null +++ b/src/Php/PcreVersionFactoryFactory.php @@ -0,0 +1,51 @@ +composerAutoloaderProjectPaths) > 0) { + $composerJsonPath = end($this->composerAutoloaderProjectPaths); + $composer = ComposerHelper::getComposerConfig($composerJsonPath); + if ($composer !== null) { + $platformVersion = $composer['config']['platform']['lib-pcre'] ?? null; + if (is_string($platformVersion)) { + $composerPcreVersion = $platformVersion; + } + } + } + + $version = null; + + if (is_string($this->pcreVersion)) { + $version = $this->pcreVersion; + } + + return new PcreVersionFactory($version, $composerPcreVersion); + } + +} diff --git a/src/Rules/Regexp/RegularExpressionPatternRule.php b/src/Rules/Regexp/RegularExpressionPatternRule.php index b3a1f98d5d7..da1ad49b124 100644 --- a/src/Rules/Regexp/RegularExpressionPatternRule.php +++ b/src/Rules/Regexp/RegularExpressionPatternRule.php @@ -7,9 +7,11 @@ use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; use PHPStan\Analyser\Scope; +use PHPStan\DependencyInjection\AutowiredParameter; use PHPStan\DependencyInjection\RegisteredRule; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; +use PHPStan\Type\Regex\PHPRegexReader; use PHPStan\Type\Regex\RegexExpressionHelper; use function in_array; use function sprintf; @@ -25,6 +27,9 @@ final class RegularExpressionPatternRule implements Rule public function __construct( private RegexExpressionHelper $regexExpressionHelper, + private PHPRegexReader $reader, + #[AutowiredParameter(ref: '%featureToggles.checkRegexPatternForAnalysedPhp%')] + private bool $checkRegexPatternForAnalysedPhp, ) { } @@ -128,7 +133,12 @@ private function validatePattern(string $pattern): ?string return $e->getMessage(); } - return null; + if (!$this->checkRegexPatternForAnalysedPhp) { + return null; + } + + // the pattern compiles on the running PHP, but can still be invalid for the analysed PHP version and its PCRE2 version + return $this->reader->refusalOfExpression($pattern); } } diff --git a/src/Type/Php/PregMatchDynamicReturnTypeExtension.php b/src/Type/Php/PregMatchDynamicReturnTypeExtension.php new file mode 100644 index 00000000000..0ea0ae1a6e0 --- /dev/null +++ b/src/Type/Php/PregMatchDynamicReturnTypeExtension.php @@ -0,0 +1,89 @@ +getName()), ['preg_match', 'preg_match_all'], true); + } + + public function getTypeFromFunctionCall(FunctionReflection $functionReflection, FuncCall $functionCall, Scope $scope): ?Type + { + $args = $functionCall->getArgs(); + if (count($args) < 2) { + return null; + } + + $constantStrings = $this->getPatternType($args[0]->value, $scope)->getConstantStrings(); + if (count($constantStrings) === 0) { + return null; + } + + // from an offset the search starts inside the subject, where a ^ no longer holds + $fromOffset = $this->regexShapeMatcher->matchesFromOffset($functionCall, $scope); + foreach ($constantStrings as $constantString) { + $info = $this->regexReader->info($constantString->getValue()); + if ($info === null) { + return null; + } + + if (!($fromOffset ? $info->alwaysMatchesFromAnyOffset : $info->alwaysMatches)) { + return null; + } + } + + $returnType = ParametersAcceptorSelector::selectFromArgs( + $scope, + $args, + $functionReflection->getVariants(), + $functionReflection->getNamedArgumentsVariants(), + )->getReturnType(); + + return TypeCombinator::remove($returnType, new ConstantIntegerType(0)); + } + + private function getPatternType(Expr $patternExpr, Scope $scope): Type + { + if ($patternExpr instanceof Expr\BinaryOp\Concat) { + return $this->regexExpressionHelper->resolvePatternConcat($patternExpr, $scope); + } + + return $scope->getType($patternExpr); + } + +} diff --git a/src/Type/Php/PregMatchParameterOutTypeExtension.php b/src/Type/Php/PregMatchParameterOutTypeExtension.php index 58135a1dcb0..fd8393f2881 100644 --- a/src/Type/Php/PregMatchParameterOutTypeExtension.php +++ b/src/Type/Php/PregMatchParameterOutTypeExtension.php @@ -51,7 +51,7 @@ public function getParameterOutTypeFromFunctionCall(FunctionReflection $function } if ($functionReflection->getName() === 'preg_match') { - $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope, $this->regexShapeMatcher->matchesFromOffset($funcCall, $scope)); if ($matchedType === null) { return null; } diff --git a/src/Type/Php/PregMatchTypeSpecifyingExtension.php b/src/Type/Php/PregMatchTypeSpecifyingExtension.php index 5f13ed60161..18f01e2b218 100644 --- a/src/Type/Php/PregMatchTypeSpecifyingExtension.php +++ b/src/Type/Php/PregMatchTypeSpecifyingExtension.php @@ -13,7 +13,11 @@ use PHPStan\DependencyInjection\AutowiredService; use PHPStan\Reflection\FunctionReflection; use PHPStan\TrinaryLogic; +use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\FunctionTypeSpecifyingExtension; +use PHPStan\Type\NeverType; +use PHPStan\Type\StringType; +use PHPStan\Type\TypeCombinator; use function in_array; use function strtolower; @@ -55,14 +59,25 @@ public function specifyTypes(FunctionReflection $functionReflection, FuncCall $n if ( $subjectArg !== null && $context->true() - && $scope->getType($subjectArg->value)->isString()->yes() + && !$scope->getType($subjectArg->value)->isString()->no() && !$this->isSubExprOfMatchesArg($subjectArg->value, $matchesArg !== null ? $matchesArg->value : null) ) { - $subjectType = $this->regexShapeMatcher->matchSubjectExpr($patternArg->value, $scope); - if ($subjectType !== null) { + $narrowType = $this->regexShapeMatcher->matchSubjectExpr($patternArg->value, $scope); + if ($narrowType !== null) { + // non-string parts of the subject are kept: an int subject is matched as its digits + $subjectType = $scope->getType($subjectArg->value); + $besideString = TypeCombinator::remove($subjectType, new StringType()); + // null is matched as '', so it is removed when the pattern cannot match '' + if (TypeCombinator::intersect($narrowType, new ConstantStringType('')) instanceof NeverType) { + $besideString = TypeCombinator::removeNull($besideString); + } + $narrowType = TypeCombinator::intersect( + $subjectType, + TypeCombinator::union($narrowType, $besideString), + ); $subjectTypes = $this->typeSpecifier->create( $subjectArg->value, - $subjectType, + $narrowType, $context, $scope, )->setRootExpr($node); @@ -87,7 +102,7 @@ public function specifyTypes(FunctionReflection $functionReflection, FuncCall $n } if ($functionReflection->getName() === 'preg_match') { - $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, $wasMatched, $scope); + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, $wasMatched, $scope, $this->regexShapeMatcher->matchesFromOffset($node, $scope)); } else { $matchedType = $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, $wasMatched, $scope); } diff --git a/src/Type/Php/PregReplaceCallbackArrayClosureTypeExtension.php b/src/Type/Php/PregReplaceCallbackArrayClosureTypeExtension.php new file mode 100644 index 00000000000..08a68a4bc0c --- /dev/null +++ b/src/Type/Php/PregReplaceCallbackArrayClosureTypeExtension.php @@ -0,0 +1,90 @@ + callback literal, + * each from the shape of its own pattern. + */ +#[AutowiredService] +final class PregReplaceCallbackArrayClosureTypeExtension implements FunctionParameterClosureTypeExtension +{ + + public function __construct( + private RegexArrayShapeMatcher $regexShapeMatcher, + ) + { + } + + public function isFunctionSupported(FunctionReflection $functionReflection, ParameterReflection $parameter): bool + { + return $functionReflection->getName() === 'preg_replace_callback_array' && $parameter->getName() === 'pattern'; + } + + public function getTypeFromFunctionCall(FunctionReflection $functionReflection, FuncCall $functionCall, ParameterReflection $parameter, Scope $scope): ?Type + { + $args = $functionCall->getArgs(); + $patternArg = $args[0] ?? null; + $flagsArg = $args[4] ?? null; + + if ($patternArg === null || !$patternArg->value instanceof Array_) { + return null; + } + + $flagsType = null; + if ($flagsArg !== null) { + $flagsType = $scope->getType($flagsArg->value); + } + + $builder = ConstantArrayTypeBuilder::createEmpty(); + $builder->disableClosureDegradation(); + foreach ($patternArg->value->items as $item) { + // a callback whose pattern is not known could get the shape of another one + if ($item->key === null || $item->unpack) { + return null; + } + + $keyType = $scope->getType($item->key); + if (count($keyType->getConstantStrings()) !== 1) { + return null; + } + + $matchesType = $this->regexShapeMatcher->matchExpr($item->key, $flagsType, TrinaryLogic::createYes(), $scope, true); + if ($matchesType === null) { + $builder->setOffsetValueType($keyType, $parameter->getType()->getIterableValueType()); + continue; + } + + $builder->setOffsetValueType($keyType, new ClosureType( + [ + new NativeParameterReflection('matches', false, $matchesType, PassedByReference::createNo(), false, null), + ], + new StringType(), + )); + } + + $arrayType = $builder->getArray(); + if (!$arrayType->isConstantArray()->yes()) { + return null; + } + + return $arrayType; + } + +} diff --git a/src/Type/Php/PregReplaceCallbackClosureTypeExtension.php b/src/Type/Php/PregReplaceCallbackClosureTypeExtension.php index 1be24ff645f..05550643268 100644 --- a/src/Type/Php/PregReplaceCallbackClosureTypeExtension.php +++ b/src/Type/Php/PregReplaceCallbackClosureTypeExtension.php @@ -46,7 +46,7 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection, $flagsType = $scope->getType($flagsArg->value); } - $matchesType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + $matchesType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope, true); if ($matchesType === null) { return null; } diff --git a/src/Type/Php/PregSplitDynamicReturnTypeExtension.php b/src/Type/Php/PregSplitDynamicReturnTypeExtension.php index fe582a38585..9bf9e823565 100644 --- a/src/Type/Php/PregSplitDynamicReturnTypeExtension.php +++ b/src/Type/Php/PregSplitDynamicReturnTypeExtension.php @@ -4,6 +4,7 @@ use Nette\Utils\RegexpException; use Nette\Utils\Strings; +use PhpParser\Node\Arg; use PhpParser\Node\Expr\FuncCall; use PHPStan\Analyser\Scope; use PHPStan\DependencyInjection\AutowiredService; @@ -104,52 +105,12 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection, } if ($this->isPatternOrSubjectEmpty($patternConstantTypes, $subjectConstantTypes)) { - if ($capturesOffset !== null - && $this->bitwiseFlagAnalyser->bitwiseOrContainsConstant($capturesOffset->value, $scope, 'PREG_SPLIT_NO_EMPTY')->yes()) { - $returnStringType = new IntersectionType([ - new StringType(), - new AccessoryNonEmptyStringType(), - ]); - } else { - $returnStringType = new StringType(); - } - - $arrayTypeBuilder = ConstantArrayTypeBuilder::createEmpty(); - $arrayTypeBuilder->setOffsetValueType( - new ConstantIntegerType(0), - $returnStringType, - ); - $arrayTypeBuilder->setOffsetValueType( - new ConstantIntegerType(1), - IntegerRangeType::fromInterval(0, null), - ); - $capturedArrayType = $arrayTypeBuilder->getArray(); - - $returnInternalValueType = $returnStringType; - if ($capturesOffset !== null) { - $flagState = $this->bitwiseFlagAnalyser->bitwiseOrContainsConstant($capturesOffset->value, $scope, 'PREG_SPLIT_OFFSET_CAPTURE'); - if ($flagState->yes()) { - $capturedArrayListType = new IntersectionType([ - new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $capturedArrayType), - new AccessoryArrayListType(), - ]); - - if ($subjectType->isNonEmptyString()->yes()) { - $capturedArrayListType = TypeCombinator::intersect($capturedArrayListType, new NonEmptyArrayType()); - } - return new UnionType([$capturedArrayListType, new ConstantBooleanType(false)]); - } - if ($flagState->maybe()) { - $returnInternalValueType = new UnionType([new StringType(), $capturedArrayType]); - } - } - - $returnListType = new IntersectionType([new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $returnInternalValueType), new AccessoryArrayListType()]); - if ($subjectType->isNonEmptyString()->yes()) { - $returnListType = new IntersectionType([new NonEmptyArrayType(), ...$returnListType->getTypes()]); - } + return $this->genericReturnType($subjectType, $capturesOffset, $scope); + } - return new UnionType([$returnListType, new ConstantBooleanType(false)]); + // limit or flags is not a constant: the result is still a list, not only false + if ($limits === [] || $flags === []) { + return $this->genericReturnType($subjectType, $capturesOffset, $scope); } $resultTypes = []; @@ -170,6 +131,57 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection, return TypeCombinator::union(...$resultTypes); } + private function genericReturnType(Type $subjectType, ?Arg $capturesOffset, Scope $scope): Type + { + if ($capturesOffset !== null + && $this->bitwiseFlagAnalyser->bitwiseOrContainsConstant($capturesOffset->value, $scope, 'PREG_SPLIT_NO_EMPTY')->yes()) { + $returnStringType = new IntersectionType([ + new StringType(), + new AccessoryNonEmptyStringType(), + ]); + } else { + $returnStringType = new StringType(); + } + + $arrayTypeBuilder = ConstantArrayTypeBuilder::createEmpty(); + $arrayTypeBuilder->setOffsetValueType( + new ConstantIntegerType(0), + $returnStringType, + ); + $arrayTypeBuilder->setOffsetValueType( + new ConstantIntegerType(1), + IntegerRangeType::fromInterval(0, null), + ); + $capturedArrayType = $arrayTypeBuilder->getArray(); + + $returnInternalValueType = $returnStringType; + if ($capturesOffset !== null) { + $flagState = $this->bitwiseFlagAnalyser->bitwiseOrContainsConstant($capturesOffset->value, $scope, 'PREG_SPLIT_OFFSET_CAPTURE'); + if ($flagState->yes()) { + $capturedArrayListType = new IntersectionType([ + new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $capturedArrayType), + new AccessoryArrayListType(), + ]); + + if ($subjectType->isNonEmptyString()->yes()) { + $capturedArrayListType = TypeCombinator::intersect($capturedArrayListType, new NonEmptyArrayType()); + } + + return new UnionType([$capturedArrayListType, new ConstantBooleanType(false)]); + } + if ($flagState->maybe()) { + $returnInternalValueType = new UnionType([new StringType(), $capturedArrayType]); + } + } + + $returnListType = new IntersectionType([new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $returnInternalValueType), new AccessoryArrayListType()]); + if ($subjectType->isNonEmptyString()->yes()) { + $returnListType = new IntersectionType([new NonEmptyArrayType(), ...$returnListType->getTypes()]); + } + + return new UnionType([$returnListType, new ConstantBooleanType(false)]); + } + /** * @param ConstantStringType[] $patternConstantArray * @param ConstantStringType[] $subjectConstantArray diff --git a/src/Type/Php/RegexArrayShapeMatcher.php b/src/Type/Php/RegexArrayShapeMatcher.php index 6d5bfbab630..d379c42841a 100644 --- a/src/Type/Php/RegexArrayShapeMatcher.php +++ b/src/Type/Php/RegexArrayShapeMatcher.php @@ -3,6 +3,7 @@ namespace PHPStan\Type\Php; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\FuncCall; use PHPStan\Analyser\Scope; use PHPStan\DependencyInjection\AutowiredService; use PHPStan\Php\PhpVersion; @@ -24,6 +25,7 @@ use PHPStan\Type\StringType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; +use function array_reverse; use function count; use function in_array; use function is_string; @@ -57,9 +59,26 @@ public function matchAllExpr(Expr $patternExpr, ?Type $flagsType, TrinaryLogic $ return $this->matchPatternType($this->getPatternType($patternExpr, $scope), $flagsType, $wasMatched, true); } - public function matchExpr(Expr $patternExpr, ?Type $flagsType, TrinaryLogic $wasMatched, Scope $scope): ?Type + /** + * Whether a preg_match() call starts its match from an offset: the match is then one of a scan, + * and a zero-width first branch like ^ no longer wins it. + */ + public function matchesFromOffset(FuncCall $call, Scope $scope): bool + { + $offsetArg = $call->getArgs()[4] ?? null; + if ($offsetArg === null) { + return false; + } + + return !(new ConstantIntegerType(0))->isSuperTypeOf($scope->getType($offsetArg->value))->yes(); + } + + /** + * @param bool $inScan the match is one of a scan, e.g. a preg_replace_callback() callback or a preg_match() from an offset + */ + public function matchExpr(Expr $patternExpr, ?Type $flagsType, TrinaryLogic $wasMatched, Scope $scope, bool $inScan = false): ?Type { - return $this->matchPatternType($this->getPatternType($patternExpr, $scope), $flagsType, $wasMatched, false); + return $this->matchPatternType($this->getPatternType($patternExpr, $scope), $flagsType, $wasMatched, false, $inScan); } public function matchSubjectExpr(Expr $patternExpr, Scope $scope): ?Type @@ -77,13 +96,13 @@ public function matchSubjectExpr(Expr $patternExpr, Scope $scope): ?Type return null; } - $subjectTypes[] = $astWalkResult->getSubjectBaseType(); + $subjectTypes[] = $astWalkResult->getSubjectNarrowType(); } return TypeCombinator::union(...$subjectTypes); } - private function matchPatternType(Type $patternType, ?Type $flagsType, TrinaryLogic $wasMatched, bool $matchesAll): ?Type + private function matchPatternType(Type $patternType, ?Type $flagsType, TrinaryLogic $wasMatched, bool $matchesAll, bool $inScan = false): ?Type { if ($wasMatched->no()) { return ConstantArrayTypeBuilder::createEmpty()->getArray(); @@ -111,7 +130,7 @@ private function matchPatternType(Type $patternType, ?Type $flagsType, TrinaryLo $matchedTypes = []; foreach ($constantStrings as $constantString) { - $matched = $this->matchRegex($constantString->getValue(), $flags, $wasMatched, $matchesAll); + $matched = $this->matchRegex($constantString->getValue(), $flags, $wasMatched, $matchesAll, $inScan); if ($matched === null) { return null; } @@ -129,18 +148,35 @@ private function matchPatternType(Type $patternType, ?Type $flagsType, TrinaryLo /** * @param int-mask|null $flags */ - private function matchRegex(string $regex, ?int $flags, TrinaryLogic $wasMatched, bool $matchesAll): ?Type + private function matchRegex(string $regex, ?int $flags, TrinaryLogic $wasMatched, bool $matchesAll, bool $inScan): ?Type { + if ($matchesAll && $this->containsSetOrder($flags ?? 0)) { + // each set is one match of a scan, read as preg_match() reads one: the arms of an alternation + // and the cases the pattern splits into stay apart instead of being joined into one shape. + // preg_match_all() keeps the trailing unmatched groups as null on every PHP version. + $setType = $this->matchRegex($regex, ($flags ?? 0) | self::PREG_UNMATCHED_AS_NULL_ON_72_73, TrinaryLogic::createYes(), false, true); + if ($setType === null) { + return null; + } + + $accessoryTypes = [new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $setType), new AccessoryArrayListType()]; + if ($wasMatched->yes()) { + $accessoryTypes[] = new NonEmptyArrayType(); + } + + return new IntersectionType($accessoryTypes); + } + $astWalkResult = $this->regexGroupParser->parseGroups($regex); if ($astWalkResult === null) { // regex could not be parsed by RegexParser return null; } - $groupList = $astWalkResult->getCapturingGroups(); + $groupList = $this->resolveNeverMatchedGroups($astWalkResult->getCapturingGroups(), $flags ?? 0, $matchesAll); $markVerbs = $astWalkResult->getMarkVerbs(); $subjectBaseType = new StringType(); if ($wasMatched->yes()) { - $subjectBaseType = $astWalkResult->getSubjectBaseType(); + $subjectBaseType = $inScan ? $astWalkResult->getScanBaseType() : $astWalkResult->getSubjectBaseType(); } $regexGroupList = new RegexGroupList($groupList); @@ -149,30 +185,6 @@ private function matchRegex(string $regex, ?int $flags, TrinaryLogic $wasMatched $onlyTopLevelAlternation = $regexGroupList->getOnlyTopLevelAlternation(); $flags ??= 0; - if ($regexGroupList->hasDuplicateNamesOutsideOfAlternationBranches( - !$matchesAll && $onlyOptionalTopLevelGroup === null && !$this->containsUnmatchedAsNull($flags, $matchesAll) - ? $onlyTopLevelAlternation - : null, - )) { - // which of the groups sharing a name sets the named offset is only modelled - // for groups in different branches of a top level alternation - return null; - } - - if ( - $regexGroupList->hasGroupResettingGroupCounter() - && ( - $matchesAll - || $onlyOptionalTopLevelGroup !== null - || $onlyTopLevelAlternation === null - || $this->containsUnmatchedAsNull($flags, $matchesAll) - ) - ) { - // groups in a branch reset (?|...) share offsets, which is only modelled - // when its alternation is the only top level alternation - return null; - } - if ( !$matchesAll && $wasMatched->yes() @@ -266,6 +278,37 @@ private function matchRegex(string $regex, ?int $flags, TrinaryLogic $wasMatched return TypeCombinator::union(...$combiTypes); } + if (!$matchesAll && $astWalkResult->getCases() !== []) { + // the union of the cases the pattern splits into, e.g. an optional group with nested groups + // is either set with all of them or skipped with all of them; a failed match returned above + $combiTypes = []; + foreach ($astWalkResult->getCases() as $participations) { + $caseGroups = []; + foreach ($astWalkResult->getCapturingGroups() as $id => $group) { + $set = $participations[$group->getId()] ?? null; + if ($set === true) { + $group = $group->forceNonOptional(); + } elseif ($set === false) { + $group = $group->forceNeverMatched(); + } + $caseGroups[$id] = $group; + } + $caseList = new RegexGroupList($this->resolveNeverMatchedGroups($caseGroups, $flags, $matchesAll)); + + $combiTypes[] = $this->buildArrayType( + $subjectBaseType, + $caseList, + $wasMatched, + $caseList->countTrailingOptionals(), + $flags, + $markVerbs, + $matchesAll, + ); + } + + return TypeCombinator::union(...$combiTypes); + } + // the general case, which should work in all cases but does not yield the most // precise result possible in some cases return $this->buildArrayType( @@ -303,20 +346,38 @@ private function buildArrayType( ); $countGroups = count($captureGroups); + $composed = []; + $names = []; $i = 0; foreach ($captureGroups as $captureGroup) { $isTrailingOptional = $i >= $countGroups - $trailingOptionals; $isLastGroup = $i === $countGroups - 1; $groupValueType = $this->createGroupValueType($captureGroup, $wasMatched, $flags, $isTrailingOptional, $isLastGroup, $matchesAll); $optional = $this->isGroupOptional($captureGroup, $wasMatched, $flags, $isTrailingOptional, $matchesAll); + $composed[$i] = [$captureGroup, $groupValueType, $optional]; if ($captureGroup->isNamed()) { $forceList = false; + // a group that may be unset writes the name only when it is set + $setValueType = $captureGroup->isOptional() && !$captureGroup->isNeverMatched() + ? $this->createGroupValueType($captureGroup->forceNonOptional(), $wasMatched, $flags, false, $isLastGroup, $matchesAll) + : $groupValueType; + $names[$captureGroup->getName()][] = [$captureGroup, $groupValueType, $setValueType, $optional]; + } + $i++; + } + $resolvedNames = []; + foreach ($names as $name => $groups) { + $resolvedNames[$name] = $this->resolveNamedKey($groups, $matchesAll && $this->containsPatternOrder($flags)); + } + foreach ($composed as $i => [$captureGroup, $groupValueType, $optional]) { + if ($captureGroup->isNamed()) { + [$nameType, $nameOptional] = $resolvedNames[$captureGroup->getName()]; $builder->setOffsetValueType( $this->getKeyType($captureGroup->getName()), - $groupValueType, - $optional, + $nameType, + $nameOptional, ); } @@ -325,8 +386,6 @@ private function buildArrayType( $groupValueType, $optional, ); - - $i++; } if (count($markVerbs) > 0) { @@ -366,6 +425,87 @@ private function buildArrayType( return $builder->getArray(); } + /** + * Several groups can share a name (J modifier, or a branch reset). PHP writes the name + * for each group that is set, in order, and once with the unmatched value when none is: + * the key holds the value of the last group set, and is there whenever one of the groups + * has its own key. In /(?:(?x)|(?y))(?:(?z))?/J on 'y', group 1 is unset but not + * trailing, so 'a' is '' until group 3 writes it. + * + * With PREG_PATTERN_ORDER the name holds the list of the last group of the name, set or not. + * + * @param list $groups each group of the name, its value type, its value type when it is set, and whether its key is optional, in order + * @return array{Type, bool} + */ + private function resolveNamedKey(array $groups, bool $lastGroupWins): array + { + if ($lastGroupWins) { + [, $type, , $optional] = $groups[count($groups) - 1]; + + return [$type, $optional]; + } + + // a group that is always set hides every group before it, set or not + $lastAlwaysSet = null; + foreach ($groups as $i => [$group]) { + if ($group->isNeverMatched() || $group->isOptional()) { + continue; + } + + $lastAlwaysSet = $i; + } + + $types = []; + $keyOptional = true; + foreach ($groups as $i => [$group, $type, $setType, $optional]) { + $keyOptional = $keyOptional && $optional; + if ($lastAlwaysSet === null) { + // the first group writes the unmatched value, a later one its own when set + $types[] = $type; + continue; + } + + if ($i < $lastAlwaysSet || $group->isNeverMatched()) { + continue; + } + + // after the last group always set, only a group that is set writes the name again + $types[] = $i === $lastAlwaysSet ? $type : $setType; + } + + return [TypeCombinator::union(...$types), $keyOptional]; + } + + /** + * A group the engine never sets holds the unmatched value, and has no key + * when no group after it can be set: /(?(DEFINE)(a))b/ writes ['b']. + * + * @param array $groupList + * @return array + */ + private function resolveNeverMatchedGroups(array $groupList, int $flags, bool $matchesAll): array + { + $keyAlwaysWritten = $this->containsUnmatchedAsNull($flags, $matchesAll) + || ($matchesAll && $this->containsPatternOrder($flags)); + + $trailing = true; + foreach (array_reverse($groupList, true) as $id => $group) { + if (!$group->isNeverMatched()) { + $trailing = false; + continue; + } + + if ($trailing && !$keyAlwaysWritten) { + unset($groupList[$id]); + continue; + } + + $groupList[$id] = $group->forceType($this->getUnmatchedGroupType($flags)); + } + + return $groupList; + } + private function isSubjectOptional(TrinaryLogic $wasMatched, bool $matchesAll): bool { if ($matchesAll) { @@ -380,10 +520,11 @@ private function isSubjectOptional(TrinaryLogic $wasMatched, bool $matchesAll): */ private function createSubjectValueType(Type $baseType, int $flags, bool $matchesAll, TrinaryLogic $wasMatched): Type { - $subjectValueType = TypeCombinator::removeNull($this->getValueType($baseType, $flags, $matchesAll)); + // $matches[0] is always set on a match, its offset is never -1 + $subjectValueType = $this->wrapOffset($baseType, $flags, false); if ($matchesAll) { - $subjectValueType = TypeCombinator::removeNull($this->getValueType(new StringType(), $flags, $matchesAll)); + $subjectValueType = $this->wrapOffset(new StringType(), $flags, false); if ($this->containsPatternOrder($flags)) { $accessoryTypes = [ @@ -428,6 +569,8 @@ private function isGroupOptional(RegexCapturingGroup $captureGroup, TrinaryLogic private function createGroupValueType(RegexCapturingGroup $captureGroup, TrinaryLogic $wasMatched, int $flags, bool $isTrailingOptional, bool $isLastGroup, bool $matchesAll): Type { + $unmatchedAsNull = $this->containsUnmatchedAsNull($flags, $matchesAll); + if ($matchesAll) { if ( ( @@ -444,20 +587,19 @@ private function createGroupValueType(RegexCapturingGroup $captureGroup, Trinary && !$isLastGroup ) ) { - $groupValueType = $this->getValueType( - TypeCombinator::union($captureGroup->getType(), new ConstantStringType('')), - $flags, - $matchesAll, - ); - $groupValueType = TypeCombinator::removeNull($groupValueType); + $valueType = TypeCombinator::union($captureGroup->getType(), new ConstantStringType('')); + $offsetMayBeMinusOne = true; } else { - $groupValueType = $this->getValueType($captureGroup->getType(), $flags, $matchesAll); + $valueType = $this->addUnmatchedNull($captureGroup->getType(), $flags, $matchesAll); + $offsetMayBeMinusOne = $this->canBeUnmatchedAndPresent($captureGroup, $flags, $matchesAll); } if (!$isTrailingOptional && $this->containsUnmatchedAsNull($flags, $matchesAll) && !$captureGroup->isOptional()) { - $groupValueType = TypeCombinator::removeNull($groupValueType); + $valueType = TypeCombinator::removeNull($valueType); } + $groupValueType = $this->wrapOffset($valueType, $flags, $unmatchedAsNull ? TypeCombinator::containsNull($valueType) : $offsetMayBeMinusOne); + if ($this->containsPatternOrder($flags)) { $accessoryTypes = [new ArrayType(IntegerRangeType::createAllGreaterThanOrEqualTo(0), $groupValueType), new AccessoryArrayListType()]; if ($wasMatched->yes()) { @@ -471,22 +613,21 @@ private function createGroupValueType(RegexCapturingGroup $captureGroup, Trinary } if (!$isLastGroup && !$this->containsUnmatchedAsNull($flags, $matchesAll) && $captureGroup->isOptional()) { - $groupValueType = $this->getValueType( - TypeCombinator::union($captureGroup->getType(), $this->getUnmatchedGroupType($flags)), - $flags, - $matchesAll, - ); + $valueType = TypeCombinator::union($captureGroup->getType(), $this->getUnmatchedGroupType($flags)); + $offsetMayBeMinusOne = true; } else { - $groupValueType = $this->getValueType($captureGroup->getType(), $flags, $matchesAll); + $valueType = $this->addUnmatchedNull($captureGroup->getType(), $flags, $matchesAll); + $offsetMayBeMinusOne = $this->canBeUnmatchedAndPresent($captureGroup, $flags, $matchesAll); } if ($wasMatched->yes()) { if (!$isTrailingOptional && $this->containsUnmatchedAsNull($flags, $matchesAll) && !$captureGroup->isOptional()) { - $groupValueType = TypeCombinator::removeNull($groupValueType); + $valueType = TypeCombinator::removeNull($valueType); } } - return $groupValueType; + // with PREG_UNMATCHED_AS_NULL an unmatched group is [null, -1] + return $this->wrapOffset($valueType, $flags, $unmatchedAsNull ? TypeCombinator::containsNull($valueType) : $offsetMayBeMinusOne); } private function containsOffsetCapture(int $flags): bool @@ -540,32 +681,43 @@ private function getKeyType(int|string $key): Type return new ConstantIntegerType($key); } - private function getValueType(Type $baseType, int $flags, bool $matchesAll): Type + private function canBeUnmatchedAndPresent(RegexCapturingGroup $captureGroup, int $flags, bool $matchesAll): bool { - $valueType = $baseType; + // a group the engine never sets, or one in a branch the arm does not take, keeps its key + // with the unmatched value and -1 as offset: its type is that value and nothing else + if ($captureGroup->isNeverMatched() || $captureGroup->getType()->equals($this->getUnmatchedGroupType($flags))) { + return true; + } + + return $this->containsUnmatchedAsNull($flags, $matchesAll) && $captureGroup->isOptional(); + } - // unmatched groups return -1 as offset - $offsetType = IntegerRangeType::fromInterval(-1, null); + private function addUnmatchedNull(Type $valueType, int $flags, bool $matchesAll): Type + { if ($this->containsUnmatchedAsNull($flags, $matchesAll)) { - $valueType = TypeCombinator::addNull($valueType); + return TypeCombinator::addNull($valueType); } - if ($this->containsOffsetCapture($flags)) { - $builder = ConstantArrayTypeBuilder::createEmpty(); - - $builder->setOffsetValueType( - new ConstantIntegerType(0), - $valueType, - ); - $builder->setOffsetValueType( - new ConstantIntegerType(1), - $offsetType, - ); + return $valueType; + } - return $builder->getArray(); + /** + * With PREG_OFFSET_CAPTURE, the value and its offset; an unmatched group returns -1 as offset. + */ + private function wrapOffset(Type $valueType, int $flags, bool $offsetMayBeMinusOne): Type + { + if (!$this->containsOffsetCapture($flags)) { + return $valueType; } - return $valueType; + $builder = ConstantArrayTypeBuilder::createEmpty(); + $builder->setOffsetValueType(new ConstantIntegerType(0), $valueType); + $builder->setOffsetValueType( + new ConstantIntegerType(1), + $offsetMayBeMinusOne ? IntegerRangeType::fromInterval(-1, null) : IntegerRangeType::fromInterval(0, null), + ); + + return $builder->getArray(); } private function getPatternType(Expr $patternExpr, Scope $scope): Type diff --git a/src/Type/Php/ReplaceFunctionsDynamicReturnTypeExtension.php b/src/Type/Php/ReplaceFunctionsDynamicReturnTypeExtension.php index 996f8dfe195..f62bed81a06 100644 --- a/src/Type/Php/ReplaceFunctionsDynamicReturnTypeExtension.php +++ b/src/Type/Php/ReplaceFunctionsDynamicReturnTypeExtension.php @@ -2,17 +2,21 @@ namespace PHPStan\Type\Php; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\FuncCall; use PHPStan\Analyser\Scope; use PHPStan\DependencyInjection\AutowiredService; use PHPStan\Reflection\FunctionReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\ShouldNotHappenException; +use PHPStan\TrinaryLogic; use PHPStan\Type\Accessory\AccessoryLowercaseStringType; use PHPStan\Type\Accessory\AccessoryNonEmptyStringType; use PHPStan\Type\Accessory\AccessoryNonFalsyStringType; use PHPStan\Type\Accessory\AccessoryUppercaseStringType; use PHPStan\Type\ArrayType; +use PHPStan\Type\Constant\ConstantIntegerType; +use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\DynamicFunctionReturnTypeExtension; use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; @@ -23,6 +27,10 @@ use function array_key_exists; use function count; use function in_array; +use function preg_match_all; +use function strlen; +use const PREG_SET_ORDER; +use const PREG_UNMATCHED_AS_NULL; #[AutowiredService] final class ReplaceFunctionsDynamicReturnTypeExtension implements DynamicFunctionReturnTypeExtension @@ -46,6 +54,12 @@ final class ReplaceFunctionsDynamicReturnTypeExtension implements DynamicFunctio 'strtr' => 2, ]; + public function __construct( + private RegexArrayShapeMatcher $regexShapeMatcher, + ) + { + } + public function isFunctionSupported(FunctionReflection $functionReflection): bool { return array_key_exists($functionReflection->getName(), self::FUNCTIONS_SUBJECT_POSITION); @@ -108,6 +122,11 @@ private function getPreliminarilyResolvedTypeFromFunctionCall( } } + $substitutedReplaceType = null; + if ($replaceArgumentType !== null && $functionReflection->getName() === 'preg_replace') { + $substitutedReplaceType = $this->getPregReplacementType($args[0]->value, $replaceArgumentType, $scope); + } + $result = []; if ($subjectArgumentType->isString()->yes()) { @@ -116,7 +135,7 @@ private function getPreliminarilyResolvedTypeFromFunctionCall( $stringArgumentType = TypeCombinator::intersect(new StringType(), $subjectArgumentType); } if ($stringArgumentType->isString()->yes()) { - $result[] = $this->getReplaceType($stringArgumentType, $replaceArgumentType); + $result[] = $this->getReplaceType($stringArgumentType, $replaceArgumentType, $substitutedReplaceType); } if ($subjectArgumentType->isArray()->yes()) { @@ -132,7 +151,7 @@ private function getPreliminarilyResolvedTypeFromFunctionCall( ); $mapped = $arrayArgumentType->mapValueType( - fn (Type $value): Type => $this->getReplaceType($value, $replaceArgumentType), + fn (Type $value): Type => $this->getReplaceType($value, $replaceArgumentType, $substitutedReplaceType), ); if ($keyShouldBeOptional) { $mapped = $mapped->makeAllArrayKeysOptional(); @@ -147,16 +166,18 @@ private function getPreliminarilyResolvedTypeFromFunctionCall( private function getReplaceType( Type $subjectArgumentType, ?Type $replaceArgumentType, + ?Type $substitutedReplaceType, ): Type { if ($replaceArgumentType === null) { return new StringType(); } + $substitutedReplaceType ??= $replaceArgumentType; $accessories = []; - if ($subjectArgumentType->isNonFalsyString()->yes() && $replaceArgumentType->isNonFalsyString()->yes()) { + if ($subjectArgumentType->isNonFalsyString()->yes() && $substitutedReplaceType->isNonFalsyString()->yes()) { $accessories[] = new AccessoryNonFalsyStringType(); - } elseif ($subjectArgumentType->isNonEmptyString()->yes() && $replaceArgumentType->isNonEmptyString()->yes()) { + } elseif ($subjectArgumentType->isNonEmptyString()->yes() && $substitutedReplaceType->isNonEmptyString()->yes()) { $accessories[] = new AccessoryNonEmptyStringType(); } @@ -176,6 +197,77 @@ private function getReplaceType( return new StringType(); } + /** + * The text a preg_replace() replacement writes once its references to the groups are + * substituted - a reference to a group that can be unset or empty writes nothing. + */ + private function getPregReplacementType(Expr $patternExpr, Type $replaceType, Scope $scope): Type + { + $constantStrings = $replaceType->getConstantStrings(); + if (count($constantStrings) === 0) { + return new StringType(); + } + + $matchesType = $this->regexShapeMatcher->matchExpr($patternExpr, null, TrinaryLogic::createYes(), $scope, true); + $types = []; + foreach ($constantStrings as $constantString) { + preg_match_all('/\$\{(\d\d?)\}|[\\\\$](\d\d?)|\\\\([\\\\$])|(.)/s', $constantString->getValue(), $tokens, PREG_SET_ORDER | PREG_UNMATCHED_AS_NULL); + $text = ''; + $referenceTypes = []; + foreach ($tokens as [, $bracedReference, $reference, $escaped, $char]) { + if ($bracedReference === null && $reference === null) { + $text .= $escaped ?? $char; + continue; + } + + $referenceTypes[] = $this->getGroupType($matchesType, (int) ($bracedReference ?? $reference)); + } + + $minLength = strlen($text); + $isNonFalsy = $text !== '' && $text !== '0'; + foreach ($referenceTypes as $referenceType) { + if ($referenceType->isNonFalsyString()->yes()) { + $isNonFalsy = true; + } + if (!$referenceType->isNonEmptyString()->yes()) { + continue; + } + + $minLength++; + } + + if ($isNonFalsy || $minLength >= 2) { + $types[] = new IntersectionType([new StringType(), new AccessoryNonFalsyStringType()]); + } elseif ($minLength === 1) { + $types[] = new IntersectionType([new StringType(), new AccessoryNonEmptyStringType()]); + } else { + $types[] = new StringType(); + } + } + + return TypeCombinator::union(...$types); + } + + private function getGroupType(?Type $matchesType, int $group): Type + { + if ($matchesType === null) { + return new StringType(); + } + + $offsetType = new ConstantIntegerType($group); + $hasOffset = $matchesType->hasOffsetValueType($offsetType); + if ($hasOffset->no()) { + return new ConstantStringType(''); + } + + $groupType = $matchesType->getOffsetValueType($offsetType); + if ($hasOffset->yes()) { + return $groupType; + } + + return TypeCombinator::union($groupType, new ConstantStringType('')); + } + private function getSubjectType( FunctionReflection $functionReflection, FuncCall $functionCall, diff --git a/src/Type/Regex/PHPRegexReader.php b/src/Type/Regex/PHPRegexReader.php new file mode 100644 index 00000000000..4eac0cf28a7 --- /dev/null +++ b/src/Type/Regex/PHPRegexReader.php @@ -0,0 +1,177 @@ +getParser()->parsePattern($rawRegex, $modifiers, $delimiter); + } + + /** + * Returns null when the pattern is invalid for the analysed PCRE2 version, + * or when the parser cannot read it. + */ + public function readExpression(string $regex): ?RegexNode + { + $result = $this->judge($regex); + if ($result === null) { + return null; + } + + return $result->ast; + } + + /** + * The facts the analysed PCRE2 version reads from the pattern, such as whether it is sure to match; + * null when that version refuses the pattern, or when the parser cannot read it. + */ + public function info(string $regex): ?PatternInfo + { + $result = $this->judge($regex); + if ($result === null || !$result->isValid || $result->ast === null) { + return null; + } + + return (new PatternInfoAnalyzer($this->getParser()->target()))->analyze($result->ast); + } + + /** + * Returns the error the analysed PCRE2 version reports for the pattern, or null. + */ + public function refusalOfExpression(string $pattern): ?string + { + $result = $this->judge($pattern); + if ($result === null || $result->isValid) { + return null; + } + + // the parser hit one of its own limits, the pattern may still be valid + if ($result->isLimit()) { + return null; + } + + if ($result->offset !== null && $result->error !== null) { + return sprintf('%s at offset %d', rtrim($result->error, '.'), $result->offset); + } + + return $result->error; + } + + /** + * @return array{body: string, modifiers: string, delimiter: string} + */ + public function split(string $regex): array + { + return [ + 'body' => $this->regexExpressionHelper->removeDelimitersAndModifiers($regex), + 'modifiers' => $this->regexExpressionHelper->getPatternModifiers($regex) ?? '', + 'delimiter' => $this->regexExpressionHelper->getPatternDelimiter($regex) ?? '/', + ]; + } + + /** + * PCRE2 version the patterns are parsed for, e.g. "10.44". + */ + public function judgedPcreVersion(): string + { + return $this->getParser()->target()->pcreVersion; + } + + /** + * The verdict of the analysed PCRE2 version on the pattern, with its tree when + * it is valid; null for an empty pattern, or when the parser could not finish. + */ + private function judge(string $regex): ?ValidationResult + { + // a pattern shorter than two characters has no closing delimiter to read + if (strlen(trim($regex)) < 2) { + return null; + } + + ['body' => $rawRegex, 'modifiers' => $modifiers, 'delimiter' => $delimiter] = $this->split($regex); + + try { + return $this->getParser()->validate($this->delimited($rawRegex, $modifiers, $delimiter)); + } catch (ExceptionInterface) { + // failure of the parser itself, not of the pattern + return null; + } + } + + private function delimited(string $rawRegex, string $modifiers, string $delimiter): string + { + static $pairs = ['(' => ')', '[' => ']', '{' => '}', '<' => '>']; + + return $delimiter . $rawRegex . ($pairs[$delimiter] ?? $delimiter) . $modifiers; + } + + private function getParser(): RegexParser + { + return $this->parser ??= RegexParser::create($this->getParserOptions()); + } + + /** + * A PCRE2 version set in the configuration or in composer.json is used as is. + * The PCRE2 version of the running PHP is used only when the analysed PHP + * is the same minor version; otherwise the parser uses the PCRE2 version + * bundled with the analysed PHP version. + * + * @return array{php_version: int, pcre_version?: string} + */ + private function getParserOptions(): array + { + $phpVersionId = $this->phpVersion->getVersionId(); + $options = ['php_version' => $phpVersionId]; + + $isConfigured = in_array($this->pcreVersion->getSource(), [PcreVersion::SOURCE_CONFIG, PcreVersion::SOURCE_COMPOSER_PLATFORM_PCRE], true); + $isRuntimeOfSameMinor = $this->pcreVersion->getSource() === PcreVersion::SOURCE_RUNTIME + && intdiv($phpVersionId, 100) === intdiv(PHP_VERSION_ID, 100); + + if ($isConfigured || $isRuntimeOfSameMinor) { + $options['pcre_version'] = $this->pcreVersion->getVersionString(); + } + + return $options; + } + +} diff --git a/src/Type/Regex/Parser/RegexNode.php b/src/Type/Regex/Parser/RegexNode.php deleted file mode 100644 index a1e7fff28dd..00000000000 --- a/src/Type/Regex/Parser/RegexNode.php +++ /dev/null @@ -1,65 +0,0 @@ - $children - */ - public function __construct( - private string $id, - private string $valueToken = '', - private string $valueValue = '', - private array $children = [], - ) - { - } - - public function getId(): string - { - return $this->id; - } - - public function getValueToken(): string - { - return $this->valueToken; - } - - public function getValueValue(): string - { - return $this->valueValue; - } - - /** @return list */ - public function getChildren(): array - { - return $this->children; - } - - public function getChild(int $i): self - { - if (!isset($this->children[$i])) { - throw new ShouldNotHappenException(); - } - - return $this->children[$i]; - } - - /** @param list $children */ - public function setChildren(array $children): void - { - $this->children = $children; - } - -} diff --git a/src/Type/Regex/Parser/RegexParser.php b/src/Type/Regex/Parser/RegexParser.php deleted file mode 100644 index 533b93dcd14..00000000000 --- a/src/Type/Regex/Parser/RegexParser.php +++ /dev/null @@ -1,1376 +0,0 @@ - - * - * @readonly - */ -final class RegexParser implements \Phplrt\Contracts\Parser\ParserInterface -{ - /** @var int */ - public const T_NEGATIVE_CLASS_FC = 0; - /** @var int */ - public const T_CLASS_FC = 1; - /** @var int */ - public const T_NEGATIVE_CLASS = 2; - /** @var int */ - public const T_CLASS = 3; - /** @var int */ - public const T_INTERNAL_OPTION = 4; - /** @var int */ - public const T_LOOKAHEAD = 5; - /** @var int */ - public const T_NEGATIVE_LOOKAHEAD = 6; - /** @var int */ - public const T_LOOKBEHIND = 7; - /** @var int */ - public const T_NEGATIVE_LOOKBEHIND = 8; - /** @var int */ - public const T_NAMED_REFERENCE = 9; - /** @var int */ - public const T_ABSOLUTE_REFERENCE = 10; - /** @var int */ - public const T_RELATIVE_REFERENCE = 11; - /** @var int */ - public const T_ASSERTION_REFERENCE = 12; - /** @var int */ - public const T_COMMENT = 13; - /** @var int */ - public const T_MARKER = 14; - /** @var int */ - public const T_NAMED_BACKREFERENCE = 15; - /** @var int */ - public const T_SUBROUTINE = 16; - /** @var int */ - public const T_NAMED_CAPTURING = 17; - /** @var int */ - public const T_NON_CAPTURING = 18; - /** @var int */ - public const T_NON_CAPTURING_INTERNAL_OPTION = 19; - /** @var int */ - public const T_NON_CAPTURING_RESET = 20; - /** @var int */ - public const T_ATOMIC_GROUP = 21; - /** @var int */ - public const T_CAPTURING = 22; - /** @var int */ - public const T_CAPTURING_CLOSE = 23; - /** @var int */ - public const T_ZERO_OR_ONE_POSSESSIVE = 24; - /** @var int */ - public const T_ZERO_OR_ONE_LAZY = 25; - /** @var int */ - public const T_ZERO_OR_ONE = 26; - /** @var int */ - public const T_ZERO_OR_MORE_POSSESSIVE = 27; - /** @var int */ - public const T_ZERO_OR_MORE_LAZY = 28; - /** @var int */ - public const T_ZERO_OR_MORE = 29; - /** @var int */ - public const T_ONE_OR_MORE_POSSESSIVE = 30; - /** @var int */ - public const T_ONE_OR_MORE_LAZY = 31; - /** @var int */ - public const T_ONE_OR_MORE = 32; - /** @var int */ - public const T_EXACTLY_N = 33; - /** @var int */ - public const T_N_TO_M_POSSESSIVE = 34; - /** @var int */ - public const T_N_TO_M_LAZY = 35; - /** @var int */ - public const T_N_TO_M = 36; - /** @var int */ - public const T_N_OR_MORE_POSSESSIVE = 37; - /** @var int */ - public const T_N_OR_MORE_LAZY = 38; - /** @var int */ - public const T_N_OR_MORE = 39; - /** @var int */ - public const T_ALTERNATION = 40; - /** @var int */ - public const T_CHARACTER = 41; - /** @var int */ - public const T_DYNAMIC_CHARACTER = 42; - /** @var int */ - public const T_CHARACTER_TYPE = 43; - /** @var int */ - public const T_ANCHOR = 44; - /** @var int */ - public const T_MATCH_POINT_RESET = 45; - /** @var int */ - public const T_SUBROUTINE_G = 46; - /** @var int */ - public const T_BACKREFERENCE = 47; - /** @var int */ - public const T_LITERAL = 48; - - /** @var array */ - private const PARSER_EXPECTATIONS = [ - 'T_NEGATIVE_CLASS_FC', - 'T_CLASS_FC', - 'T_NEGATIVE_CLASS', - 'T_CLASS', - 'T_INTERNAL_OPTION', - 'T_LOOKAHEAD', - 'T_NEGATIVE_LOOKAHEAD', - 'T_LOOKBEHIND', - 'T_NEGATIVE_LOOKBEHIND', - 'T_NAMED_REFERENCE', - 'T_ABSOLUTE_REFERENCE', - 'T_RELATIVE_REFERENCE', - 'T_ASSERTION_REFERENCE', - 'T_COMMENT', - 'T_MARKER', - 'T_NAMED_BACKREFERENCE', - 'T_SUBROUTINE', - 'T_NAMED_CAPTURING', - 'T_NON_CAPTURING', - 'T_NON_CAPTURING_INTERNAL_OPTION', - 'T_NON_CAPTURING_RESET', - 'T_ATOMIC_GROUP', - 'T_CAPTURING', - 'T_CAPTURING_CLOSE', - 'T_ZERO_OR_ONE_POSSESSIVE', - 'T_ZERO_OR_ONE_LAZY', - 'T_ZERO_OR_ONE', - 'T_ZERO_OR_MORE_POSSESSIVE', - 'T_ZERO_OR_MORE_LAZY', - 'T_ZERO_OR_MORE', - 'T_ONE_OR_MORE_POSSESSIVE', - 'T_ONE_OR_MORE_LAZY', - 'T_ONE_OR_MORE', - 'T_EXACTLY_N', - 'T_N_TO_M_POSSESSIVE', - 'T_N_TO_M_LAZY', - 'T_N_TO_M', - 'T_N_OR_MORE_POSSESSIVE', - 'T_N_OR_MORE_LAZY', - 'T_N_OR_MORE', - 'T_ALTERNATION', - 'T_CHARACTER', - 'T_DYNAMIC_CHARACTER', - 'T_CHARACTER_TYPE', - 'T_ANCHOR', - 'T_MATCH_POINT_RESET', - 'T_SUBROUTINE_G', - 'T_BACKREFERENCE', - 'T_LITERAL', - '/[^\\s]++/', - ]; - - /** @var array */ - private const PARSER_KEPT_TABLE = [ - true, - true, - false, - true, - false, - true, - true, - false, - false, - false, - false, - false, - false, - true, - false, - true, - false, - false, - false, - false, - true, - false, - false, - true, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - ]; - - /** @var array|null> */ - private const PARSER_START_PREDICTION_TABLE = [ - null, - null, - null, - [ - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - 41 => true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - 41 => true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - 4 => true, - ], - [ - 5 => true, - true, - true, - true, - ], - [ - 5 => true, - true, - true, - true, - ], - [ - 5 => true, - ], - [ - 6 => true, - ], - [ - 7 => true, - ], - [ - 8 => true, - ], - [ - 23 => true, - ], - [ - true, - true, - true, - true, - 13 => true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - 41 => true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - true, - true, - true, - true, - 13 => true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - 41 => true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - true, - true, - true, - true, - ], - [ - true, - ], - [ - 1 => true, - ], - [ - 2 => true, - ], - [ - 3 => true, - ], - [ - 13 => true, - true, - 17 => true, - true, - true, - true, - true, - true, - ], - [ - 14 => true, - ], - [ - 13 => true, - ], - [ - 17 => true, - true, - true, - true, - true, - true, - ], - [ - 17 => true, - true, - true, - true, - true, - true, - ], - [ - 17 => true, - ], - [ - 18 => true, - ], - [ - 19 => true, - ], - [ - 20 => true, - ], - [ - 21 => true, - ], - [ - 22 => true, - ], - [ - 15 => true, - true, - 41 => true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - 41 => true, - ], - [ - 42 => true, - ], - [ - 43 => true, - ], - [ - 44 => true, - ], - [ - 45 => true, - ], - [ - 46 => true, - ], - [ - 47 => true, - ], - [ - 15 => true, - ], - [ - 16 => true, - ], - [ - 48 => true, - ], - null, - [ - 24 => true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - ], - [ - 24 => true, - ], - [ - 25 => true, - ], - [ - 26 => true, - ], - [ - 27 => true, - ], - [ - 28 => true, - ], - [ - 29 => true, - ], - [ - 30 => true, - ], - [ - 31 => true, - ], - [ - 32 => true, - ], - [ - 33 => true, - ], - [ - 34 => true, - ], - [ - 35 => true, - ], - [ - 36 => true, - ], - [ - 37 => true, - ], - [ - 38 => true, - ], - [ - 39 => true, - ], - [ - 9 => true, - true, - true, - true, - ], - [ - 9 => true, - true, - true, - true, - ], - [ - 9 => true, - ], - [ - 10 => true, - ], - [ - 11 => true, - ], - [ - 12 => true, - ], - [ - 12 => true, - ], - null, - [ - 40 => true, - ], - [ - 40 => true, - ], - [ - 40 => true, - ], - ]; - - /** @var array>> */ - private const PARSER_CHOICE_PREDICTION_TABLE = [ - 4 => [ - 4 => [ - -6, - ], - [ - 6, - ], - [ - 6, - ], - [ - 6, - ], - [ - 6, - ], - 0 => [ - 13, - ], - 1 => [ - 13, - ], - 2 => [ - 13, - ], - 3 => [ - 13, - ], - 13 => [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - 41 => [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - [ - 13, - ], - 9 => [ - 60, - ], - 10 => [ - 60, - ], - 11 => [ - 60, - ], - 12 => [ - 60, - ], - ], - 7 => [ - 5 => [ - -9, - ], - [ - -10, - ], - [ - -11, - ], - [ - -12, - ], - ], - 14 => [ - [ - 15, - ], - [ - 15, - ], - [ - 15, - ], - [ - 15, - ], - 13 => [ - 20, - ], - [ - 20, - ], - 17 => [ - 20, - ], - [ - 20, - ], - [ - 20, - ], - [ - 20, - ], - [ - 20, - ], - [ - 20, - ], - 15 => [ - 31, - ], - 16 => [ - 31, - ], - 41 => [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - [ - 31, - ], - ], - [ - [ - -17, - ], - [ - -18, - ], - [ - -19, - ], - [ - -20, - ], - ], - 20 => [ - 14 => [ - -22, - ], - 13 => [ - -23, - ], - 17 => [ - 23, - ], - [ - 23, - ], - [ - 23, - ], - [ - 23, - ], - [ - 23, - ], - [ - 23, - ], - ], - 24 => [ - 17 => [ - -26, - ], - [ - -27, - ], - [ - -28, - ], - [ - -29, - ], - [ - -30, - ], - [ - -31, - ], - ], - 31 => [ - 41 => [ - -33, - ], - [ - -34, - ], - [ - -35, - ], - [ - -36, - ], - [ - -37, - ], - [ - -38, - ], - [ - -39, - ], - 15 => [ - -40, - ], - 16 => [ - -41, - ], - [ - -42, - ], - ], - 43 => [ - 24 => [ - -45, - ], - [ - -46, - ], - [ - -47, - ], - [ - -48, - ], - [ - -49, - ], - [ - -50, - ], - [ - -51, - ], - [ - -52, - ], - [ - -53, - ], - [ - -54, - ], - [ - -55, - ], - [ - -56, - ], - [ - -57, - ], - [ - -58, - ], - [ - -59, - ], - [ - -60, - ], - ], - 61 => [ - 9 => [ - -63, - ], - [ - -64, - ], - [ - -65, - ], - [ - 65, - ], - ], - ]; - - /** @var array> */ - private const PARSER_SEQUENCE_PREDICTION_TABLE = [ - 1 => [ - -4, - -69, - ], - 13 => [ - 14, - -44, - ], - 69 => [ - 70, - -4, - ], - ]; - - /** - * @var \Phplrt\Parser\Parser - */ - protected \Phplrt\Parser\Parser $parser; - - protected readonly \Phplrt\Contracts\Lexer\LexerInterface $lexer; - - public function __construct() - { - $state_class = new \Phplrt\Lexer\Lexer( - pattern: '/\\G(?|(?:(?:\\[:\\^?[a-z]+:\\])(*MARK:0))|(?:(?:\\[)(*MARK:1))|(?:(?:\\])(*MARK:2))|(?:(?:\\-)(*MARK:3))|(?:(?:\\\\(?:[aefnrtb]|c[\\x00-\\x7f]))(*MARK:4))|(?:(?:\\\\(?:[0-7]{3}|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}))(*MARK:5))|(?:(?:\\\\(?:[CdDhHNRsSvVwWX]|[pP]{[^}]+}))(*MARK:6))|(?:(?:\\\\.|.|\\n)(*MARK:7))|(?:(?:[^\\s]++)(*MARK:8)))/Ssum', - channels: [ - 8 => 'Unknown', - ], - names: [ - 'T_POSIX_CLASS', - 'T_CLASS_NESTED', - 'T_CLASS_CLOSE', - 'T_RANGE', - 'T_CLASS_CHARACTER', - 'T_CLASS_DYNAMIC_CHARACTER', - 'T_CLASS_CHARACTER_TYPE', - 'T_CLASS_LITERAL', - ], - transitions: [ - 2 => null, - ], - ); - - $this->lexer = new \Phplrt\Lexer\Lexer( - pattern: '/\\G(?|(?:(?:\\[\\^\\])(*MARK:0))|(?:(?:\\[\\])(*MARK:1))|(?:(?:\\[\\^)(*MARK:2))|(?:(?:\\[)(*MARK:3))|(?:(?:\\(\\?[imsxnJUX^]*-?[imsxnJUX^]+\\))(*MARK:4))|(?:(?:\\(\\?=)(*MARK:5))|(?:(?:\\(\\?!)(*MARK:6))|(?:(?:\\(\\?<=)(*MARK:7))|(?:(?:\\(\\?\\))(*MARK:9))|(?:(?:\\(\\?\\((\\d+)\\))(*MARK:10))|(?:(?:\\(\\?\\(([\\+\\-]\\d+)\\))(*MARK:11))|(?:(?:\\(\\?\\()(*MARK:12))|(?:(?:\\(\\?#(.*?)(?\\w+)\\))(*MARK:16))|(?:(?:\\(\\?P?<(.+?)(?)(*MARK:17))|(?:(?:\\(\\?:)(*MARK:18))|(?:(?:\\(\\?[imsxnJUX^]*-?[imsxnJUX^]+:)(*MARK:19))|(?:(?:\\(\\?\\|)(*MARK:20))|(?:(?:\\(\\?>)(*MARK:21))|(?:(?:\\()(*MARK:22))|(?:(?:\\))(*MARK:23))|(?:(?:\\?\\+)(*MARK:24))|(?:(?:\\?\\?)(*MARK:25))|(?:(?:\\?)(*MARK:26))|(?:(?:\\*\\+)(*MARK:27))|(?:(?:\\*\\?)(*MARK:28))|(?:(?:\\*)(*MARK:29))|(?:(?:\\+\\+)(*MARK:30))|(?:(?:\\+\\?)(*MARK:31))|(?:(?:\\+)(*MARK:32))|(?:(?:\\{[0-9]+\\})(*MARK:33))|(?:(?:\\{[0-9]+,[0-9]+\\}\\+)(*MARK:34))|(?:(?:\\{[0-9]+,[0-9]+\\}\\?)(*MARK:35))|(?:(?:\\{[0-9]+,[0-9]+\\})(*MARK:36))|(?:(?:\\{[0-9]+,\\}\\+)(*MARK:37))|(?:(?:\\{[0-9]+,\\}\\?)(*MARK:38))|(?:(?:\\{[0-9]+,\\})(*MARK:39))|(?:(?:\\|)(*MARK:40))|(?:(?:\\\\(?:[aefnrt]|c[\\x00-\\x7f]))(*MARK:41))|(?:(?:\\\\(?:[0-7]{3}|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}))(*MARK:42))|(?:(?:\\\\(?:[CdDhHNRsSvVwWX]|[pP]{[^}]+}))(*MARK:43))|(?:(?:\\\\[bBAZzG]|\\^|\\$)(*MARK:44))|(?:(?:\\\\K)(*MARK:45))|(?:(?:\\\\g(?:<[^>]+>|\'[^\']+\'))(*MARK:46))|(?:(?:\\\\(?:[1-9]\\d*|g[+-]?\\d+|g\\{[+-]?\\w+\\}|k<\\w+>|k\'\\w+\'|k\\{\\w+\\}))(*MARK:47))|(?:(?:\\\\.|.|\\n)(*MARK:48))|(?:(?:[^\\s]++)(*MARK:49)))/Ssum', - channels: [ - 49 => 'Unknown', - ], - names: [ - 'T_NEGATIVE_CLASS_FC', - 'T_CLASS_FC', - 'T_NEGATIVE_CLASS', - 'T_CLASS', - 'T_INTERNAL_OPTION', - 'T_LOOKAHEAD', - 'T_NEGATIVE_LOOKAHEAD', - 'T_LOOKBEHIND', - 'T_NEGATIVE_LOOKBEHIND', - 'T_NAMED_REFERENCE', - 'T_ABSOLUTE_REFERENCE', - 'T_RELATIVE_REFERENCE', - 'T_ASSERTION_REFERENCE', - 'T_COMMENT', - 'T_MARKER', - 'T_NAMED_BACKREFERENCE', - 'T_SUBROUTINE', - 'T_NAMED_CAPTURING', - 'T_NON_CAPTURING', - 'T_NON_CAPTURING_INTERNAL_OPTION', - 'T_NON_CAPTURING_RESET', - 'T_ATOMIC_GROUP', - 'T_CAPTURING', - 'T_CAPTURING_CLOSE', - 'T_ZERO_OR_ONE_POSSESSIVE', - 'T_ZERO_OR_ONE_LAZY', - 'T_ZERO_OR_ONE', - 'T_ZERO_OR_MORE_POSSESSIVE', - 'T_ZERO_OR_MORE_LAZY', - 'T_ZERO_OR_MORE', - 'T_ONE_OR_MORE_POSSESSIVE', - 'T_ONE_OR_MORE_LAZY', - 'T_ONE_OR_MORE', - 'T_EXACTLY_N', - 'T_N_TO_M_POSSESSIVE', - 'T_N_TO_M_LAZY', - 'T_N_TO_M', - 'T_N_OR_MORE_POSSESSIVE', - 'T_N_OR_MORE_LAZY', - 'T_N_OR_MORE', - 'T_ALTERNATION', - 'T_CHARACTER', - 'T_DYNAMIC_CHARACTER', - 'T_CHARACTER_TYPE', - 'T_ANCHOR', - 'T_MATCH_POINT_RESET', - 'T_SUBROUTINE_G', - 'T_BACKREFERENCE', - 'T_LITERAL', - ], - transitions: [ - 0 => $state_class, - 1 => $state_class, - 2 => $state_class, - 3 => $state_class, - ], - subgroups: [ - 9 => 1, - 1, - 1, - 13 => 1, - 1, - 17 => 1, - ], - ); - - $this->parser = new \Phplrt\Parser\Parser( - lexer: $this->lexer, - grammar: [ - new \Phplrt\Parser\Grammar\Optional(1), - new \Phplrt\Parser\Grammar\Concatenation([2, 67]), - new \Phplrt\Parser\Grammar\Optional(3), - new \Phplrt\Parser\Grammar\Repetition(4, 1, \INF), - new \Phplrt\Parser\Grammar\Alternation([5, 6, 13, 60]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_INTERNAL_OPTION, true), - new \Phplrt\Parser\Grammar\Concatenation([7, 1, 12]), - new \Phplrt\Parser\Grammar\Alternation([8, 9, 10, 11]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_LOOKAHEAD, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NEGATIVE_LOOKAHEAD, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_LOOKBEHIND, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NEGATIVE_LOOKBEHIND, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CAPTURING_CLOSE, false), - new \Phplrt\Parser\Grammar\Concatenation([14, 42]), - new \Phplrt\Parser\Grammar\Alternation([15, 20, 31]), - new \Phplrt\Parser\Grammar\Alternation([16, 17, 18, 19]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NEGATIVE_CLASS_FC, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CLASS_FC, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NEGATIVE_CLASS, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CLASS, true), - new \Phplrt\Parser\Grammar\Alternation([21, 22, 23]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_MARKER, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_COMMENT, true), - new \Phplrt\Parser\Grammar\Concatenation([24, 1, 12]), - new \Phplrt\Parser\Grammar\Alternation([25, 26, 27, 28, 29, 30]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NAMED_CAPTURING, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NON_CAPTURING, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NON_CAPTURING_INTERNAL_OPTION, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NON_CAPTURING_RESET, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ATOMIC_GROUP, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CAPTURING, true), - new \Phplrt\Parser\Grammar\Alternation([32, 33, 34, 35, 36, 37, 38, 39, 40, 41]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CHARACTER, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_DYNAMIC_CHARACTER, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_CHARACTER_TYPE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ANCHOR, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_MATCH_POINT_RESET, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_SUBROUTINE_G, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_BACKREFERENCE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NAMED_BACKREFERENCE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_SUBROUTINE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_LITERAL, true), - new \Phplrt\Parser\Grammar\Optional(43), - new \Phplrt\Parser\Grammar\Alternation([44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_ONE_POSSESSIVE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_ONE_LAZY, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_ONE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_MORE_POSSESSIVE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_MORE_LAZY, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ZERO_OR_MORE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ONE_OR_MORE_POSSESSIVE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ONE_OR_MORE_LAZY, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ONE_OR_MORE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_EXACTLY_N, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_TO_M_POSSESSIVE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_TO_M_LAZY, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_TO_M, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_OR_MORE_POSSESSIVE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_OR_MORE_LAZY, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_N_OR_MORE, true), - new \Phplrt\Parser\Grammar\Concatenation([61, 1, 12]), - new \Phplrt\Parser\Grammar\Alternation([62, 63, 64, 65]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_NAMED_REFERENCE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ABSOLUTE_REFERENCE, true), - new \Phplrt\Parser\Grammar\Lexeme(self::T_RELATIVE_REFERENCE, true), - new \Phplrt\Parser\Grammar\Concatenation([66, 1, 12]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ASSERTION_REFERENCE, true), - new \Phplrt\Parser\Grammar\Optional(68), - new \Phplrt\Parser\Grammar\Repetition(69, 1, \INF), - new \Phplrt\Parser\Grammar\Concatenation([70, 2]), - new \Phplrt\Parser\Grammar\Lexeme(self::T_ALTERNATION, true), - ], - initial: 0, - reducers: [ - 0 => \Closure::fromCallable([self::class, 'reduceExpression']), - 1 => \Closure::fromCallable([self::class, 'reduceAlternation']), - 3 => \Closure::fromCallable([self::class, 'reduceConcatenation']), - 5 => \Closure::fromCallable([self::class, 'reduceInternalOptions']), - 6 => \Closure::fromCallable([self::class, 'reduceAssertion']), - 13 => \Closure::fromCallable([self::class, 'reduceQuantification']), - 15 => \Closure::fromCallable([self::class, 'reduceCharacterClass']), - 20 => \Closure::fromCallable([self::class, 'reduceCapturing']), - 31 => \Closure::fromCallable([self::class, 'reduceLiteral']), - 60 => \Closure::fromCallable([self::class, 'reduceCondition']), - ], - expectations: self::PARSER_EXPECTATIONS, - kept: self::PARSER_KEPT_TABLE, - startPrediction: self::PARSER_START_PREDICTION_TABLE, - choicePrediction: self::PARSER_CHOICE_PREDICTION_TABLE, - sequencePrediction: self::PARSER_SEQUENCE_PREDICTION_TABLE, - ); - } - - /** - * @throws \Phplrt\Contracts\Parser\Exception\ParserExceptionInterface - * @throws RegexSyntaxException - */ - public function parse(\Phplrt\Contracts\Source\ReadableInterface $source): mixed - { - return $this->parser->parse($source); - } - - private static function reduceExpression(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - return new RegexNode('#expression', children: \is_array($children) ? $children : [$children]); - } - - private static function reduceAlternation(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - if (!\is_array($children)) { - return $children; - } - $nodes = []; - $isAlternation = false; - foreach ($children as $child) { - if ($child instanceof TokenInterface) { - $isAlternation = true; - $child = new RegexNode('token', 'alternation', $child->value); - } - $nodes[] = $child; - } - if (!$isAlternation) { - return $children[0] ?? []; - } - return new RegexNode('#alternation', children: $nodes); - } - - private static function reduceConcatenation(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - if (!\is_array($children)) { - return $children; - } - if (\count($children) === 1) { - return $children[0]; - } - return new RegexNode('#concatenation', children: $children); - } - - private static function reduceInternalOptions(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - return new RegexNode('#internal_options', children: [ - new RegexNode('token', 'internal_option', $children->value), - ]); - } - - private static function reduceAssertion(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - $assertion = \array_shift($children); - $ids = [ - self::T_LOOKAHEAD => '#lookahead', - self::T_NEGATIVE_LOOKAHEAD => '#negativelookahead', - self::T_LOOKBEHIND => '#lookbehind', - self::T_NEGATIVE_LOOKBEHIND => '#negativelookbehind', - ]; - return new RegexNode($ids[$assertion->id], children: $children); - } - - private static function reduceQuantification(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - if (!\is_array($children)) { - return $children; - } - if (\count($children) === 1) { - return $children[0]; - } - return new RegexNode('#quantification', children: [ - $children[0], - new RegexNode('token', \strtolower(\substr($children[1]->name, 2)), $children[1]->value), - ]); - } - - private static function reduceCharacterClass(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - $tokens = $children->children; - $close = \array_pop($tokens); - if ($close === null || $close->name !== 'T_CLASS_CLOSE') { - throw new RegexSyntaxException('Unclosed character class'); - } - - $nodes = []; - if ($children->id === self::T_NEGATIVE_CLASS_FC || $children->id === self::T_CLASS_FC) { - $nodes[] = new RegexNode('token', '_class', ']'); - } - - $literalNames = [ - 'T_CLASS_CHARACTER' => 'character', - 'T_CLASS_DYNAMIC_CHARACTER' => 'dynamic_character', - 'T_CLASS_CHARACTER_TYPE' => 'character_type', - 'T_CLASS_LITERAL' => 'literal', - ]; - - $count = \count($tokens); - $i = 0; - // ? ( | | range() ? | literal() )* ? - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - while ($i < $count) { - $token = $tokens[$i]; - if ($token->name === 'T_POSIX_CLASS') { - $nodes[] = new RegexNode('token', 'posix_class', $token->value); - $i++; - continue; - } - if ($token->name === 'T_CLASS_NESTED') { - $nodes[] = new RegexNode('token', 'class_', $token->value); - $i++; - continue; - } - if (!isset($literalNames[$token->name])) { - break; - } - $literal = new RegexNode('token', $literalNames[$token->name], $token->value); - if ( - $i + 2 < $count - && $tokens[$i + 1]->name === 'T_RANGE' - && isset($literalNames[$tokens[$i + 2]->name]) - ) { - $nodes[] = new RegexNode('#range', children: [ - $literal, - new RegexNode('token', $literalNames[$tokens[$i + 2]->name], $tokens[$i + 2]->value), - ]); - $i += 3; - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - continue; - } - $nodes[] = $literal; - $i++; - } - if ($i < $count && $tokens[$i]->name === 'T_RANGE') { - $nodes[] = new RegexNode('token', 'range', $tokens[$i]->value); - $i++; - } - if ($i !== $count) { - throw new RegexSyntaxException('Unexpected token in character class'); - } - - $negative = $children->id === self::T_NEGATIVE_CLASS_FC || $children->id === self::T_NEGATIVE_CLASS; - return new RegexNode($negative ? '#negativeclass' : '#class', children: $nodes); - } - - private static function reduceCapturing(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - if (!\is_array($children)) { - $children = [$children]; - } - $opening = \array_shift($children); - switch ($opening->id) { - case self::T_MARKER: - return new RegexNode('#mark', children: [ - new RegexNode('token', 'name', $opening->captures[0]), - ]); - case self::T_COMMENT: - return new RegexNode('#comment', children: $opening->captures[0] === '' ? [] : [ - new RegexNode('token', 'comment', $opening->captures[0]), - ]); - case self::T_NAMED_CAPTURING: - \array_unshift($children, new RegexNode('token', 'capturing_name', $opening->captures[0])); - return new RegexNode('#namedcapturing', children: $children); - case self::T_NON_CAPTURING: - return new RegexNode('#noncapturing', children: $children); - case self::T_NON_CAPTURING_INTERNAL_OPTION: - \array_unshift($children, new RegexNode('token', 'non_capturing_internal_option', $opening->value)); - return new RegexNode('#noncapturing', children: $children); - case self::T_NON_CAPTURING_RESET: - return new RegexNode('#noncapturingreset', children: $children); - case self::T_ATOMIC_GROUP: - return new RegexNode('#atomicgroup', children: $children); - default: - return new RegexNode('#capturing', children: $children); - } - } - - private static function reduceLiteral(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - $names = [ - self::T_NAMED_BACKREFERENCE => 'backreference', - self::T_SUBROUTINE_G => 'subroutine', - ]; - - return new RegexNode('token', $names[$children->id] ?? \strtolower(\substr($children->name, 2)), $children->value); - } - - private static function reduceCondition(\Phplrt\Parser\Context $ctx, mixed $children): mixed - { - $reference = \array_shift($children); - switch ($reference->id) { - case self::T_NAMED_REFERENCE: - \array_unshift($children, new RegexNode('token', 'capturing_name', $reference->captures[0])); - return new RegexNode('#namedcondition', children: $children); - case self::T_ABSOLUTE_REFERENCE: - \array_unshift($children, new RegexNode('token', 'index', $reference->captures[0])); - return new RegexNode('#absolutecondition', children: $children); - case self::T_RELATIVE_REFERENCE: - \array_unshift($children, new RegexNode('token', 'index', $reference->captures[0])); - return new RegexNode('#relativecondition', children: $children); - default: - return new RegexNode('#assertioncondition', children: $children); - } - } -} diff --git a/src/Type/Regex/Parser/RegexSyntaxException.php b/src/Type/Regex/Parser/RegexSyntaxException.php deleted file mode 100644 index be3012dccd4..00000000000 --- a/src/Type/Regex/Parser/RegexSyntaxException.php +++ /dev/null @@ -1,11 +0,0 @@ - $capturingGroups * @param list $markVerbs + * @param Type $subjectBaseType type of the whole match, $matches[0] + * @param Type $subjectNarrowType type the subject is narrowed to when the pattern matches + * @param Type|null $scanBaseType type of the whole match when the match is one of a scan, + * e.g. in a preg_replace_callback() callback, null when it is the same + * @param list> $cases cases whose union covers every match: the groups each case + * sets (true) or never sets (false), a group left out may be unset */ public function __construct( private int $alternationId, - private int $captureGroupId, private array $capturingGroups, private array $markVerbs, private Type $subjectBaseType, + private Type $subjectNarrowType, + private ?Type $scanBaseType = null, + private array $cases = [], ) { } @@ -27,11 +35,10 @@ public static function createEmpty(): self { return new self( -1, - // use different start-index for groups to make it easier to distinguish groupids from other ids - 100, [], [], new StringType(), + new StringType(), ); } @@ -39,21 +46,12 @@ public function nextAlternationId(): self { return new self( $this->alternationId + 1, - $this->captureGroupId, - $this->capturingGroups, - $this->markVerbs, - $this->subjectBaseType, - ); - } - - public function nextCaptureGroupId(): self - { - return new self( - $this->alternationId, - $this->captureGroupId + 1, $this->capturingGroups, $this->markVerbs, $this->subjectBaseType, + $this->subjectNarrowType, + $this->scanBaseType, + $this->cases, ); } @@ -64,10 +62,12 @@ public function addCapturingGroup(RegexCapturingGroup $group): self return new self( $this->alternationId, - $this->captureGroupId, $capturingGroups, $this->markVerbs, $this->subjectBaseType, + $this->subjectNarrowType, + $this->scanBaseType, + $this->cases, ); } @@ -78,10 +78,12 @@ public function markVerb(string $markVerb): self return new self( $this->alternationId, - $this->captureGroupId, $this->capturingGroups, $verbs, $this->subjectBaseType, + $this->subjectNarrowType, + $this->scanBaseType, + $this->cases, ); } @@ -89,21 +91,31 @@ public function withSubjectBaseType(Type $subjectBaseType): self { return new self( $this->alternationId, - $this->captureGroupId, $this->capturingGroups, $this->markVerbs, $subjectBaseType, + $this->subjectNarrowType, + $this->scanBaseType, + $this->cases, ); } - public function getAlternationId(): int + public function withSubjectNarrowType(Type $subjectNarrowType): self { - return $this->alternationId; + return new self( + $this->alternationId, + $this->capturingGroups, + $this->markVerbs, + $this->subjectBaseType, + $subjectNarrowType, + $this->scanBaseType, + $this->cases, + ); } - public function getCaptureGroupId(): int + public function getAlternationId(): int { - return $this->captureGroupId; + return $this->alternationId; } /** @@ -127,4 +139,51 @@ public function getSubjectBaseType(): Type return $this->subjectBaseType; } + public function withScanBaseType(?Type $scanBaseType): self + { + return new self( + $this->alternationId, + $this->capturingGroups, + $this->markVerbs, + $this->subjectBaseType, + $this->subjectNarrowType, + $scanBaseType, + $this->cases, + ); + } + + public function getScanBaseType(): Type + { + return $this->scanBaseType ?? $this->subjectBaseType; + } + + public function getSubjectNarrowType(): Type + { + return $this->subjectNarrowType; + } + + /** + * @param list> $cases + */ + public function withCases(array $cases): self + { + return new self( + $this->alternationId, + $this->capturingGroups, + $this->markVerbs, + $this->subjectBaseType, + $this->subjectNarrowType, + $this->scanBaseType, + $cases, + ); + } + + /** + * @return list> + */ + public function getCases(): array + { + return $this->cases; + } + } diff --git a/src/Type/Regex/RegexCapturingGroup.php b/src/Type/Regex/RegexCapturingGroup.php index b33d620db48..b0c80debf88 100644 --- a/src/Type/Regex/RegexCapturingGroup.php +++ b/src/Type/Regex/RegexCapturingGroup.php @@ -17,6 +17,7 @@ public function __construct( private readonly bool $forceNonOptional = false, private readonly ?Type $forceType = null, private readonly bool $forceAlternationBranchMatched = false, + private readonly bool $neverMatched = false, ) { } @@ -38,6 +39,7 @@ public function forceNonOptional(): self true, $this->forceType, $this->forceAlternationBranchMatched, + $this->neverMatched, ); } @@ -57,6 +59,23 @@ public function forceAlternationBranchMatched(): self $this->forceNonOptional, $this->forceType, true, + $this->neverMatched, + ); + } + + public function forceNeverMatched(): self + { + return new self( + $this->id, + $this->name, + $this->alternation, + $this->inOptionalQuantification, + $this->parent, + $this->type, + $this->forceNonOptional, + $this->forceType, + $this->forceAlternationBranchMatched, + true, ); } @@ -72,6 +91,7 @@ public function forceType(Type $type): self $this->forceNonOptional, $this->forceType, $this->forceAlternationBranchMatched, + $this->neverMatched, ); } @@ -87,6 +107,7 @@ public function withParent(RegexCapturingGroup|RegexNonCapturingGroup $parent): $this->forceNonOptional, $this->forceType, $this->forceAlternationBranchMatched, + $this->neverMatched, ); } @@ -188,6 +209,14 @@ public function getName(): ?string return $this->name; } + /** + * The engine never sets it, e.g. a group inside (?(DEFINE)...). + */ + public function isNeverMatched(): bool + { + return $this->neverMatched; + } + public function getType(): Type { if ($this->forceType !== null) { diff --git a/src/Type/Regex/RegexExpressionHelper.php b/src/Type/Regex/RegexExpressionHelper.php index dada8e2c5c9..19740663115 100644 --- a/src/Type/Regex/RegexExpressionHelper.php +++ b/src/Type/Regex/RegexExpressionHelper.php @@ -151,7 +151,7 @@ public function getPatternDelimiters(Concat $concat, Scope $scope): array return $delimiters; } - private function getPatternDelimiter(string $regex): ?string + public function getPatternDelimiter(string $regex): ?string { $regex = ltrim($regex); diff --git a/src/Type/Regex/RegexGroupList.php b/src/Type/Regex/RegexGroupList.php index 37f4a483081..539055c803b 100644 --- a/src/Type/Regex/RegexGroupList.php +++ b/src/Type/Regex/RegexGroupList.php @@ -8,7 +8,6 @@ use Override; use PHPStan\ShouldNotHappenException; use PHPStan\Type\Type; -use function array_key_exists; use function array_reverse; use function count; @@ -131,64 +130,6 @@ public function getOnlyOptionalTopLevelGroup(): ?RegexCapturingGroup return $group; } - /** - * Groups sharing a name (allowed by (?J)) are only understood - * when each of them is in a different branch of the given alternation. - */ - public function hasDuplicateNamesOutsideOfAlternationBranches(?RegexAlternation $alternation): bool - { - $groupIdsByName = []; - foreach ($this->groups as $captureGroup) { - if (!$captureGroup->isNamed()) { - continue; - } - - $groupIdsByName[$captureGroup->getName()][] = $captureGroup->getId(); - } - - $branchByGroupId = []; - if ($alternation !== null) { - foreach ($alternation->getGroupCombinations() as $branch => $groupIds) { - foreach ($groupIds as $groupId) { - $branchByGroupId[$groupId] = $branch; - } - } - } - - foreach ($groupIdsByName as $groupIds) { - if (count($groupIds) === 1) { - continue; - } - - $branches = []; - foreach ($groupIds as $groupId) { - if (!array_key_exists($groupId, $branchByGroupId)) { - return true; - } - - $branch = $branchByGroupId[$groupId]; - if (array_key_exists($branch, $branches)) { - return true; - } - - $branches[$branch] = true; - } - } - - return false; - } - - public function hasGroupResettingGroupCounter(): bool - { - foreach ($this->groups as $captureGroup) { - if ($captureGroup->resetsGroupCounter()) { - return true; - } - } - - return false; - } - public function getOnlyTopLevelAlternation(): ?RegexAlternation { $alternation = null; diff --git a/src/Type/Regex/RegexGroupParser.php b/src/Type/Regex/RegexGroupParser.php index 0aea8561d35..f93366deea1 100644 --- a/src/Type/Regex/RegexGroupParser.php +++ b/src/Type/Regex/RegexGroupParser.php @@ -2,949 +2,472 @@ namespace PHPStan\Type\Regex; -use Nette\Utils\RegexpException; -use Nette\Utils\Strings; -use Phplrt\Contracts\Parser\Exception\ParserExceptionInterface; -use Phplrt\Source\StringSource; +use PHPRegex\Parser\Analysis\CaptureGroupShape; +use PHPRegex\Parser\Analysis\CaptureShape; +use PHPRegex\Parser\Analysis\CaptureShapeAnalyzer; +use PHPRegex\Parser\Analysis\Participation; +use PHPRegex\Parser\Node\AlternationNode; +use PHPRegex\Parser\Node\ConditionalNode; +use PHPRegex\Parser\Node\DefineNode; +use PHPRegex\Parser\Node\GroupNode; +use PHPRegex\Parser\Node\GroupType; +use PHPRegex\Parser\Node\KeepNode; +use PHPRegex\Parser\Node\NodeInterface; +use PHPRegex\Parser\Node\QuantifierBounds; +use PHPRegex\Parser\Node\QuantifierNode; use PHPStan\DependencyInjection\AutowiredService; use PHPStan\Php\PhpVersion; -use PHPStan\ShouldNotHappenException; -use PHPStan\TrinaryLogic; +use PHPStan\Type\Accessory\AccessoryDecimalIntegerStringType; +use PHPStan\Type\Accessory\AccessoryLowercaseStringType; use PHPStan\Type\Accessory\AccessoryNonEmptyStringType; use PHPStan\Type\Accessory\AccessoryNonFalsyStringType; use PHPStan\Type\Accessory\AccessoryNumericStringType; +use PHPStan\Type\Accessory\AccessoryUppercaseStringType; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\IntersectionType; -use PHPStan\Type\Regex\Parser\RegexNode; -use PHPStan\Type\Regex\Parser\RegexParser; -use PHPStan\Type\Regex\Parser\RegexSyntaxException; use PHPStan\Type\StringType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; +use function array_filter; use function array_key_exists; -use function array_pop; -use function array_values; +use function array_unique; use function count; -use function in_array; -use function is_int; -use function preg_replace; -use function rtrim; -use function sscanf; -use function str_contains; -use function str_replace; -use function strlen; -use function substr; -use function trim; - +use function max; +use function spl_object_id; + +/** + * Builds the capturing group list RegexArrayShapeMatcher turns into $matches types. + * + * The value of each group comes from PHPRegex's CaptureShapeAnalyzer. This class + * only walks the tree to find where each group sits: its parent group, and the + * alternation branch it belongs to. + */ #[AutowiredService] final class RegexGroupParser { - private const NOT_SUPPORTED_MODIFIERS = [ - 'J', // rare modifier too complicated to support - ]; - - // upper bound on the number of constant string literals enumerated from a group, - // to avoid combinatorial explosion from nested optional/bounded quantifications - private const LITERALS_LIMIT = 100; - - private const NEGATIVE_ASSERTIONS = ['#negativelookahead', '#negativelookbehind']; - - private const ASSERTIONS = ['#lookahead', '#lookbehind', '#negativelookahead', '#negativelookbehind']; - - private const CONDITIONS = ['#namedcondition', '#absolutecondition', '#relativecondition', '#assertioncondition']; - - private static ?RegexParser $parser = null; - - /** @var array */ - private static array $parsedAst = []; + /** @var array */ + private static array $parsedShapes = []; public function __construct( private PhpVersion $phpVersion, - private RegexExpressionHelper $regexExpressionHelper, + private PHPRegexReader $reader, ) { } public function parseGroups(string $regex): ?RegexAstWalkResult { - self::$parser ??= new RegexParser(); - - if (array_key_exists($regex, self::$parsedAst)) { - $ast = self::$parsedAst[$regex]; - if ($ast === null) { - return null; - } + // the same pattern can be read differently for another PHP or PCRE2 version + $cacheKey = $this->phpVersion->getVersionId() . "\n" . $this->reader->judgedPcreVersion() . "\n" . $regex; - $modifiers = $this->regexExpressionHelper->getPatternModifiers($regex) ?? ''; - } else { - try { - Strings::match('', $regex); - } catch (RegexpException) { - // pattern is invalid, so let the RegularExpressionPatternRule report it - return self::$parsedAst[$regex] = null; - } - - $modifiers = $this->regexExpressionHelper->getPatternModifiers($regex) ?? ''; - foreach (self::NOT_SUPPORTED_MODIFIERS as $notSupportedModifier) { - if (str_contains($modifiers, $notSupportedModifier)) { - return self::$parsedAst[$regex] = null; - } - } - - if (str_contains($modifiers, 'x')) { - // in freespacing mode the # character starts a comment and runs until the end of the line - // but \# is an escaped literal hash, and (?#...) is an inline comment - neither starts a line comment - $regex = preg_replace('/(?regexExpressionHelper->removeDelimitersAndModifiers($regex); - try { - $ast = self::$parser->parse(StringSource::createFromString($rawRegex)); - } catch (ParserExceptionInterface | RegexSyntaxException) { - return self::$parsedAst[$regex] = null; - } - if (!$ast instanceof RegexNode) { - throw new ShouldNotHappenException(); - } - if ($this->containsSubroutineCall($ast)) { - // a subroutine call matches what another group matches, but it does not set that group - return self::$parsedAst[$regex] = null; - } - self::$parsedAst[$regex] = $ast; + if (array_key_exists($cacheKey, self::$parsedShapes)) { + return self::$parsedShapes[$cacheKey]; } - $this->updateAlternationAstRemoveVerticalBarsAndAddEmptyToken($ast); - $this->updateCapturingAstAddEmptyToken($ast); - - $captureOnlyNamed = false; - if ($this->phpVersion->supportsPregCaptureOnlyNamedGroups()) { - $captureOnlyNamed = str_contains($modifiers, 'n'); + $ast = $this->reader->readExpression($regex); + if ($ast === null) { + return self::$parsedShapes[$cacheKey] = null; } - $astWalkResult = $this->walkRegexAst( - $ast, - null, - 0, - false, - null, - $captureOnlyNamed, - false, - $modifiers, - RegexAstWalkResult::createEmpty(), - ); - - $subjectAsGroupResult = $this->walkGroupAst( - $ast, - false, - $modifiers, - RegexGroupWalkResult::createEmpty(), - ); - - if (!$subjectAsGroupResult->mightContainEmptyStringLiteral() && !$this->containsEscapeK($ast)) { - // we could handle numeric-string, in case we know the regex is delimited by ^ and $ - if ($subjectAsGroupResult->isNonFalsy()->yes()) { - $astWalkResult = $astWalkResult->withSubjectBaseType( - new IntersectionType([new StringType(), new AccessoryNonFalsyStringType()]), - ); - } elseif ($subjectAsGroupResult->isNonEmpty()->yes()) { - $astWalkResult = $astWalkResult->withSubjectBaseType( - new IntersectionType([new StringType(), new AccessoryNonEmptyStringType()]), - ); - } - } + $shape = (new CaptureShapeAnalyzer())->analyze($ast); - return $astWalkResult; + return self::$parsedShapes[$cacheKey] = $this->buildWalkResult($shape, $ast->pattern); } - private function createEmptyTokenRegexNode(): RegexNode + private function buildWalkResult(CaptureShape $shape, NodeInterface $pattern): RegexAstWalkResult { - return new RegexNode('token', 'literal', ''); - } + $topology = new RegexTopology(); + $this->place($pattern, $topology, null, null, 0); - private function containsSubroutineCall(RegexNode $ast): bool - { - if ($ast->getId() === 'token' && $ast->getValueToken() === 'subroutine') { - return true; + $walkResult = RegexAstWalkResult::createEmpty(); + foreach ($shape->marks as $mark) { + $walkResult = $walkResult->markVerb($mark); } - foreach ($ast->getChildren() as $child) { - if ($this->containsSubroutineCall($child)) { - return true; - } + $alternations = []; + foreach ($topology->getAlternations() as $node) { + $walkResult = $walkResult->nextAlternationId(); + $alternations[spl_object_id($node)] = new RegexAlternation( + $walkResult->getAlternationId(), + $topology->getBranchCount($node), + ); } - return false; - } + $walkResult = $this->addGroups($shape, $topology, $alternations, $walkResult); - private function updateAlternationAstRemoveVerticalBarsAndAddEmptyToken(RegexNode $ast): void - { - $children = $ast->getChildren(); + $containsEscapeK = $this->containsEscapeK($pattern); - foreach ($children as $i => $child) { - $this->updateAlternationAstRemoveVerticalBarsAndAddEmptyToken($child); + return $walkResult + ->withSubjectBaseType($containsEscapeK ? new StringType() : $this->typeOf($shape->whole)) + ->withSubjectNarrowType($this->subjectNarrowType($shape)) + // a scan resumes after an empty match, where a zero-width first branch like ^ no longer matches + ->withScanBaseType($shape->scanWhole === null || $containsEscapeK ? null : $this->typeOf($shape->scanWhole)) + ->withCases($this->cases($shape)); + } - if ($ast->getId() !== '#alternation' || $child->getValueToken() !== 'alternation') { + /** + * Creates the group objects in tree order, so that a parent group, capturing + * or not, exists before its children. + * + * @param array $alternations by alternation node id + */ + private function addGroups(CaptureShape $shape, RegexTopology $topology, array $alternations, RegexAstWalkResult $walkResult): RegexAstWalkResult + { + $everyBranchAlternations = $this->alternationsCapturingInEveryBranch($topology); + $placementsByNumber = $topology->getPlacementsByNumber(); + + $groupShapes = []; + foreach ($shape->groups as $groupShape) { + $groupShapes[$groupShape->number] = $groupShape; + } + + /** @var array $objects by node id */ + $objects = []; + /** @var array $capturingGroups by number */ + $capturingGroups = []; + foreach ($topology->getPlacements() as $placement) { + $parent = $placement->getParentNodeId() !== null ? ($objects[$placement->getParentNodeId()] ?? null) : null; + $number = $placement->getNumber(); + + if ($number === null) { + $objects[$placement->getNodeId()] = new RegexNonCapturingGroup( + $placement->getAlternation() !== null ? ($alternations[spl_object_id($placement->getAlternation())] ?? null) : null, + $placement->inOptionalQuantification(), + $parent, + $placement->resetsGroupCounter(), + ); continue; } - unset($children[$i]); - - if ($i !== 0 - && isset($children[$i + 1]) - && $children[$i + 1]->getValueToken() !== 'alternation') { + // in a branch reset, several nodes share one group number + if (isset($capturingGroups[$number])) { + $objects[$placement->getNodeId()] = $capturingGroups[$number]; continue; } - $children[$i] = $this->createEmptyTokenRegexNode(); - } - - $ast->setChildren(array_values($children)); - } - - private function updateCapturingAstAddEmptyToken(RegexNode $ast): void - { - foreach ($ast->getChildren() as $child) { - $this->updateCapturingAstAddEmptyToken($child); - } - - if ($ast->getId() !== '#capturing' || $ast->getChildren() !== []) { - return; - } - - $ast->setChildren([new RegexNode('#alternation', children: [$this->createEmptyTokenRegexNode()])]); - } - - private function containsEscapeK(RegexNode $ast): bool - { - if ($ast->getId() === 'token' && $ast->getValueToken() === 'match_point_reset') { - return true; - } - - foreach ($ast->getChildren() as $child) { - if ($this->containsEscapeK($child)) { - return true; + $groupShape = $groupShapes[$number] ?? null; + if ($groupShape === null) { + continue; } - } - - return false; - } - - private function walkRegexAst( - RegexNode $ast, - ?RegexAlternation $alternation, - int $combinationIndex, - bool $inOptionalQuantification, - RegexCapturingGroup|RegexNonCapturingGroup|null $parentGroup, - bool $captureOnlyNamed, - bool $repeatedMoreThanOnce, - string $patternModifiers, - RegexAstWalkResult $astWalkResult, - ): RegexAstWalkResult - { - $group = null; - if ($ast->getId() === '#capturing') { - $astWalkResult = $astWalkResult->nextCaptureGroupId(); - $group = new RegexCapturingGroup( - $astWalkResult->getCaptureGroupId(), - null, - $alternation, - $inOptionalQuantification, - $parentGroup, - $this->createGroupType( - $ast, - $this->allowConstantTypes($patternModifiers, $repeatedMoreThanOnce, $parentGroup), - $patternModifiers, - ), - ); - $parentGroup = $group; - } elseif ($ast->getId() === '#namedcapturing') { - $astWalkResult = $astWalkResult->nextCaptureGroupId(); + // a number captured in several branches of a branch reset sits where its + // last placement does, and in the branches of all of them + $placements = $placementsByNumber[$number]; + $last = $placements[count($placements) - 1]; + $groupAlternation = $last->getAlternation(); + $inOptional = $last->inOptionalQuantification(); + + // a branch reset whose groups all capture in every branch sets them all, whichever branch matches + if ($groupAlternation !== null && isset($everyBranchAlternations[spl_object_id($groupAlternation)])) { + $groupAlternation = null; + } + + // e.g. a group inside (?(DEFINE)...): it is numbered but never set + $neverMatched = $groupShape->participation === Participation::Never(); + $type = $neverMatched + ? new ConstantStringType('') + : $this->typeOf($groupShape); + + // the analysis can know that a group may be unset for reasons the tree + // walk does not see, e.g. a (*ACCEPT) before it or a negative lookaround around it + $unsetUnseen = $neverMatched + || ( + $groupShape->participation === Participation::MayBeUnset() + && !$inOptional + && ($parent === null || !$parent->isOptional()) + && ($groupAlternation === null || $this->mayBeUnsetInItsBranch($shape, $number)) + ); + if ($unsetUnseen) { + $inOptional = true; + } - $name = $ast->getChild(0)->getValueValue(); + $alternation = $groupAlternation !== null ? ($alternations[spl_object_id($groupAlternation)] ?? null) : null; $group = new RegexCapturingGroup( - $astWalkResult->getCaptureGroupId(), - $name, + $groupShape->number, + $groupShape->name, $alternation, - $inOptionalQuantification, - $parentGroup, - $this->createGroupType( - $ast, - $this->allowConstantTypes($patternModifiers, $repeatedMoreThanOnce, $parentGroup), - $patternModifiers, - ), + $inOptional, + $parent, + $type, + neverMatched: $neverMatched, ); - $parentGroup = $group; - } elseif ($ast->getId() === '#noncapturing') { - $group = new RegexNonCapturingGroup( - $alternation, - $inOptionalQuantification, - $parentGroup, - false, - ); - $parentGroup = $group; - } elseif ($ast->getId() === '#noncapturingreset') { - $group = new RegexNonCapturingGroup( - $alternation, - $inOptionalQuantification, - $parentGroup, - true, - ); - $parentGroup = $group; - } elseif ( - in_array($ast->getId(), self::NEGATIVE_ASSERTIONS, true) - || in_array($ast->getId(), self::CONDITIONS, true) - ) { - // capturing groups in a negative assertion are never set when the whole pattern matches, - // capturing groups in a conditional subpattern are set only when its condition says so - $group = new RegexNonCapturingGroup( - $alternation, - true, - $parentGroup, - false, - ); - $parentGroup = $group; - } - - $inOptionalQuantification = false; - if ($ast->getId() === '#quantification') { - [$min, $max] = $this->getQuantificationRange($ast); - - if ($min === 0) { - $inOptionalQuantification = true; - } + $objects[$placement->getNodeId()] = $group; + $capturingGroups[$number] = $group; - if ($max === null || $max > 1) { - $repeatedMoreThanOnce = true; - } - } + $walkResult = $walkResult->addCapturingGroup($group); - if ($ast->getId() === '#alternation') { - $astWalkResult = $astWalkResult->nextAlternationId(); - $alternation = new RegexAlternation($astWalkResult->getAlternationId(), count($ast->getChildren())); - } - - if ($ast->getId() === '#mark') { - return $astWalkResult->markVerb($ast->getChild(0)->getValueValue()); - } - - if ( - $group instanceof RegexCapturingGroup && - (!$captureOnlyNamed || $group->isNamed()) - ) { - $astWalkResult = $astWalkResult->addCapturingGroup($group); - - if ($alternation !== null) { - $alternation->pushGroup($combinationIndex, $group); - } - } - - foreach ($ast->getChildren() as $child) { - $astWalkResult = $this->walkRegexAst( - $child, - $alternation, - $combinationIndex, - $inOptionalQuantification, - $parentGroup, - $captureOnlyNamed, - $repeatedMoreThanOnce, - $patternModifiers, - $astWalkResult, - ); - - if ($ast->getId() !== '#alternation') { + if ($alternation === null) { continue; } - $combinationIndex++; - } - - return $astWalkResult; - } - - private function allowConstantTypes( - string $patternModifiers, - bool $repeatedMoreThanOnce, - RegexCapturingGroup|RegexNonCapturingGroup|null $parentGroup, - ): bool - { - if (str_contains($patternModifiers, 'i')) { - // if caseless, we don't use constant types - // because it likely yields too many combinations - return false; - } - - if ($repeatedMoreThanOnce) { - return false; - } - - if ($parentGroup !== null && $parentGroup->resetsGroupCounter()) { - return false; + foreach ($placements as $other) { + $alternation->pushGroup($other->getBranch(), $group); + } } - return true; + return $walkResult; } - /** @return array{?int, ?int} */ - private function getQuantificationRange(RegexNode $node): array + /** + * The alternations whose capturing groups all capture in every branch: in such + * a branch reset, every group is set whichever branch matches. + * + * @return array by alternation node id + */ + private function alternationsCapturingInEveryBranch(RegexTopology $topology): array { - if ($node->getId() !== '#quantification') { - throw new ShouldNotHappenException(); - } - - $min = null; - $max = null; - - $children = $node->getChildren(); - $lastChild = $children[count($children) - 1]; - - // normalize away possessive and lazy quantifier-modifiers - $token = str_replace(['_possessive', '_lazy'], '', $lastChild->getValueToken()); - $value = rtrim($lastChild->getValueValue(), '+?'); - - if ($token === 'n_to_m') { - if (sscanf($value, '{%d,%d}', $n, $m) !== 2 || !is_int($n) || !is_int($m)) { - throw new ShouldNotHappenException(); - } - - $min = $n; - $max = $m; - } elseif ($token === 'n_or_more') { - if (sscanf($value, '{%d,}', $n) !== 1 || !is_int($n)) { - throw new ShouldNotHappenException(); + $everyBranch = []; + foreach ($topology->getPlacementsByNumber() as $placements) { + $alternation = $placements[count($placements) - 1]->getAlternation(); + if ($alternation === null) { + continue; } - $min = $n; - } elseif ($token === 'exactly_n') { - if (sscanf($value, '{%d}', $n) !== 1 || !is_int($n)) { - throw new ShouldNotHappenException(); + $branches = []; + foreach ($placements as $placement) { + $branches[] = $placement->getBranch(); } - $min = $n; - $max = $n; - } elseif ($token === 'zero_or_one') { - $min = 0; - $max = 1; - } elseif ($token === 'zero_or_more') { - $min = 0; - } elseif ($token === 'one_or_more') { - $min = 1; + $id = spl_object_id($alternation); + $inEveryBranch = count(array_unique($branches)) === $topology->getBranchCount($alternation); + $everyBranch[$id] = ($everyBranch[$id] ?? true) && $inEveryBranch; } - return [$min, $max]; + return array_filter($everyBranch); } - private function createGroupType(RegexNode $group, bool $maybeConstant, string $patternModifiers): Type + /** + * A pattern pinned at both ends tells what the whole subject holds, a final newline + * included where $ lets one through; otherwise the subject contains the match, + * so it is non-empty or non-falsy when the match is. + */ + private function subjectNarrowType(CaptureShape $shape): Type { - $rootAlternation = $this->getRootAlternation($group); - if ($rootAlternation !== null) { - $types = []; - foreach ($rootAlternation->getChildren() as $alternative) { - $types[] = $this->createGroupType($alternative, $maybeConstant, $patternModifiers); - } - - return TypeCombinator::union(...$types); + if ($shape->subject !== null) { + return $this->typeOf($shape->subject); } - $walkResult = $this->walkGroupAst( - $group, - false, - $patternModifiers, - RegexGroupWalkResult::createEmpty(), - ); - - if ($maybeConstant && $walkResult->getOnlyLiterals() !== null && $walkResult->getOnlyLiterals() !== []) { - $result = []; - foreach ($walkResult->getOnlyLiterals() as $literal) { - $result[] = new ConstantStringType($literal); - - } - return TypeCombinator::union(...$result); + if ($shape->whole->nonFalsy) { + return new IntersectionType([new StringType(), new AccessoryNonFalsyStringType()]); } - if ($walkResult->isNumeric()->yes()) { - if ($walkResult->isNonFalsy()->yes()) { - return new IntersectionType([ - new StringType(), - new AccessoryNumericStringType(), - new AccessoryNonFalsyStringType(), - ]); - } - - $result = new IntersectionType([new StringType(), new AccessoryNumericStringType()]); - if (!$walkResult->isNonEmpty()->yes()) { - return new UnionType([new ConstantStringType(''), $result]); - } - return $result; - } elseif ($walkResult->isNonFalsy()->yes()) { - return new IntersectionType([new StringType(), new AccessoryNonFalsyStringType()]); - } elseif ($walkResult->isNonEmpty()->yes()) { + if ($shape->whole->minLength >= 1) { return new IntersectionType([new StringType(), new AccessoryNonEmptyStringType()]); } return new StringType(); } - private function getRootAlternation(RegexNode $group): ?RegexNode - { - if ( - $group->getId() === '#capturing' - && count($group->getChildren()) === 1 - && $group->getChild(0)->getId() === '#alternation' - ) { - return $group->getChild(0); - } - - // 1st token within a named capturing group is a token holding the group-name - if ( - $group->getId() === '#namedcapturing' - && count($group->getChildren()) === 2 - && $group->getChild(1)->getId() === '#alternation' - ) { - return $group->getChild(1); - } - - return null; - } - - private function walkGroupAst( - RegexNode $ast, - bool $inClass, - string $patternModifiers, - RegexGroupWalkResult $walkResult, - ): RegexGroupWalkResult + /** + * The analysis splits a pattern into cases whose union covers every match, + * e.g. an optional group that runs with its nested groups or is skipped with them. + * + * @return list> + */ + private function cases(CaptureShape $shape): array { - if (in_array($ast->getId(), self::ASSERTIONS, true)) { - // assertions are zero-width, they do not add anything to the matched string - return $walkResult; - } - - if (in_array($ast->getId(), self::CONDITIONS, true)) { - // which branch of a conditional subpattern matches is not known, it might match an empty string - return $walkResult->onlyLiterals(null)->numeric(TrinaryLogic::createNo()); - } - - $children = $ast->getChildren(); - $quantifiedLiterals = null; - - if ( - $ast->getId() === '#concatenation' - && count($children) > 0 - && !$walkResult->isInOptionalQuantification() - ) { - $meaningfulTokens = 0; - foreach ($children as $child) { - $nonFalsy = false; - if ($this->isMaybeEmptyNode($child, $patternModifiers, $nonFalsy)) { - continue; - } - - $meaningfulTokens++; - - if (!$nonFalsy) { - continue; - } - - // a single token non-falsy on its own - $walkResult = $walkResult->nonFalsy(TrinaryLogic::createYes()); - break; - } - - if ($meaningfulTokens > 0) { - $walkResult = $walkResult->nonEmpty(TrinaryLogic::createYes()); - - // two non-empty tokens concatenated results in a non-falsy string - if ($meaningfulTokens > 1) { - $walkResult = $walkResult->nonFalsy(TrinaryLogic::createYes()); - } - } - } elseif ($ast->getId() === '#quantification') { - [$min, $max] = $this->getQuantificationRange($ast); - - if ($min === 0) { - $walkResult = $walkResult->inOptionalQuantification(true); - } - - // repeating an atom that might match an empty string might match an empty string too - $atomNonFalsy = false; - if (!$walkResult->isInOptionalQuantification() && !$this->isMaybeEmptyNode($children[0], $patternModifiers, $atomNonFalsy)) { - if ($min >= 1) { - $walkResult = $walkResult->nonEmpty(TrinaryLogic::createYes()); - } - if ($min >= 2) { - $walkResult = $walkResult->nonFalsy(TrinaryLogic::createYes()); - } - } - - // "a?" yields 'a'|'', "a{1,2}" yields 'a'|'aa', etc. so a bounded quantification - // over constant literals can be combined with the surrounding literals - $quantifiedLiterals = $this->getQuantifiedLiterals($ast, $min, $max, $inClass, $patternModifiers, $walkResult); - - $walkResult = $walkResult->onlyLiterals(null); - } elseif ($ast->getId() === '#class' && $walkResult->getOnlyLiterals() !== null) { - $inClass = true; - - $newLiterals = []; - foreach ($children as $child) { - $oldLiterals = $walkResult->getOnlyLiterals(); - - $this->getLiteralValue($child, $oldLiterals, true, $patternModifiers, true); - foreach ($oldLiterals ?? [] as $oldLiteral) { - $newLiterals[] = $oldLiteral; - } - } - $walkResult = $walkResult->onlyLiterals($newLiterals); - } elseif ($ast->getId() === 'token') { - $onlyLiterals = $walkResult->getOnlyLiterals(); - $literalValue = $this->getLiteralValue($ast, $onlyLiterals, !$inClass, $patternModifiers, false); - $walkResult = $walkResult->onlyLiterals($onlyLiterals); - - if ($ast->getValueToken() === 'backreference') { - // matches what another group matched, the content is not known - $walkResult = $walkResult->numeric(TrinaryLogic::createNo()); - } - - if ($literalValue !== null) { - if (Strings::match($literalValue, '/^\d+$/') === null) { - $walkResult = $walkResult->numeric(TrinaryLogic::createNo()); - } elseif ($walkResult->isNumeric()->maybe()) { - $walkResult = $walkResult->numeric(TrinaryLogic::createYes()); - } - - if (!$walkResult->isInOptionalQuantification() && $literalValue !== '') { - $walkResult = $walkResult->nonEmpty(TrinaryLogic::createYes()); + $cases = []; + foreach ($shape->cases as $case) { + $participations = []; + foreach ($case->groups as $groupShape) { + if ($groupShape->participation === Participation::Always()) { + $participations[$groupShape->number] = true; + } elseif ($groupShape->participation === Participation::Never()) { + $participations[$groupShape->number] = false; } } - } elseif (!in_array($ast->getId(), ['#capturing', '#namedcapturing', '#alternation'], true)) { - $walkResult = $walkResult->onlyLiterals(null); + $cases[] = $participations; } - if ($ast->getId() === '#alternation') { - if (count($children) === 0) { - return $walkResult; - } - - // literals accumulated before the alternation form a common prefix that has to be - // combined with every branch, e.g. "a(b|c)" yields "ab"|"ac", not "b"|"c" - $prefixLiterals = $walkResult->getOnlyLiterals(); - $newLiterals = []; - $nonEmpty = TrinaryLogic::createYes(); - $nonFalsy = TrinaryLogic::createYes(); - $numeric = TrinaryLogic::createYes(); - foreach ($children as $child) { - $childResult = $this->walkGroupAst( - $child, - $inClass, - $patternModifiers, - $walkResult->onlyLiterals([]) - ->nonEmpty(TrinaryLogic::createMaybe()) - ->nonFalsy(TrinaryLogic::createMaybe()) - ->numeric(TrinaryLogic::createMaybe()), - ); - - $nonEmpty = $nonEmpty->and($childResult->isNonEmpty()); - $nonFalsy = $nonFalsy->and($childResult->isNonFalsy()); - $numeric = $numeric->and($childResult->isNumeric()); - - if ($newLiterals === null) { - continue; - } - - $childLiterals = $childResult->getOnlyLiterals(); - if ($prefixLiterals === null || $childLiterals === null || count($childLiterals) === 0) { - $newLiterals = null; - continue; - } - - foreach ($childLiterals as $childLiteral) { - if ($prefixLiterals === []) { - $newLiterals[] = $childLiteral; - } else { - foreach ($prefixLiterals as $prefixLiteral) { - $newLiterals[] = $prefixLiteral . $childLiteral; - } - } - } - } - - return $walkResult - ->onlyLiterals($newLiterals) - ->nonEmpty($walkResult->isNonEmpty()->or($nonEmpty)) - ->nonFalsy($walkResult->isNonFalsy()->or($nonFalsy)) - ->numeric($walkResult->isNumeric()->and($numeric)); - } - - // [^0-9] should not parse as numeric-string, and [^list-everything-but-numbers] is technically - // doable but really silly compared to just \d so we can safely assume the string is not numeric - // for negative classes - if ($ast->getId() === '#negativeclass') { - $walkResult = $walkResult->numeric(TrinaryLogic::createNo()); - } - - foreach ($children as $child) { - $walkResult = $this->walkGroupAst( - $child, - $inClass, - $patternModifiers, - $walkResult, - ); - } - - if ($ast->getId() === '#quantification') { - // the bottom walk above nulls the literals via the quantifier token, - // so restore the literals enumerated up-front for bounded quantifications - $walkResult = $walkResult->onlyLiterals($quantifiedLiterals); - } - - return $walkResult; + return $cases; } /** - * Enumerate the constant strings a bounded quantification (like "a?", "a{2}", "a{1,3}") - * produces, combined with the literals accumulated so far. Returns null when the result - * cannot be enumerated (unbounded quantifier, non-literal atom, or too many combinations). - * - * @return array|null + * Whether a group of an alternation may be unset even when its branch matches, + * e.g. (c) in /(a)|b(*ACCEPT)(c)/. Each case of the shape covers the matches of one branch. */ - private function getQuantifiedLiterals(RegexNode $ast, ?int $min, ?int $max, bool $inClass, string $patternModifiers, RegexGroupWalkResult $walkResult): ?array + private function mayBeUnsetInItsBranch(CaptureShape $shape, int $number): bool { - $prefixLiterals = $walkResult->getOnlyLiterals(); - if ($prefixLiterals === null || $min === null || $max === null) { - return null; - } - - // walk the quantified atom standalone (everything but the trailing quantifier token); - // the atom itself is not optional, so reset the flag to let concatenations accumulate literals - $atomChildren = $ast->getChildren(); - array_pop($atomChildren); - - $atomResult = $walkResult->onlyLiterals([])->inOptionalQuantification(false); - foreach ($atomChildren as $atomChild) { - $atomResult = $this->walkGroupAst($atomChild, $inClass, $patternModifiers, $atomResult); - } - - $atomLiterals = $atomResult->getOnlyLiterals(); - if ($atomLiterals === null) { - return null; - } - - $repeatedLiterals = $this->repeatLiterals($atomLiterals, $min, $max); - if ($repeatedLiterals === null) { - return null; - } - - $newLiterals = []; - foreach ($repeatedLiterals as $repeatedLiteral) { - if ($prefixLiterals === []) { - $newLiterals[] = $repeatedLiteral; - } else { - foreach ($prefixLiterals as $prefixLiteral) { - $newLiterals[] = $prefixLiteral . $repeatedLiteral; - } - } - - if (count($newLiterals) > self::LITERALS_LIMIT) { - return null; + foreach ($shape->cases as $case) { + if (isset($case->groups[$number]) && $case->groups[$number]->participation === Participation::MayBeUnset()) { + return true; } } - return $newLiterals; + return false; } /** - * @param array $literals - * @return array|null + * Numbers the capturing groups the way PCRE does, and records for each one + * its parent group, the alternation above it and its branch in that alternation. */ - private function repeatLiterals(array $literals, int $min, int $max): ?array + private function place( + NodeInterface $node, + RegexTopology $topology, + ?int $parentId, + ?NodeInterface $alternation, + int $branch, + bool $inOptionalQuantification = false, + bool $inRepetition = false, + ): void { - $collected = []; - if ($min === 0) { - $collected[''] = ''; - } - - $current = ['']; - for ($k = 1; $k <= $max; $k++) { - $next = []; - foreach ($current as $prefix) { - foreach ($literals as $literal) { - $next[] = $prefix . $literal; - } - - if (count($next) > self::LITERALS_LIMIT) { - return null; + if ($node instanceof AlternationNode) { + // a repeated alternation sets the groups of several branches: /(?:(a)|(b))+/ writes ['ab', 'a', 'b'] + if ($inRepetition) { + foreach ($node->alternatives as $alternative) { + $this->place($alternative, $topology, $parentId, null, 0, false, true); } - } - $current = $next; - if ($k < $min) { - continue; + return; } - foreach ($current as $value) { - $collected[$value] = $value; + $topology->addAlternation($node, count($node->alternatives)); + foreach ($node->alternatives as $i => $alternative) { + $this->place($alternative, $topology, $parentId, $node, $i); } - if (count($collected) > self::LITERALS_LIMIT) { - return null; - } + return; } - return array_values($collected); - } + if ($node instanceof DefineNode) { + // groups inside (?(DEFINE)...) are never set; an optional parent makes them optional + $topology->addPlacement(new RegexGroupPlacement(spl_object_id($node), null, $parentId, $alternation, $branch, true, false)); + $this->place($node->content, $topology, spl_object_id($node), null, 0, false, $inRepetition); - private function isMaybeEmptyNode(RegexNode $node, string $patternModifiers, bool &$isNonFalsy): bool - { - if (in_array($node->getId(), self::ASSERTIONS, true) || in_array($node->getId(), self::CONDITIONS, true)) { - return true; + return; } - if ($node->getId() === '#quantification') { - [$min] = $this->getQuantificationRange($node); + if ($node instanceof ConditionalNode && !$inRepetition) { + // groups in a lookaround condition are numbered first; only one of the + // two branches runs, so they are read like an alternation + $topology->addAlternation($node, 2); + $this->place($node->condition, $topology, $parentId, null, 0); + $this->place($node->yes, $topology, $parentId, $node, 0); + $this->place($node->no, $topology, $parentId, $node, 1); - if ($min > 0) { - $atomNonFalsy = false; - return $this->isMaybeEmptyNode($node->getChildren()[0], $patternModifiers, $atomNonFalsy); - } - - if ($min === 0) { - return true; - } + return; } - $literal = $this->getLiteralValue($node, $onlyLiterals, false, $patternModifiers, false); - if ($literal !== null) { - if ($literal !== '' && $literal !== '0') { - $isNonFalsy = true; - } - return $literal === ''; + // only the node directly under the quantifier is marked optional, + // nested groups get it through their parent + if ($node instanceof QuantifierNode) { + $bounds = QuantifierBounds::parse($node->quantifier); + $this->place( + $node->node, + $topology, + $parentId, + $alternation, + $branch, + $bounds !== null && $bounds->min === 0, + $inRepetition || $bounds === null || $bounds->max === null || $bounds->max > 1, + ); + + return; } - // an alternation is maybe-empty if any of its branches is maybe-empty, - // and non-falsy only if every branch is non-falsy - if ($node->getId() === '#alternation') { - $maybeEmpty = false; - $allNonFalsy = true; - foreach ($node->getChildren() as $child) { - $childNonFalsy = false; - if ($this->isMaybeEmptyNode($child, $patternModifiers, $childNonFalsy)) { - $maybeEmpty = true; - } - $allNonFalsy = $allNonFalsy && $childNonFalsy; + if ($node instanceof GroupNode && $node->type === GroupType::BranchReset()) { + // (?|...): every branch numbers its groups from the same number, + // and the group after it continues after the longest branch + $topology->addPlacement(new RegexGroupPlacement(spl_object_id($node), null, $parentId, $alternation, $branch, $inOptionalQuantification, true)); + $base = $topology->getNextNumber(); + $end = $base; + $branchAlternation = $node->child instanceof AlternationNode && !$inRepetition ? $node->child : null; + if ($branchAlternation !== null) { + $topology->addAlternation($branchAlternation, count($branchAlternation->alternatives)); + $branches = $branchAlternation->alternatives; + } else { + $branches = $node->child instanceof AlternationNode ? $node->child->alternatives : [$node->child]; } - - if ($allNonFalsy) { - $isNonFalsy = true; + foreach ($branches as $i => $branchNode) { + $topology->setNextNumber($base); + $this->place($branchNode, $topology, spl_object_id($node), $branchAlternation, $branchAlternation === null ? 0 : $i, $inOptionalQuantification, $inRepetition); + $end = max($end, $topology->getNextNumber()); } + $topology->setNextNumber($end); - return $maybeEmpty; + return; } - foreach ($node->getChildren() as $child) { - if (!$this->isMaybeEmptyNode($child, $patternModifiers, $isNonFalsy)) { - return false; - } + if ($node instanceof GroupNode) { + $capturing = $node->type === GroupType::Capturing() || $node->type === GroupType::Named(); + $topology->addPlacement(new RegexGroupPlacement(spl_object_id($node), $capturing ? $topology->takeNumber() : null, $parentId, $alternation, $branch, $inOptionalQuantification, false)); + $parentId = spl_object_id($node); } - return true; + foreach ($node->getChildren() as $child) { + $this->place($child, $topology, $parentId, $alternation, $branch, false, $inRepetition); + } } /** - * @param array|null $onlyLiterals + * A group that reads either constants or digits, like (a|\d), keeps each arm: 'a'|numeric-string. */ - private function getLiteralValue(RegexNode $node, ?array &$onlyLiterals, bool $appendLiterals, string $patternModifiers, bool $inCharacterClass): ?string + private function typeOf(CaptureGroupShape $shape): Type { - if ($node->getId() !== 'token') { - return null; + if ($shape->arms === []) { + return $this->stringTypeOf($shape); } - // token is the token name from grammar without the namespace so literal and class:literal are both called literal here - $token = $node->getValueToken(); - $value = $node->getValueValue(); - - if ( - in_array($token, [ - 'literal', - // literal "-" in front/back of a character class like '[-a-z]' or '[abc-]', not forming a range - 'range', - // literal "[" or "]" inside character classes '[[]' or '[]]' - 'class_', '_class', - ], true) - ) { - if (str_contains($patternModifiers, 'x') && trim($value) === '') { - return null; - } + $types = []; + foreach ($shape->arms as $arm) { + $types[] = $this->stringTypeOf($arm); + } - $isEscaped = false; - if (strlen($value) > 1 && $value[0] === '\\') { - $value = substr($value, 1) ?: ''; - $isEscaped = true; - } + return TypeCombinator::union(...$types); + } - if ( - $appendLiterals - && $onlyLiterals !== null - ) { - if ( - in_array($value, ['.'], true) - && !($isEscaped || $inCharacterClass) - ) { - $onlyLiterals = null; - } else { - if ($onlyLiterals === []) { - $onlyLiterals = [$value]; - } else { - foreach ($onlyLiterals as &$literal) { - $literal .= $value; - } - } - } + private function stringTypeOf(CaptureGroupShape $shape): Type + { + if ($shape->values !== null && $shape->values !== []) { + $types = []; + foreach ($shape->values as $value) { + $types[] = new ConstantStringType($value); } - return $value; + return TypeCombinator::union(...$types); } - if (!in_array($token, ['capturing_name'], true)) { - $onlyLiterals = null; + $accessories = []; + if ($shape->decimalInt) { + $accessories[] = new AccessoryDecimalIntegerStringType(); + } elseif ($shape->digitsOnly) { + $accessories[] = new AccessoryNumericStringType(); + } + if ($shape->nonFalsy) { + $accessories[] = new AccessoryNonFalsyStringType(); + } elseif ($shape->minLength >= 1 && !$shape->digitsOnly && !$shape->decimalInt) { + $accessories[] = new AccessoryNonEmptyStringType(); + } + // a case is kept when it alone holds: a value with no letter, digits among them, is both + if (!$shape->digitsOnly && !$shape->decimalInt && $shape->lowercase !== $shape->uppercase) { + $accessories[] = $shape->lowercase ? new AccessoryLowercaseStringType() : new AccessoryUppercaseStringType(); } - // character escape sequences, just return a fixed string - if (in_array($token, ['character', 'dynamic_character', 'character_type'], true)) { - if ($token === 'character_type' && $value === '\d') { - return '0'; - } + $type = $accessories === [] ? new StringType() : new IntersectionType([new StringType(), ...$accessories]); - return $value; + // a run of digits of any length is digits or the empty string + if ($shape->digitsOnly && !$shape->decimalInt && $shape->minLength === 0) { + return new UnionType([new ConstantStringType(''), $type]); } - // [:digit:] and the like, more support coming later - if ($token === 'posix_class') { - if ($value === '[:digit:]') { - return '0'; - } - if (in_array($value, ['[:alpha:]', '[:alnum:]', '[:upper:]', '[:lower:]', '[:word:]', '[:ascii:]', '[:print:]', '[:xdigit:]', '[:graph:]'], true)) { - return 'a'; - } - if ($value === '[:blank:]') { - return " \t"; - } - if ($value === '[:cntrl:]') { - return "\x00\x1F"; - } - if ($value === '[:space:]') { - return " \t\r\n\v\f"; - } - if ($value === '[:punct:]') { - return '!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~'; - } + return $type; + } + + private function containsEscapeK(NodeInterface $node): bool + { + if ($node instanceof KeepNode) { + return true; } - if (in_array($token, ['anchor', 'match_point_reset'], true)) { - return ''; + foreach ($node->getChildren() as $child) { + if ($this->containsEscapeK($child)) { + return true; + } } - return null; + return false; } } diff --git a/src/Type/Regex/RegexGroupPlacement.php b/src/Type/Regex/RegexGroupPlacement.php new file mode 100644 index 00000000000..e561c49d6be --- /dev/null +++ b/src/Type/Regex/RegexGroupPlacement.php @@ -0,0 +1,61 @@ +nodeId; + } + + public function getNumber(): ?int + { + return $this->number; + } + + public function getParentNodeId(): ?int + { + return $this->parentNodeId; + } + + public function getAlternation(): ?NodeInterface + { + return $this->alternation; + } + + public function getBranch(): int + { + return $this->branch; + } + + public function inOptionalQuantification(): bool + { + return $this->inOptionalQuantification; + } + + public function resetsGroupCounter(): bool + { + return $this->resetsGroupCounter; + } + +} diff --git a/src/Type/Regex/RegexGroupWalkResult.php b/src/Type/Regex/RegexGroupWalkResult.php deleted file mode 100644 index 9169af89ba5..00000000000 --- a/src/Type/Regex/RegexGroupWalkResult.php +++ /dev/null @@ -1,135 +0,0 @@ -|null $onlyLiterals - */ - public function __construct( - private bool $inOptionalQuantification, - private ?array $onlyLiterals, - private TrinaryLogic $isNonEmpty, - private TrinaryLogic $isNonFalsy, - private TrinaryLogic $isNumeric, - ) - { - } - - public static function createEmpty(): self - { - return new self( - false, - [], - TrinaryLogic::createMaybe(), - TrinaryLogic::createMaybe(), - TrinaryLogic::createMaybe(), - ); - } - - public function inOptionalQuantification(bool $inOptionalQuantification): self - { - return new self( - $inOptionalQuantification, - $this->onlyLiterals, - $this->isNonEmpty, - $this->isNonFalsy, - $this->isNumeric, - ); - } - - /** - * @param array|null $onlyLiterals - */ - public function onlyLiterals(?array $onlyLiterals): self - { - return new self( - $this->inOptionalQuantification, - $onlyLiterals, - $this->isNonEmpty, - $this->isNonFalsy, - $this->isNumeric, - ); - } - - public function nonEmpty(TrinaryLogic $nonEmpty): self - { - return new self( - $this->inOptionalQuantification, - $this->onlyLiterals, - $nonEmpty, - $this->isNonFalsy, - $this->isNumeric, - ); - } - - public function nonFalsy(TrinaryLogic $nonFalsy): self - { - return new self( - $this->inOptionalQuantification, - $this->onlyLiterals, - $this->isNonEmpty, - $nonFalsy, - $this->isNumeric, - ); - } - - public function numeric(TrinaryLogic $numeric): self - { - return new self( - $this->inOptionalQuantification, - $this->onlyLiterals, - $this->isNonEmpty, - $this->isNonFalsy, - $numeric, - ); - } - - public function isInOptionalQuantification(): bool - { - return $this->inOptionalQuantification; - } - - /** - * @return array|null - */ - public function getOnlyLiterals(): ?array - { - return $this->onlyLiterals; - } - - public function mightContainEmptyStringLiteral(): bool - { - if ($this->onlyLiterals === null) { - return false; - } - foreach ($this->onlyLiterals as $onlyLiteral) { - if ($onlyLiteral === '') { - return true; - } - } - - return false; - } - - public function isNonEmpty(): TrinaryLogic - { - return $this->isNonEmpty; - } - - public function isNonFalsy(): TrinaryLogic - { - return $this->isNonFalsy; - } - - public function isNumeric(): TrinaryLogic - { - return $this->isNumeric; - } - -} diff --git a/src/Type/Regex/RegexTopology.php b/src/Type/Regex/RegexTopology.php new file mode 100644 index 00000000000..5d606210121 --- /dev/null +++ b/src/Type/Regex/RegexTopology.php @@ -0,0 +1,93 @@ + */ + private array $alternations = []; + + /** @var array branch count by alternation node id */ + private array $branchCounts = []; + + /** @var list */ + private array $placements = []; + + private int $nextNumber = 1; + + public function addAlternation(NodeInterface $node, int $branches): void + { + $this->alternations[] = $node; + $this->branchCounts[spl_object_id($node)] = $branches; + } + + public function addPlacement(RegexGroupPlacement $placement): void + { + $this->placements[] = $placement; + } + + public function takeNumber(): int + { + return $this->nextNumber++; + } + + public function getNextNumber(): int + { + return $this->nextNumber; + } + + public function setNextNumber(int $number): void + { + $this->nextNumber = $number; + } + + /** + * @return list + */ + public function getAlternations(): array + { + return $this->alternations; + } + + public function getBranchCount(NodeInterface $alternation): int + { + return $this->branchCounts[spl_object_id($alternation)]; + } + + /** + * @return list + */ + public function getPlacements(): array + { + return $this->placements; + } + + /** + * The placements of each capturing group number, in tree order: several + * in a branch reset, where one number is captured in several branches. + * + * @return array> + */ + public function getPlacementsByNumber(): array + { + $byNumber = []; + foreach ($this->placements as $placement) { + if ($placement->getNumber() === null) { + continue; + } + + $byNumber[$placement->getNumber()][] = $placement; + } + + return $byNumber; + } + +} diff --git a/stubs/core.stub b/stubs/core.stub index 32d59f2b10d..942861c728f 100644 --- a/stubs/core.stub +++ b/stubs/core.stub @@ -286,9 +286,20 @@ function preg_match_all($pattern, $subject, &$matches = [], int $flags = 1, int */ function preg_match($pattern, $subject, &$matches = [], int $flags = 0, int $offset = 0) {} +// $flags: 256 is PREG_OFFSET_CAPTURE, 512 is PREG_UNMATCHED_AS_NULL, 768 both /** * @param string|string[] $pattern - * @param callable(string[]):string $callback + * @param ( + * $flags is 256 + * ? callable(array):string + * : ($flags is 512 + * ? callable(array):string + * : ($flags is 768 + * ? callable(array):string + * : callable(string[]):string + * ) + * ) + * ) $callback * @param string|array $subject * @param int $count * @param-out 0|positive-int $count diff --git a/tests/PHPStan/Analyser/ResultCache/ResultCacheManagerCollectedDataTest.php b/tests/PHPStan/Analyser/ResultCache/ResultCacheManagerCollectedDataTest.php index 423eee7fcfa..bb4475a50e0 100644 --- a/tests/PHPStan/Analyser/ResultCache/ResultCacheManagerCollectedDataTest.php +++ b/tests/PHPStan/Analyser/ResultCache/ResultCacheManagerCollectedDataTest.php @@ -15,6 +15,7 @@ use PHPStan\File\FileHelper; use PHPStan\File\FileStatSignatures; use PHPStan\Php\ComposerPhpVersionFactory; +use PHPStan\Php\PcreVersion; use PHPStan\Php\PhpVersion; use PHPStan\PhpDoc\StubFilesProvider; use PHPStan\Reflection\BetterReflection\SourceStubber\ExtensionVersionProvider; @@ -320,6 +321,7 @@ private function createManager(): ResultCacheManager skipResultCacheIfOlderThanDays: 7, anchorDirectory: $this->directory, phpVersion: $container->getByType(PhpVersion::class), + pcreVersion: $container->getByType(PcreVersion::class), composerPhpVersionFactory: $container->getByType(ComposerPhpVersionFactory::class), fileStatSignatures: $container->getByType(FileStatSignatures::class), valueDependencyCollector: $container->getByType(ValueDependencyCollector::class), diff --git a/tests/PHPStan/Analyser/data/bug-11292.php b/tests/PHPStan/Analyser/data/bug-11292.php index 7d317e9e6cd..fe6e18189d2 100644 --- a/tests/PHPStan/Analyser/data/bug-11292.php +++ b/tests/PHPStan/Analyser/data/bug-11292.php @@ -8,6 +8,6 @@ function (string $s): void { $nonUrl = "[^-_#$+.!*%'(),;/?:@~=&a-zA-Z0-9\x7f-\xff]"; $pattern = '{\\b(https?://)?(?:([^]\\\\\\x00-\\x20\\"(),:-<>[\\x7f-\\xff]{1,64})(:[^]\\\\\\x00-\\x20\\"(),:-<>[\\x7f-\\xff]{1,64})?@)?((?:[-a-zA-Z0-9\\x7f-\\xff]{1,63}\\.)+[a-zA-Z\\x7f-\\xff][-a-zA-Z0-9\\x7f-\\xff]{1,62})((:[0-9]{1,5})?(/[!$-/0-9:;=@_~\':;!a-zA-Z\\x7f-\\xff]*?)?(\\?[!$-/0-9:;=@_\':;!a-zA-Z\\x7f-\\xff]+?)?(#[!$-/0-9?:;=@_\':;!a-zA-Z\\x7f-\\xff]+?)?)(?=[)\'?.!,;:]*(' . $nonUrl . '|$))}'; if (preg_match($pattern, $s, $matches, PREG_OFFSET_CAPTURE, 0)) { - assertType('array}>', $matches); + assertType("array{array{non-falsy-string, int<0, max>}, array{''|'http://'|'https://', int<-1, max>}, array{string, int<-1, max>}, array{string, int<-1, max>}, array{non-falsy-string, int<0, max>}, array{string, int<0, max>}, array{string, int<-1, max>}, array{string, int<-1, max>}, array{string, int<-1, max>}, array{string, int<-1, max>}, array{string, int<0, max>}}", $matches); } }; diff --git a/tests/PHPStan/Analyser/data/bug-15297-php73.php b/tests/PHPStan/Analyser/data/bug-15297-php73.php index 22a6693f67a..2796193fb60 100644 --- a/tests/PHPStan/Analyser/data/bug-15297-php73.php +++ b/tests/PHPStan/Analyser/data/bug-15297-php73.php @@ -12,16 +12,16 @@ (?:-(?P[a-z]+))? )$/ix"; if (preg_match($pattern, "foobar", $matches, \PREG_UNMATCHED_AS_NULL)) { - assertType("array{0: non-falsy-string, foo1: non-falsy-string, 1: non-falsy-string, bar1?: numeric-string, 2?: numeric-string}|array{0: non-falsy-string, foo1: null, 1: null, bar1: null, 2: null, foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-empty-string, 4?: non-empty-string}", $matches); + assertType('array{0: non-falsy-string, foo1: non-falsy-string, 1: non-falsy-string, bar1?: numeric-string, 2?: numeric-string}|array{0: non-falsy-string, foo1: null, 1: null, bar1: null, 2: null, foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-falsy-string, 4?: non-falsy-string}', $matches); $foo = $matches["foo1"] ?? $matches["foo2"] ?? ""; $bar = $matches["bar1"] ?? $matches["bar2"] ?? ""; } function (string $s): void { if (preg_match('/(a)?(b)?(c)/', $s, $matches, \PREG_UNMATCHED_AS_NULL)) { - assertType("array{non-falsy-string, 'a'|null, 'b'|null, 'c'}", $matches); + assertType("array{'abc'|'ac'|'bc'|'c', 'a'|null, 'b'|null, 'c'}", $matches); } if (preg_match('/(a)(b)?(c)?/', $s, $matches, \PREG_UNMATCHED_AS_NULL)) { - assertType("list{0: non-falsy-string, 1: 'a', 2?: 'b'|null, 3?: 'c'}", $matches); + assertType("list{0: 'a'|'ab'|'abc'|'ac', 1: 'a', 2?: 'b'|null, 3?: 'c'}", $matches); } }; diff --git a/tests/PHPStan/Analyser/data/param-out.php b/tests/PHPStan/Analyser/data/param-out.php index ebd668effd4..08995e1bb7e 100644 --- a/tests/PHPStan/Analyser/data/param-out.php +++ b/tests/PHPStan/Analyser/data/param-out.php @@ -491,10 +491,10 @@ function fooMatch(string $input): void { assertType('array{list}', $matches); preg_match_all('/@[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?!\w)/', $input, $matches, PREG_SET_ORDER); - assertType('list', $matches); + assertType('list', $matches); preg_match('/@[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?!\w)/', $input, $matches, PREG_UNMATCHED_AS_NULL); - assertType("array{}|array{non-falsy-string}", $matches); + assertType("array{}|array{lowercase-string&non-falsy-string}", $matches); } function testMatch() { diff --git a/tests/PHPStan/Analyser/nsrt/bug-11293.php b/tests/PHPStan/Analyser/nsrt/bug-11293.php index 49f8d008a6e..e5ff64e29df 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-11293.php +++ b/tests/PHPStan/Analyser/nsrt/bug-11293.php @@ -9,54 +9,54 @@ class HelloWorld public function sayHello(string $s): void { if (preg_match('/data-(\d{6})\.json$/', $s, $matches) > 0) { - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } } public function sayHello2(string $s): void { if (preg_match('/data-(\d{6})\.json$/', $s, $matches) === 1) { - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } } public function sayHello3(string $s): void { if (preg_match('/data-(\d{6})\.json$/', $s, $matches) >= 1) { - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } } public function sayHello4(string $s): void { if (preg_match('/data-(\d{6})\.json$/', $s, $matches) <= 0) { - assertType('array{}|array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); return; } - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } public function sayHello5(string $s): void { if (preg_match('/data-(\d{6})\.json$/', $s, $matches) < 1) { - assertType('array{}|array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); return; } - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } public function sayHello6(string $s): void { if (1 > preg_match('/data-(\d{6})\.json$/', $s, $matches)) { - assertType('array{}|array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); return; } - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-11311.php b/tests/PHPStan/Analyser/nsrt/bug-11311.php index 79fbf3aca44..a4ed71d8de5 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-11311.php +++ b/tests/PHPStan/Analyser/nsrt/bug-11311.php @@ -14,9 +14,9 @@ function doFoo(string $s) { function doUnmatchedAsNull(string $s): void { if (preg_match('/(foo)?(bar)?(baz)?/', $s, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType("array{string, 'foo'|null, 'bar'|null, 'baz'|null}", $matches); + assertType("array{''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', 'foo'|null, 'bar'|null, 'baz'|null}", $matches); } - assertType("array{}|array{string, 'foo'|null, 'bar'|null, 'baz'|null}", $matches); + assertType("array{}|array{''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', 'foo'|null, 'bar'|null, 'baz'|null}", $matches); } // see https://3v4l.org/VeDob @@ -63,7 +63,7 @@ function bug11331c(string $url):void { ([^/]+?) (?:\.git|/)? $}x', $url, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType('array{non-falsy-string, non-empty-string|null, non-empty-string|null, non-empty-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, non-empty-string, null, non-empty-string, non-empty-string}|array{non-falsy-string, null, non-empty-string, non-empty-string, non-empty-string}', $matches); } } @@ -85,56 +85,56 @@ function (string $size): void { if (preg_match('/ab(\d){2,4}xx([0-9])?e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, numeric-string, numeric-string|null}', $matches); + assertType('array{lowercase-string&non-falsy-string, numeric-string, \'0\'|\'1\'|\'2\'|\'3\'|\'4\'|\'5\'|\'6\'|\'7\'|\'8\'|\'9\'|null}', $matches); }; function (string $size): void { if (preg_match('/a(\dAB){2}b(\d){2,4}([1-5])([1-5a-z])e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string, numeric-string, numeric-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, non-falsy-string&uppercase-string, numeric-string, \'1\'|\'2\'|\'3\'|\'4\'|\'5\', \'1\'|\'2\'|\'3\'|\'4\'|\'5\'|\'a\'|\'b\'|\'c\'|\'d\'|\'e\'|\'f\'|\'g\'|\'h\'|\'i\'|\'j\'|\'k\'|\'l\'|\'m\'|\'n\'|\'o\'|\'p\'|\'q\'|\'r\'|\'s\'|\'t\'|\'u\'|\'v\'|\'w\'|\'x\'|\'y\'|\'z\'}', $matches); }; function (string $size): void { if (preg_match('/ab(ab(\d)){2,4}xx([0-9][a-c])?e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string, numeric-string, non-falsy-string|null}', $matches); + assertType('array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string, numeric-string, \'0a\'|\'0b\'|\'0c\'|\'1a\'|\'1b\'|\'1c\'|\'2a\'|\'2b\'|\'2c\'|\'3a\'|\'3b\'|\'3c\'|\'4a\'|\'4b\'|\'4c\'|\'5a\'|\'5b\'|\'5c\'|\'6a\'|\'6b\'|\'6c\'|\'7a\'|\'7b\'|\'7c\'|\'8a\'|\'8b\'|\'8c\'|\'9a\'|\'9b\'|\'9c\'|null}', $matches); }; function (string $size): void { if (preg_match('/ab(\d+)e(\d?)/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType("array{non-falsy-string, numeric-string, ''|numeric-string}", $matches); + assertType('array{lowercase-string&non-falsy-string, numeric-string, \'\'|numeric-string}', $matches); }; function (string $size): void { if (preg_match('/ab(?P\d+)e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: lowercase-string&non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); }; function (string $size): void { if (preg_match('/ab(\d\d)/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string&numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string&numeric-string}', $matches); }; function (string $size): void { if (preg_match('/ab(\d+\s)e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string}', $matches); }; function (string $size): void { if (preg_match('/ab(\s)e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, non-falsy-string}', $matches); }; function (string $size): void { @@ -162,18 +162,18 @@ function (string $size): void { if (preg_match('/ab(\d+\d?)e?/', $size, $matches, PREG_UNMATCHED_AS_NULL) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, numeric-string}', $matches); }; function (string $s): void { if (preg_match('/Price: ([2-5])/i', $s, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType('array{non-falsy-string, numeric-string}', $matches); + assertType('array{non-falsy-string, \'2\'|\'3\'|\'4\'|\'5\'}', $matches); } }; function (string $s): void { if (preg_match('/Price: ([2-5A-Z])/i', $s, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, non-falsy-string}', $matches); } }; @@ -191,36 +191,36 @@ function (string $s): void { function (string $s): void { preg_match('/%a(\d*)/', $s, $matches, PREG_UNMATCHED_AS_NULL); - assertType("array{}|array{non-falsy-string, ''|numeric-string}", $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, \'\'|numeric-string}', $matches); }; function (string $s): void { preg_match('/%a(\d*)?/', $s, $matches, PREG_UNMATCHED_AS_NULL); - assertType("array{}|array{non-falsy-string, ''|numeric-string|null}", $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, \'\'|numeric-string|null}', $matches); }; function (string $s): void { if (preg_match('~a|(\d)|(\s)~', $s, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType("array{non-empty-string, numeric-string|null, non-empty-string|null}", $matches); + assertType('array{non-falsy-string|numeric-string, numeric-string|null, non-falsy-string|null}', $matches); } else { assertType("array{}", $matches); } - assertType("array{}|array{non-empty-string, numeric-string|null, non-empty-string|null}", $matches); + assertType('array{}|array{non-falsy-string|numeric-string, numeric-string|null, non-falsy-string|null}', $matches); }; function (string $s): void { if (preg_match('~a|(\d)|(\s)~', $s, $matches, PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE) === 1) { - assertType("array{array{non-empty-string|null, int<-1, max>}, array{numeric-string|null, int<-1, max>}, array{non-empty-string|null, int<-1, max>}}", $matches); + assertType('array{array{non-falsy-string|numeric-string, int<0, max>}, array{numeric-string|null, int<-1, max>}, array{non-falsy-string|null, int<-1, max>}}', $matches); } }; function (string $s): void { if (preg_match('~a|((u)x)|((v)y)~', $s, $matches, PREG_UNMATCHED_AS_NULL) === 1) { - assertType("array{non-empty-string, 'ux'|null, 'u'|null, 'vy'|null, 'v'|null}", $matches); + assertType("array{'a'|'ux'|'vy', 'ux'|null, 'u'|null, 'vy'|null, 'v'|null}", $matches); } }; function (string $s): void { preg_match('~a|(\d)|(\s)~', $s, $matches, PREG_UNMATCHED_AS_NULL); - assertType("array{}|array{non-empty-string, numeric-string|null, non-empty-string|null}", $matches); + assertType('array{}|array{non-falsy-string|numeric-string, numeric-string|null, non-falsy-string|null}', $matches); }; diff --git a/tests/PHPStan/Analyser/nsrt/bug-11438.php b/tests/PHPStan/Analyser/nsrt/bug-11438.php new file mode 100644 index 00000000000..c1be97c9141 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-11438.php @@ -0,0 +1,65 @@ += 8.0 + +namespace Bug11438; + +use function PHPStan\Testing\assertType; + +function (string $subject): void { + preg_replace_callback_array( + [ + '~A([a]+)~i' => function ($match) { + assertType('array{non-falsy-string, non-falsy-string}', $match); + return ''; + }, + '~B([b]+)?~i' => function ($match) { + assertType('array{0: non-falsy-string, 1?: non-falsy-string}', $match); + return ''; + }, + '/(foo)?(bar)?(baz)?/' => function ($match) { + assertType("list{0: ''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', 1?: ''|'foo', 2?: ''|'bar', 3?: 'baz'}", $match); + return ''; + }, + ], + $subject, + ); +}; + +function (string $subject): void { + preg_replace_callback_array( + [ + '/(\d+)-(x)?/' => fn ($match) => assertType('array{lowercase-string&non-falsy-string, numeric-string, \'x\'|null}', $match), + ], + $subject, + -1, + $count, + PREG_UNMATCHED_AS_NULL, + ); + + preg_replace_callback_array( + [ + '/(\d+)-(x)?/' => fn ($match) => assertType('array{0: array{lowercase-string&non-falsy-string, int<0, max>}, 1: array{numeric-string, int<0, max>}, 2?: array{\'x\', int<0, max>}}', $match), + ], + $subject, + flags: PREG_OFFSET_CAPTURE, + ); +}; + +function (string $subject, string $pattern, int $flags): void { + preg_replace_callback_array( + [ + '/(a)/' => fn ($match) => assertType('mixed', $match), + $pattern => fn ($match) => assertType('mixed', $match), + ], + $subject, + ); + + preg_replace_callback_array( + [ + '/(a)/' => fn ($match) => assertType('mixed', $match), + ], + $subject, + -1, + $count, + $flags, + ); +}; diff --git a/tests/PHPStan/Analyser/nsrt/bug-11589.php b/tests/PHPStan/Analyser/nsrt/bug-11589.php new file mode 100644 index 00000000000..678617cd84c --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-11589.php @@ -0,0 +1,32 @@ +foo)|(?bar))"}J'; + + if (preg_match_all($pattern, $str, $matches)) { + assertType("array{0: non-empty-list, a: non-empty-list<''|'bar'>, 1: non-empty-list<''|'foo'>, 2: non-empty-list<''|'bar'>}", $matches); + foreach ($matches['a'] as $match) { + assertType("''|'bar'", $match); + } + } + + if (preg_match_all($pattern, $str, $matches, PREG_SET_ORDER)) { + assertType("non-empty-list", $matches); + foreach ($matches as $match) { + assertType("'bar'|'foo'", $match['a']); + } + } + + if (preg_match($pattern, $str, $matches)) { + assertType("array{0: '\"bar\"'|'\"foo\"', a: 'bar', 1: '', 2: 'bar'}|array{0: '\"bar\"'|'\"foo\"', a: 'foo', 1: 'foo'}", $matches); + } +} diff --git a/tests/PHPStan/Analyser/nsrt/bug-11602.php b/tests/PHPStan/Analyser/nsrt/bug-11602.php new file mode 100644 index 00000000000..a8e21cc16f9 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-11602.php @@ -0,0 +1,25 @@ +a)(?:&(?(?&type)))?~', $str, $matches) !== 1) { + return; + } + + assertType("array{0: 'a'|'a&a', type: 'a', 1: 'a', type2?: 'a', 2?: 'a'}", $matches); + } + + public function typeConstTopLevel(string $str): void + { + if (preg_match('~a~', $str, $matches) !== 1) { + return; + } + + assertType("array{'a'}", $matches); + } + + public function typeWithCommentWithSpecialCharacters(string $str): void + { + if (preg_match(<<<'EOD' + ~(?:(?x) + a # https://3v4l.org/igvia !"#$%&'()*+,-./:;<=>?@[\]^_`{|}\~ + )~ + EOD, $str, $matches) !== 1) { + return; + } + + assertType("array{'a'}", $matches); + } + +} diff --git a/tests/PHPStan/Analyser/nsrt/bug-12126.php b/tests/PHPStan/Analyser/nsrt/bug-12126.php index c494d8d60df..073f2a21a03 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-12126.php +++ b/tests/PHPStan/Analyser/nsrt/bug-12126.php @@ -17,20 +17,18 @@ public function sayHello(): void return; } - assertType('list>', $matches); - // could be assertType("list", $matches); + assertType("non-empty-list", $matches); if (!preg_match_all($regex, $options[$key], $matches, PREG_PATTERN_ORDER)) { return; } - assertType('array>', $matches); - // could be assertType("array{0: list, test: list<'foo'|'test'>, 1: list<'test'|''>, 2: list<''|'foo'>}", $matches); + // with PREG_PATTERN_ORDER the name holds the list of the last group named test + assertType('array{0: non-empty-list, test: non-empty-list<\'\'|\'foo\'>, 1: non-empty-list<\'\'|\'test\'>, 2: non-empty-list<\'\'|\'foo\'>}', $matches); if (!preg_match($regex, $options[$key], $matches)) { return; } - assertType('array', $matches); - // could be assertType("array{0: list, test: 'foo', 1: '', 2: 'foo'}|array{0: list, test: 'test', 1: 'test', 2: ''}", $matches); - } + assertType('array{0: \'footest\'|\'testfoo\', test: \'foo\', 1: \'\', 2: \'foo\'}|array{0: \'footest\'|\'testfoo\', test: \'test\', 1: \'test\'}', $matches); + } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-12210.php b/tests/PHPStan/Analyser/nsrt/bug-12210.php index 460ef458062..b30b50be1b8 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-12210.php +++ b/tests/PHPStan/Analyser/nsrt/bug-12210.php @@ -8,7 +8,7 @@ function bug12210a(string $text): void { assert(preg_match('(((sum|min|max)))', $text, $match) === 1); - assertType("array{non-falsy-string, 'max'|'min'|'sum', 'max'|'min'|'sum'}", $match); + assertType("array{'max'|'min'|'sum', 'max'|'min'|'sum', 'max'|'min'|'sum'}", $match); } function bug12210b(string $text): void { diff --git a/tests/PHPStan/Analyser/nsrt/bug-12242.php b/tests/PHPStan/Analyser/nsrt/bug-12242.php index d9335610d38..e11035865ad 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-12242.php +++ b/tests/PHPStan/Analyser/nsrt/bug-12242.php @@ -27,7 +27,9 @@ function bar(string $str): void (\w*) # extra description (UNSIGNED, CHARACTER SET, ...) [3] $/x'; if (preg_match($regexp, $str, $matches)) { - assertType('array{non-falsy-string, non-empty-string, string, string}', $matches); + // under /x the whitespace is ignored, so "0" matches: non-falsy was an + // artifact of the whitespace the old grammar read as literal characters + assertType('array{non-empty-string, non-empty-string, string, string}', $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-12997.php b/tests/PHPStan/Analyser/nsrt/bug-12997.php new file mode 100644 index 00000000000..574f656af58 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-12997.php @@ -0,0 +1,48 @@ + $array + */ + public function sayHello($nonES, $nonFalsy, $replacement, array $array): void + { + $stripped = preg_replace('{.*]*>(?:\s*\s*)?<\/?script[^>]*>.*}is', '$1', $nonES); + assertType('string|null', $stripped); + + assertType('non-empty-string|null', preg_replace('/a/', 'b', $nonES)); + + // the group can be unset or missing + assertType('string|null', preg_replace('/a(b)?/', '$1', $nonES)); + assertType('string|null', preg_replace('/a(b)?/', '${1}', $nonES)); + assertType('string|null', preg_replace('/a(b)?/', '\1', $nonES)); + assertType('string|null', preg_replace('/a/', '$2', $nonES)); + assertType('array', preg_replace('/a(b)?/', '$1', $array)); + + // the group always matches some text + assertType('non-empty-string|null', preg_replace('/(a+)/', '$1', $nonES)); + assertType('non-empty-string|null', preg_replace('/a/', '$0', $nonES)); + + // the text around the reference + assertType('non-empty-string|null', preg_replace('/a(b)?/', '<$1>', $nonES)); + assertType('non-falsy-string|null', preg_replace('/a(b)?/', '<$1>', $nonFalsy)); + assertType('non-empty-string|null', preg_replace('/a(b)?/', '0$1', $nonFalsy)); + + // escaped and incomplete references are text + assertType('non-empty-string|null', preg_replace('/a/', '\$1', $nonES)); + assertType('non-falsy-string|null', preg_replace('/a/', '\\\\$1', $nonFalsy)); + assertType('non-empty-string|null', preg_replace('/a/', '${1', $nonES)); + + // a replacement not known can hold a reference + assertType('string|null', preg_replace('/a(b)?/', $replacement, $nonES)); + } + +} diff --git a/tests/PHPStan/Analyser/nsrt/bug-14314.php b/tests/PHPStan/Analyser/nsrt/bug-14314.php index ea451aa59e8..28725f8064e 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14314.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14314.php @@ -8,9 +8,9 @@ function () { preg_match('/^(.)$/', '', $matches) || preg_match('/^(.)(.)(.)$/', '', $matches); - assertType('array{}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string}', $matches); + assertType('array{}|array{non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}', $matches); if (count($matches) === 2) { - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-empty-string, non-empty-string}', $matches); return; } assertType('array{}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}', $matches); @@ -86,9 +86,9 @@ public function testIntRangeWithUnionAndEmpty(array $arr, int $twoToFour): void // Test: sequential count checks preserve narrowing correctly function () { preg_match('/^(.)$/', '', $m) || preg_match('/^(.)(.)(.)$/', '', $m) || preg_match('/^(.)(.)(.)(.)(.)(.)$/', '', $m); - assertType('array{}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string}', $m); + assertType('array{}|array{non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}', $m); if (count($m) === 2) { - assertType('array{non-falsy-string, non-empty-string}', $m); + assertType('array{non-empty-string, non-empty-string}', $m); return; } assertType('array{}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string, non-empty-string}|array{non-falsy-string, non-empty-string, non-empty-string, non-empty-string}', $m); @@ -108,7 +108,7 @@ function (int $x) { if ($x > 0) { assertType('int<1, max>', $x); if (count($matches) === 2) { - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-empty-string, non-empty-string}', $matches); assertType('int<1, max>', $x); return; } diff --git a/tests/PHPStan/Analyser/nsrt/bug-14490.php b/tests/PHPStan/Analyser/nsrt/bug-14490.php new file mode 100644 index 00000000000..ccbef85bc87 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-14490.php @@ -0,0 +1,39 @@ +|false', preg_match_all('/(.*)/', $s)); + assertType('int<1, max>|false', preg_match_all('/(.*)/', $s, $m, PREG_SET_ORDER)); + + if (preg_match('/(.*)/', $s, $m) === 1) { + assertType('array{string, string}', $m); + } +} + +function notProven(string $s, string $pattern, int $offset): void +{ + assertType('0|1|false', preg_match('/^(.*)$/', $s)); + assertType('0|1|false', preg_match('/^(.*)(\s+(DESC|ASC|))*$/Ui', $s)); + assertType('0|1|false', preg_match('/^(.*)/', $s, $m, 0, $offset)); + assertType('0|1|false', preg_match('/^(.*)/', $s, $m, 0, 1)); + assertType('0|1|false', preg_match('/(?=a)/', $s)); + assertType('0|1|false', preg_match('/a*$/A', $s)); + assertType('0|1|false', preg_match($pattern, $s)); + assertType('0|1|false', preg_match('/[/', $s)); + assertType('int<0, max>|false', preg_match_all('/^(.*)$/', $s)); +} diff --git a/tests/PHPStan/Analyser/nsrt/bug-14575.php b/tests/PHPStan/Analyser/nsrt/bug-14575.php index 6564cac8b15..efc79e3a5fa 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14575.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14575.php @@ -7,81 +7,81 @@ function doFoo(string $string): void { // Anchors in alternation should not make the match non-empty if (preg_match('(foo|$)', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'|\'foo\'}', $match); } if (preg_match('(^|foo)', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'}', $match); } if (preg_match('(\b|foo)', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'}', $match); } if (preg_match('/foo|$/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'|\'foo\'}', $match); } if (preg_match('/^|bar/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'}', $match); } // Anchor in alternation within capturing group if (preg_match('/(foo|$)/', $string, $match)) { - assertType('array{string, string}', $match); + assertType('array{\'\'|\'foo\', \'\'|\'foo\'}', $match); } if (preg_match('/(^|bar)/', $string, $match)) { - assertType('array{string, string}', $match); + assertType('array{\'\', \'\'|\'bar\'}', $match); } // Anchor in alternation does not affect parent concatenation if (preg_match('/^abc(def|$)/', $string, $match)) { - assertType("array{non-falsy-string, string}", $match); + assertType("array{'abc'|'abcdef', ''|'def'}", $match); } // All non-empty alternatives should still produce non-empty/non-falsy if (preg_match('/foo|bar/', $string, $match)) { - assertType('array{non-falsy-string}', $match); + assertType('array{\'bar\'|\'foo\'}', $match); } if (preg_match('/foo/', $string, $match)) { - assertType('array{non-falsy-string}', $match); + assertType('array{\'foo\'}', $match); } // Anchor alone if (preg_match('/^$/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'}', $match); } // Three-way alternation with anchor if (preg_match('/foo|bar|$/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'|\'bar\'|\'foo\'}', $match); } // All alternatives are single chars (non-falsy not determinable from single tokens) if (preg_match('/a|b/', $string, $match)) { - assertType('array{non-empty-string}', $match); + assertType('array{\'a\'|\'b\'}', $match); } // Empty alternation branches if (preg_match('/(|)/', $string, $match)) { - assertType("array{string, ''}", $match); + assertType("array{'', ''}", $match); } if (preg_match('/(foo|)/', $string, $match)) { - assertType("array{string, ''|'foo'}", $match); + assertType("array{''|'foo', ''|'foo'}", $match); } if (preg_match('/(|bar)/', $string, $match)) { - assertType("array{string, ''|'bar'}", $match); + assertType("array{''|'bar', ''|'bar'}", $match); } if (preg_match('/|/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'}', $match); } if (preg_match('/foo|/', $string, $match)) { - assertType('array{string}', $match); + assertType('array{\'\'|\'foo\'}', $match); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-14710.php b/tests/PHPStan/Analyser/nsrt/bug-14710.php index 711580f5365..5f1eb4be825 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14710.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14710.php @@ -6,13 +6,13 @@ function ternaryPregMatch(string $x): void { (preg_match('/^(a|b|c)$/', $x)) ? - assertType('non-falsy-string', $x) + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x) : assertType('string', $x); } function ifPregMatch(string $x): void { if (preg_match('/^(a|b|c)$/', $x)) { - assertType('non-falsy-string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); } else { assertType('string', $x); } @@ -20,13 +20,13 @@ function ifPregMatch(string $x): void { function ternaryPregMatchWithMatches(string $x): void { (preg_match('/^(a|b|c)$/', $x, $matches)) ? - assertType('non-falsy-string', $x) + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x) : assertType('string', $x); } function ifPregMatchWithMatches(string $x): void { if (preg_match('/^(a|b|c)$/', $x, $matches)) { - assertType('non-falsy-string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); } else { assertType('string', $x); } @@ -40,13 +40,13 @@ function pregMatchNonEmpty(string $x): void { function pregMatchNoNarrow(string $x): void { if (preg_match('/^$/', $x)) { - assertType('string', $x); + assertType('\'\'|"\\n"', $x); } } function pregMatchAll(string $x): void { if (preg_match_all('/^(a|b|c)$/', $x)) { - assertType('non-falsy-string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); } else { assertType('string', $x); } @@ -56,13 +56,13 @@ function negatedPregMatch(string $x): void { if (!preg_match('/^(a|b|c)$/', $x)) { assertType('string', $x); } else { - assertType('non-falsy-string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); } } function pregMatchCompare(string $x): void { if (preg_match('/^(a|b|c)$/', $x) === 1) { - assertType('non-falsy-string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); } } @@ -89,22 +89,32 @@ function pregMatchWithNonConstantPattern(string $pattern, string $x): void { function pregMatchSubjectSharesVarWithMatches(): void { $matches = ['', '', 'foo']; if (preg_match('/^(a|b|c)$/', $matches[2], $matches)) { - assertType("array{non-falsy-string, 'a'|'b'|'c'}", $matches); + assertType("array{'a'|'b'|'c', 'a'|'b'|'c'}", $matches); } } function pregMatchNullableSubject(?string $x): void { // a null subject is coerced to '' which cannot match a non-empty pattern, so null is removed if (preg_match('/^(a|b|c)$/', $x)) { - assertType('string|null', $x); // could be non-falsy-string + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"', $x); + } else { + assertType('string|null', $x); + } +} + +function pregMatchNullableSubjectOfAPatternMatchingTheEmptyString(?string $x): void { + // '' matches, so the null coerced to '' stays + if (preg_match('/^a?$/', $x)) { + assertType('\'\'|"\\n"|\'a\'|"a\\n"|null', $x); } else { assertType('string|null', $x); } } function pregMatchIntStringSubject(int|string $x): void { - // an int subject can be coerced to a matching string, so narrowing it away would be unsound + // the int the engine reads as digits never matches, but the variable + // stays an int where the string arm matched: only the string narrows if (preg_match('/^(a|b|c)$/', $x)) { - assertType('int|string', $x); + assertType('\'a\'|"a\\n"|\'b\'|"b\\n"|\'c\'|"c\\n"|int', $x); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-14784.php b/tests/PHPStan/Analyser/nsrt/bug-14784.php index db3529c6457..b9be4c96642 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14784.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14784.php @@ -16,7 +16,7 @@ function doFoo(string $str): void } if (preg_match('/^(?:0|123)$/', $str)) { - assertType('non-empty-string', $str); + assertType('\'0\'|"0\\n"|\'123\'|"123\\n"', $str); } if (preg_match('/^(?:0|[1-9][0-9]*)$/', $str)) { @@ -28,10 +28,10 @@ function doFoo(string $str): void } if (preg_match('/^(?:0|abc)$/', $str)) { - assertType('non-empty-string', $str); + assertType('\'0\'|"0\\n"|\'abc\'|"abc\\n"', $str); } if (preg_match('/^(?:2|abc)$/', $str)) { - assertType('non-falsy-string', $str); + assertType('\'2\'|"2\\n"|\'abc\'|"abc\\n"', $str); } if (preg_match('/^(0|[1-9][0-9]*)$/', $str, $matches)) { diff --git a/tests/PHPStan/Analyser/nsrt/bug-14809.php b/tests/PHPStan/Analyser/nsrt/bug-14809.php index b809a18dc59..6b96d6ceba4 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14809.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14809.php @@ -22,18 +22,18 @@ function doFoo(string $s): void // guard: an alternation whose branches are all non-empty stays non-falsy if (preg_match('~(a(b|c))~', $s, $m)) { - assertType("array{non-falsy-string, 'ab'|'ac', 'b'|'c'}", $m); + assertType("array{'ab'|'ac', 'ab'|'ac', 'b'|'c'}", $m); } if (preg_match('~((a|b)(b|c))~', $s, $m)) { - assertType("array{non-falsy-string, 'ab'|'ac'|'bb'|'bc', 'a'|'b', 'b'|'c'}", $m); + assertType("array{'ab'|'ac'|'bb'|'bc', 'ab'|'ac'|'bb'|'bc', 'a'|'b', 'b'|'c'}", $m); } if (preg_match('~((b|c)d)~', $s, $m)) { - assertType("array{non-falsy-string, 'bd'|'cd', 'b'|'c'}", $m); + assertType("array{'bd'|'cd', 'bd'|'cd', 'b'|'c'}", $m); } if (preg_match('~(a(b|c)d)~', $s, $m)) { - assertType("array{non-falsy-string, 'abd'|'acd', 'b'|'c'}", $m); + assertType("array{'abd'|'acd', 'abd'|'acd', 'b'|'c'}", $m); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-14820.php b/tests/PHPStan/Analyser/nsrt/bug-14820.php index 68436e9d868..48f3070b447 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-14820.php +++ b/tests/PHPStan/Analyser/nsrt/bug-14820.php @@ -9,50 +9,50 @@ function doFoo(string $s): void // a single optional literal yields the literal or the empty string, // combined with the surrounding literals if (preg_match('~(ab?)~', $s, $m)) { - assertType("array{non-falsy-string, 'a'|'ab'}", $m); + assertType("array{'a'|'ab', 'a'|'ab'}", $m); } if (preg_match('~(ab?c)~', $s, $m)) { - assertType("array{non-falsy-string, 'abc'|'ac'}", $m); + assertType("array{'abc'|'ac', 'abc'|'ac'}", $m); } // optional in front if (preg_match('~(a?bc)~', $s, $m)) { - assertType("array{non-falsy-string, 'abc'|'bc'}", $m); + assertType("array{'abc'|'bc', 'abc'|'bc'}", $m); } // two optionals combine into the full cross-product if (preg_match('~(a?b?)~', $s, $m)) { - assertType("array{string, ''|'a'|'ab'|'b'}", $m); + assertType("array{''|'a'|'ab'|'b', ''|'a'|'ab'|'b'}", $m); } // optional over a (sub) group of literals if (preg_match('~(a(bc)?d)~', $s, $m)) { - assertType("array{0: non-falsy-string, 1: 'abcd'|'ad', 2?: 'bc'}", $m); + assertType("array{0: 'abcd'|'ad', 1: 'abcd'|'ad', 2?: 'bc'}", $m); } // optional over an alternation if (preg_match('~(a(b|c)?d)~', $s, $m)) { - assertType("array{0: non-falsy-string, 1: 'abd'|'acd'|'ad', 2?: 'b'|'c'}", $m); + assertType("array{0: 'abd'|'acd'|'ad', 1: 'abd'|'acd'|'ad', 2?: 'b'|'c'}", $m); } // the classic colour/color example if (preg_match('~(colou?r)~', $s, $m)) { - assertType("array{non-falsy-string, 'color'|'colour'}", $m); + assertType("array{'color'|'colour', 'color'|'colour'}", $m); } // exactly-n repetition of a literal if (preg_match('~(ab{2}c)~', $s, $m)) { - assertType("array{non-falsy-string, 'abbc'}", $m); + assertType("array{'abbc', 'abbc'}", $m); } // n-to-m repetition of a literal if (preg_match('~(ab{1,2}c)~', $s, $m)) { - assertType("array{non-falsy-string, 'abbc'|'abc'}", $m); + assertType("array{'abbc'|'abc', 'abbc'|'abc'}", $m); } // unbounded repetition stays non-constant if (preg_match('~(ab*c)~', $s, $m)) { - assertType('array{non-falsy-string, non-falsy-string}', $m); + assertType('array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string}', $m); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-14909.php b/tests/PHPStan/Analyser/nsrt/bug-14909.php new file mode 100644 index 00000000000..f22c362e12f --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-14909.php @@ -0,0 +1,18 @@ +[a-z]+))? )$/ix"; if (preg_match($pattern, $s, $matches)) { - assertType("array{0: non-falsy-string, foo1: '', 1: '', bar1: '', 2: '', foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-empty-string, 4?: non-empty-string}|array{0: non-falsy-string, foo1: non-falsy-string, 1: non-falsy-string, bar1?: numeric-string, 2?: numeric-string}", $matches); + assertType("array{0: non-falsy-string, foo1: '', 1: '', bar1: '', 2: '', foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-falsy-string, 4?: non-falsy-string}|array{0: non-falsy-string, foo1: non-falsy-string, 1: non-falsy-string, bar1?: numeric-string, 2?: numeric-string}", $matches); } } function doBar(string $s): void { if (preg_match('/^(?:(?:(a))?(b)|(c))$/', $s, $matches)) { - assertType("array{non-falsy-string, '', '', 'c'}|list{0: non-falsy-string, 1?: ''|'a', 2: 'b'}", $matches); + assertType("array{'ab'|'b'|'c', '', '', 'c'}|list{0: 'ab'|'b'|'c', 1?: ''|'a', 2: 'b'}", $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/bug-6859.php b/tests/PHPStan/Analyser/nsrt/bug-6859.php index 56cd257c5e8..dc8949633c4 100644 --- a/tests/PHPStan/Analyser/nsrt/bug-6859.php +++ b/tests/PHPStan/Analyser/nsrt/bug-6859.php @@ -18,7 +18,7 @@ public function keys($body) fn ($key) => preg_match("/^somePattern[0-9]+$/", $key) ); - assertType('array, (int|string)>', $someKeys); + assertType('array, (int|non-falsy-string)>', $someKeys); if (count($someKeys) > 0) { return 1; diff --git a/tests/PHPStan/Analyser/nsrt/bug11384.php b/tests/PHPStan/Analyser/nsrt/bug11384.php index 709f2986351..b8dc7a856da 100644 --- a/tests/PHPStan/Analyser/nsrt/bug11384.php +++ b/tests/PHPStan/Analyser/nsrt/bug11384.php @@ -14,7 +14,7 @@ class HelloWorld public function sayHello(string $s): void { if (preg_match('{(' . Bar::VAL . ')}', $s, $m)) { - assertType("array{non-empty-string, '3'}", $m); + assertType("array{'3', '3'}", $m); } } } diff --git a/tests/PHPStan/Analyser/nsrt/by-ref-writeback-native-type.php b/tests/PHPStan/Analyser/nsrt/by-ref-writeback-native-type.php index 6ebab6d0b0d..f67699e18ee 100644 --- a/tests/PHPStan/Analyser/nsrt/by-ref-writeback-native-type.php +++ b/tests/PHPStan/Analyser/nsrt/by-ref-writeback-native-type.php @@ -11,8 +11,8 @@ function offsetCapture(string $s): void return; } - assertType("array{0: array{non-falsy-string, int<-1, max>}, 1: array{'a', int<-1, max>}, 2?: array{'b', int<-1, max>}}", $m); - assertNativeType("array{0: array{non-falsy-string, int<-1, max>}, 1: array{'a', int<-1, max>}, 2?: array{'b', int<-1, max>}}", $m); + assertType("array{0: array{'a'|'ab', int<0, max>}, 1: array{'a', int<0, max>}, 2?: array{'b', int<0, max>}}", $m); + assertNativeType("array{0: array{'a'|'ab', int<0, max>}, 1: array{'a', int<0, max>}, 2?: array{'b', int<0, max>}}", $m); } function noFlags(string $s): void @@ -21,8 +21,8 @@ function noFlags(string $s): void return; } - assertType("array{0: non-falsy-string, 1: 'a', 2?: 'b'}", $m); - assertNativeType("array{0: non-falsy-string, 1: 'a', 2?: 'b'}", $m); + assertType("array{0: 'a'|'ab', 1: 'a', 2?: 'b'}", $m); + assertNativeType("array{0: 'a'|'ab', 1: 'a', 2?: 'b'}", $m); } /** @param-out string $v */ diff --git a/tests/PHPStan/Analyser/nsrt/count-type.php b/tests/PHPStan/Analyser/nsrt/count-type.php index 8ebe0c445eb..ee9334e82b7 100644 --- a/tests/PHPStan/Analyser/nsrt/count-type.php +++ b/tests/PHPStan/Analyser/nsrt/count-type.php @@ -94,7 +94,7 @@ public function constantArrayWhichCanBecomeList(string $h): void return; } - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, lowercase-string&non-empty-string}', $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/equality-narrowing-new-world.php b/tests/PHPStan/Analyser/nsrt/equality-narrowing-new-world.php index 29914710ad1..61413977db4 100644 --- a/tests/PHPStan/Analyser/nsrt/equality-narrowing-new-world.php +++ b/tests/PHPStan/Analyser/nsrt/equality-narrowing-new-world.php @@ -284,13 +284,13 @@ public function gettypeNarrowing($is, $m): void public function pregMatchNarrowing(string $s): void { if (preg_match('/^a(b)c$/', $s, $matches) === 1) { - assertType("array{non-falsy-string, 'b'}", $matches); + assertType("array{'abc', 'b'}", $matches); } if (1 === preg_match('/^a(b)c$/', $s, $matches2)) { - assertType("array{non-falsy-string, 'b'}", $matches2); + assertType("array{'abc', 'b'}", $matches2); } if (preg_match('/^a(b)c$/', $s, $matches3) === 0) { - assertType("array{}|array{non-falsy-string, 'b'}", $matches3); + assertType("array{}|array{'abc', 'b'}", $matches3); } } diff --git a/tests/PHPStan/Analyser/nsrt/non-empty-string-replace-functions.php b/tests/PHPStan/Analyser/nsrt/non-empty-string-replace-functions.php index a774b4eba44..dda6f934263 100644 --- a/tests/PHPStan/Analyser/nsrt/non-empty-string-replace-functions.php +++ b/tests/PHPStan/Analyser/nsrt/non-empty-string-replace-functions.php @@ -18,7 +18,7 @@ public function replace(string $search, string $replacement, string $subject){ assertType('non-empty-string', str_replace($search, $replacement, $subject)); assertType('non-empty-string', str_ireplace($search, $replacement, $subject)); - assertType('non-empty-string|null', preg_replace($search, $replacement, $subject)); + assertType('string|null', preg_replace($search, $replacement, $subject)); assertType('non-empty-string', substr_replace($subject, $replacement, 1)); assertType('non-empty-string', substr_replace($subject, $replacement, -1)); @@ -32,3 +32,10 @@ function foo(float $f) { assertType('non-empty-string&uppercase-string', $price); } } + +/** @param non-falsy-string $s */ +function pregReplaceWritingAFalsyReplacement(string $s): void { + // the replacement writes '0', which is falsy: the result is non-empty, not non-falsy + assertType('non-empty-string|null', preg_replace('/a/', '0', $s)); + assertType('non-falsy-string|null', preg_replace('/a/', 'b', $s)); +} diff --git a/tests/PHPStan/Analyser/nsrt/phpregex-participation.php b/tests/PHPStan/Analyser/nsrt/phpregex-participation.php new file mode 100644 index 00000000000..3161f37e08d --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/phpregex-participation.php @@ -0,0 +1,81 @@ += 8.0 + +namespace PHPRegexParticipation; + +use function PHPStan\Testing\assertType; + +function acceptVerb(string $s): void { + // preg_match('/(a)(*ACCEPT)(b)/', 'a') writes ['a','a'] only: the cut + // leaves group 2 unset + if (preg_match('/(a)(*ACCEPT)(b)/', $s, $m)) { + assertType("array{0: string, 1: 'a', 2?: 'b'}", $m); + } +} + +function assertionCondition(string $s): void { + // preg_match('/(?(?=(a))b|(c))/', 'c') writes ['c','','c']: the + // condition group sits in the array, empty, when the branch fails + if (preg_match('/(?(?=(a))b|(c))/', $s, $m)) { + // the yes branch sets group 1, the no branch writes it empty and sets group 2 + assertType("array{non-empty-string, '', 'c'}|array{non-empty-string, 'a'}", $m); + } +} + +function assertionConditionAsNull(string $s): void { + if (preg_match('/(?(?=(a))b|(c))/', $s, $m, PREG_UNMATCHED_AS_NULL)) { + assertType("array{non-empty-string, 'a', null}|array{non-empty-string, null, 'c'}", $m); + } +} + +function unmatchedOffsets(string $s): void { + // preg_match('/(a)(b)*/', 'a', PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE) + // writes group 2 as [null, -1] + if (preg_match('/(a)(b)*/', $s, $m, PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE)) { + assertType('array{array{lowercase-string&non-falsy-string, int<0, max>}, array{\'a\', int<0, max>}, array{\'b\'|null, int<-1, max>}}', $m); + } +} + +function nestedOptional(string $s): void { + // isset($m[1]) proves $m[2]: the engine writes both or neither + if (preg_match('/(a(b))?/', $s, $m) === 1 && isset($m[1])) { + \PHPStan\dumpType($m); + echo $m[2]; + } +} + +function duplicateNameAfterTheAlternation(string $s): void { + // preg_match('/(?:(?x)|(?y))(?:(?z))?/J', 'y') writes + // ['y', 'a' => '', 1 => '', 'b' => 'y', 2 => 'y']: group 1 is unset but not + // trailing, so its key is written and the name takes it until group 3 writes it + if (preg_match('/(?:(?x)|(?y))(?:(?z))?/J', $s, $m)) { + assertType("array{0: 'x'|'xz'|'y'|'yz', a: ''|'z', 1: '', b: 'y', 2: 'y', 3?: 'z'}|array{0: 'x'|'xz'|'y'|'yz', a: 'x'|'z', 1: 'x', b?: '', 2?: '', 3?: 'z'}", $m); + } +} + +function duplicateNameSetThenOptional(string $s): void { + // preg_match('/(?x)(?y)?(?q)/J', 'xq') writes ['xq', 'a' => 'x', 'x', '', 'c' => 'q', 'q']: + // group 2 is unset, so it does not overwrite the name group 1 wrote + if (preg_match('/(?x)(?y)?(?q)/J', $s, $m)) { + assertType("array{0: 'xq'|'xyq', a: 'x'|'y', 1: 'x', 2: ''|'y', c: 'q', 3: 'q'}", $m); + } +} + +function casesWhenTheMatchIsNotChecked(string $s): void { + // the cases of the pattern hold whether or not the call's result is read + preg_match('/(a(b))?/', $s, $m); + assertType("array{}|array{''|'ab', 'ab', 'b'}|array{''|'ab'}", $m); +} + +function offsetOfAGroupThatMayMatchTheEmptyString(string $s): void { + // preg_match('/(a*)(b)/', 'b', $m, PREG_OFFSET_CAPTURE) writes [['b', 0], ['', 0], ['b', 0]]: + // a group that always takes part has an offset, even when it matched nothing + if (preg_match('/(a*)(b)/', $s, $m, PREG_OFFSET_CAPTURE)) { + assertType("array{array{lowercase-string&non-falsy-string, int<0, max>}, array{lowercase-string, int<0, max>}, array{'b', int<0, max>}}", $m); + } +} + +function casesOfAnOptionalAlternationWhenTheMatchIsNotChecked(string $s): void { + // while the call's result is not read, every group stays optional, whatever the cases say + preg_match('/((a)|(b))?/', $s, $m); + assertType("array{}|list{0: ''|'a'|'b', 1?: 'a'|'b', 2?: ''|'a', 3?: 'b'}", $m); +} diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_all_shapes.php b/tests/PHPStan/Analyser/nsrt/preg_match_all_shapes.php index 93099323c1b..710e9b085c2 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_all_shapes.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_all_shapes.php @@ -71,7 +71,7 @@ function (string $size): void { function (string $size): void { preg_match_all('/a(b)(\d+)?/', $size, $matches, PREG_SET_ORDER); - assertType("list", $matches); + assertType("list", $matches); }; function (string $size): void { @@ -88,7 +88,7 @@ function (string $size): void { function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } }; @@ -100,7 +100,7 @@ function (string $size): void { function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } }; @@ -112,25 +112,25 @@ function (string $size): void { function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) { - assertType("non-empty-list}, num: array{numeric-string, int<-1, max>}, 1: array{numeric-string, int<-1, max>}, suffix?: array{'ab', int<-1, max>}, 2?: array{'ab', int<-1, max>}}>", $matches); + assertType("non-empty-list}, num: array{numeric-string, int<0, max>}, 1: array{numeric-string, int<0, max>}, suffix?: array{'ab', int<0, max>}, 2?: array{'ab', int<0, max>}}>", $matches); } }; function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE)) { - assertType("array{0: non-empty-list}>, num: non-empty-list}>, 1: non-empty-list}>, suffix: non-empty-list}>, 2: non-empty-list}>}", $matches); + assertType("array{0: non-empty-list}>, num: non-empty-list}>, 1: non-empty-list}>, suffix: non-empty-list}>, 2: non-empty-list}>}", $matches); } }; function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) { - assertType("non-empty-list}, num: array{numeric-string|null, int<-1, max>}, 1: array{numeric-string|null, int<-1, max>}, suffix: array{'ab'|null, int<-1, max>}, 2: array{'ab'|null, int<-1, max>}}>", $matches); + assertType("non-empty-list}, num: array{numeric-string, int<0, max>}, 1: array{numeric-string, int<0, max>}, suffix: array{'ab'|null, int<-1, max>}, 2: array{'ab'|null, int<-1, max>}}>", $matches); } }; function (string $size): void { if (preg_match_all('/ab(?P\d+)(?Pab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE)) { - assertType("array{0: non-empty-list}>, num: non-empty-list}>, 1: non-empty-list}>, suffix: non-empty-list}>, 2: non-empty-list}>}", $matches); + assertType("array{0: non-empty-list}>, num: non-empty-list}>, 1: non-empty-list}>, suffix: non-empty-list}>, 2: non-empty-list}>}", $matches); } }; @@ -142,7 +142,7 @@ public function sayHello(string $content): void return; } - assertType('array{list}>}', $matches); + assertType('array{list}>}', $matches); } public function sayFoo(string $content): void @@ -151,7 +151,7 @@ public function sayFoo(string $content): void return; } - assertType('list', $matches); + assertType("list", $matches); } public function sayBar(string $content): void @@ -165,13 +165,13 @@ public function sayBar(string $content): void function doFoobar(string $s): void { if (preg_match_all('/(foo)?(bar)?(baz)?/', $s, $matches, PREG_OFFSET_CAPTURE)) { - assertType("array{non-empty-list}>, non-empty-list}>, non-empty-list}>, non-empty-list}>}", $matches); + assertType("array{non-empty-list}>, non-empty-list}>, non-empty-list}>, non-empty-list}>}", $matches); } } function doFoobarNull(string $s): void { if (preg_match_all('/(foo)?(bar)?(baz)?/', $s, $matches, PREG_OFFSET_CAPTURE|PREG_UNMATCHED_AS_NULL)) { - assertType("array{non-empty-list}>, non-empty-list}>, non-empty-list}>, non-empty-list}>}", $matches); + assertType("array{non-empty-list}>, non-empty-list}>, non-empty-list}>, non-empty-list}>}", $matches); } } } @@ -185,34 +185,34 @@ function bug14781(string $s): void { } if (preg_match_all('/(\d+)/', $s, $setMatches, PREG_SET_ORDER)) { - assertType('non-empty-list', $setMatches); - assertType('array{string, numeric-string}', $setMatches[0]); + assertType('non-empty-list', $setMatches); + assertType('array{numeric-string, numeric-string}', $setMatches[0]); } } function bug11661(): void { preg_match_all('/(ERR)?(.+)/', 'abc', $results, PREG_SET_ORDER); - assertType("list", $results); + assertType("list", $results); preg_match_all('/(ERR)?.+/', 'abc', $results, PREG_SET_ORDER); - assertType("list", $results); + assertType("list", $results); } function setOrderOptionalGroupFollowedByMatchedGroup(string $s): void { // from php-src ext/pcre/tests/bug61780_1.phpt if (preg_match_all('/(4)?(2)?\d/', $s, $matches, PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } // from php-src ext/pcre/tests/bug61780_2.phpt if (preg_match_all('/(?4)?(?2)?\d/', $s, $matches, PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } // from php-src ext/pcre/tests/preg_replace_callback_flags.phpt if (preg_match_all('/(a)|(b)/', $s, $matches, PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } } @@ -223,13 +223,13 @@ function markVerbs(string $s): void { } if (preg_match_all('/A(*:A)B|XX(*:B)Y/', $s, $matches, PREG_SET_ORDER)) { - assertType("non-empty-list", $matches); + assertType("non-empty-list", $matches); } } function testBranchReset(string $s): void { // from PCRE2 testdata/testinput2 if (preg_match_all('/(?|(abc)|(xyz))/', $s, $matches)) { - assertType('array>', $matches); + assertType("array{non-empty-list, non-empty-list<'abc'|'xyz'>}", $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_php7.php b/tests/PHPStan/Analyser/nsrt/preg_match_php7.php index 0d4887ffea3..e9fd524edf0 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_php7.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_php7.php @@ -6,7 +6,8 @@ class Foo { public function doFoo() { - assertType('0|1|false', preg_match('{}', '')); - assertType('int<0, max>|false|null', preg_match_all('{}', '')); + // the empty pattern matches every subject: never 0 + assertType('1|false', preg_match('{}', '')); + assertType('int<1, max>|false|null', preg_match_all('{}', '')); } } diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_php8.php b/tests/PHPStan/Analyser/nsrt/preg_match_php8.php index 6261cf789ba..6958253e91c 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_php8.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_php8.php @@ -6,8 +6,9 @@ class Foo { public function doFoo() { - assertType('0|1|false', preg_match('{}', '')); - assertType('int<0, max>|false', preg_match_all('{}', '')); + // the empty pattern matches every subject: never 0 + assertType('1|false', preg_match('{}', '')); + assertType('int<1, max>|false', preg_match_all('{}', '')); } } diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_shapes.php b/tests/PHPStan/Analyser/nsrt/preg_match_shapes.php index d8a68124cc7..d4439204c38 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_shapes.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_shapes.php @@ -19,19 +19,19 @@ function doMatch(string $s): void { assertType("array{}|array{non-falsy-string, '£'|'€'}", $matches); if (preg_match('/Price: (£|€)(\d+)/i', $s, $matches)) { - assertType('array{non-falsy-string, non-empty-string, numeric-string}', $matches); + assertType('array{non-falsy-string, \'£\'|\'€\', numeric-string}', $matches); } - assertType('array{}|array{non-falsy-string, non-empty-string, numeric-string}', $matches); + assertType('array{}|array{non-falsy-string, \'£\'|\'€\', numeric-string}', $matches); if (preg_match(' /Price: (£|€)\d+/ i u', $s, $matches)) { - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, non-falsy-string}', $matches); } - assertType('array{}|array{non-falsy-string, non-empty-string}', $matches); + assertType('array{}|array{non-falsy-string, non-falsy-string}', $matches); if (preg_match('(Price: (£|€))i', $s, $matches)) { - assertType('array{non-falsy-string, non-empty-string}', $matches); + assertType('array{non-falsy-string, \'£\'|\'€\'}', $matches); } - assertType('array{}|array{non-falsy-string, non-empty-string}', $matches); + assertType('array{}|array{non-falsy-string, \'£\'|\'€\'}', $matches); if (preg_match('_foo(.)\_i_i', $s, $matches)) { assertType('array{non-falsy-string, non-empty-string}', $matches); @@ -39,54 +39,54 @@ function doMatch(string $s): void { assertType('array{}|array{non-falsy-string, non-empty-string}', $matches); if (preg_match('/(a)(b)*(c)(d)*/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'a', 2: string, 3: 'c', 4?: non-empty-string}", $matches); + assertType('array{0: lowercase-string&non-falsy-string, 1: \'a\', 2: \'\'|\'b\', 3: \'c\', 4?: \'d\'}', $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'a', 2: string, 3: 'c', 4?: non-empty-string}", $matches); + assertType('array{}|array{0: lowercase-string&non-falsy-string, 1: \'a\', 2: \'\'|\'b\', 3: \'c\', 4?: \'d\'}', $matches); if (preg_match('/(a)(?b)*(c)(d)*/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'a', name: string, 2: string, 3: 'c', 4?: non-empty-string}", $matches); + assertType('array{0: lowercase-string&non-falsy-string, 1: \'a\', name: \'\'|\'b\', 2: \'\'|\'b\', 3: \'c\', 4?: \'d\'}', $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'a', name: string, 2: string, 3: 'c', 4?: non-empty-string}", $matches); + assertType('array{}|array{0: lowercase-string&non-falsy-string, 1: \'a\', name: \'\'|\'b\', 2: \'\'|\'b\', 3: \'c\', 4?: \'d\'}', $matches); if (preg_match('/(a)(b)*(c)(?d)*/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'a', 2: string, 3: 'c', name?: non-empty-string, 4?: non-empty-string}", $matches); + assertType('array{0: lowercase-string&non-falsy-string, 1: \'a\', 2: \'\'|\'b\', 3: \'c\', name?: \'d\', 4?: \'d\'}', $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'a', 2: string, 3: 'c', name?: non-empty-string, 4?: non-empty-string}", $matches); + assertType('array{}|array{0: lowercase-string&non-falsy-string, 1: \'a\', 2: \'\'|\'b\', 3: \'c\', name?: \'d\', 4?: \'d\'}', $matches); if (preg_match('/(a|b)|(?:c)/', $s, $matches)) { - assertType("array{0: non-empty-string, 1?: 'a'|'b'}", $matches); + assertType("array{0: 'a'|'b'|'c', 1?: 'a'|'b'}", $matches); } - assertType("array{}|array{0: non-empty-string, 1?: 'a'|'b'}", $matches); + assertType("array{}|array{0: 'a'|'b'|'c', 1?: 'a'|'b'}", $matches); if (preg_match('/(foo)(bar)(baz)+/', $s, $matches)) { - assertType("array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType('array{lowercase-string&non-falsy-string, \'foo\', \'bar\', \'baz\'}', $matches); } - assertType("array{}|array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType('array{}|array{lowercase-string&non-falsy-string, \'foo\', \'bar\', \'baz\'}', $matches); if (preg_match('/(foo)(bar)(baz)*/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: non-falsy-string}", $matches); + assertType('array{0: lowercase-string&non-falsy-string, 1: \'foo\', 2: \'bar\', 3?: \'baz\'}', $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: non-falsy-string}", $matches); + assertType('array{}|array{0: lowercase-string&non-falsy-string, 1: \'foo\', 2: \'bar\', 3?: \'baz\'}', $matches); if (preg_match('/(foo)(bar)(baz)?/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); + assertType("array{0: 'foobar'|'foobarbaz', 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); + assertType("array{}|array{0: 'foobar'|'foobarbaz', 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); if (preg_match('/(foo)(bar)(baz){0,3}/', $s, $matches)) { - assertType("array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: non-falsy-string}", $matches); + assertType("array{0: 'foobar'|'foobarbaz'|'foobarbazbaz'|'foobarbazbazbaz', 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); } - assertType("array{}|array{0: non-falsy-string, 1: 'foo', 2: 'bar', 3?: non-falsy-string}", $matches); + assertType("array{}|array{0: 'foobar'|'foobarbaz'|'foobarbazbaz'|'foobarbazbazbaz', 1: 'foo', 2: 'bar', 3?: 'baz'}", $matches); if (preg_match('/(foo)(bar)(baz){2,3}/', $s, $matches)) { - assertType("array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType("array{'foobarbazbaz'|'foobarbazbazbaz', 'foo', 'bar', 'baz'}", $matches); } - assertType("array{}|array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType("array{}|array{'foobarbazbaz'|'foobarbazbazbaz', 'foo', 'bar', 'baz'}", $matches); if (preg_match('/(foo)(bar)(baz){2}/', $s, $matches)) { - assertType("array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType("array{'foobarbazbaz', 'foo', 'bar', 'baz'}", $matches); } - assertType("array{}|array{non-falsy-string, 'foo', 'bar', non-falsy-string}", $matches); + assertType("array{}|array{'foobarbazbaz', 'foo', 'bar', 'baz'}", $matches); } function doNonCapturingGroup(string $s): void { @@ -115,9 +115,9 @@ function doNamedSubpattern(string $s): void { function doOffsetCapture(string $s): void { if (preg_match('/(foo)(bar)(baz)/', $s, $matches, PREG_OFFSET_CAPTURE)) { - assertType("array{array{non-falsy-string, int<-1, max>}, array{'foo', int<-1, max>}, array{'bar', int<-1, max>}, array{'baz', int<-1, max>}}", $matches); + assertType("array{array{'foobarbaz', int<0, max>}, array{'foo', int<0, max>}, array{'bar', int<0, max>}, array{'baz', int<0, max>}}", $matches); } - assertType("array{}|array{array{non-falsy-string, int<-1, max>}, array{'foo', int<-1, max>}, array{'bar', int<-1, max>}, array{'baz', int<-1, max>}}", $matches); + assertType("array{}|array{array{'foobarbaz', int<0, max>}, array{'foo', int<0, max>}, array{'bar', int<0, max>}, array{'baz', int<0, max>}}", $matches); } function doUnknownFlags(string $s, int $flags): void { @@ -129,16 +129,16 @@ function doUnknownFlags(string $s, int $flags): void { function doMultipleAlternativeCaptureGroupsWithSameNameWithModifier(string $s): void { if (preg_match('/(?J)(?[a-z]+)|(?[0-9]+)/', $s, $matches)) { - assertType("array{0: non-empty-string, Foo: non-empty-string, 1: non-empty-string}|array{0: non-empty-string, Foo: numeric-string, 1: '', 2: numeric-string}", $matches); + assertType('array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: numeric-string, 1: \'\', 2: numeric-string}', $matches); } - assertType("array{}|array{0: non-empty-string, Foo: non-empty-string, 1: non-empty-string}|array{0: non-empty-string, Foo: numeric-string, 1: '', 2: numeric-string}", $matches); + assertType('array{}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: numeric-string, 1: \'\', 2: numeric-string}', $matches); } function doMultipleConsecutiveCaptureGroupsWithSameNameWithModifier(string $s): void { if (preg_match('/(?J)(?[a-z]+)|(?[0-9]+)/', $s, $matches)) { - assertType("array{0: non-empty-string, Foo: non-empty-string, 1: non-empty-string}|array{0: non-empty-string, Foo: numeric-string, 1: '', 2: numeric-string}", $matches); + assertType('array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: numeric-string, 1: \'\', 2: numeric-string}', $matches); } - assertType("array{}|array{0: non-empty-string, Foo: non-empty-string, 1: non-empty-string}|array{0: non-empty-string, Foo: numeric-string, 1: '', 2: numeric-string}", $matches); + assertType('array{}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string}|array{0: (lowercase-string&non-falsy-string)|numeric-string, Foo: numeric-string, 1: \'\', 2: numeric-string}', $matches); } // https://github.com/hoaproject/Regex/issues/31 @@ -157,9 +157,9 @@ function hoaBug31(string $s): void { // https://github.com/phpstan/phpstan/issues/10855#issuecomment-2044323638 function testHoaUnsupportedRegexSyntax(string $s): void { if (preg_match('#\QPHPDoc type array of property App\Log::$fillable is not covariant with PHPDoc type array of overridden property Illuminate\Database\E\\\\\QEloquent\Model::$fillable.\E#', $s, $matches)) { - assertType('array{non-falsy-string}', $matches); + assertType('array{\'PHPDoc type array of property App\\\\Log::$fillable is not covariant with PHPDoc type array of overridden property Illuminate\\\\Database\\\\Eloquent\\\\Model::$fillable.\'}', $matches); } - assertType('array{}|array{non-falsy-string}', $matches); + assertType('array{}|array{\'PHPDoc type array of property App\\\\Log::$fillable is not covariant with PHPDoc type array of overridden property Illuminate\\\\Database\\\\Eloquent\\\\Model::$fillable.\'}', $matches); } function testPregMatchSimpleCondition(string $value): void { @@ -233,13 +233,13 @@ function testUnionPattern(string $s): void function doFoo(string $row): void { if (preg_match('~^(a(b))$~', $row, $matches) === 1) { - assertType("array{non-falsy-string, 'ab', 'b'}", $matches); + assertType("array{'ab', 'ab', 'b'}", $matches); } if (preg_match('~^(a(b)?)$~', $row, $matches) === 1) { - assertType("array{0: non-falsy-string, 1: 'a'|'ab', 2?: 'b'}", $matches); + assertType("array{0: 'a'|'ab', 1: 'a'|'ab', 2?: 'b'}", $matches); } if (preg_match('~^(a(b)?)?$~', $row, $matches) === 1) { - assertType("list{0: string, 1?: 'a'|'ab', 2?: 'b'}", $matches); + assertType("list{0: ''|'a'|'ab', 1?: 'a'|'ab', 2?: 'b'}", $matches); } } @@ -249,7 +249,7 @@ function doFoo2(string $row): void return; } - assertType("array{0: non-falsy-string, 1: string, branchCode: ''|numeric-string, 2: ''|numeric-string, accountNumber: numeric-string, 3: numeric-string, bankCode: non-falsy-string&numeric-string, 4: non-falsy-string&numeric-string}", $matches); + assertType("array{0: non-falsy-string, 1: '', branchCode: '', 2: '', accountNumber: numeric-string, 3: numeric-string, bankCode: non-falsy-string&numeric-string, 4: non-falsy-string&numeric-string}|array{0: non-falsy-string, 1: non-falsy-string, branchCode: numeric-string, 2: numeric-string, accountNumber: numeric-string, 3: numeric-string, bankCode: non-falsy-string&numeric-string, 4: non-falsy-string&numeric-string}", $matches); } function doFoo3(string $row): void @@ -265,63 +265,63 @@ function (string $size): void { if (preg_match('~^a\.b(c(\d+)(\d+)(\s+))?d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string, numeric-string, numeric-string, non-empty-string}|array{non-falsy-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string, numeric-string, numeric-string, non-falsy-string}|array{lowercase-string&non-falsy-string}', $matches); }; function (string $size): void { if (preg_match('~^a\.b(c(\d+))?d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string, numeric-string}|array{non-falsy-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string, numeric-string}|array{lowercase-string&non-falsy-string}', $matches); }; function (string $size): void { if (preg_match('~^a\.b(c(\d+)?)d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{0: non-falsy-string, 1: non-falsy-string, 2?: numeric-string}', $matches); + assertType('array{0: lowercase-string&non-falsy-string, 1: lowercase-string&non-falsy-string, 2?: numeric-string}', $matches); }; function (string $size): void { if (preg_match('~^a\.b(c(\d+)?)?d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('list{0: non-falsy-string, 1?: non-falsy-string, 2?: numeric-string}', $matches); + assertType('list{0: lowercase-string&non-falsy-string, 1?: lowercase-string&non-falsy-string, 2?: numeric-string}', $matches); }; function (string $size): void { if (preg_match('~^a\.b(c(\d+))d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType('array{non-falsy-string, non-falsy-string, numeric-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, lowercase-string&non-falsy-string, numeric-string}', $matches); }; function (string $size): void { if (preg_match('~^a\.(b)?(c)?d~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType("list{0: non-falsy-string, 1?: ''|'b', 2?: 'c'}", $matches); + assertType("list{0: 'a.bcd'|'a.bd'|'a.cd'|'a.d', 1?: ''|'b', 2?: 'c'}", $matches); }; function (string $size): void { if (preg_match('~^(?:(\\d+)x(\\d+)|(\\d+)|x(\\d+))$~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType("array{non-empty-string, '', '', '', numeric-string}|array{non-empty-string, '', '', numeric-string}|array{non-empty-string, numeric-string, numeric-string}", $matches); + assertType('array{lowercase-string&non-empty-string, \'\', \'\', \'\', numeric-string}|array{lowercase-string&non-empty-string, \'\', \'\', numeric-string}|array{lowercase-string&non-empty-string, numeric-string, numeric-string}', $matches); }; function (string $size): void { if (preg_match('~^(?:(\\d+)x(\\d+)|(\\d+)|x(\\d+))?$~', $size, $matches) !== 1) { throw new InvalidArgumentException(sprintf('Invalid size "%s"', $size)); } - assertType("array{string, '', '', '', numeric-string}|array{string, '', '', numeric-string}|array{string, numeric-string, numeric-string}|array{string}", $matches); + assertType('array{lowercase-string, \'\', \'\', \'\', numeric-string}|array{lowercase-string, \'\', \'\', numeric-string}|array{lowercase-string, numeric-string, numeric-string}|array{lowercase-string}', $matches); }; function (string $size): void { if (preg_match('~\{(?:(include)\\s+(?:[$]?\\w+(?a|bc?)/', $s, $matches)) { - assertType("array{0: non-falsy-string, named: 'a'|'b'|'bc', 1: 'a'|'b'|'bc'}", $matches); + assertType("array{0: 'Price: a'|'Price: b'|'Price: bc', named: 'a'|'b'|'bc', 1: 'a'|'b'|'bc'}", $matches); } }; function (string $s): void { if (preg_match('/Price: (a|0c?)/', $s, $matches)) { - assertType("array{non-falsy-string, '0'|'0c'|'a'}", $matches); + assertType("array{'Price: 0'|'Price: 0c'|'Price: a', '0'|'0c'|'a'}", $matches); } }; @@ -642,19 +642,19 @@ function (string $s): void { function (string $s): void { if (preg_match('/Price: (a|0)/', $s, $matches)) { - assertType("array{non-falsy-string, '0'|'a'}", $matches); + assertType("array{'Price: 0'|'Price: a', '0'|'a'}", $matches); } }; function (string $s): void { if (preg_match('/Price: (aa|0)/', $s, $matches)) { - assertType("array{non-falsy-string, '0'|'aa'}", $matches); + assertType("array{'Price: 0'|'Price: aa', '0'|'aa'}", $matches); } }; function (string $s): void { if (preg_match('/( \d+ )/x', $s, $matches)) { - assertType('array{non-empty-string, numeric-string}', $matches); + assertType('array{numeric-string, numeric-string}', $matches); } }; @@ -679,13 +679,13 @@ function (string $s): void { function (string $value): void { if (preg_match('/^(x)*$/', $value, $matches, PREG_OFFSET_CAPTURE)) { - assertType("array{0: array{string, int<-1, max>}, 1?: array{non-empty-string, int<-1, max>}}", $matches); + assertType('array{0: array{lowercase-string, int<0, max>}, 1?: array{\'x\', int<0, max>}}', $matches); } }; function (string $value): void { if (preg_match('/^(?:(x)|(y))*$/', $value, $matches, PREG_OFFSET_CAPTURE)) { - assertType("array{0: array{string, int<-1, max>}, 1?: array{non-empty-string, int<-1, max>}}|array{array{string, int<-1, max>}, array{'', int<-1, max>}, array{non-empty-string, int<-1, max>}}", $matches); + assertType('list{0: array{lowercase-string, int<0, max>}, 1?: array{\'\'|\'x\', int<-1, max>}, 2?: array{\'y\', int<0, max>}}', $matches); } }; @@ -712,25 +712,25 @@ static public function sayHello(string $source): void function (string $s): void { if (preg_match('~a|(\d)|(\s)~', $s, $matches) === 1) { - assertType("array{0: non-empty-string, 1?: numeric-string}|array{non-empty-string, '', non-empty-string}", $matches); + assertType("array{0: non-falsy-string|numeric-string, 1?: numeric-string}|array{non-falsy-string|numeric-string, '', non-falsy-string}", $matches); } }; function (string $s): void { if (preg_match('~a|((u)x)|((v)y)~', $s, $matches) === 1) { - assertType("array{non-empty-string, '', '', 'vy', 'v'}|array{non-empty-string, 'ux', 'u'}|array{non-empty-string}", $matches); + assertType("array{'a'|'ux'|'vy', '', '', 'vy', 'v'}|array{'a'|'ux'|'vy', 'ux', 'u'}|array{'a'|'ux'|'vy'}", $matches); } }; function (string $s): void { if (preg_match('~a|(\d)|(\s)~', $s, $matches, PREG_OFFSET_CAPTURE) === 1) { - assertType("array{0: array{non-empty-string, int<-1, max>}, 1?: array{numeric-string, int<-1, max>}}|array{array{non-empty-string, int<-1, max>}, array{'', int<-1, max>}, array{non-empty-string, int<-1, max>}}", $matches); + assertType("array{0: array{non-falsy-string|numeric-string, int<0, max>}, 1?: array{numeric-string, int<0, max>}}|array{array{non-falsy-string|numeric-string, int<0, max>}, array{'', int<-1, max>}, array{non-falsy-string, int<0, max>}}", $matches); } }; function (string $s): void { preg_match('~a|(\d)|(\s)~', $s, $matches); - assertType("array{}|array{0: non-empty-string, 1?: numeric-string}|array{non-empty-string, '', non-empty-string}", $matches); + assertType("array{}|array{0: non-falsy-string|numeric-string, 1?: numeric-string}|array{non-falsy-string|numeric-string, '', non-falsy-string}", $matches); }; function bug11490 (string $expression): void { @@ -753,7 +753,7 @@ function bug11622 (string $expression): void { $matches = []; if (preg_match('/^abc(def|$)/', $expression, $matches) === 1) { - assertType("array{non-falsy-string, string}", $matches); + assertType("array{'abc'|'abcdef', ''|'def'}", $matches); } } @@ -762,23 +762,23 @@ function bug11604 (string $string): void { return; } - assertType("list{0: non-falsy-string, 1?: ''|'XX', 2?: 'YY'}", $matches); + assertType("array{'XX'|'YYZZ'|'ZZ', 'XX'}|list{0: 'XX'|'YYZZ'|'ZZ', 1?: '', 2?: 'YY'}", $matches); // could be array{string, '', 'YY'}|array{string, 'XX'}|array{string} } function bug11604b (string $string): void { if (preg_match('/(XX)|(YY)?(ZZ)/', $string, $matches)) { - assertType("list{0: non-falsy-string, 1?: ''|'XX', 2?: ''|'YY', 3?: 'ZZ'}", $matches); + assertType("array{'XX'|'YYZZ'|'ZZ', '', ''|'YY', 'ZZ'}|array{'XX'|'YYZZ'|'ZZ', 'XX'}", $matches); } } function testLtrimDelimiter (string $string): void { if (preg_match(' /(x)/', $string, $matches)) { - assertType("array{non-empty-string, 'x'}", $matches); + assertType("array{'x', 'x'}", $matches); } if (preg_match(' /(x)/', $string, $matches)) { - assertType("array{non-empty-string, 'x'}", $matches); + assertType("array{'x', 'x'}", $matches); } } @@ -786,19 +786,19 @@ function testUnescapeBackslash (string $string): void { if (preg_match(<<<'EOD' ~(\[)~ EOD, $string, $matches)) { - assertType("array{non-empty-string, '['}", $matches); + assertType("array{'[', '['}", $matches); } if (preg_match(<<<'EOD' ~(\d)~ EOD, $string, $matches)) { - assertType("array{non-empty-string, numeric-string}", $matches); + assertType("array{numeric-string, numeric-string}", $matches); } if (preg_match(<<<'EOD' ~(\\d)~ EOD, $string, $matches)) { - assertType("array{non-falsy-string, '\\\d'}", $matches); + assertType("array{'\\\\d', '\\\\d'}", $matches); } if (preg_match(<<<'EOD' @@ -810,7 +810,7 @@ function testUnescapeBackslash (string $string): void { if (preg_match(<<<'EOD' ~(\\\\d)~ EOD, $string, $matches)) { - assertType("array{non-falsy-string, '\\\\\\\d'}", $matches); + assertType("array{'\\\\\\\\d', '\\\\\\\\d'}", $matches); } } @@ -818,128 +818,128 @@ function testEscapedDelimiter (string $string): void { if (preg_match(<<<'EOD' /(\/)/ EOD, $string, $matches)) { - assertType("array{non-empty-string, '/'}", $matches); + assertType("array{'/', '/'}", $matches); } if (preg_match(<<<'EOD' ~(\~)~ EOD, $string, $matches)) { - assertType("array{non-empty-string, '~'}", $matches); + assertType("array{'~', '~'}", $matches); } if (preg_match(<<<'EOD' ~(\[2])~ EOD, $string, $matches)) { - assertType("array{non-falsy-string, '[2]'}", $matches); + assertType("array{'[2]', '[2]'}", $matches); } if (preg_match(<<<'EOD' [(\[2\])] EOD, $string, $matches)) { - assertType("array{non-falsy-string, '[2]'}", $matches); + assertType("array{'[2]', '[2]'}", $matches); } if (preg_match(<<<'EOD' ~(\{2})~ EOD, $string, $matches)) { - assertType("array{non-falsy-string, '{2}'}", $matches); + assertType("array{'{2}', '{2}'}", $matches); } if (preg_match(<<<'EOD' {(\{2\})} EOD, $string, $matches)) { - assertType("array{non-falsy-string, '{2}'}", $matches); + assertType("array{'{2}', '{2}'}", $matches); } if (preg_match(<<<'EOD' ~([a\]])~ EOD, $string, $matches)) { - assertType("array{non-empty-string, ']'|'a'}", $matches); + assertType("array{']'|'a', ']'|'a'}", $matches); } if (preg_match(<<<'EOD' ~([a[])~ EOD, $string, $matches)) { - assertType("array{non-empty-string, '['|'a'}", $matches); + assertType("array{'['|'a', '['|'a'}", $matches); } if (preg_match(<<<'EOD' ~([a\]b])~ EOD, $string, $matches)) { - assertType("array{non-empty-string, ']'|'a'|'b'}", $matches); + assertType("array{']'|'a'|'b', ']'|'a'|'b'}", $matches); } if (preg_match(<<<'EOD' ~([a[b])~ EOD, $string, $matches)) { - assertType("array{non-empty-string, '['|'a'|'b'}", $matches); + assertType("array{'['|'a'|'b', '['|'a'|'b'}", $matches); } if (preg_match(<<<'EOD' ~([a\[b])~ EOD, $string, $matches)) { - assertType("array{non-empty-string, '['|'a'|'b'}", $matches); + assertType("array{'['|'a'|'b', '['|'a'|'b'}", $matches); } if (preg_match(<<<'EOD' [([a\[b])] EOD, $string, $matches)) { - assertType("array{non-empty-string, '['|'a'|'b'}", $matches); + assertType("array{'['|'a'|'b', '['|'a'|'b'}", $matches); } if (preg_match(<<<'EOD' {(x\\\{)|(y\\\\\})} EOD, $string, $matches)) { - assertType("array{non-falsy-string, '', 'y\\\\\\\}'}|array{non-falsy-string, 'x\\\{'}", $matches); + assertType("array{'x\\\\{'|'y\\\\\\\\}', '', 'y\\\\\\\\}'}|array{'x\\\\{'|'y\\\\\\\\}', 'x\\\\{'}", $matches); } } function bugUnescapedDashAfterRange (string $string): void { if (preg_match('/([0-1-y])/', $string, $matches)) { - assertType("array{non-empty-string, non-empty-string}", $matches); + assertType("array{'-'|'0'|'1'|'y', '-'|'0'|'1'|'y'}", $matches); } } function bugEmptySubexpression (string $string): void { if (preg_match('//', $string, $matches)) { - assertType("array{string}", $matches); // could be array{''} + assertType("array{''}", $matches); } if (preg_match('/()/', $string, $matches)) { - assertType("array{string, ''}", $matches); // could be array{'', ''} + assertType("array{'', ''}", $matches); } if (preg_match('/|/', $string, $matches)) { - assertType("array{string}", $matches); // could be array{''} + assertType("array{''}", $matches); } if (preg_match('~|(a)~', $string, $matches)) { - assertType("array{0: string, 1?: 'a'}", $matches); + assertType("array{0: ''|'a', 1?: 'a'}", $matches); } if (preg_match('~(a)|~', $string, $matches)) { - assertType("array{0: string, 1?: 'a'}", $matches); + assertType("array{0: ''|'a', 1?: 'a'}", $matches); } if (preg_match('~(a)||(b)~', $string, $matches)) { - assertType("array{0: string, 1?: 'a'}|array{string, '', 'b'}", $matches); + assertType("array{''|'a'|'b', '', 'b'}|array{0: ''|'a'|'b', 1?: 'a'}", $matches); } if (preg_match('~(|(a))~', $string, $matches)) { - assertType("array{0: string, 1: ''|'a', 2?: 'a'}", $matches); + assertType("array{0: ''|'a', 1: ''|'a', 2?: 'a'}", $matches); } if (preg_match('~((a)|)~', $string, $matches)) { - assertType("array{0: string, 1: ''|'a', 2?: 'a'}", $matches); + assertType("array{0: ''|'a', 1: ''|'a', 2?: 'a'}", $matches); } if (preg_match('~((a)||(b))~', $string, $matches)) { - assertType("list{0: string, 1: ''|'a'|'b', 2?: ''|'a', 3?: 'b'}", $matches); + assertType("array{''|'a'|'b', ''|'a'|'b', '', 'b'}|array{0: ''|'a'|'b', 1: ''|'a'|'b', 2?: 'a'}", $matches); } if (preg_match('~((a)|()|(b))~', $string, $matches)) { - assertType("list{0: string, 1: ''|'a'|'b', 2?: ''|'a', 3?: '', 4?: 'b'}", $matches); + assertType("array{''|'a'|'b', ''|'a'|'b', 'a'}|array{0: ''|'a'|'b', 1: ''|'a'|'b', 2: '', 3: '', 4?: 'b'}", $matches); } } @@ -948,51 +948,51 @@ function bug11744(string $string): void if (!preg_match('~^((/[a-z]+)?)~', $string, $matches)) { return; } - assertType('array{0: string, 1: string, 2?: non-falsy-string}', $matches); + assertType('array{0: lowercase-string, 1: lowercase-string, 2?: lowercase-string&non-falsy-string}', $matches); if (!preg_match('~^((/[a-z]+)?.*)~', $string, $matches)) { return; } - assertType('array{0: string, 1: string, 2?: non-falsy-string}', $matches); + assertType('array{0: string, 1: string, 2?: lowercase-string&non-falsy-string}', $matches); if (!preg_match('~^((/[a-z]+)?.+)~', $string, $matches)) { return; } - assertType('array{0: non-empty-string, 1: non-empty-string, 2?: non-falsy-string}', $matches); + assertType('array{0: non-empty-string, 1: non-empty-string, 2?: lowercase-string&non-falsy-string}', $matches); } function bug12749(string $str): void { if (preg_match('/[A-Z]/', $str, $match)) { - assertType('array{non-empty-string}', $match); // could be non-falsy-string + assertType('array{\'A\'|\'B\'|\'C\'|\'D\'|\'E\'|\'F\'|\'G\'|\'H\'|\'I\'|\'J\'|\'K\'|\'L\'|\'M\'|\'N\'|\'O\'|\'P\'|\'Q\'|\'R\'|\'S\'|\'T\'|\'U\'|\'V\'|\'W\'|\'X\'|\'Y\'|\'Z\'}', $match); // the wish granted and exceeded: the constants enumerate } } function bug12749a(string $str): void { if (preg_match('/[A-Z]{2,}/', $str, $match)) { - assertType('array{non-falsy-string}', $match); + assertType('array{non-falsy-string&uppercase-string}', $match); } } function bug12749b(string $str): void { if (preg_match('/[0-9][A-Z]/', $str, $match)) { - assertType('array{non-falsy-string}', $match); + assertType('array{non-falsy-string&uppercase-string}', $match); } } function bug12749c(string $str): void { if (preg_match('/[0-9][A-Z]?/', $str, $match)) { - assertType('array{non-empty-string}', $match); + assertType('array{non-empty-string&uppercase-string}', $match); } } function bug12749d(string $str): void { if (preg_match('/[0-9]?[A-Z]/', $str, $match)) { - assertType('array{non-falsy-string}', $match); + assertType('array{non-falsy-string&uppercase-string}', $match); } } @@ -1000,33 +1000,33 @@ function bug12749e(string $str): void { // no ^ $ delims, therefore can be anything which contains a number if (preg_match('/[0-9]/', $str, $match)) { - assertType('array{non-empty-string}', $match); + assertType('array{\'0\'|\'1\'|\'2\'|\'3\'|\'4\'|\'5\'|\'6\'|\'7\'|\'8\'|\'9\'}', $match); } } function bug12749f(string $str): void { if (preg_match('/^[0-9]$/', $str, $match)) { - assertType('array{non-empty-string}', $match); // could be numeric-string + assertType('array{\'0\'|\'1\'|\'2\'|\'3\'|\'4\'|\'5\'|\'6\'|\'7\'|\'8\'|\'9\'}', $match); // the wish granted and exceeded: the digits enumerate } } function bug12397(string $string): void { $m = preg_match('#\b([A-Z]{2,})-(\d+)#', $string, $match); - assertType("array{}|array{non-falsy-string, non-falsy-string, numeric-string}", $match); + assertType('array{}|array{non-falsy-string&uppercase-string, non-falsy-string&uppercase-string, numeric-string}', $match); } function bug12792(string $string): void { if (preg_match('~a\Kb~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{'b'} + assertType('array{string}', $match); } if (preg_match('~a\K~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{''} + assertType('array{string}', $match); } if (preg_match('~a\K.+~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{non-empty-string} + assertType('array{string}', $match); } if (preg_match('~a\K.*~', $string, $match) === 1) { @@ -1034,7 +1034,7 @@ function bug12792(string $string): void { } if (preg_match('~a\K(.+)~', $string, $match) === 1) { - assertType('array{string, non-empty-string}', $match); // could be array{non-empty-string, non-empty-string} + assertType('array{string, non-empty-string}', $match); } if (preg_match('~a\K(.*)~', $string, $match) === 1) { @@ -1042,7 +1042,7 @@ function bug12792(string $string): void { } if (preg_match('~a\K(.+?)~', $string, $match) === 1) { - assertType('array{string, non-empty-string}', $match); // could be array{non-empty-string, non-empty-string} + assertType('array{string, non-empty-string}', $match); } if (preg_match('~a\K(.*?)~', $string, $match) === 1) { @@ -1050,34 +1050,34 @@ function bug12792(string $string): void { } if (preg_match('~a\K(?=.+)~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{''} + assertType('array{string}', $match); } if (preg_match('~a\K(?=.*)~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{''} + assertType('array{string}', $match); } if (preg_match('~a(?:x\Kb|c)~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{'ac'|'b'} + assertType('array{string}', $match); } if (preg_match('~a(?:c|x\Kb)~', $string, $match) === 1) { - assertType('array{string}', $match); // could be array{'ac'|'b'} + assertType('array{string}', $match); } if (preg_match('~a(y|(?:x\Kb|c))d~', $string, $match) === 1) { - assertType('array{string, non-empty-string}', $match); // could be array{'acd'|'ayd'|'bd', 'c'|'xb'|'y'} + assertType('array{string, \'c\'|\'xb\'|\'y\'}', $match); } if (preg_match('~a((?:c|x\Kb)|y)d~', $string, $match) === 1) { - assertType('array{string, non-empty-string}', $match); // could be array{'acd'|'ayd'|'bd', 'c'|'xb'|'y'} + assertType('array{string, \'c\'|\'xb\'|\'y\'}', $match); } } function testExtendedSyntaxEscapedHash(string $string): void { // \# in extended mode should be treated as literal hash, not comment if (preg_match('/^ ([\#.]) $/x', $string, $matches)) { - assertType("array{non-falsy-string, '#'|'.'}", $matches); + assertType("array{'#'|'.', '#'|'.'}", $matches); } // Real comment vs escaped hash @@ -1085,77 +1085,166 @@ function testExtendedSyntaxEscapedHash(string $string): void { (\d+) # this is a comment ([\#ab]+) # hash in character class (escaped) /x', $string, $matches)) { - assertType('array{non-falsy-string, numeric-string, non-empty-string}', $matches); + assertType('array{lowercase-string&non-falsy-string, numeric-string, lowercase-string&non-falsy-string}', $matches); + } +} + +function nestedCapturingParent(string $s): void { + if (preg_match('/(x(?:(b)))?c/', $s, $matches)) { + assertType("array{'c'|'xbc', 'xb', 'b'}|array{'c'|'xbc'}", $matches); + } +} + +function branchResetInEveryBranch(string $s): void { + if (preg_match('/(?|(a)|(b))(c)?/', $s, $matches)) { + assertType("array{0: 'a'|'ac'|'b'|'bc', 1: 'a'|'b', 2?: 'c'}", $matches); + } + if (preg_match('/(?|(a)(x)|(b)(y))/', $s, $matches)) { + assertType("array{'ax'|'by', 'a'|'b', 'x'|'y'}", $matches); + } +} + +function unmatchedOffsetOfOnlyOptionalGroup(string $s): void { + // preg_match('/(a)?/', '', $m, PREG_OFFSET_CAPTURE | PREG_UNMATCHED_AS_NULL) writes group 1 as [null, -1] + if (preg_match('/(a)?/', $s, $matches, PREG_OFFSET_CAPTURE | PREG_UNMATCHED_AS_NULL)) { + assertType("array{array{''|'a', int<0, max>}, array{'a'|null, int<-1, max>}}", $matches); + } +} + +function unmatchedNameWithOffsets(string $s): void { + // preg_match('/(?x)|(?y)/', 'y', $m, PREG_OFFSET_CAPTURE) writes 'a' as ['', -1] + if (preg_match('/(?x)|(?y)/', $s, $matches, PREG_OFFSET_CAPTURE)) { + assertType("array{0: array{'x'|'y', int<0, max>}, a: array{'', int<-1, max>}, 1: array{'', int<-1, max>}, b: array{'y', int<0, max>}, 2: array{'y', int<0, max>}}|array{0: array{'x'|'y', int<0, max>}, a: array{'x', int<0, max>}, 1: array{'x', int<0, max>}}", $matches); + } +} + +function caretBranchBeforeAFailingTail(string $s): void { + // preg_match('/(^|a)b/', 'ab') sets group 1 to 'a': the caret branch loses when 'b' fails after it + if (preg_match('/(^|a)b/', $s, $matches)) { + assertType("array{'ab'|'b', ''|'a'}", $matches); + } +} + +function caretBranchFromAnOffset(string $s, int $offset): void { + if (preg_match('/^|bar/', $s, $matches)) { + assertType("array{''}", $matches); + } + // preg_match('/^|bar/', 'xbar', $m, 0, 1) sets $m[0] to 'bar': the caret does not match at an offset + if (preg_match('/^|bar/', $s, $matches, 0, 1)) { + assertType("array{''|'bar'}", $matches); + } + if (preg_match('/^|bar/', $s, $matches, 0, $offset)) { + assertType("array{''|'bar'}", $matches); + } +} + +function groupsUnsetAfterAccept(string $s): void { + // preg_match('/(?:a(*ACCEPT))?(b)(c)/', 'a') writes ['a']: both groups after the cut are left out + if (preg_match('/(?:a(*ACCEPT))?(b)(c)/', $s, $matches)) { + assertType("list{0: string, 1?: ''|'b', 2?: 'c'}", $matches); + } + if (preg_match('/(?:a(*ACCEPT))?(b)(c)/', $s, $matches, PREG_UNMATCHED_AS_NULL)) { + assertType("array{string, 'b'|null, 'c'|null}", $matches); + } + // preg_match('/(a)|b(*ACCEPT)(c)/', 'b') writes ['b']: the branch is cut before its group + if (preg_match('/(a)|b(*ACCEPT)(c)/', $s, $matches)) { + assertType("array{string, 'a'}|list{0: string, 1?: '', 2?: 'c'}", $matches); + } +} + +function repeatedAlternationKeepsTheGroupsOfEarlierRounds(string $s): void { + // preg_match('/(?:(a)|(b))+/', 'ab') writes ['ab', 'a', 'b']: a later round does not unset the groups of an earlier one + if (preg_match('/(?:(a)|(b))+/', $s, $matches)) { + assertType('list{0: lowercase-string&non-falsy-string, 1?: \'\'|\'a\', 2?: \'b\'}', $matches); + } + if (preg_match('/(?:x(a)|y(b)){2}/', $s, $matches)) { + assertType("list{0: 'xaxa'|'xayb'|'ybxa'|'ybyb', 1?: ''|'a', 2?: 'b'}", $matches); + } +} + +function inlineCaselessOptionKeepsItsScope(string $s): void { + // preg_match('/(?i:a)(b)/', 'aB') is 0: the option holds inside its group only + if (preg_match('/(?i:a)(b)/', $s, $matches)) { + assertType("array{non-falsy-string, 'b'}", $matches); + } + // preg_match('/((?i)a)(b)/', 'aB') is 0: a bare option holds to the end of its group + if (preg_match('/((?i)a)(b)/', $s, $matches)) { + assertType("array{non-falsy-string, non-falsy-string, 'b'}", $matches); } } function testAssertionsAreZeroWidth(string $s): void { // from php-src ext/pcre/tests/bug66121.phpt if (preg_match('/(?foo)|(?bar))(?baz)/', $s, $matches)) { - assertType('array', $matches); + assertType("array{0: 'barbaz'|'foobaz', g: 'bar', 1: '', 2: 'bar', h: 'baz', 3: 'baz'}|array{0: 'barbaz'|'foobaz', g: 'foo', 1: 'foo', 2: '', h: 'baz', 3: 'baz'}", $matches); } // from php-src ext/pcre/tests/bug79257.phpt if (preg_match('/(?J)(?:(?foo)|(?bar))/', $s, $matches, PREG_UNMATCHED_AS_NULL)) { - assertType('array', $matches); + assertType("array{0: 'bar'|'foo', g: 'bar'|'foo'|null, 1: 'foo'|null, 2: 'bar'|null}", $matches); } // from php-src ext/pcre/tests/bug79257.phpt if (preg_match_all('/(?J)(?[ac])(?\d)|(?[b])/', $s, $matches, PREG_SET_ORDER)) { - assertType('list>', $matches); + assertType("non-empty-list", $matches); } } function testQuantifiedMaybeEmptyAtom(string $s): void { // from PCRE2 testdata/testinput6 if (preg_match('/(abc|)+/', $s, $matches)) { - assertType("array{string, string}", $matches); + assertType('array{lowercase-string, \'\'|\'abc\'}', $matches); } // from PCRE2 testdata/testinput6 if (preg_match('/^(){3,5}/', $s, $matches)) { - assertType("array{string, string}", $matches); + assertType("array{'', ''}", $matches); } // from PCRE2 testdata/testinput1 if (preg_match('/((a|)+)+Z/', $s, $matches)) { - assertType("array{non-falsy-string, string, string}", $matches); + assertType('array{non-falsy-string, lowercase-string, \'\'|\'a\'}', $matches); } } function testBackreferences(string $s): void { // from PCRE2 testdata/testinput1 if (preg_match('/([a-c]*)\1/', $s, $matches)) { - assertType("array{string, string}", $matches); + assertType('array{string, lowercase-string}', $matches); } // from PCRE2 testdata/testinput1 @@ -1172,7 +1261,7 @@ function testBackreferences(string $s): void { function testBranchResetNotInOnlyTopLevelAlternation(string $s): void { // from PCRE2 testdata/testinput2 if (preg_match('/(x)(?|(abc)|(xyz))(x)/', $s, $matches)) { - assertType('array', $matches); + assertType("array{'xabcx'|'xxyzx', 'x', 'abc'|'xyz', 'x'}", $matches); } } @@ -1182,13 +1271,22 @@ function testConditionalSubpatterns(string $s): void { assertType("list{0: non-falsy-string, 1?: ''|'(', 2?: ')'}", $matches); } - // from PCRE2 testdata/testinput2 + // from PCRE2 testdata/testinput2: the condition reads the group it sits in, which is + // not set yet, so the group always matches the empty string if (preg_match('/((?(-1)a))/', $s, $matches)) { - assertType('array{string, string}', $matches); + assertType("array{'', ''}", $matches); } // from PCRE2 testdata/testinput1 if (preg_match('/(?(DEFINE)(?bar))(?bar))(?bar))(x)?y/', $s, $matches)) { + assertType("array{0: 'xy'|'y', foo?: '', 1?: '', 2?: 'x'}", $matches); } } diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php80.php b/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php80.php index 4620565210c..235ab6c3d2f 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php80.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php80.php @@ -7,15 +7,15 @@ function doOffsetCaptureWithUnmatchedNull(string $s): void { // see https://3v4l.org/07rBO#v8.2.9 if (preg_match('/(foo)(bar)(baz)/', $s, $matches, PREG_OFFSET_CAPTURE|PREG_UNMATCHED_AS_NULL)) { - assertType("array{array{non-falsy-string|null, int<-1, max>}, array{'foo'|null, int<-1, max>}, array{'bar'|null, int<-1, max>}, array{'baz'|null, int<-1, max>}}", $matches); + assertType("array{array{'foobarbaz', int<0, max>}, array{'foo', int<0, max>}, array{'bar', int<0, max>}, array{'baz', int<0, max>}}", $matches); } - assertType("array{}|array{array{non-falsy-string|null, int<-1, max>}, array{'foo'|null, int<-1, max>}, array{'bar'|null, int<-1, max>}, array{'baz'|null, int<-1, max>}}", $matches); + assertType("array{}|array{array{'foobarbaz', int<0, max>}, array{'foo', int<0, max>}, array{'bar', int<0, max>}, array{'baz', int<0, max>}}", $matches); } function doNonAutoCapturingModifier(string $s): void { if (preg_match('/(?n)(\d+)/', $s, $matches)) { - // should be assertType('array{string}', $matches); - assertType('array{non-empty-string, numeric-string}', $matches); + // (?n) turns capturing off, so only the full match remains + assertType('array{numeric-string}', $matches); } - assertType('array{}|array{non-empty-string, numeric-string}', $matches); + assertType('array{}|array{numeric-string}', $matches); } diff --git a/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php82.php b/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php82.php index 1b5dc597b7f..6cb56342565 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php82.php +++ b/tests/PHPStan/Analyser/nsrt/preg_match_shapes_php82.php @@ -8,14 +8,14 @@ // https://php.watch/versions/8.2/preg-n-no-capture-modifier function doNonAutoCapturingFlag(string $s): void { if (preg_match('/(\d+)/n', $s, $matches)) { - assertType('array{non-empty-string}', $matches); + assertType('array{numeric-string}', $matches); } - assertType('array{}|array{non-empty-string}', $matches); + assertType('array{}|array{numeric-string}', $matches); if (preg_match('/(\d+)(?P\d+)/n', $s, $matches)) { - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); } - assertType('array{}|array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{}|array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); if (preg_match('/(\w)-(?P\d+)-(\w)/n', $s, $matches)) { assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); @@ -26,21 +26,21 @@ function doNonAutoCapturingFlag(string $s): void { // delimiter variants, see https://www.php.net/manual/en/regexp.reference.delimiters.php function (string $s): void { if (preg_match('{(\d+)(?P\d+)}n', $s, $matches)) { - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); } }; function (string $s): void { if (preg_match('<(\d+)(?P\d+)>n', $s, $matches)) { - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); } }; function (string $s): void { if (preg_match('((\d+)(?P\d+))n', $s, $matches)) { - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); } }; function (string $s): void { if (preg_match('[(\d+)(?P\d+)]n', $s, $matches)) { - assertType('array{0: non-falsy-string, num: numeric-string, 1: numeric-string}', $matches); + assertType('array{0: non-falsy-string&numeric-string, num: numeric-string, 1: numeric-string}', $matches); } }; diff --git a/tests/PHPStan/Analyser/nsrt/preg_replace_callback_shapes.php b/tests/PHPStan/Analyser/nsrt/preg_replace_callback_shapes.php index 9f8c608d471..ccbcf6812eb 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_replace_callback_shapes.php +++ b/tests/PHPStan/Analyser/nsrt/preg_replace_callback_shapes.php @@ -9,7 +9,7 @@ function (string $s): void { preg_replace_callback( '/(foo)?(bar)?(baz)?/', function ($matches) { - assertType("array{string, 'foo'|null, 'bar'|null, 'baz'|null}", $matches); + assertType("array{''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', 'foo'|null, 'bar'|null, 'baz'|null}", $matches); return ''; }, $s, @@ -23,7 +23,7 @@ function (string $s): void { preg_replace_callback( '/(foo)?(bar)?(baz)?/', function ($matches) { - assertType("list{0: array{string, int<-1, max>}, 1?: array{''|'foo', int<-1, max>}, 2?: array{''|'bar', int<-1, max>}, 3?: array{'baz', int<-1, max>}}", $matches); + assertType("list{0: array{''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', int<0, max>}, 1?: array{''|'foo', int<-1, max>}, 2?: array{''|'bar', int<-1, max>}, 3?: array{'baz', int<0, max>}}", $matches); return ''; }, $s, @@ -37,7 +37,7 @@ function (string $s): void { preg_replace_callback( '/(foo)?(bar)?(baz)?/', function ($matches) { - assertType("array{array{string|null, int<-1, max>}, array{'foo'|null, int<-1, max>}, array{'bar'|null, int<-1, max>}, array{'baz'|null, int<-1, max>}}", $matches); + assertType("array{array{''|'bar'|'barbaz'|'baz'|'foo'|'foobar'|'foobarbaz'|'foobaz', int<0, max>}, array{'foo'|null, int<-1, max>}, array{'bar'|null, int<-1, max>}, array{'baz'|null, int<-1, max>}}", $matches); return ''; }, $s, @@ -62,8 +62,8 @@ function bug14904(string $string): void { preg_replace_callback( '/a|(?b)/', function (array $match): string { - assertType("array{0: non-empty-string, b: 'b'|null, 1: 'b'|null}", $match); - assertNativeType("array{0: non-empty-string, b: 'b'|null, 1: 'b'|null}", $match); + assertType("array{0: 'a'|'b', b: 'b'|null, 1: 'b'|null}", $match); + assertNativeType("array{0: 'a'|'b', b: 'b'|null, 1: 'b'|null}", $match); return ''; }, $string, @@ -72,3 +72,15 @@ function (array $match): string { PREG_UNMATCHED_AS_NULL ); } + +function caretBranchInACallback(string $s): void { + // a callback runs for every match of the scan: preg_replace_callback('/^|bar/', ..., 'xbar') sees '' then 'bar' + preg_replace_callback( + '/^|bar/', + function ($matches) { + assertType("array{''|'bar'}", $matches); + return ''; + }, + $s, + ); +} diff --git a/tests/PHPStan/Analyser/nsrt/preg_split.php b/tests/PHPStan/Analyser/nsrt/preg_split.php index 16e917d3e9a..6bca2c6ba47 100644 --- a/tests/PHPStan/Analyser/nsrt/preg_split.php +++ b/tests/PHPStan/Analyser/nsrt/preg_split.php @@ -43,6 +43,11 @@ public function doWithVariables(string $pattern, string $subject, int $offset, i assertType("array{'1', '2', '3'}|array{'1-2-3'}|false", preg_split('/-/', '1-2-3', $this->generate())); assertType("array{'1', '2', '3'}|array{'1-2-3'}|false", preg_split('/-/', '1-2-3', $this->generate(), $this->generate())); + // a limit or a flags value no constant names is no failed call: + // the engine reads the flags it knows and splits all the same + assertType('non-empty-list|false', preg_split('/-/', '1-2-3', $offset)); + assertType('non-empty-list}|string>|false', preg_split('/-/', '1-2-3', $offset, $flags)); + assertType('list}|string>|false', preg_split($pattern, $subject, $offset, $flags)); assertType('list}|string>|false', preg_split("//", $subject, $offset, $flags)); diff --git a/tests/PHPStan/Command/IgnoredRegexValidatorTest.php b/tests/PHPStan/Command/IgnoredRegexValidatorTest.php index 71c58e04a42..27dd3ace360 100644 --- a/tests/PHPStan/Command/IgnoredRegexValidatorTest.php +++ b/tests/PHPStan/Command/IgnoredRegexValidatorTest.php @@ -2,10 +2,14 @@ namespace PHPStan\Command; +use PHPStan\Php\PcreVersion; +use PHPStan\Php\PhpVersion; use PHPStan\PhpDoc\TypeStringResolver; use PHPStan\Testing\PHPStanTestCase; -use PHPStan\Type\Regex\Parser\RegexParser; +use PHPStan\Type\Regex\PHPRegexReader; +use PHPStan\Type\Regex\RegexExpressionHelper; use PHPUnit\Framework\Attributes\DataProvider; +use const PHP_VERSION_ID; class IgnoredRegexValidatorTest extends PHPStanTestCase { @@ -162,7 +166,10 @@ public function testValidate( bool $expectAllErrorsIgnored, ): void { - $validator = new IgnoredRegexValidator(new RegexParser(), self::getContainer()->getByType(TypeStringResolver::class)); + $validator = new IgnoredRegexValidator( + new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), self::getContainer()->getByType(RegexExpressionHelper::class)), + self::getContainer()->getByType(TypeStringResolver::class), + ); $result = $validator->validate($regex); $this->assertSame($expectedTypes, $result->getIgnoredTypes()); diff --git a/tests/PHPStan/Rules/Arrays/NonexistentOffsetInArrayDimFetchRuleTest.php b/tests/PHPStan/Rules/Arrays/NonexistentOffsetInArrayDimFetchRuleTest.php index 0724cb09adf..fac16672030 100644 --- a/tests/PHPStan/Rules/Arrays/NonexistentOffsetInArrayDimFetchRuleTest.php +++ b/tests/PHPStan/Rules/Arrays/NonexistentOffsetInArrayDimFetchRuleTest.php @@ -804,7 +804,7 @@ public function testBug11655(): void { $this->analyse([__DIR__ . '/data/bug-11655.php'], [ [ - "Offset 3 does not exist on array{non-falsy-string, 'x', array{non-falsy-string, 'x'}}.", + "Offset 3 does not exist on array{'ax', 'x', array{'cx', 'x'}}.", 15, ], ]); diff --git a/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php b/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php index 5c91f0b5c6c..9f92f7c0f6e 100644 --- a/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php +++ b/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php @@ -801,6 +801,36 @@ public function testPregReplaceCallback(): void ]); } + #[RequiresPhp('>= 8.1.0')] + public function testBug10396(): void + { + $this->analyse([__DIR__ . '/data/bug-10396.php'], [ + [ + 'Parameter #2 $callback of function preg_replace_callback expects callable(array}>): string, Closure(array): string given.', + 46, + ], + [ + 'Parameter #2 $callback of function preg_replace_callback expects callable(array): string, Closure(array): string given.', + 47, + 'Type array of parameter #1 $match of passed callable needs to be same or wider than parameter type array of accepting callable.', + ], + [ + 'Parameter #2 $callback of function preg_replace_callback expects callable(array}>): string, Closure(array): string given.', + 48, + '• Offset 0 (string) does not accept type null. +• Type array of parameter #1 $match of passed callable needs to be same or wider than parameter type array}> of accepting callable.', + ], + [ + 'Parameter #2 $callback of function preg_replace_callback expects callable(array): string, Closure(array): string given.', + 49, + ], + [ + 'Parameter #2 $callback of function preg_replace_callback expects callable(array): string, Closure(array): string given.', + 50, + ], + ]); + } + public function testMbEregReplaceCallback(): void { $this->analyse([__DIR__ . '/data/mb_ereg_replace_callback.php'], [ @@ -3011,11 +3041,11 @@ public function testConstantParameterCheck(): void 110, ], [ - 'Parameter #2 $callback of function preg_replace_callback expects callable(array): string, Closure(mixed): array{non-falsy-string, int<-1, max>} given.', + 'Parameter #2 $callback of function preg_replace_callback expects callable(array}>): string, Closure(mixed): array{\'foo\', int<0, max>} given.', 113, ], [ - 'Parameter #2 $callback of function preg_replace_callback expects callable(array): string, Closure(mixed): array{non-falsy-string|null, int<-1, max>} given.', + 'Parameter #2 $callback of function preg_replace_callback expects callable(array}>): string, Closure(mixed): array{\'foo\', int<0, max>} given.', 116, ], [ diff --git a/tests/PHPStan/Rules/Functions/data/bug-10396.php b/tests/PHPStan/Rules/Functions/data/bug-10396.php new file mode 100644 index 00000000000..d8d5826c118 --- /dev/null +++ b/tests/PHPStan/Rules/Functions/data/bug-10396.php @@ -0,0 +1,51 @@ += 8.1 declare(strict_types = 1); + +namespace Bug10396; + +function test(): string|null { + $flags = \PREG_OFFSET_CAPTURE | \PREG_UNMATCHED_AS_NULL; + return preg_replace_callback('/bar/', callback(...), 'foobar', -1, $count, $flags); +} + +/** + * @param array $match + * @return string + */ +function callback(array $match): string { + return (string) $match[0][1]; +} + +/** + * @param array $match + */ +function offsetCallback(array $match): string { + return $match[0][0]; +} + +/** + * @param array $match + */ +function nullableCallback(array $match): string { + return (string) $match[0]; +} + +/** + * @param array $match + */ +function stringCallback(array $match): string { + return $match[0]; +} + +function flags(string $s, int $flags): void { + preg_replace_callback('/bar/', offsetCallback(...), $s, -1, $count, PREG_OFFSET_CAPTURE); + preg_replace_callback('/bar/', nullableCallback(...), $s, -1, $count, PREG_UNMATCHED_AS_NULL); + preg_replace_callback('/bar/', nullableCallback(...), $s); + preg_replace_callback('/bar/', stringCallback(...), $s); + preg_replace_callback('/bar/', stringCallback(...), $s, -1, $count, $flags); + + preg_replace_callback('/bar/', stringCallback(...), $s, -1, $count, PREG_OFFSET_CAPTURE); + preg_replace_callback('/bar/', stringCallback(...), $s, -1, $count, PREG_UNMATCHED_AS_NULL); + preg_replace_callback('/bar/', offsetCallback(...), $s, -1, $count, PREG_OFFSET_CAPTURE | PREG_UNMATCHED_AS_NULL); + preg_replace_callback('/bar/', offsetCallback(...), $s); + preg_replace_callback('/bar/', callback(...), $s, flags: PREG_UNMATCHED_AS_NULL); +} diff --git a/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleAnalysedPhpTest.php b/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleAnalysedPhpTest.php new file mode 100644 index 00000000000..f031664773c --- /dev/null +++ b/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleAnalysedPhpTest.php @@ -0,0 +1,77 @@ + + */ +class RegularExpressionPatternRuleAnalysedPhpTest extends RuleTestCase +{ + + private bool $checkRegexPatternForAnalysedPhp = true; + + protected function getRule(): Rule + { + return new RegularExpressionPatternRule( + self::getContainer()->getByType(RegexExpressionHelper::class), + self::getContainer()->getByType(PHPRegexReader::class), + $this->checkRegexPatternForAnalysedPhp, + ); + } + + public function testPatternInvalidForAnalysedPhp(): void + { + // spaces inside \x{} compile on the PCRE2 bundled with PHP 8.4, not on the one PHP 8.2 bundles + $this->analyse([__DIR__ . '/data/regex-pattern-analysed-php.php'], self::runningEngineErrors() ?? [ + [ + 'Regex pattern is invalid: Spaces inside \x{} need PCRE2 10.43, which PHP bundles from 8.4 at offset 5', + 6, + ], + ]); + } + + public function testPatternInvalidForAnalysedPhpWithoutToggle(): void + { + $this->checkRegexPatternForAnalysedPhp = false; + $this->analyse([__DIR__ . '/data/regex-pattern-analysed-php.php'], self::runningEngineErrors() ?? []); + } + + /** + * The errors the rule reports before reading the pattern for the analysed PHP: the running + * engine's own refusal, on a PCRE2 before 10.43 (the system's on some CI images); null where + * the engine compiles the pattern. The pattern is read from the fixture, so that the engine + * running the test decides, not the analysis of this file. + * + * @return list|null + */ + private static function runningEngineErrors(): ?array + { + $fixture = (string) file_get_contents(__DIR__ . '/data/regex-pattern-analysed-php.php'); + $pattern = Strings::match($fixture, "~preg_match\\('([^']+)'~")[1] ?? ''; + + try { + Strings::match('', $pattern); + } catch (RegexpException $e) { + return [[sprintf('Regex pattern is invalid: %s', $e->getMessage()), 6]]; + } + + return null; + } + + public static function getAdditionalConfigFiles(): array + { + return [ + __DIR__ . '/data/analysed-php-82.neon', + ]; + } + +} diff --git a/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleTest.php b/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleTest.php index 00f0db3ce34..afa913a5980 100644 --- a/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleTest.php +++ b/tests/PHPStan/Rules/Regexp/RegularExpressionPatternRuleTest.php @@ -4,6 +4,7 @@ use PHPStan\Rules\Rule; use PHPStan\Testing\RuleTestCase; +use PHPStan\Type\Regex\PHPRegexReader; use PHPStan\Type\Regex\RegexExpressionHelper; use PHPUnit\Framework\Attributes\DataProvider; use function sprintf; @@ -19,6 +20,8 @@ protected function getRule(): Rule { return new RegularExpressionPatternRule( self::getContainer()->getByType(RegexExpressionHelper::class), + self::getContainer()->getByType(PHPRegexReader::class), + true, ); } diff --git a/tests/PHPStan/Rules/Regexp/data/analysed-php-82.neon b/tests/PHPStan/Rules/Regexp/data/analysed-php-82.neon new file mode 100644 index 00000000000..636d772d2c7 --- /dev/null +++ b/tests/PHPStan/Rules/Regexp/data/analysed-php-82.neon @@ -0,0 +1,2 @@ +parameters: + phpVersion: 80200 diff --git a/tests/PHPStan/Rules/Regexp/data/regex-pattern-analysed-php.php b/tests/PHPStan/Rules/Regexp/data/regex-pattern-analysed-php.php new file mode 100644 index 00000000000..c9b9a42c5ea --- /dev/null +++ b/tests/PHPStan/Rules/Regexp/data/regex-pattern-analysed-php.php @@ -0,0 +1,8 @@ +analyse([__DIR__ . '/data/bug-15297.php'], [ [ - 'Offset \'foo2\' on array{0: non-falsy-string, foo1: null, 1: null, bar1: null, 2: null, foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-empty-string, ...} on left side of ?? always exists and is not nullable.', + 'Offset \'foo2\' on array{0: non-falsy-string, foo1: null, 1: null, bar1: null, 2: null, foo2: non-falsy-string, 3: non-falsy-string, bar2?: non-falsy-string, ...} on left side of ?? always exists and is not nullable.', 11, ], ]); diff --git a/tests/PHPStan/Type/Php/RegexArrayShapeMatcherEngineTest.php b/tests/PHPStan/Type/Php/RegexArrayShapeMatcherEngineTest.php new file mode 100644 index 00000000000..281d76565e2 --- /dev/null +++ b/tests/PHPStan/Type/Php/RegexArrayShapeMatcherEngineTest.php @@ -0,0 +1,219 @@ + + */ + public static function dataPatterns(): iterable + { + // the fixtures are read as the newest PHP, whatever PHP runs the suite; one written for a PHP + // the parser does not read yet is left out + $parser = (new ParserFactory())->createForNewestSupportedVersion(); + $finder = new NodeFinder(); + $patterns = []; + foreach (glob(__DIR__ . '/../../Analyser/nsrt/*.php') ?: [] as $file) { + $code = file_get_contents($file); + if ($code === false || preg_match('/\bpreg_(?:match|match_all|replace_callback)\s*\(/', $code) !== 1) { + continue; + } + + try { + $statements = $parser->parse($code) ?? []; + } catch (Error) { + continue; + } + + foreach ($finder->findInstanceOf($statements, FuncCall::class) as $call) { + if ( + !$call->name instanceof Name + || !in_array($call->name->toLowerString(), ['preg_match', 'preg_match_all', 'preg_replace_callback'], true) + ) { + continue; + } + + $pattern = $call->getArgs()[0]->value ?? null; + if (!$pattern instanceof String_ || @preg_match($pattern->value, '') === false) { + continue; + } + + $patterns[$pattern->value] = true; + } + } + + foreach (array_keys($patterns) as $pattern) { + yield $pattern => [$pattern]; + } + } + + #[DataProvider('dataPatterns')] + public function testEngineMatches(string $pattern): void + { + $matcher = self::getContainer()->getByType(RegexArrayShapeMatcher::class); + $scope = self::getContainer()->getByType(ScopeFactory::class)->create(ScopeContext::create(__FILE__)); + $patternExpr = new String_($pattern); + + $failures = []; + $jit = ini_get('pcre.jit'); + ini_set('pcre.jit', '0'); + try { + foreach ($this->subjects($pattern) as $subject) { + foreach (self::MATCH_FLAGS as $flags) { + if (preg_match($pattern, $subject, $matches, $flags) === 1) { + $failures[] = $this->refusal($matcher->matchExpr($patternExpr, new ConstantIntegerType($flags), TrinaryLogic::createYes(), $scope), $matches, 'preg_match', $pattern, $subject, $flags); + } + + if (preg_match($pattern, $subject, $matches, $flags, 1) === 1) { + $failures[] = $this->refusal($matcher->matchExpr($patternExpr, new ConstantIntegerType($flags), TrinaryLogic::createYes(), $scope, true), $matches, 'preg_match from offset 1', $pattern, $subject, $flags); + } + + // a limit the short subjects never reach: -1 is the default, which cannot be passed positionally, and PHP 7.4 reads no named argument + preg_replace_callback($pattern, function (array $matches) use ($matcher, $patternExpr, $flags, $scope, $pattern, $subject, &$failures): string { + $failures[] = $this->refusal($matcher->matchExpr($patternExpr, new ConstantIntegerType($flags), TrinaryLogic::createYes(), $scope, true), $matches, 'preg_replace_callback', $pattern, $subject, $flags); + + return ''; + }, $subject, 100, $count, $flags); + } + + foreach (self::MATCH_ALL_FLAGS as $flags) { + // false on a match error, e.g. a subject that is not UTF-8 under /u + $matchCount = preg_match_all($pattern, $subject, $matches, $flags); + if ($matchCount === false || $matchCount === 0) { + continue; + } + + $failures[] = $this->refusal($matcher->matchAllExpr($patternExpr, new ConstantIntegerType($flags), TrinaryLogic::createYes(), $scope), $matches, 'preg_match_all', $pattern, $subject, $flags); + } + } + } finally { + ini_set('pcre.jit', is_string($jit) ? $jit : '1'); + } + + self::assertSame([], array_values(array_unique(array_filter($failures, static fn (?string $failure): bool => $failure !== null)))); + } + + /** + * @param array $matches + */ + private function refusal(?Type $type, array $matches, string $function, string $pattern, string $subject, int $flags): ?string + { + if ($type === null || $type->isSuperTypeOf(ConstantTypeHelper::getTypeFromValue($matches))->yes()) { + return null; + } + + return sprintf( + '%s(%s) with flags %d on %s wrote %s, the inferred type %s does not accept it', + $function, + $pattern, + $flags, + var_export($subject, true), + var_export($matches, true), + $type->describe(VerbosityLevel::precise()), + ); + } + + /** + * @return list + */ + private function subjects(string $pattern): array + { + $subjects = self::SUBJECTS; + + preg_match_all('/[A-Za-z0-9]+/', $pattern, $literals); + foreach (array_slice(array_values(array_unique($literals[0])), 0, 8) as $literal) { + $subjects[] = $literal; + $subjects[] = $literal . "\n"; + $subjects[] = 'x' . $literal; + $subjects[] = strtoupper($literal); + $subjects[] = strtolower($literal); + $subjects[] = $literal . $literal; + } + + $alphabet = mb_str_split(preg_replace('/[\\\\()\[\]{}?*+|^$\/#~]/', '', $pattern) ?? '') ?: []; + $alphabet = array_values(array_unique([...$alphabet, '0', '1', 'a', ' ', "\n"])); + mt_srand(crc32($pattern)); + for ($i = 0; $i < 30; $i++) { + $subject = ''; + for ($length = mt_rand(0, 8); $length > 0; $length--) { + $subject .= $alphabet[mt_rand(0, count($alphabet) - 1)]; + } + $subjects[] = $subject; + } + + return array_values(array_unique($subjects)); + } + +} diff --git a/tests/PHPStan/Type/Regex/PHPRegexBackendParityTest.php b/tests/PHPStan/Type/Regex/PHPRegexBackendParityTest.php new file mode 100644 index 00000000000..6baf5d9f62d --- /dev/null +++ b/tests/PHPStan/Type/Regex/PHPRegexBackendParityTest.php @@ -0,0 +1,249 @@ + + */ + public static function providePatterns(): iterable + { + yield 'plain groups' => ['pattern' => '/(foo)(bar)(baz)+/', 'subject' => 'foobarbazbaz']; + yield 'backreference' => ['pattern' => '/(a|b)\1/', 'subject' => 'aa']; + yield 'mark verb' => ['pattern' => '/(*MARK:first)a/', 'subject' => 'a']; + yield 'quoted run' => ['pattern' => '/(\Qa.c\E)/', 'subject' => 'a.c']; + yield 'extended mode' => ['pattern' => '/(a) # comment/x', 'subject' => 'a']; + yield 'duplicate names' => ['pattern' => '/(?J)(?a)|(?b)/', 'subject' => 'b']; + // spaces inside \x{} need PCRE2 10.43, which a CI image linking the system's PCRE2 may not have + if (version_compare(explode(' ', PCRE_VERSION, 2)[0], '10.43', '>=')) { + yield 'version-shaped escape' => ['pattern' => '/(a\x{ 41 })/', 'subject' => 'aA']; + } + yield 'digit runs' => ['pattern' => '/(?\d{4})-(?\d{2})/', 'subject' => '2026-10']; + yield 'conditional' => ['pattern' => '/(a)(?(1)b|(c))/', 'subject' => 'ab']; + yield 'define' => ['pattern' => '/(?(DEFINE)(?abc))(?x)/', 'subject' => 'x']; + yield 'subroutine call' => ['pattern' => '/(a)(?1)/', 'subject' => 'aa']; + } + + #[DataProvider('providePatterns')] + public function testEngineMatches(string $pattern, string $subject): void + { + // PREG_UNMATCHED_AS_NULL keeps every numbered group in $matches — + // the engine omits the trailing ones it never filled, and the count + // would lie + $matched = preg_match($pattern, $subject, $matches, PREG_UNMATCHED_AS_NULL); + self::assertSame(1, $matched, $pattern . ' must match ' . $subject); + + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $parser = new RegexGroupParser( + new PhpVersion(PHP_VERSION_ID), + new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper), + ); + $this->resetParsedAstCache(); + $result = $parser->parseGroups($pattern); + self::assertNotNull($result, $pattern . ' must read whole'); + + $engineGroups = 0; + foreach (array_keys($matches) as $key) { + if (!is_int($key) || $key <= $engineGroups) { + continue; + } + + $engineGroups = $key; + } + + $shapeGroups = $result->getCapturingGroups(); + self::assertCount($engineGroups, $shapeGroups, $pattern . ': the engine numbers as many groups as the walk'); + + foreach ($shapeGroups as $group) { + $number = $group->getId(); + $written = $matches[$number] ?? null; + + // a group the engine left unset is optional in the shape; a + // duplicate name writes the value of whichever branch ran + if ($written === null) { + self::assertTrue($group->isOptional(), $pattern . ': group ' . $number . ' never filled must read optional'); + + continue; + } + + if ($group->getName() !== null && $matches[$group->getName()] !== null) { + self::assertSame($written, $matches[$group->getName()], $pattern . ': the name writes the same value'); + } + + $type = $group->getType()->describe(VerbosityLevel::precise()); + if ($type !== 'string' && str_contains($type, "'")) { + self::assertStringContainsString( + "'" . $written . "'", + $type, + $pattern . ': the engine wrote ' . $written . ', the shape reads ' . $type, + ); + } elseif ($type !== 'string') { + self::assertNotSame('', $written, $pattern . ': an inexact shape never claims constants'); + } + } + } + + public function testConditional(): void + { + // preg_match('/(a)(?(1)b|(c))/', 'ab', $m) === ['ab', 'a']: the else + // group is numbered, optional, and never set beside a set condition; + // the shape says as much, so the engine's answer is compared as text + self::assertSame(1, preg_match('/(a)(?(1)b|(c))/', 'ab', $m)); + self::assertSame('["ab","a"]', json_encode($m)); + + $parser = $this->createParser(); + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(a)(?(1)b|(c))/'); + self::assertNotNull($result); + + $else = $result->getCapturingGroups()[2] ?? null; + self::assertNotNull($else); + self::assertTrue($else->isOptional(), 'the else branch runs alone, or not at all'); + } + + public function testDefinedGroup(): void + { + // preg_match('/(?(DEFINE)(?abc))(?x)/', 'x', $m): d and 1 stay + // at the empty string, whatever the block spells + self::assertSame(1, preg_match('/(?(DEFINE)(?abc))(?x)/', 'x', $m)); + self::assertSame('{"0":"x","d":"","1":"","r":"x","2":"x"}', json_encode($m), 'the engine leaves the defined group empty'); + + $parser = $this->createParser(); + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?(DEFINE)(?abc))(?x)/'); + self::assertNotNull($result); + + $defined = $result->getCapturingGroups()[1] ?? null; + self::assertNotNull($defined); + self::assertSame("''", $defined->getType()->describe(VerbosityLevel::precise())); + } + + public function testDigitGroupLengths(): void + { + self::assertSame(1, preg_match('/(?\d{4})-(?\d{2})/', '2026-10', $m)); + self::assertSame('2026', $m['year']); + self::assertTrue(ctype_digit($m['year'])); + + $parser = $this->createParser(); + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?\d{4})-(?\d{2})/'); + self::assertNotNull($result); + + $year = $result->getCapturingGroups()[1] ?? null; + self::assertNotNull($year); + $type = $year->getType(); + self::assertStringContainsString('numeric-string', $type->describe(VerbosityLevel::precise())); + } + + private function createParser(): RegexGroupParser + { + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + + return new RegexGroupParser( + new PhpVersion(PHP_VERSION_ID), + new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper), + ); + } + + private function resetParsedAstCache(): void + { + // a closure bound to the class reaches the private cache on every PHP: reflection needs + // setAccessible() before PHP 8.1, which PHP 8.5 deprecates + Closure::bind(static function (): void { + self::$parsedShapes = []; + }, null, RegexGroupParser::class)(); + } + + /** + * @return iterable + */ + public static function provideSureMatches(): iterable + { + yield 'any text' => ['pattern' => '/(.*)/', 'fromAnyOffset' => true]; + yield 'any text to the end' => ['pattern' => '/(.*)$/', 'fromAnyOffset' => true]; + yield 'any text from the start' => ['pattern' => '/^(.*)/', 'fromAnyOffset' => false]; + yield 'dot-all between the anchors' => ['pattern' => '/^(.*)$/s', 'fromAnyOffset' => false]; + yield 'empty pattern' => ['pattern' => '{}', 'fromAnyOffset' => true]; + yield 'optional group' => ['pattern' => '/(?a)?/', 'fromAnyOffset' => true]; + } + + /** + * A pattern read as sure to match never gives 0 on the engine: at offset 0 on every subject, and at + * every offset within the subject when read as sure from any offset. + */ + #[DataProvider('provideSureMatches')] + public function testSureMatchNeverReturnsZero(string $pattern, bool $fromAnyOffset): void + { + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $reader = new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper); + $info = $reader->info($pattern); + self::assertNotNull($info, $pattern . ' must read whole'); + self::assertTrue($info->alwaysMatches, $pattern . ' must read as sure to match'); + self::assertSame($fromAnyOffset, $info->alwaysMatchesFromAnyOffset); + + foreach (['', 'a', "a\nb", "\n", "ab\n", '0'] as $subject) { + self::assertSame(1, preg_match($pattern, $subject), $pattern . ' on ' . json_encode($subject)); + if (!$fromAnyOffset) { + continue; + } + + for ($offset = 0; $offset <= strlen($subject); $offset++) { + self::assertSame(1, preg_match($pattern, $subject, $m, offset: $offset), $pattern . ' on ' . json_encode($subject) . ' at ' . $offset); + } + } + } + + /** + * @return iterable + */ + public static function provideUnsureMatches(): iterable + { + yield 'any text between the anchors' => ['pattern' => '/^(.*)$/', 'subject' => "a\nb"]; + yield 'the pattern of phpstan/phpstan#14490' => ['pattern' => '/^(.*)(\s+(DESC|ASC|))*$/Ui', 'subject' => "a\nb"]; + yield 'lookahead' => ['pattern' => '/(?=a)/', 'subject' => '']; + yield 'any text to the end, anchored by A' => ['pattern' => '/a*$/A', 'subject' => 'ab']; + } + + /** + * A pattern the reader does not prove has a subject the engine returns 0 on. + */ + #[DataProvider('provideUnsureMatches')] + public function testUnsureMatchReturnsZeroSomewhere(string $pattern, string $subject): void + { + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $reader = new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper); + $info = $reader->info($pattern); + self::assertNotNull($info, $pattern . ' must read whole'); + self::assertFalse($info->alwaysMatches); + self::assertFalse($info->alwaysMatchesFromAnyOffset); + + self::assertSame(0, preg_match($pattern, $subject), $pattern . ' must return 0 on ' . json_encode($subject)); + } + +} diff --git a/tests/PHPStan/Type/Regex/RegexShapeReadingTest.php b/tests/PHPStan/Type/Regex/RegexShapeReadingTest.php new file mode 100644 index 00000000000..67727e7e4fc --- /dev/null +++ b/tests/PHPStan/Type/Regex/RegexShapeReadingTest.php @@ -0,0 +1,696 @@ +newInstanceWithoutConstructor(); + mb_internal_encoding('ISO-8859-1'); + + try { + $parser = new RegexGroupParser( + new PhpVersion(PHP_VERSION_ID), + new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper), + ); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/é/'); + self::assertNotNull($result); + self::assertSame("'é'", $result->getSubjectBaseType()->describe(VerbosityLevel::precise()), 'one character is one token, not two'); + } finally { + mb_internal_encoding($defaultEncoding); + } + } + + private function createParser(): RegexGroupParser + { + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + + return new RegexGroupParser( + new PhpVersion(PHP_VERSION_ID), + new PHPRegexReader(new PhpVersion(PHP_VERSION_ID), PcreVersion::fromRuntime(), $helper), + ); + } + + private function resetParsedAstCache(): void + { + // a closure bound to the class reaches the private cache on every PHP: reflection needs + // setAccessible() before PHP 8.1, which PHP 8.5 deprecates + Closure::bind(static function (): void { + self::$parsedShapes = []; + }, null, RegexGroupParser::class)(); + } + + /** + * Pattern bodies the old grammar read; the walk results they produced + * are covered by the resolver suite's fixtures. + * + * @return list + */ + private function oldGrammarReadableBodies(): array + { + return [ + 'a', + 'ab', + 'a\.b', + 'a|b', + 'a|', + '|a', + 'a||b', + '(a)', + '(a)(b)', + '((a))', + '(?a)', + '(?:a)', + '(?i:a)', + '(?i)', + '(?n)', + '(?|a|(b))', + '(?>a+)', + '()', + 'a?', + 'a??', + 'a?+', + 'a*', + 'a*?', + 'a*+', + 'a+', + 'a+?', + 'a++', + 'a{2}', + 'a{2,}', + 'a{2,4}', + 'a{2,4}?', + 'a{2,4}+', + '(ab)+', + '[ab]+', + '[abc]', + '[^abc]', + '[a-z]', + '[-a]', + '[a-]', + '[]]', + '[^]]', + '[a\-z]', + '[[:digit:]]', + '[[:^alpha:]]', + '[a-c\dx]', + '\d', + '\D', + '\w', + '\s', + '\h', + '\v', + '\R', + '\N', + '\p{L}', + '\P{L}', + '\p{Greek}', + '\x41', + '\101', + '\n', + '\t', + '\cA', + '^a$', + '\b', + '\B', + '\A', + '\z', + '\Z', + '\G', + '\K', + '(?=a)', + '(?!a)', + '(?<=a)', + '(?createParser(); + $missing = []; + + foreach ($this->oldGrammarReadableBodies() as $body) { + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/' . $body . '/'); + if ($result !== null) { + continue; + } + + $missing[] = $body; + } + + self::assertSame([], $missing, 'Patterns the old grammar read that the parser now refuses: ' . implode(', ', $missing)); + } + + /** + * Pattern bodies the old grammar could not read at all, or read with a + * phantom literal: the PHPRegex backend must return a walk result anyway. + * Bodies reference groups that exist, so the engine pre-check passes. + * + * @return list + */ + private function hoaBlindBodies(): array + { + return [ + '(a)\1', + '(a)(\1)', + '(a)\g{1}', + '(a)\g1', + '(a)\g{-1}', + '(?a)\k', + "(?a)\k'n'", + '(?a)(?P=n)', + '(?a)\g{n}', + '(?a)\g', + "(?a)\g'name'", + '(?+1)(a)', + '(a)(?1)', + '\Qa.b\E', + 'a\Qb.c\E', + '(?(R)a|b)', + '(?(DEFINE)a)', + '(?(VERSION>=10.4)a|b)', + '(?(?=a)a|b)', + '(\x31)', + 'a{2}?', + '(a)(*PRUNE)b', + 'a(*SKIP)b', + '(a)(*FAIL)b', + '(?:(*ACCEPT)a)', + '(a)(?C1)b', + ]; + } + + public function testPatternsTheOldGrammarRefused(): void + { + $parser = $this->createParser(); + $missing = []; + + $this->resetParsedAstCache(); + + foreach ($this->hoaBlindBodies() as $body) { + $result = $parser->parseGroups('/' . $body . '/'); + if ($result !== null) { + continue; + } + + $missing[] = $body; + } + + self::assertSame([], $missing, 'Patterns the PHPRegex backend also refused: ' . implode(', ', $missing)); + } + + public function testBackreference(): void + { + $parser = $this->createParser(); + + // PCRE truth: preg_match('/(a)(\1)/', 'aa') fills group 2 with 'a'. + // The old grammar read \1 as the literal "1", so group 2 becomes the + // constant string '1' today. + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(a)(\1)/'); + + self::assertNotNull($result); + $groups = array_values($result->getCapturingGroups()); + self::assertCount(2, $groups); + self::assertNotInstanceOf(ConstantStringType::class, $groups[1]->getType(), 'group 2 must not be a constant string'); + self::assertTrue($groups[1]->getType()->isSuperTypeOf(new ConstantStringType('a'))->yes()); + } + + public function testNoAutoCaptureModifier(): void + { + $parser = $this->createParser(); + + // PCRE truth: (?n) turns capturing groups off, the match array holds + // only the full match. The old grammar could not see the option, so a + // phantom group 1 survives in the shapes inferred today. + $matched = preg_match('/(?n)(\d+)/', 'a5', $matches); + self::assertSame(1, $matched); + self::assertSame(['5'], $matches, 'the engine itself must not capture group 1'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?n)(\d+)/'); + + self::assertNotNull($result); + self::assertSame([], $result->getCapturingGroups(), 'the walk must not report a capturing group'); + } + + /** + * @throws RegexException + */ + public function testReadExpression(): void + { + // no translation layer stands between the walkers and the parser's + // AST: what read() returns is what the parser built, walked as is + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $reader = new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.44'), $helper); + + $tree = $reader->read('(a)', '', '/'); + self::assertSame('/', $tree->delimiter); + $body = $tree->pattern; + self::assertInstanceOf(GroupNode::class, $body); + self::assertSame(GroupType::Capturing(), $body->type); + self::assertInstanceOf(LiteralNode::class, $body->child); + self::assertSame('a', $body->child->value); + + $tree = $reader->read('a|b', '', '/'); + self::assertInstanceOf(AlternationNode::class, $tree->pattern); + self::assertCount(2, $tree->pattern->alternatives); + + $tree = $reader->read('a{2,4}', '', '/'); + self::assertInstanceOf(QuantifierNode::class, $tree->pattern); + $bounds = QuantifierBounds::parse($tree->pattern->quantifier); + self::assertNotNull($bounds); + self::assertSame(2, $bounds->min); + self::assertSame(4, $bounds->max); + } + + public function testDuplicateGroupNames(): void + { + $parser = $this->createParser(); + + // The two spellings of the duplicate-name modifier read the same + // shapes: inline (?J) and trailing /J, two groups of one name across + // alternation branches. + $this->resetParsedAstCache(); + + $result = $parser->parseGroups('/(?J)(?[a-z]+)|(?[0-9]+)/'); + self::assertNotNull($result); + $groups = array_values($result->getCapturingGroups()); + self::assertCount(2, $groups); + self::assertSame('Foo', $groups[0]->getName()); + self::assertSame('Foo', $groups[1]->getName()); + + $this->resetParsedAstCache(); + $trailing = $parser->parseGroups('/(?[a-z]+)|(?[0-9]+)/J'); + self::assertNotNull($trailing, 'the trailing spelling reads as the inline one does'); + $groups = array_values($trailing->getCapturingGroups()); + self::assertCount(2, $groups); + self::assertSame('Foo', $groups[0]->getName()); + self::assertSame('Foo', $groups[1]->getName()); + } + + /** + * @throws RegexException + */ + public function testAnalysedPhpVersion(): void + { + // \x{ 41 } is a padded hex escape: engines from 10.43 read it as the + // letter A, older ones PHP 7.4 ships with refuse it and read the + // letter x then plain text. The pattern compiles on the running + // engine either way, so the shapes must follow the PHP the project + // analyses for — the grammar the pipeline replaced could not tell + // the two apart at all. + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + // the engines each judged PHP bundles, pinned: the test says the same + // thing on every machine, whatever engine the runner links + $php74 = new RegexGroupParser(new PhpVersion(70400), new PHPRegexReader(new PhpVersion(70400), PcreVersion::fromString('10.33'), $helper)); + $php84 = new RegexGroupParser(new PhpVersion(80400), new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.44'), $helper)); + + $this->resetParsedAstCache(); + $result74 = $php74->parseGroups('/(a\x{ 41 })/'); + $this->resetParsedAstCache(); + $result84 = $php84->parseGroups('/(a\x{ 41 })/'); + + self::assertNotNull($result74); + self::assertNotNull($result84); + + $group74 = array_values($result74->getCapturingGroups())[0]->getType(); + $group84 = array_values($result84->getCapturingGroups())[0]->getType(); + + self::assertInstanceOf(ConstantStringType::class, $group74, '7.4 reads the letter x then text'); + self::assertSame('ax{ 41 }', $group74->getValue()); + self::assertInstanceOf(ConstantStringType::class, $group84, '8.x reads the padded escape'); + self::assertSame('aA', $group84->getValue()); + + // the reader is a service carrying its own target: no statics, no + // environment, one instance per judged PHP, and it hands back the + // parser's own tree, not a translation of it + $reader74 = new PHPRegexReader(new PhpVersion(70400), PcreVersion::fromString('10.33'), $helper); + $reader84 = new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.44'), $helper); + + $tree74 = $reader74->read('a\x{ 41 }', '', '/')->pattern; + $tree84 = $reader84->read('a\x{ 41 }', '', '/')->pattern; + + $fingerprint = static function (NodeInterface $n) use (&$fingerprint): string { + $children = ''; + foreach ($n->getChildren() as $child) { + $children .= $fingerprint($child); + } + + $name = (new ReflectionClass($n))->getShortName(); + $detail = ''; + foreach (['value', 'quantifier', 'type', 'isNegated'] as $prop) { + $propValue = property_exists($n, $prop) ? $n->$prop : null; + if ($propValue !== null && (is_string($propValue) || is_int($propValue) || is_bool($propValue))) { + $detail .= '|' . $propValue; + } elseif ($propValue !== null) { + $detail .= '|<' . (new ReflectionClass($propValue))->getShortName() . '>'; + } + } + + return sprintf('(%s%s)', $name, $detail) . $children; + }; + + self::assertSame($fingerprint($tree74), $fingerprint($reader74->read('a\x{ 41 }', '', '/')->pattern), 'the same target reads the same tree twice'); + self::assertNotSame($fingerprint($tree74), $fingerprint($tree84), 'the two targets build two trees'); + } + + public function testPcreVersion(): void + { + // the same architecture PhpVersion has: sources with labels, a + // factory fed by config and composer.json, runtime as the default + $runtime = (new PcreVersionFactory(null, null))->create(); + self::assertSame(PcreVersion::SOURCE_RUNTIME, $runtime->getSource()); + self::assertSame('runtime', $runtime->getSourceLabel()); + self::assertMatchesRegularExpression('/^10\.\d\d$/', $runtime->getVersionString()); + + // the running engine in one call, its release date trimmed away + self::assertSame( + $runtime->getVersionId(), + PcreVersion::fromRuntime()->getVersionId(), + 'fromRuntime spells what the factory defaults to', + ); + self::assertSame(PcreVersion::SOURCE_RUNTIME, PcreVersion::fromRuntime()->getSource()); + + $config = (new PcreVersionFactory('10.42', null))->create(); + self::assertSame(PcreVersion::SOURCE_CONFIG, $config->getSource()); + self::assertSame('config', $config->getSourceLabel()); + self::assertSame('10.42', $config->getVersionString()); + self::assertSame(1042, $config->getVersionId()); + self::assertSame(1049, PcreVersion::fromString('10.49 2026-09-28')->getVersionId(), 'as PCRE_VERSION spells it'); + self::assertSame(1049, PcreVersion::fromString('10.49-RC1 2026-08-14')->getVersionId(), 'a release candidate'); + self::assertSame('10.07', PcreVersion::fromString('10.07')->getVersionString()); + + $composer = (new PcreVersionFactory(null, '10.37'))->create(); + self::assertSame(PcreVersion::SOURCE_COMPOSER_PLATFORM_PCRE, $composer->getSource()); + self::assertSame('config.platform.lib-pcre in composer.json', $composer->getSourceLabel()); + self::assertSame('10.37', $composer->getVersionString()); + + // the spelling PCRE2 writes; a runtime the factory cannot read falls + // back to the engine the running PHP bundles, never takes the boot + // down + // two digits on each side, whatever the series: 11 is not out yet, + // 12 will read the same way 10 does + self::assertSame('11.00', PcreVersion::fromString('11.00')->getVersionString()); + self::assertSame('12.00', PcreVersion::fromString('12.00')->getVersionString()); + + try { + PcreVersion::fromString('banana'); + self::fail('an engine release must be spelled like one'); + } catch (InvalidArgumentException) { + // the spelling is the test: the release is refused + } + try { + PcreVersion::fromString('11.5'); + self::fail('a minor is two digits, as PCRE2 writes it'); + } catch (InvalidArgumentException) { + // the spelling is the test: the release is refused + } + try { + PcreVersion::fromString('9.42'); + self::fail('a major is two digits, as PCRE2 writes it since the 10 series'); + } catch (InvalidArgumentException) { + // the spelling is the test: the release is refused + } + } + + /** + * @throws RegexException + */ + public function testPcreVersionSource(): void + { + // a named engine is a statement about the analysed project, honoured + // in both directions; the running engine is only a witness, and it + // speaks for the analysed PHP when the two share a minor — a patch + // release carries whatever engine was current, and the baseline map + // only knows the minor's first + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $targetOf = static function (PHPRegexReader $reader): string { + $reader->read('a', '', '/'); + + /** @var RegexParser $parser */ + $parser = (fn (): ?RegexParser => $this->parser)->call($reader); + + return $parser->target()->pcreVersion; + }; + + $minor = intdiv(PHP_VERSION_ID, 100) * 100; + $runtime = PcreVersion::fromRuntime(); + $witness = PcreVersion::fromString($runtime->getVersionString(), PcreVersion::SOURCE_RUNTIME); + + self::assertSame('10.49', $targetOf(new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.49', PcreVersion::SOURCE_CONFIG), $helper)), 'a pin is a statement, honoured above the baseline'); + self::assertSame('10.42', $targetOf(new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.42', PcreVersion::SOURCE_CONFIG), $helper)), 'a pin below the baseline narrows'); + self::assertSame($witness->getVersionString(), $targetOf(new PHPRegexReader(new PhpVersion($minor), $witness, $helper)), 'the running engine speaks for its own minor'); + $otherMinor = $minor === 70400 ? 80100 : 70400; + self::assertSame( + PcreTarget::bundledWith($otherMinor)->pcreVersion, + $targetOf(new PHPRegexReader(new PhpVersion($otherMinor), $witness, $helper)), + 'a witness from another minor stays silent, and the baseline judges', + ); + self::assertSame('10.49', PcreVersion::fromString('10.49-RC1')->getVersionString(), 'a release candidate reads as its release'); + } + + public function testDefineGroups(): void + { + $parser = $this->createParser(); + + // the engine never fills a group a (?(DEFINE)...) block: it is + // counted once — the branch it sits in is not walked as a branch — + // and carries no type of its own + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?(DEFINE)(?x))b/'); + + self::assertNotNull($result); + $groups = array_values($result->getCapturingGroups()); + self::assertCount(1, $groups, 'the defined group is counted once'); + self::assertSame('a', $groups[0]->getName()); + self::assertTrue($groups[0]->isOptional(), 'the engine never fills it'); + } + + public function testDefinedGroupType(): void + { + $parser = $this->createParser(); + + // preg_match('/(?(DEFINE)(?abc))(?x)/', 'x', $m) fills + // bar and leaves foo at '' — the engine never runs what DEFINE holds + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?(DEFINE)(?abc))(?x)/'); + + self::assertNotNull($result); + $foo = $result->getCapturingGroups()[1] ?? null; + self::assertNotNull($foo); + self::assertSame("''", $foo->getType()->describe(VerbosityLevel::precise()), 'a defined group stays empty'); + } + + public function testConditionalBranches(): void + { + $parser = $this->createParser(); + + // preg_match('/(a)(?(1)b|(c))/', 'ab', $m) writes ['ab', 'a']: group 1 is + // always set, so the condition always holds and the else branch never runs + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(a)(?(1)b|(c))/'); + + self::assertNotNull($result); + $groups = $result->getCapturingGroups(); + self::assertSame("'a'", $groups[1]->getType()->describe(VerbosityLevel::precise())); + self::assertFalse($groups[1]->isOptional()); + self::assertSame("''", $groups[2]->getType()->describe(VerbosityLevel::precise())); + self::assertTrue($groups[2]->isOptional(), 'the else branch never runs'); + } + + public function testLookaroundCondition(): void + { + $parser = $this->createParser(); + + // the engine numbers the groups a lookaround condition holds before + // the branches' — preg_match numbers (a) as 1 and (c) as 2, whatever + // runs + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?(?=(a))b|(c))/'); + + self::assertNotNull($result); + $groups = $result->getCapturingGroups(); + self::assertCount(2, $groups, 'the condition holds group 1'); + self::assertSame("'a'", $groups[1]->getType()->describe(VerbosityLevel::precise()), 'the condition group captures a when it is set'); + self::assertTrue($groups[1]->isOptional(), 'the condition group is unset when the lookahead fails'); + self::assertSame("'c'", $groups[2]->getType()->describe(VerbosityLevel::precise())); + } + + public function testTrailingDuplicateNamesModifier(): void + { + $parser = $this->createParser(); + + // PCRE truth: the trailing J allows duplicate names exactly as the + // inline (?J) spelling does — preg_match('/(?a)(?b)/J', 'ab') + // fills both groups and the name with the branch that ran + self::assertSame(1, preg_match('/(?a)(?b)/J', 'ab', $m)); + self::assertSame('{"0":"ab","x":"b","1":"a","2":"b"}', json_encode($m), 'the engine fills both groups and the name with the branch that ran'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(?a)(?b)/J'); + + self::assertNotNull($result, 'the trailing J reads as the inline spelling does'); + self::assertCount(2, $result->getCapturingGroups()); + self::assertSame('x', $result->getCapturingGroups()[1]->getName()); + self::assertSame('x', $result->getCapturingGroups()[2]->getName()); + } + + public function testSubjectNarrowType(): void + { + $parser = $this->createParser(); + + // $matches[0] is the match the engine wrote, constants included; + // the subject is what the pattern was run against — a different + // quantity. A pattern pinned at both ends tells what the whole subject + // holds, but $ admits one final newline: "a\n" matches /^(a|b|c)$/, + // /D closes that door + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/^(a|b|c)$/'); + self::assertNotNull($result); + self::assertSame("'a'|'b'|'c'", $result->getSubjectBaseType()->describe(VerbosityLevel::precise()), 'the match channel keeps the constants'); + $narrowType = $result->getSubjectNarrowType(); + self::assertSame("'a'|\"a\\n\"|'b'|\"b\\n\"|'c'|\"c\\n\"", $narrowType->describe(VerbosityLevel::precise()), 'the subject is a value of the match, or one followed by a newline'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/^(a|b)$/D'); + self::assertNotNull($result); + self::assertSame("'a'|'b'", $result->getSubjectNarrowType()->describe(VerbosityLevel::precise()), 'under D the subject is the match'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/foo/'); + self::assertNotNull($result); + self::assertSame("'foo'", $result->getSubjectBaseType()->describe(VerbosityLevel::precise()), 'the match channel keeps the constant'); + $narrowType = $result->getSubjectNarrowType(); + self::assertSame('non-falsy-string', $narrowType->describe(VerbosityLevel::precise()), 'a subject that contains a non-falsy match is non-falsy itself'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/^$/'); + self::assertNotNull($result); + self::assertSame("''", $result->getSubjectBaseType()->describe(VerbosityLevel::precise()), 'the match channel keeps the empty constant'); + $narrowType = $result->getSubjectNarrowType(); + self::assertSame("''|\"\\n\"", $narrowType->describe(VerbosityLevel::precise()), 'the subject may be the empty string or the final newline'); + } + + public function testPatternInvalidForAnalysedVersion(): void + { + // the pre-check judges for the analysed PHP, not the running one: a + // padded \x{ 41 } compiles on the runner's 10.43+ engine but the PHP + // an 8.2 project runs refuses it, so the shape is null and the + // invalid-pattern rule keeps the running engine as its second + // witness; the target's word comes first + $helper = (new ReflectionClass(RegexExpressionHelper::class))->newInstanceWithoutConstructor(); + $php82 = new RegexGroupParser(new PhpVersion(80200), new PHPRegexReader(new PhpVersion(80200), PcreVersion::fromString('10.40'), $helper)); + $php84 = new RegexGroupParser(new PhpVersion(80400), new PHPRegexReader(new PhpVersion(80400), PcreVersion::fromString('10.44'), $helper)); + + $this->resetParsedAstCache(); + self::assertNull($php82->parseGroups('/(a\x{ 41 })/'), 'the engine PHP 8.2 bundles refuses the padded escape'); + + $this->resetParsedAstCache(); + $result = $php84->parseGroups('/(a\x{ 41 })/'); + self::assertNotNull($result, 'the engine PHP 8.4 bundles reads it'); + $group84 = array_values($result->getCapturingGroups())[0]->getType(); + self::assertInstanceOf(ConstantStringType::class, $group84, 'the shape knows what it reads'); + self::assertSame('aA', $group84->getValue()); + } + + public function testInvalidPatternsAndBracketDelimiters(): void + { + $parser = $this->createParser(); + + // the engine itself refuses container verbs in every spelling PHP + // exposes, so the pre-check nulls the read before a group inside a + // (*SR:...) or (*SCRIPT_RUN:...) could ever reach the walk — the day + // an engine takes them, its own parser will carry the body as nodes + $this->resetParsedAstCache(); + self::assertNull($parser->parseGroups('/(*SR:(?a))b/')); + $this->resetParsedAstCache(); + self::assertNull($parser->parseGroups('/(*SCRIPT_RUN:(?a))b/')); + + // a pattern of one character has no closing delimiter to read, on any PHP + $this->resetParsedAstCache(); + self::assertNull($parser->parseGroups('a')); + + // the delimiter the pattern was written with, brackets included, + // travels to the reader whole + $this->resetParsedAstCache(); + $result = $parser->parseGroups('{(a)}'); + self::assertNotNull($result); + $groups = array_values($result->getCapturingGroups()); + self::assertCount(1, $groups); + self::assertInstanceOf(ConstantStringType::class, $groups[0]->getType()); + self::assertSame('a', $groups[0]->getType()->getValue()); + } + + public function testExtendedModeComments(): void + { + $parser = $this->createParser(); + + // PCRE truth: under /x the # only starts a comment outside \Q..\E and + // classes. The pre-strip that runs before the grammar is blind to + // both; in front of a mode-aware parser it mangles the pattern. + $matched = preg_match('/(a\Q#b\Ec)/x', 'a#bc', $matches); + self::assertSame(1, $matched); + self::assertSame('["a#bc","a#bc"]', json_encode($matches), 'the engine reads the quoted hash as text'); + + $this->resetParsedAstCache(); + $result = $parser->parseGroups('/(a\Q#b\Ec)/x'); + + self::assertNotNull($result, 'the pattern must parse whole, comments included'); + $groups = array_values($result->getCapturingGroups()); + self::assertCount(1, $groups); + $type = $groups[0]->getType(); + self::assertInstanceOf(ConstantStringType::class, $type); + self::assertSame('a#bc', $type->getValue()); + } + +} diff --git a/turbo-ext/src/ArgumentsHandler.cpp b/turbo-ext/src/ArgumentsHandler.cpp index 8551f011a8b..ddab49c89bd 100644 --- a/turbo-ext/src/ArgumentsHandler.cpp +++ b/turbo-ext/src/ArgumentsHandler.cpp @@ -2418,6 +2418,26 @@ class ArgumentsHandler bool isArray = false; if (UNEXPECTED(!isA(value, PT_CLASS_ARRAY_EXPR, isArray))) return false; if (isArray) { + if (a.parameter != NULL) { + // an extension can type the closures of an array literal by describing the whole array + zv::Val overwritingParameterType = getParameterTypeFromParameterClosureTypeExtension(w.callLike, w.calleeReflection, a.parameter, a.scopeToPass.raw()); + if (UNEXPECTED(overwritingParameterType.isUndef())) return false; + if (!overwritingParameterType.isNull()) { + a.parameterType = std::move(overwritingParameterType); + if (UNEXPECTED(Z_TYPE_P(a.scopeToPass.raw()) != IS_OBJECT)) { + zend_throw_error(NULL, "Call to a member function doNotTreatPhpDocTypesAsCertain() on %s", zend_zval_value_name(a.scopeToPass.raw())); + return false; + } + zv::Val nativeScope = pt_mutating_scope_do_not_treat_phpdoc_types_as_certain(Z_OBJ_P(a.scopeToPass.raw())); + if (UNEXPECTED(nativeScope.isUndef())) return false; + zv::Val overwritingParameterNativeType = getParameterTypeFromParameterClosureTypeExtension(w.callLike, w.calleeReflection, a.parameter, nativeScope.raw()); + if (UNEXPECTED(overwritingParameterNativeType.isUndef())) return false; + if (!overwritingParameterNativeType.isNull()) { + a.parameterNativeType = std::move(overwritingParameterNativeType); + } + a.passedToTypeResolver.release(); + } + } zv::Val passed = pt_expression_context_enter_passed_to_type(argContext.raw(), a.parameterType.isUndef() ? NULL : a.parameterType.raw(), a.parameterNativeType.isUndef() ? NULL : a.parameterNativeType.raw()); if (UNEXPECTED(passed.isUndef())) return false; argContext = std::move(passed);