aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-class-map-generator/src/php_file_cleaner.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-class-map-generator/src/php_file_cleaner.rs')
-rw-r--r--crates/shirabe-class-map-generator/src/php_file_cleaner.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/crates/shirabe-class-map-generator/src/php_file_cleaner.rs b/crates/shirabe-class-map-generator/src/php_file_cleaner.rs
index 2b97d34..22e37a9 100644
--- a/crates/shirabe-class-map-generator/src/php_file_cleaner.rs
+++ b/crates/shirabe-class-map-generator/src/php_file_cleaner.rs
@@ -34,8 +34,18 @@ impl PhpFileCleaner {
TypeConfigEntry {
name: r#type.clone(),
length: r#type.len(),
+ // Regex pattern compatibility:
+ // PHP uses `.\b(?<![$:>])<type>` anchored (`A`): it consumes the single char
+ // before the keyword (`.`), requires a word boundary there (`\b`) and forbids
+ // that char being `$`, `:` or `>`. The `regex` crate has no look-behind, so the
+ // consumed char plus both guards collapse into one negated class
+ // `[^a-zA-Z0-9_$:>]` (the `\w` set reproducing `\b`, plus the three operators).
+ // The possessive quantifiers (`++`, `*+`) are performance-only and become plain
+ // `+`/`*`. The leftmost-match semantics of `captures_at(.., offset)` stand in for
+ // the dropped `A` (anchored) modifier, since the keyword is known to sit exactly
+ // one char past the search offset.
pattern: format!(
- "{{.\\b(?<![$:>]){}\\s++[a-zA-Z_\\x7f-\\xff:][a-zA-Z0-9_\\x7f-\\xff:\\-]*+}}Ais",
+ "{{[^a-zA-Z0-9_$:>]{}\\s+[a-zA-Z_\\x7f-\\xff:][a-zA-Z0-9_\\x7f-\\xff:\\-]*}}is",
r#type
),
},