codesearch-mcp 0.3.0-alpha → 0.4.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -6
- package/LICENSE +661 -21
- package/README.md +33 -17
- package/dist/app.js +13 -20
- package/dist/src/ast/CallExtractor.d.ts +8 -0
- package/dist/src/ast/CallExtractor.js +68 -0
- package/dist/src/ast/GraphqlNameExtractor.d.ts +22 -0
- package/dist/src/ast/GraphqlNameExtractor.js +240 -0
- package/dist/src/ast/ImportEdgeExtractor.d.ts +11 -0
- package/dist/src/ast/ImportEdgeExtractor.js +129 -0
- package/dist/src/ast/IndexedNodeResolver.d.ts +14 -0
- package/dist/src/ast/IndexedNodeResolver.js +217 -0
- package/dist/src/ast/MemberExtractor.d.ts +8 -0
- package/dist/src/ast/MemberExtractor.js +129 -0
- package/dist/src/ast/TopLevelSymbolExtractor.d.ts +5 -0
- package/dist/src/ast/TopLevelSymbolExtractor.js +86 -0
- package/dist/src/ast/graphql-grammar.d.ts +24 -0
- package/dist/src/ast/graphql-grammar.js +93 -0
- package/dist/src/ast/node-helpers.d.ts +11 -0
- package/dist/src/ast/node-helpers.js +55 -0
- package/dist/src/commands/EvalCommand.d.ts +7 -3
- package/dist/src/commands/EvalCommand.js +36 -158
- package/dist/src/commands/IndexCommand.d.ts +10 -4
- package/dist/src/commands/IndexCommand.js +52 -124
- package/dist/src/commands/McpCommand.d.ts +6 -3
- package/dist/src/commands/McpCommand.js +19 -14
- package/dist/src/commands/WebCommand.d.ts +9 -3
- package/dist/src/commands/WebCommand.js +17 -8
- package/dist/src/commands/eval/baseline-comparison.d.ts +6 -0
- package/dist/src/commands/eval/baseline-comparison.js +54 -0
- package/dist/src/commands/eval/eval-args.d.ts +6 -0
- package/dist/src/commands/eval/eval-args.js +71 -0
- package/dist/src/commands/eval/eval-corpora.d.ts +6 -0
- package/dist/src/commands/eval/eval-corpora.js +76 -0
- package/dist/src/commands/eval/eval-metadata.d.ts +17 -0
- package/dist/src/commands/eval/eval-metadata.js +75 -0
- package/dist/src/commands/eval/index-inspector.d.ts +3 -0
- package/dist/src/commands/eval/index-inspector.js +21 -0
- package/dist/src/commands/eval/staged-search.d.ts +3 -0
- package/dist/src/commands/eval/staged-search.js +20 -0
- package/dist/src/commands/eval/suite-loader.d.ts +8 -0
- package/dist/src/commands/eval/suite-loader.js +52 -0
- package/dist/src/commands/index/backend-probe.d.ts +2 -0
- package/dist/src/commands/index/backend-probe.js +15 -0
- package/dist/src/commands/index/embedding-setup.d.ts +3 -0
- package/dist/src/commands/index/embedding-setup.js +16 -0
- package/dist/src/commands/index/index-summary.d.ts +2 -0
- package/dist/src/commands/index/index-summary.js +22 -0
- package/dist/src/commands/index/legacy-ollama-guard.d.ts +3 -0
- package/dist/src/commands/index/legacy-ollama-guard.js +23 -0
- package/dist/src/commands/index/prune-step.d.ts +3 -0
- package/dist/src/commands/index/prune-step.js +22 -0
- package/dist/src/commands/index/scan-targets.d.ts +8 -0
- package/dist/src/commands/index/scan-targets.js +107 -0
- package/dist/src/config-store.d.ts +0 -1
- package/dist/src/config-store.js +3 -4
- package/dist/src/config.d.ts +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/constants.d.ts +15 -0
- package/dist/src/constants.js +34 -6
- package/dist/src/container.d.ts +4 -2
- package/dist/src/container.js +7 -5
- package/dist/src/db/drizzle-types.d.ts +7 -0
- package/dist/src/db/index.d.ts +1 -0
- package/dist/src/db/schema-steps.d.ts +8 -0
- package/dist/src/db/schema-steps.js +105 -0
- package/dist/src/declarations/DeclarationTree.d.ts +1 -1
- package/dist/src/eval-results.js +16 -2
- package/dist/src/eval-vector-index.d.ts +5 -0
- package/dist/src/eval-vector-index.js +60 -0
- package/dist/src/help.js +9 -1
- package/dist/src/index-args.d.ts +13 -0
- package/dist/src/index-args.js +48 -0
- package/dist/src/indexing/AnalysisBatcher.d.ts +12 -0
- package/dist/src/indexing/AnalysisBatcher.js +28 -0
- package/dist/src/indexing/ChunkEmbedder.d.ts +24 -0
- package/dist/src/indexing/ChunkEmbedder.js +37 -0
- package/dist/src/indexing/ConsoleScanReporter.d.ts +10 -0
- package/dist/src/indexing/ConsoleScanReporter.js +73 -0
- package/dist/src/indexing/EmbeddingSchemaPreparer.d.ts +14 -0
- package/dist/src/indexing/EmbeddingSchemaPreparer.js +66 -0
- package/dist/src/indexing/FileIngestor.d.ts +22 -0
- package/dist/src/indexing/FileIngestor.js +116 -0
- package/dist/src/indexing/IndexStore.d.ts +24 -0
- package/dist/src/indexing/IndexStore.js +69 -0
- package/dist/src/indexing/StaleFilePruner.d.ts +8 -0
- package/dist/src/indexing/StaleFilePruner.js +55 -0
- package/dist/src/indexing/analysis-rows.d.ts +4 -0
- package/dist/src/indexing/analysis-rows.js +65 -0
- package/dist/src/indexing/project-notices.d.ts +2 -0
- package/dist/src/indexing/project-notices.js +63 -0
- package/dist/src/interfaces/IAstParser.d.ts +2 -1
- package/dist/src/interfaces/ICallGraph.d.ts +28 -0
- package/dist/src/interfaces/ICallGraph.js +2 -0
- package/dist/src/interfaces/IChunkSearch.d.ts +42 -0
- package/dist/src/interfaces/IChunkSearch.js +2 -0
- package/dist/src/interfaces/IDatabase.d.ts +6 -2
- package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
- package/dist/src/interfaces/IDependencyGraph.js +2 -0
- package/dist/src/interfaces/IIndexIdentityGuard.d.ts +3 -0
- package/dist/src/interfaces/IIndexIdentityGuard.js +2 -0
- package/dist/src/interfaces/IIndexedNodeResolver.d.ts +10 -0
- package/dist/src/interfaces/IIndexedNodeResolver.js +2 -0
- package/dist/src/interfaces/IMcpReadiness.d.ts +12 -0
- package/dist/src/interfaces/IMcpReadiness.js +2 -0
- package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
- package/dist/src/interfaces/IProjectCatalog.js +2 -0
- package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
- package/dist/src/interfaces/IProjectRoots.js +2 -0
- package/dist/src/interfaces/IRetrievalEvaluator.d.ts +21 -2
- package/dist/src/interfaces/IScanReporter.d.ts +13 -0
- package/dist/src/interfaces/IScanReporter.js +2 -0
- package/dist/src/interfaces/ISymbolLookup.d.ts +49 -0
- package/dist/src/interfaces/ISymbolLookup.js +2 -0
- package/dist/src/interfaces/IToolPaths.d.ts +62 -0
- package/dist/src/interfaces/IToolPaths.js +2 -0
- package/dist/src/interfaces/IWorkspaceFiles.d.ts +28 -0
- package/dist/src/interfaces/IWorkspaceFiles.js +2 -0
- package/dist/src/interfaces/SymbolKind.d.ts +1 -0
- package/dist/src/interfaces/SymbolKind.js +2 -0
- package/dist/src/interfaces/index.d.ts +12 -1
- package/dist/src/project-scope.d.ts +1 -0
- package/dist/src/project-scope.js +5 -0
- package/dist/src/retrieval-eval.d.ts +2 -1
- package/dist/src/retrieval-eval.js +45 -2
- package/dist/src/search/CallGraph.d.ts +9 -0
- package/dist/src/search/CallGraph.js +84 -0
- package/dist/src/search/ChunkSearch.d.ts +23 -0
- package/dist/src/search/ChunkSearch.js +115 -0
- package/dist/src/search/DependencyGraph.d.ts +19 -0
- package/dist/src/search/DependencyGraph.js +180 -0
- package/dist/src/search/IndexIdentityGuard.d.ts +11 -0
- package/dist/src/search/IndexIdentityGuard.js +37 -0
- package/dist/src/search/ProjectCatalog.d.ts +11 -0
- package/dist/src/search/ProjectCatalog.js +38 -0
- package/dist/src/search/SymbolLookup.d.ts +24 -0
- package/dist/src/search/SymbolLookup.js +97 -0
- package/dist/src/search/chunks/CandidateFetcher.d.ts +19 -0
- package/dist/src/search/chunks/CandidateFetcher.js +40 -0
- package/dist/src/search/chunks/IterativeScanGate.d.ts +10 -0
- package/dist/src/search/chunks/IterativeScanGate.js +42 -0
- package/dist/src/search/chunks/RerankStage.d.ts +15 -0
- package/dist/src/search/chunks/RerankStage.js +42 -0
- package/dist/src/search/chunks/search-metrics.d.ts +18 -0
- package/dist/src/search/chunks/search-metrics.js +32 -0
- package/dist/src/search/chunks/search-plan.d.ts +18 -0
- package/dist/src/search/chunks/search-plan.js +19 -0
- package/dist/src/search/create-search-services.d.ts +26 -0
- package/dist/src/search/create-search-services.js +29 -0
- package/dist/src/search/index-paths.d.ts +1 -0
- package/dist/src/search/index-paths.js +5 -0
- package/dist/src/search/symbol-sql.d.ts +13 -0
- package/dist/src/search/symbol-sql.js +66 -0
- package/dist/src/search/symbols/SymbolGrepFallback.d.ts +19 -0
- package/dist/src/search/symbols/SymbolGrepFallback.js +106 -0
- package/dist/src/search/symbols/SymbolIndexQuery.d.ts +14 -0
- package/dist/src/search/symbols/SymbolIndexQuery.js +52 -0
- package/dist/src/search/symbols/SymbolTextSearch.d.ts +13 -0
- package/dist/src/search/symbols/SymbolTextSearch.js +84 -0
- package/dist/src/search/symbols/TargetColumnGate.d.ts +7 -0
- package/dist/src/search/symbols/TargetColumnGate.js +23 -0
- package/dist/src/search/symbols/find-symbol-constants.d.ts +4 -0
- package/dist/src/search/symbols/find-symbol-constants.js +8 -0
- package/dist/src/search/symbols/grep-args.d.ts +3 -0
- package/dist/src/search/symbols/grep-args.js +7 -0
- package/dist/src/search/symbols/grep-patterns.d.ts +4 -0
- package/dist/src/search/symbols/grep-patterns.js +60 -0
- package/dist/src/services/AstParserService.d.ts +8 -44
- package/dist/src/services/AstParserService.js +19 -938
- package/dist/src/services/DatabaseService.d.ts +8 -10
- package/dist/src/services/DatabaseService.js +29 -86
- package/dist/src/services/IndexerService.d.ts +7 -10
- package/dist/src/services/IndexerService.js +36 -255
- package/dist/src/services/McpReadiness.d.ts +18 -0
- package/dist/src/services/McpReadiness.js +73 -0
- package/dist/src/services/McpServer.d.ts +32 -9
- package/dist/src/services/McpServer.js +78 -41
- package/dist/src/services/WebServerService.d.ts +4 -3
- package/dist/src/services/WebServerService.js +16 -8
- package/dist/src/setup.d.ts +16 -4
- package/dist/src/setup.js +115 -40
- package/dist/src/symbol-name.d.ts +1 -0
- package/dist/src/symbol-name.js +16 -12
- package/dist/src/tools/FindSymbolTool.d.ts +17 -7
- package/dist/src/tools/FindSymbolTool.js +54 -35
- package/dist/src/tools/GetCallersTool.d.ts +16 -8
- package/dist/src/tools/GetCallersTool.js +65 -35
- package/dist/src/tools/GetDependenciesTool.d.ts +16 -8
- package/dist/src/tools/GetDependenciesTool.js +35 -28
- package/dist/src/tools/GetDependentsTool.d.ts +20 -8
- package/dist/src/tools/GetDependentsTool.js +47 -33
- package/dist/src/tools/ListFilesTool.d.ts +16 -8
- package/dist/src/tools/ListFilesTool.js +20 -26
- package/dist/src/tools/ListProjectsTool.d.ts +11 -7
- package/dist/src/tools/ListProjectsTool.js +13 -11
- package/dist/src/tools/McpTool.d.ts +17 -0
- package/dist/src/tools/McpTool.js +28 -0
- package/dist/src/tools/ReadFileRangeTool.d.ts +16 -8
- package/dist/src/tools/ReadFileRangeTool.js +23 -25
- package/dist/src/tools/ReadFileTool.d.ts +15 -8
- package/dist/src/tools/ReadFileTool.js +19 -24
- package/dist/src/tools/SearchCodebaseTool.d.ts +22 -10
- package/dist/src/tools/SearchCodebaseTool.js +69 -51
- package/dist/src/tools/format-helpers.d.ts +9 -3
- package/dist/src/tools/format-helpers.js +59 -14
- package/dist/src/tools/tool-args.d.ts +38 -0
- package/dist/src/tools/tool-args.js +95 -0
- package/dist/src/workspace/GrepRunner.d.ts +15 -0
- package/dist/src/workspace/GrepRunner.js +104 -0
- package/dist/src/workspace/ProjectRoots.d.ts +22 -0
- package/dist/src/workspace/ProjectRoots.js +102 -0
- package/dist/src/workspace/ToolPaths.d.ts +31 -0
- package/dist/src/workspace/ToolPaths.js +312 -0
- package/dist/src/workspace/WorkspaceFiles.d.ts +19 -0
- package/dist/src/workspace/WorkspaceFiles.js +285 -0
- package/dist/src/workspace/fs-access.d.ts +9 -0
- package/dist/src/workspace/fs-access.js +47 -0
- package/dist/src/workspace/path-helpers.d.ts +3 -0
- package/dist/src/workspace/path-helpers.js +43 -0
- package/package.json +4 -3
- package/dist/src/interfaces/ISearcher.d.ts +0 -46
- package/dist/src/services/SearcherService.d.ts +0 -235
- package/dist/src/services/SearcherService.js +0 -1118
- /package/dist/src/{interfaces/ISearcher.js → db/drizzle-types.js} +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IDatabase } from '../../interfaces';
|
|
2
|
+
import type { SymbolHit, SymbolKind } from '../../interfaces/ISymbolLookup';
|
|
3
|
+
import type { FindSymbolQuery } from '../../symbol-name';
|
|
4
|
+
import type { TargetColumnGate } from './TargetColumnGate';
|
|
5
|
+
export interface IndexedSymbols {
|
|
6
|
+
hits: SymbolHit[];
|
|
7
|
+
truncated: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class SymbolIndexQuery {
|
|
10
|
+
private db;
|
|
11
|
+
private gate;
|
|
12
|
+
constructor(db: IDatabase, gate: TargetColumnGate);
|
|
13
|
+
query(parsed: FindSymbolQuery, project: string | null, kind: SymbolKind): Promise<IndexedSymbols>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SymbolIndexQuery = void 0;
|
|
4
|
+
const symbol_sql_1 = require("../symbol-sql");
|
|
5
|
+
const find_symbol_constants_1 = require("./find-symbol-constants");
|
|
6
|
+
class SymbolIndexQuery {
|
|
7
|
+
db;
|
|
8
|
+
gate;
|
|
9
|
+
constructor(db, gate) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.gate = gate;
|
|
12
|
+
}
|
|
13
|
+
async query(parsed, project, kind) {
|
|
14
|
+
const container = 'container' in parsed ? parsed.container : null;
|
|
15
|
+
const hasTarget = await this.gate.present();
|
|
16
|
+
const params = [];
|
|
17
|
+
const { filter: nameFilter, exactRank } = (0, symbol_sql_1.symbolMatch)(parsed.name, container, params);
|
|
18
|
+
const orderPrefix = exactRank ? `${exactRank}, ` : '';
|
|
19
|
+
let projectFilter = '';
|
|
20
|
+
if (project) {
|
|
21
|
+
params.push(project);
|
|
22
|
+
projectFilter = `AND project = $${params.length}`;
|
|
23
|
+
}
|
|
24
|
+
let kindFilter = '';
|
|
25
|
+
if (kind !== 'all') {
|
|
26
|
+
params.push(kind);
|
|
27
|
+
kindFilter = `AND kind = $${params.length}`;
|
|
28
|
+
}
|
|
29
|
+
params.push(find_symbol_constants_1.FIND_SYMBOL_LIMIT + 1);
|
|
30
|
+
const targetSelect = hasTarget ? '"target"' : 'NULL AS target';
|
|
31
|
+
const rows = await this.db.query(`SELECT "filePath", name, kind, signature, line, col, container, "isStatic", ${targetSelect}
|
|
32
|
+
FROM code_symbol
|
|
33
|
+
WHERE ${nameFilter} ${projectFilter} ${kindFilter}
|
|
34
|
+
ORDER BY ${orderPrefix}project, "filePath", line, col, kind COLLATE "C", container COLLATE "C" NULLS FIRST
|
|
35
|
+
LIMIT $${params.length}`, params);
|
|
36
|
+
return {
|
|
37
|
+
truncated: rows.length > find_symbol_constants_1.FIND_SYMBOL_LIMIT,
|
|
38
|
+
hits: rows.slice(0, find_symbol_constants_1.FIND_SYMBOL_LIMIT).map(row => ({
|
|
39
|
+
filePath: row.filePath,
|
|
40
|
+
line: row.line ?? 1,
|
|
41
|
+
column: row.col ?? 1,
|
|
42
|
+
kind: row.kind,
|
|
43
|
+
signature: row.signature ?? row.name,
|
|
44
|
+
qualified: row.container ? `${row.container}.${row.name}` : row.name,
|
|
45
|
+
isStatic: !!row.isStatic,
|
|
46
|
+
source: 'index',
|
|
47
|
+
target: row.target ?? null,
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.SymbolIndexQuery = SymbolIndexQuery;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Config } from '../../config';
|
|
2
|
+
import type { ILogger } from '../../interfaces';
|
|
3
|
+
import type { GrepSymbolResult } from '../../interfaces/ISymbolLookup';
|
|
4
|
+
import type { GrepRunner } from '../../workspace/GrepRunner';
|
|
5
|
+
import type { ProjectRoots } from '../../workspace/ProjectRoots';
|
|
6
|
+
export declare class SymbolTextSearch {
|
|
7
|
+
private grep;
|
|
8
|
+
private roots;
|
|
9
|
+
private config;
|
|
10
|
+
private logger;
|
|
11
|
+
constructor(grep: GrepRunner, roots: ProjectRoots, config: Config, logger: ILogger);
|
|
12
|
+
search(symbol: string, rootDir: string, excludeFile: string): Promise<GrepSymbolResult>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SymbolTextSearch = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const grep_args_1 = require("./grep-args");
|
|
39
|
+
const GREP_MAX_RESULTS = 200;
|
|
40
|
+
const GREP_RAW_LIMIT = GREP_MAX_RESULTS * 5;
|
|
41
|
+
class SymbolTextSearch {
|
|
42
|
+
grep;
|
|
43
|
+
roots;
|
|
44
|
+
config;
|
|
45
|
+
logger;
|
|
46
|
+
constructor(grep, roots, config, logger) {
|
|
47
|
+
this.grep = grep;
|
|
48
|
+
this.roots = roots;
|
|
49
|
+
this.config = config;
|
|
50
|
+
this.logger = logger;
|
|
51
|
+
}
|
|
52
|
+
async search(symbol, rootDir, excludeFile) {
|
|
53
|
+
const t0 = Date.now();
|
|
54
|
+
this.logger.debug('SymbolTextSearch: grepSymbol', { symbol, rootDir, excludeFile });
|
|
55
|
+
if (symbol.includes('\n'))
|
|
56
|
+
return { ok: true, matches: [], truncated: false, partial: false };
|
|
57
|
+
const result = await this.grep.run([
|
|
58
|
+
'-rn', '-F', '-w',
|
|
59
|
+
grep_args_1.GREP_BINARY_AS_TEXT,
|
|
60
|
+
'-m', String(GREP_RAW_LIMIT),
|
|
61
|
+
...grep_args_1.SOURCE_INCLUDES,
|
|
62
|
+
...grep_args_1.GREP_EXCLUDE_DIRS,
|
|
63
|
+
'--',
|
|
64
|
+
symbol,
|
|
65
|
+
this.roots.toAbs(rootDir),
|
|
66
|
+
]);
|
|
67
|
+
const excludeAbsPath = path.join(this.config.workspaceRoot, excludeFile);
|
|
68
|
+
const all = (result.output ?? '').split('\n').flatMap(line => {
|
|
69
|
+
const match = line.match(/^(.+?):(\d+):/);
|
|
70
|
+
if (!match)
|
|
71
|
+
return [];
|
|
72
|
+
const [, absFile, lineNum] = match;
|
|
73
|
+
if (absFile === excludeAbsPath)
|
|
74
|
+
return [];
|
|
75
|
+
return [{ filePath: path.relative(this.config.workspaceRoot, absFile), line: parseInt(lineNum, 10) }];
|
|
76
|
+
});
|
|
77
|
+
if (!result.ok && all.length === 0)
|
|
78
|
+
return { ok: false };
|
|
79
|
+
const truncated = all.length > GREP_MAX_RESULTS;
|
|
80
|
+
this.logger.debug('SymbolTextSearch: grepSymbol result', { matches: Math.min(all.length, GREP_MAX_RESULTS), truncated, partial: !result.ok, ms: Date.now() - t0 });
|
|
81
|
+
return { ok: true, matches: all.slice(0, GREP_MAX_RESULTS), truncated, partial: !result.ok };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.SymbolTextSearch = SymbolTextSearch;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TargetColumnGate = void 0;
|
|
4
|
+
class TargetColumnGate {
|
|
5
|
+
db;
|
|
6
|
+
targetColumnPresent = false;
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
}
|
|
10
|
+
async present() {
|
|
11
|
+
if (this.targetColumnPresent)
|
|
12
|
+
return true;
|
|
13
|
+
const rows = await this.db.query(`SELECT EXISTS (
|
|
14
|
+
SELECT 1 FROM information_schema.columns
|
|
15
|
+
WHERE table_schema = 'public' AND table_name = 'code_symbol' AND column_name = 'target'
|
|
16
|
+
) AS present`);
|
|
17
|
+
const present = !!rows[0]?.present;
|
|
18
|
+
if (present)
|
|
19
|
+
this.targetColumnPresent = true;
|
|
20
|
+
return present;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TargetColumnGate = TargetColumnGate;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COMPLETE = exports.FIND_SYMBOL_LIMIT = exports.GRAPHQL_KINDS = void 0;
|
|
4
|
+
exports.GRAPHQL_KINDS = new Set([
|
|
5
|
+
'graphql_query', 'graphql_mutation', 'graphql_subscription', 'graphql_field', 'graphql_type',
|
|
6
|
+
]);
|
|
7
|
+
exports.FIND_SYMBOL_LIMIT = 50;
|
|
8
|
+
exports.COMPLETE = { outcome: 'complete' };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GREP_BINARY_AS_TEXT = exports.GREP_EXCLUDE_DIRS = exports.SOURCE_INCLUDES = void 0;
|
|
4
|
+
const file_utils_1 = require("../../file-utils");
|
|
5
|
+
exports.SOURCE_INCLUDES = ['--include=*.ts', '--include=*.tsx', '--include=*.js', '--include=*.jsx'];
|
|
6
|
+
exports.GREP_EXCLUDE_DIRS = [...file_utils_1.IGNORE_DIRS].map(d => `--exclude-dir=${d}`);
|
|
7
|
+
exports.GREP_BINARY_AS_TEXT = '--binary-files=text';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SymbolKind } from '../../interfaces/ISymbolLookup';
|
|
2
|
+
export declare function buildFindSymbolPattern(name: string, kind: SymbolKind): string | null;
|
|
3
|
+
export declare function wholeWordIndex(line: string, name: string): number;
|
|
4
|
+
export declare function inferKind(line: string, name: string): Exclude<SymbolKind, 'all'>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildFindSymbolPattern = buildFindSymbolPattern;
|
|
4
|
+
exports.wholeWordIndex = wholeWordIndex;
|
|
5
|
+
exports.inferKind = inferKind;
|
|
6
|
+
const find_symbol_constants_1 = require("./find-symbol-constants");
|
|
7
|
+
const MODIFIERS = ['public', 'private', 'protected', 'static', 'abstract', 'async', 'override'];
|
|
8
|
+
function buildFindSymbolPattern(name, kind) {
|
|
9
|
+
if (kind === 'function_property' || kind === 'method_signature')
|
|
10
|
+
return null;
|
|
11
|
+
if (find_symbol_constants_1.GRAPHQL_KINDS.has(kind))
|
|
12
|
+
return null;
|
|
13
|
+
if (kind === 'constructor')
|
|
14
|
+
return name === 'constructor' ? `(^|[[:space:]])constructor[[:space:]]*\\(` : null;
|
|
15
|
+
const esc = name.replace(/\$/g, '\\$');
|
|
16
|
+
const MODIFIER = `(${MODIFIERS.join('|')})`;
|
|
17
|
+
const BOUNDARY = '(^|[^[:alnum:]_$])';
|
|
18
|
+
const patterns = {
|
|
19
|
+
function: `(export[[:space:]]+)?(async[[:space:]]+)?function[[:space:]]+${esc}[[:space:](<]`,
|
|
20
|
+
class: `(export[[:space:]]+)?(abstract[[:space:]]+)?class[[:space:]]+${esc}[[:space:]{<]`,
|
|
21
|
+
type: `(export[[:space:]]+)?type[[:space:]]+${esc}[[:space:]=<]`,
|
|
22
|
+
interface: `(export[[:space:]]+)?interface[[:space:]]+${esc}[[:space:]{<]`,
|
|
23
|
+
variable: `(export[[:space:]]+)?(const|let|var)[[:space:]]+${esc}[[:space:]=:]`,
|
|
24
|
+
method: `${BOUNDARY}(${MODIFIER}[[:space:]]+)+\\*?[[:space:]]*${esc}[[:space:]]*[(<]`,
|
|
25
|
+
get_accessor: `(^|[[:space:]])get[[:space:]]+${esc}[[:space:]]*\\(`,
|
|
26
|
+
set_accessor: `(^|[[:space:]])set[[:space:]]+${esc}[[:space:]]*\\(`,
|
|
27
|
+
};
|
|
28
|
+
if (kind === 'all')
|
|
29
|
+
return Object.values(patterns).join('|');
|
|
30
|
+
return patterns[kind];
|
|
31
|
+
}
|
|
32
|
+
function wholeWordIndex(line, name) {
|
|
33
|
+
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
34
|
+
const re = new RegExp(`(?<![\\w$#])${escaped}(?![\\w$#])`);
|
|
35
|
+
const m = re.exec(line);
|
|
36
|
+
return m ? m.index : -1;
|
|
37
|
+
}
|
|
38
|
+
function inferKind(line, name) {
|
|
39
|
+
if (name === 'constructor')
|
|
40
|
+
return 'constructor';
|
|
41
|
+
const idx = wholeWordIndex(line, name);
|
|
42
|
+
const before = idx === -1 ? line : line.slice(0, idx);
|
|
43
|
+
const tokens = before.trim().split(/\s+/).filter(Boolean);
|
|
44
|
+
const last = (tokens[tokens.length - 1] ?? '').replace(/\*$/, '');
|
|
45
|
+
if (last === 'get')
|
|
46
|
+
return 'get_accessor';
|
|
47
|
+
if (last === 'set')
|
|
48
|
+
return 'set_accessor';
|
|
49
|
+
if (last === 'function')
|
|
50
|
+
return 'function';
|
|
51
|
+
if (last === 'class')
|
|
52
|
+
return 'class';
|
|
53
|
+
if (last === 'interface')
|
|
54
|
+
return 'interface';
|
|
55
|
+
if (last === 'type')
|
|
56
|
+
return 'type';
|
|
57
|
+
if (MODIFIERS.includes(last))
|
|
58
|
+
return 'method';
|
|
59
|
+
return 'variable';
|
|
60
|
+
}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { Node } from 'ts-morph';
|
|
2
1
|
import type { IAstParser, DepEdge, FileAnalysis, AnalyzeProjectOpts } from '../interfaces/IAstParser';
|
|
3
2
|
import type { ILogger } from '../interfaces';
|
|
3
|
+
import type { ResolveDeclaration } from '../ast/node-helpers';
|
|
4
4
|
export interface AstParserDeps {
|
|
5
|
-
resolveDeclaration
|
|
5
|
+
resolveDeclaration?: ResolveDeclaration;
|
|
6
6
|
}
|
|
7
7
|
export declare class AstParserService implements IAstParser {
|
|
8
8
|
private logger;
|
|
9
|
-
private deps;
|
|
10
9
|
private morphProjects;
|
|
11
10
|
private readonly declarationBuilder;
|
|
11
|
+
private readonly resolver;
|
|
12
|
+
private readonly edges;
|
|
13
|
+
private readonly topLevel;
|
|
14
|
+
private readonly members;
|
|
15
|
+
private readonly calls;
|
|
16
|
+
private readonly graphql;
|
|
12
17
|
constructor(logger?: ILogger, deps?: AstParserDeps);
|
|
13
18
|
analyzeProject(filePaths: string[], serviceName: string, projectRoot?: string, opts?: AnalyzeProjectOpts): Promise<Map<string, FileAnalysis>>;
|
|
14
19
|
clearCache(projectRoot?: string): void;
|
|
@@ -17,46 +22,5 @@ export declare class AstParserService implements IAstParser {
|
|
|
17
22
|
private analyzeSourceFile;
|
|
18
23
|
private createMorphProject;
|
|
19
24
|
private getMorphProject;
|
|
20
|
-
private extractEdges;
|
|
21
|
-
private resolveSideEffectModuleSpecifier;
|
|
22
|
-
private resolveFromSymbol;
|
|
23
|
-
private buildUsageMap;
|
|
24
|
-
private getPos;
|
|
25
|
-
private lineTextAt;
|
|
26
|
-
private extractSymbols;
|
|
27
|
-
private extractMembers;
|
|
28
25
|
private buildDeclarations;
|
|
29
|
-
private buildGraphqlImportMap;
|
|
30
|
-
private static decoratorIdentifier;
|
|
31
|
-
private recognizedDecorator;
|
|
32
|
-
private static literalStringValue;
|
|
33
|
-
private static checkGraphqlGrammar;
|
|
34
|
-
private static isAbstractGraphqlType;
|
|
35
|
-
private static findNameProperty;
|
|
36
|
-
private static peekThroughWrapper;
|
|
37
|
-
private deriveGraphqlName;
|
|
38
|
-
private logGraphqlSkip;
|
|
39
|
-
private declarationNameFor;
|
|
40
|
-
private static extractResolverIdentifier;
|
|
41
|
-
private defaultResolveDeclaration;
|
|
42
|
-
private classGraphqlTypeName;
|
|
43
|
-
private resolveResolverParentType;
|
|
44
|
-
private extractClassTypeRows;
|
|
45
|
-
private extractResolveFieldRow;
|
|
46
|
-
private extractMethodOperationRows;
|
|
47
|
-
private extractGraphqlNames;
|
|
48
|
-
private static isValidSegment;
|
|
49
|
-
private static memberName;
|
|
50
|
-
private static unwrapExpr;
|
|
51
|
-
private static unwrapParent;
|
|
52
|
-
private isModuleOrNamespaceLevelVariable;
|
|
53
|
-
private classExpressionRoot;
|
|
54
|
-
private objectLiteralRootValid;
|
|
55
|
-
private isTopLevelOrNamespaceDirect;
|
|
56
|
-
private walkStep;
|
|
57
|
-
private containerSegments;
|
|
58
|
-
private describeIndexedNode;
|
|
59
|
-
private qualifiedName;
|
|
60
|
-
private findFromSymbol;
|
|
61
|
-
private extractCalls;
|
|
62
26
|
}
|