Language support
Astria registers 25 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.
| 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 | function_declaration, generator_function_declaration, method_definition, 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 |
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.