From 6bca0d869db2306dff020cdad7d36b8ce489a162 Mon Sep 17 00:00:00 2001 From: ZyphrZero <133507172+ZyphrZero@users.noreply.github.com> Date: Tue, 30 Jun 2026 20:28:48 +0800 Subject: [PATCH 1/3] feat(extraction): add Slint language support --- CHANGELOG.md | 3 + README.md | 3 +- __tests__/slint-extraction.test.ts | 137 ++++++++++++++ site/src/content/docs/reference/languages.md | 1 + src/extraction/grammars.ts | 8 +- src/extraction/languages/index.ts | 2 + src/extraction/languages/slint.ts | 183 +++++++++++++++++++ src/extraction/tree-sitter.ts | 6 +- src/extraction/wasm/tree-sitter-slint.wasm | Bin 0 -> 686886 bytes src/types.ts | 1 + 10 files changed, 339 insertions(+), 5 deletions(-) create mode 100644 __tests__/slint-extraction.test.ts create mode 100644 src/extraction/languages/slint.ts create mode 100644 src/extraction/wasm/tree-sitter-slint.wasm diff --git a/CHANGELOG.md b/CHANGELOG.md index abc341c09..129bce8c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### New Features + +- CodeGraph now indexes Slint (`.slint`) UI files, including components, globals, interfaces, structs, enums, properties, callbacks, functions, imports, and call edges. (#648, #916) ## [1.1.6] - 2026-06-30 diff --git a/README.md b/README.md index 7b6c33932..eefad41c4 100644 --- a/README.md +++ b/README.md @@ -244,7 +244,7 @@ The reliable, universal payoff is **surgical context and speed**: CodeGraph coll | **Full-Text Search** | Find code by name instantly across your entire codebase, powered by FTS5 | | **Impact Analysis** | Trace callers, callees, and the full impact radius of any symbol before making changes | | **Always Fresh** | File watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config | -| **20+ Languages** | TypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Objective-C, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Svelte, Vue, Astro, Liquid, Pascal/Delphi | +| **20+ Languages** | TypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Objective-C, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Slint, Svelte, Vue, Astro, Liquid, Pascal/Delphi | | **Framework-aware Routes** | Recognizes web-framework routing files and links URL patterns to their handlers across 17 frameworks | | **Mixed iOS / React Native / Expo** | Closes cross-language flows that static parsing misses: Swift ↔ ObjC bridging, React Native legacy bridge + TurboModules + Fabric view components, native → JS event emitters, Expo Modules | | **100% Local** | No data leaves your machine. No API keys. No external services. SQLite database only | @@ -714,6 +714,7 @@ is written): | Lua | `.lua` | Full support (functions, methods with receivers, local variables, `require` imports, call edges) | | R | `.R` `.r` | Full support (functions in every assignment form, S4/R5/R6 classes with methods, `library`/`require` imports, `source()` file references, call edges) | | Luau | `.luau` | Full support (everything in Lua, plus `type`/`export type` aliases, typed signatures, and Roblox instance-path `require`) | +| Slint | `.slint` | Full support (components, globals, interfaces, structs, enums, properties, callbacks, functions, imports, and call edges) | ## Measured cross-file coverage diff --git a/__tests__/slint-extraction.test.ts b/__tests__/slint-extraction.test.ts new file mode 100644 index 000000000..ab9f92922 --- /dev/null +++ b/__tests__/slint-extraction.test.ts @@ -0,0 +1,137 @@ +/** + * Slint extraction tests. + */ + +import { beforeAll, describe, expect, it } from 'vitest'; +import { extractFromSource } from '../src/extraction'; +import { + detectLanguage, + getSupportedLanguages, + initGrammars, + isLanguageSupported, + isSourceFile, + loadGrammarsForLanguages, +} from '../src/extraction/grammars'; + +beforeAll(async () => { + await initGrammars(); + await loadGrammarsForLanguages(['slint']); +}); + +describe('Slint Extraction', () => { + describe('Language detection', () => { + it('should detect Slint files', () => { + expect(detectLanguage('ui/main.slint')).toBe('slint'); + expect(isSourceFile('ui/main.slint')).toBe(true); + }); + + it('should report Slint as supported', () => { + expect(isLanguageSupported('slint')).toBe(true); + expect(getSupportedLanguages()).toContain('slint'); + }); + }); + + it('extracts components, globals, interfaces, structs, enums, members, and imports', () => { + const code = ` +import { Button, VerticalBox } from "std-widgets.slint"; + +export struct Person { + name: string, + age: int, +} + +export enum Mode { + Light, + Dark, +} + +global AppState { + in-out property counter: 0; + callback increment(int); + + public function bump(delta: int) -> int { + counter += delta; + return counter; + } +} + +export interface Greeter { + callback greet(string) -> string; + function reset(); +} + +export component MainWindow inherits Window implements Greeter { + in property title: "Demo"; + out property doubled: AppState.counter * 2; + callback accepted(string); + + function handle-click(name: string) { + AppState.bump(1); + accepted(name); + } + + VerticalBox { + Button { + text: title; + clicked => { + root.handle-click("world"); + } + } + } +} +`; + const result = extractFromSource('ui/main.slint', code); + const byName = new Map(result.nodes.map((n) => [`${n.kind}:${n.name}`, n])); + + expect(byName.get('import:std-widgets.slint')?.signature).toContain('Button'); + expect(byName.get('struct:Person')?.isExported).toBe(true); + expect(byName.get('field:name')?.qualifiedName).toBe('Person::name'); + expect(byName.get('enum:Mode')?.isExported).toBe(true); + expect(byName.get('enum_member:Light')?.qualifiedName).toBe('Mode::Light'); + expect(byName.get('class:AppState')?.language).toBe('slint'); + expect(byName.get('property:counter')?.qualifiedName).toBe('AppState::counter'); + expect(byName.get('method:bump')?.signature).toBe('(delta: int) -> int'); + expect(byName.get('interface:Greeter')?.isExported).toBe(true); + expect(byName.get('method:greet')?.qualifiedName).toBe('Greeter::greet'); + expect(byName.get('component:MainWindow')?.isExported).toBe(true); + expect(byName.get('property:title')?.qualifiedName).toBe('MainWindow::title'); + expect(byName.get('method:handle-click')?.qualifiedName).toBe('MainWindow::handle-click'); + }); + + it('records Slint inheritance, implemented interfaces, child components, and calls', () => { + const code = ` +interface Greeter { + callback greet(string); +} + +export component MainWindow inherits Window implements Greeter { + callback accepted(string); + + function handle-click(name: string) { + accepted(name); + } + + Button { + clicked => { + root.handle-click("world"); + } + } +} +`; + const result = extractFromSource('ui/main.slint', code); + const main = result.nodes.find((n) => n.kind === 'component' && n.name === 'MainWindow'); + const handler = result.nodes.find((n) => n.kind === 'method' && n.name === 'handle-click'); + expect(main).toBeDefined(); + expect(handler).toBeDefined(); + + expect(result.unresolvedReferences).toEqual( + expect.arrayContaining([ + expect.objectContaining({ fromNodeId: main?.id, referenceKind: 'extends', referenceName: 'Window' }), + expect.objectContaining({ fromNodeId: main?.id, referenceKind: 'implements', referenceName: 'Greeter' }), + expect.objectContaining({ fromNodeId: main?.id, referenceKind: 'references', referenceName: 'Button' }), + expect.objectContaining({ fromNodeId: main?.id, referenceKind: 'calls', referenceName: 'handle-click' }), + expect.objectContaining({ fromNodeId: handler?.id, referenceKind: 'calls', referenceName: 'accepted' }), + ]) + ); + }); +}); diff --git a/site/src/content/docs/reference/languages.md b/site/src/content/docs/reference/languages.md index 0c5587773..23a7927a3 100644 --- a/site/src/content/docs/reference/languages.md +++ b/site/src/content/docs/reference/languages.md @@ -31,3 +31,4 @@ Language support is automatic from the file extension — there's nothing to con | Lua | `.lua` | Full support (functions, methods, locals, `require` imports, call edges) | | R | `.R`, `.r` | Full support (functions, S4/R5/R6 classes with methods, `library`/`require` imports, `source()` file references, call edges) | | Luau | `.luau` | Full support (Lua, plus typed signatures, `type` aliases, Roblox `require`) | +| Slint | `.slint` | Full support (components, globals, interfaces, structs, enums, properties, callbacks, functions, imports, call edges) | diff --git a/src/extraction/grammars.ts b/src/extraction/grammars.ts index 1b15996c0..000a4df6e 100644 --- a/src/extraction/grammars.ts +++ b/src/extraction/grammars.ts @@ -39,6 +39,7 @@ const WASM_GRAMMAR_FILES: Record = { r: 'tree-sitter-r.wasm', luau: 'tree-sitter-luau.wasm', objc: 'tree-sitter-objc.wasm', + slint: 'tree-sitter-slint.wasm', }; /** @@ -108,6 +109,7 @@ export const EXTENSION_MAP: Record = { '.luau': 'luau', '.m': 'objc', '.mm': 'objc', + '.slint': 'slint', // XML: file-level tracking; the MyBatis extractor matches `` // shape and emits SQL-statement nodes (other XML returns empty). '.xml': 'xml', @@ -220,8 +222,9 @@ export async function loadGrammarsForLanguages(languages: Language[]): Promise> = { typescript: typescriptExtractor, @@ -51,4 +52,5 @@ export const EXTRACTORS: Partial> = { r: rExtractor, luau: luauExtractor, objc: objcExtractor, + slint: slintExtractor, }; diff --git a/src/extraction/languages/slint.ts b/src/extraction/languages/slint.ts new file mode 100644 index 000000000..1322fae93 --- /dev/null +++ b/src/extraction/languages/slint.ts @@ -0,0 +1,183 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import { getChildByField, getNodeText } from '../tree-sitter-helpers'; +import type { LanguageExtractor } from '../tree-sitter-types'; + +function slintSignature(node: SyntaxNode, source: string): string | undefined { + const args: string[] = []; + for (let i = 0; i < node.namedChildCount; i++) { + const child = node.namedChild(i); + if (child && node.fieldNameForNamedChild(i) === 'arguments') { + args.push(getNodeText(child, source)); + } + } + const returnType = getChildByField(node, 'return_type'); + const params = `(${args.join(', ')})`; + return returnType ? `${params} -> ${getNodeText(returnType, source)}` : params; +} + +function slintVisibility(node: SyntaxNode): 'public' | 'private' | 'protected' | undefined { + const visibility = getChildByField(node, 'visibility'); + if (!visibility) { + for (let i = 0; i < node.namedChildCount; i++) { + const child = node.namedChild(i); + if (child?.type === 'function_visibility') { + const text = child.text; + if (text === 'public' || text === 'private' || text === 'protected') return text; + } + } + return undefined; + } + + const text = visibility.text.replace('_', '-'); + if (text === 'private') return 'private'; + return 'public'; +} + +function slintIsExported(node: SyntaxNode): boolean { + let current = node.parent; + while (current) { + if (current.type === 'exported_definition') return true; + if (current.type === 'rust_attr') { + current = current.parent; + continue; + } + current = current.parent; + } + return false; +} + +function slintImportModule(node: SyntaxNode, source: string): string | null { + const stringNode = node.namedChildren.find((c) => c.type === 'string_value'); + if (!stringNode) return null; + return getNodeText(stringNode, source).replace(/^"|"$/g, ''); +} + +export const slintExtractor: LanguageExtractor = { + functionTypes: ['function_definition', 'function_declaration'], + classTypes: ['global_definition'], + methodTypes: ['function_definition', 'function_declaration', 'callback'], + interfaceTypes: ['interface_definition'], + structTypes: ['struct_definition'], + enumTypes: ['enum_definition'], + enumMemberTypes: ['user_type_identifier'], + typeAliasTypes: [], + importTypes: ['import_statement'], + callTypes: ['function_call'], + variableTypes: [], + propertyTypes: ['property', 'binding_alias'], + fieldTypes: ['struct_field_definition'], + nameField: 'name', + bodyField: 'body', + paramsField: 'arguments', + returnField: 'return_type', + visitNode: (node, ctx) => { + if (node.type === 'component_definition') { + const nameNode = getChildByField(node, 'name'); + if (!nameNode) return false; + + const component = ctx.createNode('component', getNodeText(nameNode, ctx.source), node, { + isExported: slintIsExported(node), + }); + if (!component) return true; + + for (const modifier of node.namedChildren.filter((c) => c.type === 'component_modifier')) { + const base = getChildByField(modifier, 'base_type'); + if (base) { + ctx.addUnresolvedReference({ + fromNodeId: component.id, + referenceName: getNodeText(base, ctx.source), + referenceKind: 'extends', + line: base.startPosition.row + 1, + column: base.startPosition.column, + }); + } + const implementsClause = modifier.namedChildren.find((c) => c.type === 'implements_clause'); + if (implementsClause) { + for (const iface of implementsClause.namedChildren.filter((c) => c.type === 'user_type_identifier')) { + ctx.addUnresolvedReference({ + fromNodeId: component.id, + referenceName: getNodeText(iface, ctx.source), + referenceKind: 'implements', + line: iface.startPosition.row + 1, + column: iface.startPosition.column, + }); + } + } + } + + ctx.pushScope(component.id); + const body = getChildByField(node, 'body') ?? node.namedChildren.find((c) => c.type === 'block'); + if (body) { + for (let i = 0; i < body.namedChildCount; i++) { + const child = body.namedChild(i); + if (child) ctx.visitNode(child); + } + } + ctx.popScope(); + return true; + } + + if (node.type === 'component') { + const typeNode = getChildByField(node, 'type'); + const fromNodeId = ctx.nodeStack[ctx.nodeStack.length - 1]; + if (typeNode && fromNodeId) { + ctx.addUnresolvedReference({ + fromNodeId, + referenceName: getNodeText(typeNode, ctx.source), + referenceKind: 'references', + line: typeNode.startPosition.row + 1, + column: typeNode.startPosition.column, + }); + } + for (let i = 0; i < node.namedChildCount; i++) { + const child = node.namedChild(i); + if (child && child.type !== 'user_type_identifier') ctx.visitNode(child); + } + return true; + } + + return false; + }, + resolveName: (node, source) => { + if (node.type === 'callback' || node.type === 'property' || node.type === 'binding_alias') { + const name = getChildByField(node, 'name'); + return name ? getNodeText(name, source) : undefined; + } + return undefined; + }, + resolveBody: (node, bodyField) => { + const standard = getChildByField(node, bodyField); + if (standard) return standard; + if (node.type === 'global_definition') { + return node.namedChildren.find((c) => c.type === 'global_block') ?? null; + } + if (node.type === 'interface_definition') { + return node.namedChildren.find((c) => c.type === 'interface_block') ?? null; + } + if (node.type === 'struct_definition') { + return node.namedChildren.find((c) => c.type === 'struct_block') ?? null; + } + if (node.type === 'enum_definition') { + return node.namedChildren.find((c) => c.type === 'enum_block') ?? null; + } + if (node.type === 'function_definition') { + return node.namedChildren.find((c) => c.type === 'imperative_block') ?? null; + } + return null; + }, + getSignature: slintSignature, + getVisibility: slintVisibility, + isExported: slintIsExported, + extractPropertyName: (node, source) => { + const name = getChildByField(node, 'name'); + return name ? getNodeText(name, source) : null; + }, + extractImport: (node, source) => { + const moduleName = slintImportModule(node, source); + if (!moduleName) return null; + return { + moduleName, + signature: getNodeText(node, source).trim(), + }; + }, +}; diff --git a/src/extraction/tree-sitter.ts b/src/extraction/tree-sitter.ts index 36e43cd82..8175ed8cc 100644 --- a/src/extraction/tree-sitter.ts +++ b/src/extraction/tree-sitter.ts @@ -1344,7 +1344,8 @@ export class TreeSitterExtractor { parentNode.kind === 'interface' || parentNode.kind === 'trait' || parentNode.kind === 'enum' || - parentNode.kind === 'module' + parentNode.kind === 'module' || + (parentNode.kind === 'component' && parentNode.language === 'slint') ); } @@ -1714,7 +1715,8 @@ export class TreeSitterExtractor { // Skip forward declarations and type references (no body = not a definition) // — EXCEPT C# positional records (`record struct M(decimal Amount);`), // complete definitions with no body block. (#831) - const body = getChildByField(node, this.extractor.bodyField); + const body = this.extractor.resolveBody?.(node, this.extractor.bodyField) + ?? getChildByField(node, this.extractor.bodyField); if (!body && node.type !== 'record_declaration') return; const name = extractName(node, this.source, this.extractor); diff --git a/src/extraction/wasm/tree-sitter-slint.wasm b/src/extraction/wasm/tree-sitter-slint.wasm new file mode 100644 index 0000000000000000000000000000000000000000..bc2305f48c97fc66fa7d1373c7b0c448ad9ee74a GIT binary patch literal 686886 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 Date: Tue, 30 Jun 2026 20:54:50 +0800 Subject: [PATCH 2/3] test(eval): add Slint benchmark corpus --- .claude/skills/agent-eval/corpus.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.claude/skills/agent-eval/corpus.json b/.claude/skills/agent-eval/corpus.json index 9d1606a75..8cea298dc 100644 --- a/.claude/skills/agent-eval/corpus.json +++ b/.claude/skills/agent-eval/corpus.json @@ -247,6 +247,29 @@ "question": "How do shadcn-svelte components compose and apply their styling?" } ], + "Slint": [ + { + "name": "slint-nodejs-template", + "repo": "https://github.com/slint-ui/slint-nodejs-template", + "size": "Small", + "files": "~6", + "question": "How does the JavaScript entry point load the Slint UI and update the MainWindow state?" + }, + { + "name": "SurrealismUI", + "repo": "https://github.com/Surrealism-All/SurrealismUI", + "size": "Medium", + "files": "~3000", + "question": "How does SurrealismUI define and compose a Button component from shared style and theme primitives?" + }, + { + "name": "slint", + "repo": "https://github.com/slint-ui/slint", + "size": "Large", + "files": "~4300", + "question": "How does the Slint example gallery UI compose component definitions and callback handlers from .slint files into the viewer runtime?" + } + ], "Lua": [ { "name": "lualine.nvim", @@ -424,4 +447,4 @@ "question": "When a ggplot object is printed, how does the plot actually get built and drawn \u2014 trace the path from print/plot to where geoms render. Name the key functions in order." } ] -} \ No newline at end of file +} From 123a1fb1963f96b03ae01a9414eb4c217d1ba644 Mon Sep 17 00:00:00 2001 From: ZyphrZero <133507172+ZyphrZero@users.noreply.github.com> Date: Tue, 30 Jun 2026 21:14:06 +0800 Subject: [PATCH 3/3] fix(extraction): link Slint re-export barrels --- __tests__/slint-extraction.test.ts | 32 ++++++++++++++++++++++++++++++ src/extraction/languages/slint.ts | 32 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/__tests__/slint-extraction.test.ts b/__tests__/slint-extraction.test.ts index ab9f92922..4ac37e24e 100644 --- a/__tests__/slint-extraction.test.ts +++ b/__tests__/slint-extraction.test.ts @@ -134,4 +134,36 @@ export component MainWindow inherits Window implements Greeter { ]) ); }); + + it('records Slint re-export barrels as import dependencies', () => { + const code = ` +export { AboutPage } from "about_page.slint"; +export { TableViewPage, TableViewPageAdapter } from "table_view_page.slint"; +`; + const result = extractFromSource('ui/pages/pages.slint', code); + const file = result.nodes.find((n) => n.kind === 'file' && n.name === 'pages.slint'); + expect(file).toBeDefined(); + + expect(result.nodes).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + kind: 'import', + name: 'about_page.slint', + signature: 'export { AboutPage } from "about_page.slint";', + }), + expect.objectContaining({ + kind: 'import', + name: 'table_view_page.slint', + signature: 'export { TableViewPage, TableViewPageAdapter } from "table_view_page.slint";', + }), + ]) + ); + expect(result.unresolvedReferences).toEqual( + expect.arrayContaining([ + expect.objectContaining({ fromNodeId: file?.id, referenceKind: 'imports', referenceName: 'AboutPage' }), + expect.objectContaining({ fromNodeId: file?.id, referenceKind: 'imports', referenceName: 'TableViewPage' }), + expect.objectContaining({ fromNodeId: file?.id, referenceKind: 'imports', referenceName: 'TableViewPageAdapter' }), + ]) + ); + }); }); diff --git a/src/extraction/languages/slint.ts b/src/extraction/languages/slint.ts index 1322fae93..ed71ba7c0 100644 --- a/src/extraction/languages/slint.ts +++ b/src/extraction/languages/slint.ts @@ -52,6 +52,16 @@ function slintImportModule(node: SyntaxNode, source: string): string | null { return getNodeText(stringNode, source).replace(/^"|"$/g, ''); } +function slintReExportInfo(node: SyntaxNode, source: string): { moduleName: string; names: SyntaxNode[] } | null { + const moduleName = slintImportModule(node, source); + if (!moduleName) return null; + const names = node.namedChildren + .filter((c) => c.type === 'export_type') + .map((c) => getChildByField(c, 'local_name') ?? c.namedChildren.find((n) => n.type === 'user_type_identifier')) + .filter((c): c is SyntaxNode => !!c); + return names.length > 0 ? { moduleName, names } : null; +} + export const slintExtractor: LanguageExtractor = { functionTypes: ['function_definition', 'function_declaration'], classTypes: ['global_definition'], @@ -71,6 +81,28 @@ export const slintExtractor: LanguageExtractor = { paramsField: 'arguments', returnField: 'return_type', visitNode: (node, ctx) => { + if (node.type === 'export_statement') { + const reExport = slintReExportInfo(node, ctx.source); + if (!reExport) return false; + + const importNode = ctx.createNode('import', reExport.moduleName, node, { + signature: getNodeText(node, ctx.source).trim(), + }); + const fromNodeId = ctx.nodeStack[ctx.nodeStack.length - 1] ?? importNode?.id; + if (!fromNodeId) return true; + + for (const nameNode of reExport.names) { + ctx.addUnresolvedReference({ + fromNodeId, + referenceName: getNodeText(nameNode, ctx.source), + referenceKind: 'imports', + line: nameNode.startPosition.row + 1, + column: nameNode.startPosition.column, + }); + } + return true; + } + if (node.type === 'component_definition') { const nameNode = getChildByField(node, 'name'); if (!nameNode) return false;