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.

GroupLanguagesImports between files
Full import resolutionTypeScript 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 callsSwift, Ruby, PHP, Scala, Lua, Perl, Haskell, OCaml, Julia, R, Erlang, Zig, Groovy, Bash, Scheme, Common Lisp, F#, PowerShell, Fortran, Pascal, SQLNot resolved per language. Calls are linked by name.
Markup and configurationHTML, CSS (also SCSS and Sass), JSON, XML (also SVG), TOML, YAML, CMake, HCL and Terraform, nginx, CaddyfileStructure 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, and this.client = new RestClient(). this.client.getContent(…) then resolves to RestClient.getContent.
  • Typed parameters and local variables, such as (api: ApiClient) and const api = new ApiClient().
  • Chains over return and property types: getState()?.apiClient.createStep(…) resolves to ApiClient.createStep when getState declares its return type and that type declares apiClient. | undefined and | null are ignored.
  • JSDoc @type annotations 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 frameworkDetected as entry point
C, C++, Go, Java, Kotlin, Rustmain
Pythonif __name__ == "__main__", __main__.py
Swiftmain.swift, types marked @main, @UIApplicationMain or @NSApplicationMain
TypeScript, JavaScriptmain of package.json, index files, React app roots, Node servers
VS Code extensionactivate, and each command from contributes.commands with its handler
Taurievery #[tauri::command] function
RShiny 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 fullDetected by presence
package.json, tauri.conf.json, Cargo.toml, pyproject.toml, requirements.txt, Package.swift, *.xcodeproj, go.mod, pom.xml (Maven), Gradle build files, Gemfilecomposer.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

BadgeValue in project_overrides.json
frontendfrontend
backendbackend
fullstackfullstack
librarylibrary
vscode extensionvs_code_extension
cli toolcli_tool
mobile appmobile_app
desktop appdesktop_app
tauri apptauri_app
electron appelectron_app
monorepomonorepo
multi languagemulti_language
unknownunknown

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.