diff --git a/src/__tests__/dist_assets.spec.ts b/src/__tests__/dist_assets.spec.ts index 934b37b495..e947dcbfc8 100644 --- a/src/__tests__/dist_assets.spec.ts +++ b/src/__tests__/dist_assets.spec.ts @@ -32,6 +32,7 @@ describe("dist assets", () => { "tree-sitter-lua.wasm", "tree-sitter-objc.wasm", "tree-sitter-ocaml.wasm", + "tree-sitter-perl.wasm", "tree-sitter-php.wasm", "tree-sitter-python.wasm", "tree-sitter-ql.wasm", diff --git a/src/services/tree-sitter/index.ts b/src/services/tree-sitter/index.ts index c0813e6509..7edf7187c5 100644 --- a/src/services/tree-sitter/index.ts +++ b/src/services/tree-sitter/index.ts @@ -89,6 +89,9 @@ const extensions = [ // Embedded Template "ejs", "erb", + // Perl + "pl", + "pm", ].map((e) => `.${e}`) export { extensions } diff --git a/src/services/tree-sitter/languageParser.ts b/src/services/tree-sitter/languageParser.ts index a8ac0a9ead..a09387e2fc 100644 --- a/src/services/tree-sitter/languageParser.ts +++ b/src/services/tree-sitter/languageParser.ts @@ -28,6 +28,7 @@ import { embeddedTemplateQuery, elispQuery, elixirQuery, + perlQuery, } from "./queries" export interface LanguageParser { @@ -218,6 +219,11 @@ export async function loadRequiredLanguageParsers(filesToParse: string[], source language = await loadLanguage("elixir", sourceDirectory) query = new Query(language, elixirQuery) break + case "pl": + case "pm": + language = await loadLanguage("perl", sourceDirectory) + query = new Query(language, perlQuery) + break default: throw new Error(`Unsupported language: ${ext}`) } diff --git a/src/services/tree-sitter/queries/index.ts b/src/services/tree-sitter/queries/index.ts index de9b9cafa3..268ca592be 100644 --- a/src/services/tree-sitter/queries/index.ts +++ b/src/services/tree-sitter/queries/index.ts @@ -26,3 +26,4 @@ export { zigQuery } from "./zig" export { default as embeddedTemplateQuery } from "./embedded_template" export { elispQuery } from "./elisp" export { scalaQuery } from "./scala" +export { default as perlQuery } from "./perl" diff --git a/src/services/tree-sitter/queries/perl.ts b/src/services/tree-sitter/queries/perl.ts new file mode 100644 index 0000000000..d77327369c --- /dev/null +++ b/src/services/tree-sitter/queries/perl.ts @@ -0,0 +1,40 @@ +/* +Perl Tree-sitter Query Patterns - Based on actual node-types.json structure +*/ +export default ` +; Subroutine declarations (main Perl construct) +(subroutine_declaration_statement + name: (bareword) @name) @definition.function + +; Package statements +(package_statement + name: (package) @name) @definition.package + +; Use statements (imports) +(use_statement + module: (package) @name) @definition.import + +; Method declarations (modern Perl) +(method_declaration_statement + name: (bareword) @name) @definition.method + +; Class statements (modern Perl) +(class_statement + name: (package) @name) @definition.class + +; Role statements (modern Perl) +(role_statement + name: (package) @name) @definition.role + +; Variable declarations - capture any variable declaration +(variable_declaration) @definition.variable + +; Assignment expressions for capturing variable assignments +(assignment_expression) @definition.assignment + +; Function calls for reference tracking +(function_call_expression) @reference.function + +; Method calls for reference tracking +(method_call_expression) @reference.method +` diff --git a/src/services/tree-sitter/tree-sitter-perl.wasm b/src/services/tree-sitter/tree-sitter-perl.wasm new file mode 100755 index 0000000000..a901d87027 Binary files /dev/null and b/src/services/tree-sitter/tree-sitter-perl.wasm differ