Language Parsers
Revet uses Tree-sitter for fast, accurate AST parsing. Each language parser builds nodes and edges in the code dependency graph.
Supported languages
| Language | Extensions | Graph features |
|---|---|---|
| Python | .py | Functions, classes, decorators, async, nested scopes |
| TypeScript / JS | .ts, .tsx, .js, .jsx | Classes, interfaces, generics, arrow functions, enums |
| Rust | .rs | Functions, structs, enums, traits, impl blocks |
| Go | .go | Functions, methods, structs, interfaces, goroutines |
| Java | .java | Classes, interfaces, records, enums, nested classes |
| C# | .cs | Classes, interfaces, records, structs, attributes, generics |
| Kotlin | .kt, .kts | Classes, objects, data classes, annotations, sealed classes |
| Ruby | .rb, .rake, .gemspec | Classes, modules, mixins, attr_accessors |
| PHP | .php | Classes, traits, enums, namespaces, attributes |
| Swift | .swift | Classes, structs, protocols, extensions, enums |
| C / C++ | .c, .h, .cpp, .cc, .cxx, .hpp, .hxx | Functions, structs, C++ classes with inheritance, #include imports, macros, call graph |
What parsers produce
Each parser creates:
Filenode — one per source file, with language metadataFunction/Methodnodes — with parameter lists and line numbersClass/Struct/Traitnodes — with inheritance relationshipsImportnodes — with module specifiers for cross-file resolutionContainsedges — file → symbol, class → methodImportsedges — file → imported file (resolved cross-file)Callsedges — caller → callee (resolved cross-file)Inheritsedges — subclass → superclass
Incremental parsing
Parsed file graphs are cached under .revet-cache/files/ keyed by content hash. On subsequent runs, only changed files are re-parsed by tree-sitter. Second runs on unchanged codebases are near-instant.
Adding a language
See Contributing for the step-by-step guide to adding a new language parser.