diff --git a/Cargo.lock b/Cargo.lock index 0b1ddef..f291f25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1070,6 +1070,7 @@ dependencies = [ "tree-sitter-go", "tree-sitter-java", "tree-sitter-javascript", + "tree-sitter-php", "tree-sitter-python", "tree-sitter-ruby", "tree-sitter-rust", @@ -2393,6 +2394,16 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" +[[package]] +name = "tree-sitter-php" +version = "0.23.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f066e94e9272cfe4f1dcb07a1c50c66097eca648f2d7233d299c8ae9ed8c130c" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-python" version = "0.23.6" diff --git a/Cargo.toml b/Cargo.toml index 42c4bb7..863c690 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ tree-sitter-java = "0.23" tree-sitter-c = "0.23" tree-sitter-cpp = "0.23" tree-sitter-ruby = "0.23" +tree-sitter-php = "0.23" # Serialization serde = { version = "1", features = ["derive"] } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 5b42c6e..d4d91ae 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -158,7 +158,7 @@ impl SymbolIndex { "impl_item" => "impl", "enum_item" | "enum_declaration" => "enum", "interface_declaration" => "interface", - "trait_item" => "trait", + "trait_item" | "trait_declaration" => "trait", "type_alias_declaration" | "type_item" | "type_declaration" => "type", "arrow_function" => "arrow_fn", "export_statement" => "export", @@ -290,6 +290,19 @@ impl SymbolIndex { ("module", NameExtractor::Field("name")), ], }, + // PHP + LangConfig { + language: tree_sitter_php::LANGUAGE_PHP.into(), + extensions: &["php"], + symbol_queries: vec![ + ("function_definition", NameExtractor::Field("name")), + ("method_declaration", NameExtractor::Field("name")), + ("class_declaration", NameExtractor::Field("name")), + ("interface_declaration", NameExtractor::Field("name")), + ("trait_declaration", NameExtractor::Field("name")), + ("enum_declaration", NameExtractor::Field("name")), + ], + }, ] } } @@ -818,4 +831,45 @@ end find_sym(&symbols, "bark"); find_sym(&symbols, "Helpers"); } + + // ── 20. PHP ───────────────────────────────────────────────────────── + + #[test] + fn test_parse_php() { + let dir = TempDir::new().unwrap(); + write_file(&dir, "app.php", r#"