Skip to content

Languages

codescope parses 21 languages with tree-sitter (WebAssembly grammars — no native build step). Every language gets definition extraction (functions, classes, methods, interfaces, types, enums); call and import edges are extracted for the languages whose grammars expose them cleanly.

LanguageExtensionsDefinitionsCallsImports
TypeScript.ts .mts .cts
TSX / JSX.tsx .jsx
JavaScript.js .mjs .cjs
Python.py .pyi
Go.go
Rust.rs
Java.java
Ruby.rb
C.c .h
C++.cpp .cc .cxx .hpp .hh
C#.cs
PHP.php
Scala.scala .sc
Solidity.sol
Zig.zig
Kotlin.kt .kts
Objective-C.m
Lua.lua
Bash.sh .bash
OCaml.ml .mli
ReScript.res

A definition is anything you’d jump to with go-to-definition: functions, methods, classes, interfaces, type aliases, and enums (plus arrow-function bindings like const x = () => …). Method definitions track their enclosing class as a container, so codescope knows run is a method of Service.

  • Calls are kind-aware. A bare foo() is recorded as a call; obj.foo() as a method call. This lets the graph resolve a bare call to a function named foo and a method call to a method named foo, avoiding the classic collision when a project happens to define a function called push.
  • Rust impl methods are currently labelled function (impl blocks aren’t tracked as containers).
  • Grammar compatibility. Swift, Dart, and Elm grammars in the upstream WASM set target a tree-sitter ABI outside codescope’s supported range and are excluded rather than shipped broken.