From 6168e71e19831196471fba5fcccb7b5e062ed305 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Wed, 15 Apr 2026 15:23:11 -0400 Subject: [PATCH] feat: add reference --- db/schema.sql | 80 ++++++++++++++++++++++++++------------------ extension/schema.sql | 80 ++++++++++++++++++++++++++------------------ flake.nix | 1 + indexer/indexer.go | 7 ++-- 4 files changed, 102 insertions(+), 66 deletions(-) diff --git a/db/schema.sql b/db/schema.sql index 0c1b9fe..58d203d 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -1,42 +1,58 @@ -CREATE TABLE files ( - id INTEGER PRIMARY KEY, - path TEXT NOT NULL UNIQUE, - language TEXT NOT NULL, - package TEXT, - hash TEXT NOT NULL, - indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP +CREATE TABLE IF NOT EXISTS files ( + id INTEGER PRIMARY KEY, + path TEXT NOT NULL UNIQUE, + LANGUAGE TEXT NOT NULL, + package TEXT, + hash TEXT NOT NULL, + indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -CREATE TABLE symbols ( - id INTEGER PRIMARY KEY, - file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE, - name TEXT NOT NULL, - kind TEXT NOT NULL CHECK(kind IN ( - 'function', 'method', 'class', 'type', - 'interface', 'constant', 'variable', 'constructor' - )), - line INTEGER NOT NULL, - line_end INTEGER, - col INTEGER, - col_end INTEGER, - exported BOOLEAN, - parent_id INTEGER REFERENCES symbols(id), - UNIQUE(file_id, name, kind, line) +CREATE TABLE IF NOT EXISTS symbols ( + id INTEGER PRIMARY KEY, + file_id INTEGER NOT NULL REFERENCES files (id) ON DELETE CASCADE, + name TEXT NOT NULL, + kind TEXT NOT NULL CHECK ( + kind IN ( + 'function', + 'method', + 'class', + 'type', + 'reference', + 'interface', + 'constant', + 'variable', + 'constructor' + ) + ), + line INTEGER NOT NULL, + line_end INTEGER, + col INTEGER, + col_end INTEGER, + exported BOOLEAN, + parent_id INTEGER REFERENCES symbols (id), + UNIQUE (file_id, name, kind, line) ); -CREATE INDEX idx_symbols_name ON symbols(name); -CREATE INDEX idx_symbols_kind ON symbols(kind); -CREATE INDEX idx_symbols_file_line ON symbols(file_id, line); -CREATE INDEX idx_symbols_parent ON symbols(parent_id); -CREATE INDEX idx_symbols_exported ON symbols(exported, kind); -CREATE INDEX idx_files_path ON files(path); -CREATE INDEX idx_files_language ON files(language); -CREATE INDEX idx_files_package ON files(package); +CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols (name); + +CREATE INDEX IF NOT EXISTS idx_symbols_kind ON symbols (kind); + +CREATE INDEX IF NOT EXISTS idx_symbols_file_line ON symbols (file_id, line); + +CREATE INDEX IF NOT EXISTS idx_symbols_parent ON symbols (parent_id); + +CREATE INDEX IF NOT EXISTS idx_symbols_exported ON symbols (exported, kind); + +CREATE INDEX IF NOT EXISTS idx_files_path ON files (path); + +CREATE INDEX IF NOT EXISTS idx_files_language ON files (LANGUAGE); + +CREATE INDEX IF NOT EXISTS idx_files_package ON files (package); -- FTS5 virtual table for full-text search of file contents. -- content is stored here (not external content), keyed by file_id. -CREATE VIRTUAL TABLE file_contents USING fts5( +CREATE VIRTUAL TABLE IF NOT EXISTS file_contents USING fts5 ( file_id UNINDEXED, content, - tokenize='porter unicode61' + tokenize = 'porter unicode61' ); diff --git a/extension/schema.sql b/extension/schema.sql index 0c1b9fe..58d203d 100644 --- a/extension/schema.sql +++ b/extension/schema.sql @@ -1,42 +1,58 @@ -CREATE TABLE files ( - id INTEGER PRIMARY KEY, - path TEXT NOT NULL UNIQUE, - language TEXT NOT NULL, - package TEXT, - hash TEXT NOT NULL, - indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP +CREATE TABLE IF NOT EXISTS files ( + id INTEGER PRIMARY KEY, + path TEXT NOT NULL UNIQUE, + LANGUAGE TEXT NOT NULL, + package TEXT, + hash TEXT NOT NULL, + indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -CREATE TABLE symbols ( - id INTEGER PRIMARY KEY, - file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE, - name TEXT NOT NULL, - kind TEXT NOT NULL CHECK(kind IN ( - 'function', 'method', 'class', 'type', - 'interface', 'constant', 'variable', 'constructor' - )), - line INTEGER NOT NULL, - line_end INTEGER, - col INTEGER, - col_end INTEGER, - exported BOOLEAN, - parent_id INTEGER REFERENCES symbols(id), - UNIQUE(file_id, name, kind, line) +CREATE TABLE IF NOT EXISTS symbols ( + id INTEGER PRIMARY KEY, + file_id INTEGER NOT NULL REFERENCES files (id) ON DELETE CASCADE, + name TEXT NOT NULL, + kind TEXT NOT NULL CHECK ( + kind IN ( + 'function', + 'method', + 'class', + 'type', + 'reference', + 'interface', + 'constant', + 'variable', + 'constructor' + ) + ), + line INTEGER NOT NULL, + line_end INTEGER, + col INTEGER, + col_end INTEGER, + exported BOOLEAN, + parent_id INTEGER REFERENCES symbols (id), + UNIQUE (file_id, name, kind, line) ); -CREATE INDEX idx_symbols_name ON symbols(name); -CREATE INDEX idx_symbols_kind ON symbols(kind); -CREATE INDEX idx_symbols_file_line ON symbols(file_id, line); -CREATE INDEX idx_symbols_parent ON symbols(parent_id); -CREATE INDEX idx_symbols_exported ON symbols(exported, kind); -CREATE INDEX idx_files_path ON files(path); -CREATE INDEX idx_files_language ON files(language); -CREATE INDEX idx_files_package ON files(package); +CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols (name); + +CREATE INDEX IF NOT EXISTS idx_symbols_kind ON symbols (kind); + +CREATE INDEX IF NOT EXISTS idx_symbols_file_line ON symbols (file_id, line); + +CREATE INDEX IF NOT EXISTS idx_symbols_parent ON symbols (parent_id); + +CREATE INDEX IF NOT EXISTS idx_symbols_exported ON symbols (exported, kind); + +CREATE INDEX IF NOT EXISTS idx_files_path ON files (path); + +CREATE INDEX IF NOT EXISTS idx_files_language ON files (LANGUAGE); + +CREATE INDEX IF NOT EXISTS idx_files_package ON files (package); -- FTS5 virtual table for full-text search of file contents. -- content is stored here (not external content), keyed by file_id. -CREATE VIRTUAL TABLE file_contents USING fts5( +CREATE VIRTUAL TABLE IF NOT EXISTS file_contents USING fts5 ( file_id UNINDEXED, content, - tokenize='porter unicode61' + tokenize = 'porter unicode61' ); diff --git a/flake.nix b/flake.nix index 85e8537..f15c221 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ devShells.default = pkgs.mkShell { packages = with pkgs; [ go + gopls gnumake ]; }; diff --git a/indexer/indexer.go b/indexer/indexer.go index 9fa4326..b1c11d9 100644 --- a/indexer/indexer.go +++ b/indexer/indexer.go @@ -15,7 +15,6 @@ import ( "codexis/db" ) - // ProgressFunc is called for each file being processed. // current is the 1-based index, total is the total file count, path is the file being processed. type ProgressFunc func(current, total int, path string) @@ -260,7 +259,7 @@ func buildSymbolDefs(tags []gotreesitter.Tag, fileID int64, langName string) []s for _, tag := range tags { kind := tagKind(tag.Kind) if kind == "" { - continue // skip references and unknown kinds + continue } exported := IsExported(tag.Name, langName) @@ -307,5 +306,9 @@ func tagKind(kind string) string { if strings.HasPrefix(kind, prefix) { return kind[len(prefix):] } + if kind == "reference.call" { + return "reference" + } + fmt.Println(kind) return "" }