From 7def736f0a848c699fe8bf3549ff877c6f645f59 Mon Sep 17 00:00:00 2001 From: Octopus Date: Mon, 6 Apr 2026 10:02:18 +0800 Subject: [PATCH] fix: add PHP grammar support to smart-file-read parser (fixes #1617) PHP was listed as a supported language in CHANGELOG and .php files were scanned by search.ts, but parser.ts was missing: - .php extension in LANG_MAP (causing detectLanguage to return 'unknown') - 'php' entry in GRAMMAR_PACKAGES (no grammar path to resolve) - PHP query patterns for symbol extraction - PHP case in getQueryKey() This meant smart_search/smart_outline/smart_unfold scanned PHP files but extracted 0 symbols because the grammar could not be resolved. Changes: - Add '.php' -> 'php' to LANG_MAP - Add 'php' -> 'tree-sitter-php/php' to GRAMMAR_PACKAGES - Add PHP tree-sitter query patterns (functions, methods, classes, interfaces, traits, use statements) - Add 'php' case to getQueryKey() - Add tree-sitter-php ^0.24.2 to devDependencies --- package.json | 1 + src/services/smart-file-read/parser.ts | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7be21de3..4fafca78 100644 --- a/package.json +++ b/package.json @@ -138,6 +138,7 @@ "tree-sitter-go": "^0.25.0", "tree-sitter-java": "^0.23.5", "tree-sitter-javascript": "^0.25.0", + "tree-sitter-php": "^0.24.2", "tree-sitter-python": "^0.25.0", "tree-sitter-ruby": "^0.23.1", "tree-sitter-rust": "^0.24.0", diff --git a/src/services/smart-file-read/parser.ts b/src/services/smart-file-read/parser.ts index 43ad4d6a..10d22b90 100644 --- a/src/services/smart-file-read/parser.ts +++ b/src/services/smart-file-read/parser.ts @@ -3,7 +3,7 @@ * * No native bindings. No WASM. Just the CLI binary + query patterns. * - * Supported: JS, TS, Python, Go, Rust, Ruby, Java, C, C++ + * Supported: JS, TS, Python, Go, Rust, Ruby, Java, C, C++, PHP * * by Copter Labs */ @@ -66,6 +66,7 @@ const LANG_MAP: Record = { ".cxx": "cpp", ".hpp": "cpp", ".hh": "cpp", + ".php": "php", }; export function detectLanguage(filePath: string): string { @@ -86,6 +87,7 @@ const GRAMMAR_PACKAGES: Record = { java: "tree-sitter-java", c: "tree-sitter-c", cpp: "tree-sitter-cpp", + php: "tree-sitter-php/php", }; function resolveGrammarPath(language: string): string | null { @@ -159,6 +161,15 @@ const QUERIES: Record = { (class_definition name: (identifier) @name) @cls (import_statement) @imp (import_declaration) @imp +`, + + php: ` +(function_definition name: (name) @name) @func +(method_declaration name: (name) @name) @method +(class_declaration name: (name) @name) @cls +(interface_declaration name: (name) @name) @iface +(trait_declaration name: (name) @name) @trait_def +(namespace_use_declaration) @imp `, }; @@ -173,6 +184,7 @@ function getQueryKey(language: string): string { case "rust": return "rust"; case "ruby": return "ruby"; case "java": return "java"; + case "php": return "php"; default: return "generic"; } }