Language support
Astria registers 42 language configurations. Discovery and parser selection share the registry in crates/astria-core/src/languages.rs.
The table lists configured tree-sitter node kinds, not a promise of complete language semantics or successful resolution of every construct. None means no node kind is configured for that category. Classes include language-specific containers such as HCL blocks; parser reuse and shared AST walker rules may limit extraction. Imports and calls are syntax candidates, not guarantees of resolved dependency edges. Closure kinds indicate configured anonymous-function extraction.
AST source lines are one-based. Embedded JavaScript/TypeScript lines in Vue, Svelte, and Astro are translated back to their original component file. Call resolution retains lexical scopes, supported import paths, and language evidence. Unknown instance receivers remain unresolved: a call such as row.get() cannot bind to an unrelated class method named get. Explicit self/this calls use the enclosing class; statically qualified paths and exact assigned JavaScript member declarations can resolve when their evidence selects one declaration. These AST bindings remain name inference, not compiler-proven call targets; use a standard SCIP index for compiler-provided symbol relationships.
Extensionless scripts are discovered from a bounded, complete shebang line, including supported versioned interpreters such as python3.12 and node22. Discovery and parser/cache selection use the same language registration. Explicit project language overrides remain available through .astria.toml.
Additional declaration handling includes Kotlin type aliases, C# delegates, Dart typedefs, and Swift macros. These special walker paths are not all represented by the container/function columns below. Type references and Swift macro calls resolve only when supported evidence selects a unique declaration.
| Language | Discovered extensions | Class/container kinds | Function kinds | Import kinds | Call kind | Closure kinds |
|---|---|---|---|---|---|---|
| Python | .py | class_definition | function_definition | import_statement, import_from_statement | call | None |
| JavaScript | .js, .jsx, .mjs | class_declaration | function_declaration, generator_function_declaration, method_definition, function_expression, generator_function, arrow_function | import_statement, import_declaration | call_expression | None |
| TypeScript | .ts, .tsx | class_declaration, interface_declaration | function_declaration, generator_function_declaration, method_definition, method_signature, function_expression, generator_function, arrow_function | import_statement, import_declaration | call_expression | None |
| Rust | .rs | struct_item, enum_item, trait_item, impl_item | function_item, function_signature_item | use_declaration | call_expression | None |
| Go | .go | type_declaration | function_declaration, method_declaration | import_declaration | call_expression | None |
| Java | .java | class_declaration, interface_declaration, enum_declaration | method_declaration, constructor_declaration | import_declaration | method_invocation | None |
| C | .c, .h | struct_specifier, enum_specifier | function_definition | preproc_include | call_expression | None |
| C++ | .cpp, .cc, .cxx, .hpp | class_specifier, struct_specifier, enum_specifier | function_definition | preproc_include | call_expression | None |
| Ruby | .rb, .rake | class, module, singleton_class | method, singleton_method | call | call | None |
| Swift | .swift | class_declaration, struct_declaration, enum_declaration, protocol_declaration | function_declaration | import_declaration | call_expression | None |
| Kotlin | .kt, .kts | class_declaration, object_declaration, interface_declaration, enum_declaration | function_declaration | import_header | call_expression | None |
| Scala | .scala | class_definition, object_definition, trait_definition, enum_definition | function_definition, function_declaration | import_declaration | call_expression | None |
| PHP | .php | class_declaration, interface_declaration, trait_declaration, enum_declaration | function_definition, method_declaration, declaration_list | namespace_use_declaration, namespace_definition | function_call_expression | anonymous_function, arrow_function |
| C# | .cs | class_declaration, struct_declaration, interface_declaration, enum_declaration | method_declaration, constructor_declaration, local_function_statement | using_directive | invocation_expression | None |
| Lua | .lua | None | function_declaration, function_definition | None | function_call | None |
| Haskell | .hs | class, data_type, newtype, type_alias | decl, signature | import | apply | None |
| Elixir | .ex, .exs | call | call | call | call | None |
| Shell | .sh, .bash | None | function_definition | None | command | None |
| Dart | .dart | class_definition, mixin_declaration, extension_declaration, enum_declaration | function_expression, method_declaration | import_specification | call_expression | None |
| Zig | .zig | struct_declaration, enum_declaration, union_declaration, opaque_declaration | function_declaration, test_declaration | using_namespace_declaration | call_expression | None |
| Terraform/HCL | .tf, .tfvars, .hcl | block | None | None | function_call | None |
| PowerShell | .ps1, .psm1, .psd1 | class_statement | function_statement, filter_statement | using_statement | command | None |
| Verilog/SystemVerilog | .v, .sv, .svh, .vh | module_declaration, interface_declaration, program_declaration, class_declaration | function_body_declaration, task_body_declaration | import_declaration | subroutine_call | None |
| Metal | .metal | struct_specifier, class_specifier | function_definition | preproc_include | call_expression | None |
| CSS | .css, .scss | rule_set | None | import_statement | call_expression | None |
| Astro | .astro | None | None | None | None | None |
| Common Lisp | .lisp, .cl, .lsp, .asd | None | defun_header | None | list_lit | None |
| DreamMaker | .dm | type_definition | proc_definition, proc_override | preproc_include | call_expression | None |
| Fortran | .f90, .f95, .f03, .f08, .f, .for | derived_type_definition | function_statement, subroutine_statement | import_statement | call_expression | None |
| Groovy | .groovy, .gradle | class_declaration, interface_declaration, enum_declaration | method_declaration, function_definition, constructor_declaration | import_declaration | method_invocation | closure |
| Julia | .jl | module_definition, struct_definition | function_definition, macro_definition | import_statement, using_statement | call_expression | arrow_function_expression |
| Luau | .luau | None | function_declaration, function_definition | None | function_call | None |
| Objective-C | .m, .mm | class_implementation, class_interface | method_definition, function_definition | preproc_include, module_import | call_expression | None |
| OCaml | .ml | module_definition, class_definition, exception_definition | let_binding | open_module, include_module | application_expression | None |
| OCaml Interface | .mli | module_definition | value_specification | open_module | application_expression | None |
| R | .r | None | function_definition | None | call | None |
| Solidity | .sol | contract_declaration, interface_declaration, library_declaration, struct_declaration, enum_declaration | function_definition, modifier_definition, constructor_definition | import_directive, using_directive | call_expression | None |
| SQL | .sql | create_table, create_view, create_materialized_view, create_schema, create_database | create_function, create_trigger, create_query | None | invocation | None |
| VB.NET | .vb | None | None | None | None | None |
| Pascal/Delphi | .pas, .dpr, .dpk, .inc | None | None | None | None | None |
| Vue | .vue | None | None | None | None | None |
| Svelte | .svelte | None | None | None | None | None |
Adding a language
- Add the grammar dependency and a parser config module in
crates/astria-extract/src/langs/. - Export the module from
langs/mod.rsand add one registration incrates/astria-core/src/languages.rs. Reference that registration for the config's name and extensions. - Map only AST kinds handled by the shared extraction walker.
- Run
node scripts/generate-language-support.mjsto regenerate this table. The docs-sync guard rejects stale generated content.