Languages and project types
What the analysis understands, by language, entry point, manifest and project kind. Every language is parsed with tree-sitter and ends up in the same graph, so a call from TypeScript into a Tauri command in Rust and a call inside Python look the same in the Graph View.
Languages
All languages produce symbols, call sites and text for search. They differ in how far imports between files are resolved.
| Group | Languages | Imports between files |
|---|---|---|
| Full import resolution | TypeScript and JavaScript (.ts, .tsx, .js, .jsx, .mjs, .cjs), Svelte, Python, Rust, Go, Java, Kotlin, C, C++ | Resolved to the imported file, including tsconfig paths, workspace packages and SvelteKit aliases for TypeScript and JavaScript |
| Symbols and calls | Swift, Ruby, PHP, Scala, Lua, Perl, Haskell, OCaml, Julia, R, Erlang, Zig, Groovy, Bash, Scheme, Common Lisp, F#, PowerShell, Fortran, Pascal, SQL | Not resolved per language. Calls are linked by name. |
| Markup and configuration | HTML, CSS (also SCSS and Sass), JSON, XML (also SVG), TOML, YAML, CMake, HCL and Terraform, nginx, Caddyfile | Structure only |
Markdown, READMEs and other text files without a parser go into the text index. They can be searched but have no symbols.
Call edges are resolved from names and from the types the parser can see. For better precision on single edges, see Sharpen call edges and Language servers.
Type-aware calls in TypeScript
For TypeScript and JavaScript the analysis uses declared types to resolve method calls to the right class:
- Class fields typed as
private client: RestClient, constructor parameters with visibility, andthis.client = new RestClient().this.client.getContent(…)then resolves toRestClient.getContent. - Typed parameters and local variables, such as
(api: ApiClient)andconst api = new ApiClient(). - Chains over return and property types:
getState()?.apiClient.createStep(…)resolves toApiClient.createStepwhengetStatedeclares its return type and that type declaresapiClient.| undefinedand| nullare ignored. - JSDoc
@typeannotations in JavaScript. - Inherited methods over
class X extends Y. - Types re-exported through a barrel file (
export * from './api'), if the type name is unique in the project.
If the type is known but has no such method, no edge is created.
Entry points
Entry points are symbols or files that start execution from outside the code: the operating system, a framework, the editor or the frontend. They appear in the Entry Points perspective and are never reported as orphan files.
| Language or framework | Detected as entry point |
|---|---|
| C, C++, Go, Java, Kotlin, Rust | main |
| Python | if __name__ == "__main__", __main__.py |
| Swift | main.swift, types marked @main, @UIApplicationMain or @NSApplicationMain |
| TypeScript, JavaScript | main of package.json, index files, React app roots, Node servers |
| VS Code extension | activate, and each command from contributes.commands with its handler |
| Tauri | every #[tauri::command] function |
| R | Shiny apps (app.R, shinyApp()), plumber APIs (plumb(), #* @get, #* @post), scripts with an Rscript shebang |
Manifests
The project profile is built from these files.
| Read in full | Detected by presence |
|---|---|
package.json, tauri.conf.json, Cargo.toml, pyproject.toml, requirements.txt, Package.swift, *.xcodeproj, go.mod, pom.xml (Maven), Gradle build files, Gemfile | composer.json, pubspec.yaml, .NET project files, CMakeLists.txt, mix.exs, Cabal files, Podfile, Cartfile, Dockerfile |
A folder below the project root with its own manifest becomes a sub-project. Its role is backend of, frontend of, nested app or sibling.
Project kinds
| Badge | Value in project_overrides.json |
|---|---|
| frontend | frontend |
| backend | backend |
| fullstack | fullstack |
| library | library |
| vscode extension | vs_code_extension |
| cli tool | cli_tool |
| mobile app | mobile_app |
| desktop app | desktop_app |
| tauri app | tauri_app |
| electron app | electron_app |
| monorepo | monorepo |
| multi language | multi_language |
| unknown | unknown |
A project is multi language when at least two languages each hold a noticeable share of the source files. unknown means that no manifest was found; the languages then come from the file extensions alone. Correct the profile explains the override file.