Language Support

Overview

sqry organizes its 35 language plugins into two groups based on analysis depth.

Full relation support languages receive full AST parsing, symbol extraction, and relation tracking. This means sqry can answer queries about callers, callees, imports, exports, trait/interface implementations (impl:), and class inheritance (inherits:). All cross-file semantic relationships are available for these languages.

Symbol extraction + imports languages receive symbol extraction and import tracking. These are primarily domain-specific, infrastructure-as-code, and declarative config languages where call-graph analysis is less applicable. They appear in the unified graph and support sqry query, sqry graph stats, and other graph commands, but full caller/callee relation extraction is not performed.


Full Relation Support — 28 Languages

Full AST parsing, symbol extraction, and relation tracking (callers, callees, imports, exports, impl/inherits).

LanguageSymbol kindsRelation trackingCross-language support
CStructs, unions, functions, function pointersFullFFI (Rust↔C, C↔C++)
C++Classes, templates, namespaces, methodsFullFFI (Rust↔C++, C↔C++)
RustFunctions, structs, traits, impls, enumsFullFFI (Rust↔C/C++), HTTP
Shell/BashFunctions, command substitutionFull (call tracking)process_exec
ZigFunctions, structs, comptime, pub visibilityFull
JavaScriptFunctions, classes, ES6+ modules, async/awaitFullHTTP (fetch/axios)
TypeScriptFunctions, interfaces, generics, JSXFull (incl. return-type)HTTP (fetch/axios)
DartClasses, async/await, Flutter widgetsFullMethodChannel (Flutter)
KotlinData classes, coroutines, sealed classesFull
SwiftProtocols, extensions, async/awaitFull
ScalaCase classes, traits, implicitsFull
C#Classes, LINQ, async, propertiesFull
GoInterfaces, channels, goroutinesFullHTTP (route handlers)
JavaClasses, annotations, generics, inheritanceFull (incl. return-type)HTTP (route handlers)
PythonClasses, functions, decorators, type hintsFullHTTP (route handlers)
RubyModules, metaprogramming, blocksFull (incl. signature metadata)
PHPTraits, namespaces, Laravel/SymfonyFull
LuaModules, colon-syntax methods, requireFull
RFunctions, S3/S4 methods, R6 classesFull (incl. package metadata)
GroovyClasses, closures, Gradle tasksFull
ElixirPhoenix, pipe operators, Erlang FFIFull
SQLTables, views, functions, triggersFull (table read/write)db_query
SvelteProps, reactive declarations, store subscriptionsFull (SFC)
VueComposition API, options API, SFCFull
HTMLDocument structure, script/link importsFull (import tracking)
CSSSelectors, rules, @importFull (@import tracking)
HaskellModule imports, type classesFull
PerlModules, subroutinesFull (import tracking)

Symbol Extraction + Imports — 7 Languages

Symbol extraction and import tracking. These languages appear in the unified graph and support sqry query and sqry graph stats, but full caller/callee relation extraction is not available.

LanguageNotes
Terraform/HCLResources, modules, variables, outputs
PuppetClasses, resources, defined types
PulumiInfrastructure resources, stack definitions
Salesforce ApexEnterprise Apex classes and triggers
SAP ABAPEnterprise ABAP programs and function modules
Oracle PL/SQLStored procedures and packages (distinct from SQL Tier 1)
ServiceNow (Xanadu)Script Includes, GlideRecord, Xanadu JS platform

Relation Types

The following relation fields are extracted for Tier 1 languages and available in queries, graph commands, and MCP tools.

RelationTracksExample query
callers: / callees:Direct function and method callscallers:authenticate
imports: / exports:Module-level imports and exported symbolsimports:react
impl:Trait or interface implementationsimpl:Iterator
inherits:Class inheritance relationshipsinherits:BaseModel

Relation data is stored in the unified graph snapshot and is available after sqry index. All relation queries work across files — for example, callers:authenticate finds every call site across the entire codebase, regardless of which file or language it originates from (within Tier 1 languages).


OOP Edges — Inherits & Implements

16 of the 28 Tier 1 languages support class inheritance and interface/trait implementation edges. These are stored as Inherits and Implements edge types in the graph and are queryable via inherits: and impl: predicates.

LanguageInheritsImplementsNotes
C++yesVirtual inheritance, multiple inheritance
C#yesyesClass inheritance + interface impl
DartyesyesExtends + implements + mixins
ElixiryesProtocol implementations, behaviour callbacks
GoyesImplicit interface satisfaction
GroovyyesyesExtends + implements
HaskellyesTypeclass instances
JavayesyesExtends + implements
JavaScriptyesES6 class extends
KotlinyesyesClass inheritance + interface impl
PythonyesMultiple inheritance (MRO)
RubyyesyesClass inheritance + module include/prepend
RustyesTrait implementations
ScalayesyesExtends + with (trait mixing)
SwiftyesyesClass inheritance + protocol conformance
TypeScriptyesyesExtends + implements

Querying OOP relationships

# Find all classes that inherit from BaseModel
sqry query "inherits:BaseModel"

# Find all implementations of the Iterator trait
sqry query "impl:Iterator"

# Combine with language filter
sqry query "impl:Serializable AND lang:java"

# Find the full inheritance chain
sqry graph call-hierarchy "MyDerivedClass" --direction incoming

FFI Support

11 Tier 1 languages support Foreign Function Interface (FFI) edge detection, used for cross-language analysis:

LanguageFFI mechanism
C / C++Native callable functions
Rustextern "C" blocks, #[no_mangle]
GoCGo (import "C")
JavaJNI / JNA native method declarations
JavaScriptWebAssembly imports, N-API bindings
Pythonctypes, cffi, C extension modules
C#P/Invoke, DllImport
PHPFFI extension
RubyFiddle, FFI gem
PerlXS, Inline::C
Swift@objc, C bridging headers

See Cross-Language for details on querying FFI and other cross-language edges.