Skip to content

Supported Languages

Starting in v0.3.0, symtrace provides first-class AST parsing and structural analysis for 9 programming languages and data formats.

LanguageExtensionsKey Entity Identifiers Analyzed
Rust.rsfunction_item, struct_item, enum_item, impl_item, trait_item
JavaScript.js, .jsx, .mjs, .cjsfunction_declaration, class_declaration, method_definition, arrow_function
TypeScript.ts, .tsxfunction_declaration, class_declaration, interface_declaration, type_alias_declaration
Python.py, .pyifunction_definition, class_definition, async_function_definition
Java.javamethod_declaration, class_declaration, interface_declaration, constructor_declaration
C.c, .hfunction_definition, struct_specifier, enum_specifier, type_definition
C++.cpp, .hpp, .cc, .cxx, .h++function_definition, class_specifier, namespace_definition, template_declaration
Go.gofunction_declaration, method_declaration, type_declaration, type_spec
JSON.json, .jsoncpair, object, array

Files with unsupported file extensions are automatically skipped gracefully — zero errors, zero clutter. You can safely run symtrace against any repository regardless of content.


Language mapping is determined strictly by file extension. There is no runtime shebang parsing or content sniffing, guaranteeing fast and deterministic detection.


New languages are integrated into symtrace using Tree-sitter C grammars:

  1. Add the Tree-sitter grammar dependency to Cargo.toml.
  2. Define extension mappings in src/language.rs.
  3. Configure entity node types and identifier resolution rules in src/ast_builder.rs.
  4. Add language test cases to tests/.

See Contributing Guide for details.