From 1c1fddbd5146050d9f371a59a3cea89698e999d3 Mon Sep 17 00:00:00 2001 From: guiltylotus Date: Fri, 22 May 2026 11:49:50 +0700 Subject: [PATCH] feat: add Solidity language support Adds .sol indexing via tree-sitter-solidity (vendored WASM). Extracts contracts and libraries as classes, interfaces as interfaces, structs, enums, functions, modifiers, events, constructors, fallback/receive, state variables, constants, and imports with full signature capture. Co-Authored-By: Claude Sonnet 4.6 --- src/extraction/grammars.ts | 5 +- src/extraction/languages/index.ts | 2 + src/extraction/languages/solidity.ts | 136 ++++++++++++++++++ src/extraction/wasm/tree-sitter-solidity.wasm | Bin 0 -> 508582 bytes src/types.ts | 1 + 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/extraction/languages/solidity.ts create mode 100644 src/extraction/wasm/tree-sitter-solidity.wasm diff --git a/src/extraction/grammars.ts b/src/extraction/grammars.ts index c78c52ce..4c407ef3 100644 --- a/src/extraction/grammars.ts +++ b/src/extraction/grammars.ts @@ -37,6 +37,7 @@ const WASM_GRAMMAR_FILES: Record = { scala: 'tree-sitter-scala.wasm', lua: 'tree-sitter-lua.wasm', luau: 'tree-sitter-luau.wasm', + solidity: 'tree-sitter-solidity.wasm', }; /** @@ -92,6 +93,7 @@ export const EXTENSION_MAP: Record = { '.sc': 'scala', '.lua': 'lua', '.luau': 'luau', + '.sol': 'solidity', }; /** @@ -155,7 +157,7 @@ export async function loadGrammarsForLanguages(languages: Language[]): Promise> = { typescript: typescriptExtractor, @@ -47,4 +48,5 @@ export const EXTRACTORS: Partial> = { scala: scalaExtractor, lua: luaExtractor, luau: luauExtractor, + solidity: solidityExtractor, }; diff --git a/src/extraction/languages/solidity.ts b/src/extraction/languages/solidity.ts new file mode 100644 index 00000000..a3c308bb --- /dev/null +++ b/src/extraction/languages/solidity.ts @@ -0,0 +1,136 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import { getNodeText, getChildByField } from '../tree-sitter-helpers'; +import type { LanguageExtractor, VariableInfo } from '../tree-sitter-types'; + +/** Collect direct `parameter` children as a formatted string. */ +function paramList(node: SyntaxNode, source: string): string { + const parts: string[] = []; + for (let i = 0; i < node.childCount; i++) { + const child = node.child(i); + if (child?.type === 'parameter') parts.push(getNodeText(child, source)); + } + return '(' + parts.join(', ') + ')'; +} + +/** Find the text of a direct `visibility` child node, if present. */ +function visibilityText(node: SyntaxNode): string | undefined { + for (let i = 0; i < node.childCount; i++) { + const child = node.child(i); + if (child?.type === 'visibility') return child.text; + } + return undefined; +} + +export const solidityExtractor: LanguageExtractor = { + // contract_declaration / library_declaration are "classes" in the graph + functionTypes: ['function_definition', 'event_definition'], + classTypes: ['contract_declaration', 'library_declaration'], + methodTypes: [ + 'function_definition', + 'modifier_definition', + 'event_definition', + // constructor and fallback/receive are handled via visitNode (no name field) + ], + interfaceTypes: ['interface_declaration'], + structTypes: ['struct_declaration'], + enumTypes: ['enum_declaration'], + enumMemberTypes: ['enum_value'], + typeAliasTypes: ['type_alias', 'user_defined_type_definition'], + importTypes: ['import_directive'], + callTypes: ['call_expression'], + variableTypes: ['state_variable_declaration', 'constant_variable_declaration'], + + nameField: 'name', + bodyField: 'body', + paramsField: 'parameters', // not a real field in Solidity; overridden by getSignature + returnField: 'return_type', + + getSignature: (node, source) => { + if (node.type === 'function_definition' || node.type === 'modifier_definition') { + let sig = paramList(node, source); + const vis = visibilityText(node); + if (vis) sig += ' ' + vis; + const returnType = getChildByField(node, 'return_type'); + if (returnType) sig += ' returns ' + getNodeText(returnType, source); + return sig; + } + if (node.type === 'event_definition') { + return paramList(node, source); + } + return undefined; + }, + + getVisibility: (node) => { + const vis = visibilityText(node); + if (!vis) return undefined; + if (vis === 'public') return 'public'; + if (vis === 'private') return 'private'; + if (vis === 'internal') return 'internal'; + if (vis === 'external') return 'public'; // external is callable from outside + return undefined; + }, + + extractImport: (node, source) => { + const sourceNode = getChildByField(node, 'source'); + if (!sourceNode) return null; + const raw = getNodeText(sourceNode, source); + const moduleName = raw.replace(/^['"]|['"]$/g, ''); + return { + moduleName, + signature: getNodeText(node, source), + }; + }, + + extractVariables: (node, source) => { + const nameNode = getChildByField(node, 'name'); + if (!nameNode) return []; + const name = getNodeText(nameNode, source); + const isConstant = node.type === 'constant_variable_declaration'; + let signature: string | undefined; + const typeNode = getChildByField(node, 'type'); + if (typeNode) signature = getNodeText(typeNode, source) + ' ' + name; + return [{ name, kind: isConstant ? 'constant' : 'variable', signature } satisfies VariableInfo]; + }, + + isConst: (node) => node.type === 'constant_variable_declaration', + + // Handle constructor and fallback/receive — neither has a `name` field in the AST. + visitNode: (node, ctx) => { + if (node.type === 'constructor_definition') { + const sig = paramList(node, ctx.source); + const created = ctx.createNode('function', 'constructor', node, { signature: sig }); + if (created) { + const body = getChildByField(node, 'body'); + if (body) { + ctx.pushScope(created.id); + ctx.visitFunctionBody(body, created.id); + ctx.popScope(); + } + } + return true; + } + + if (node.type === 'fallback_receive_definition') { + // Determine if it's a fallback or receive from the first keyword child + let fnName = 'fallback'; + for (let i = 0; i < node.childCount; i++) { + const child = node.child(i); + if (child?.text === 'receive') { fnName = 'receive'; break; } + if (child?.text === 'fallback') { fnName = 'fallback'; break; } + } + const sig = paramList(node, ctx.source); + const created = ctx.createNode('function', fnName, node, { signature: sig }); + if (created) { + const body = getChildByField(node, 'body'); + if (body) { + ctx.pushScope(created.id); + ctx.visitFunctionBody(body, created.id); + ctx.popScope(); + } + } + return true; + } + + return false; // let default dispatch handle everything else + }, +}; diff --git a/src/extraction/wasm/tree-sitter-solidity.wasm b/src/extraction/wasm/tree-sitter-solidity.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d1f3c5b26f06a831784bf7c9988d86edea997915 GIT binary patch literal 508582 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

O{ycsW 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 literal 0 HcmV?d00001 diff --git a/src/types.ts b/src/types.ts index 0168665d..386bb19f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -87,6 +87,7 @@ export const LANGUAGES = [ 'scala', 'lua', 'luau', + 'solidity', 'yaml', 'twig', 'unknown',