codesearch-mcp 0.2.3-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 +88 -5
- package/LICENSE +661 -21
- package/README.md +76 -40
- package/dist/app.js +17 -38
- 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/chunking/AstChunker.d.ts +12 -0
- package/dist/src/chunking/AstChunker.js +30 -0
- package/dist/src/chunking/CharacterChunkStrategy.d.ts +8 -0
- package/dist/src/chunking/CharacterChunkStrategy.js +15 -0
- package/dist/src/chunking/DeclarationChunkStrategy.d.ts +15 -0
- package/dist/src/chunking/DeclarationChunkStrategy.js +87 -0
- package/dist/src/chunking/FragmentMerger.d.ts +11 -0
- package/dist/src/chunking/FragmentMerger.js +61 -0
- package/dist/src/chunking/ImportOnlyFilter.d.ts +5 -0
- package/dist/src/chunking/ImportOnlyFilter.js +14 -0
- package/dist/src/chunking/LangchainTextSplitter.d.ts +21 -0
- package/dist/src/chunking/LangchainTextSplitter.js +133 -0
- package/dist/src/chunking/MinSizeSplitPolicy.d.ts +9 -0
- package/dist/src/chunking/MinSizeSplitPolicy.js +18 -0
- package/dist/src/chunking/RunPacker.d.ts +12 -0
- package/dist/src/chunking/RunPacker.js +84 -0
- package/dist/src/chunking/create-chunker.d.ts +3 -0
- package/dist/src/chunking/create-chunker.js +15 -0
- package/dist/src/chunking/interfaces.d.ts +27 -0
- package/dist/src/commands/ConfigCommand.js +1 -9
- package/dist/src/commands/EvalCommand.d.ts +10 -5
- package/dist/src/commands/EvalCommand.js +60 -149
- package/dist/src/commands/IndexCommand.d.ts +10 -4
- package/dist/src/commands/IndexCommand.js +52 -146
- package/dist/src/commands/McpCommand.d.ts +6 -3
- package/dist/src/commands/McpCommand.js +19 -20
- package/dist/src/commands/WebCommand.d.ts +9 -3
- package/dist/src/commands/WebCommand.js +17 -11
- 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-error.d.ts +0 -4
- package/dist/src/config-error.js +0 -4
- package/dist/src/config-store.d.ts +1 -55
- package/dist/src/config-store.js +11 -73
- package/dist/src/config.d.ts +9 -18
- package/dist/src/config.js +36 -35
- package/dist/src/constants.d.ts +17 -28
- package/dist/src/constants.js +35 -29
- package/dist/src/container.d.ts +10 -2
- package/dist/src/container.js +19 -8
- package/dist/src/db/drizzle-types.d.ts +7 -0
- package/dist/src/db/drizzle-types.js +2 -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/db/schema.d.ts +17 -0
- package/dist/src/db/schema.js +1 -6
- package/dist/src/declarations/DeclarationTree.d.ts +19 -0
- package/dist/src/declarations/DeclarationTree.js +66 -0
- package/dist/src/declarations/DeclarationTreeBuilder.d.ts +22 -0
- package/dist/src/declarations/DeclarationTreeBuilder.js +179 -0
- package/dist/src/declarations/SourceLines.d.ts +37 -0
- package/dist/src/declarations/SourceLines.js +415 -0
- package/dist/src/dependency-traversal.d.ts +0 -6
- package/dist/src/dependency-traversal.js +0 -6
- package/dist/src/enriched-prompt.d.ts +0 -6
- package/dist/src/enriched-prompt.js +0 -6
- package/dist/src/error-record.d.ts +12 -0
- package/dist/src/error-record.js +248 -0
- package/dist/src/eval-corpus.d.ts +16 -0
- package/dist/src/eval-corpus.js +169 -0
- package/dist/src/eval-results.d.ts +6 -3
- package/dist/src/eval-results.js +323 -26
- package/dist/src/eval-vector-index.d.ts +5 -0
- package/dist/src/eval-vector-index.js +60 -0
- package/dist/src/file-utils.d.ts +0 -5
- package/dist/src/file-utils.js +0 -5
- package/dist/src/graph.d.ts +0 -25
- package/dist/src/graph.js +0 -28
- package/dist/src/help.js +9 -1
- package/dist/src/hnsw-settings.d.ts +3 -0
- package/dist/src/hnsw-settings.js +24 -0
- 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 +4 -40
- 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/IChunker.d.ts +3 -12
- package/dist/src/interfaces/ICorpusInspector.d.ts +7 -0
- package/dist/src/interfaces/ICorpusInspector.js +2 -0
- package/dist/src/interfaces/IDatabase.d.ts +8 -24
- package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
- package/dist/src/interfaces/IDependencyGraph.js +2 -0
- package/dist/src/interfaces/IEmbedder.d.ts +0 -9
- 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/ILogger.d.ts +1 -11
- package/dist/src/interfaces/IMcpReadiness.d.ts +12 -0
- package/dist/src/interfaces/IMcpReadiness.js +2 -0
- package/dist/src/interfaces/IMcpToolHandler.d.ts +0 -5
- package/dist/src/interfaces/IMonorepoResolver.d.ts +0 -22
- package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
- package/dist/src/interfaces/IProjectCatalog.js +2 -0
- package/dist/src/interfaces/IProjectDiscovery.d.ts +0 -17
- package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
- package/dist/src/interfaces/IProjectRoots.js +2 -0
- package/dist/src/interfaces/IRetrievalEvaluator.d.ts +153 -12
- 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/interrupt.js +0 -2
- package/dist/src/owner-path.d.ts +9 -10
- package/dist/src/owner-path.js +11 -23
- package/dist/src/project-scope.d.ts +1 -12
- package/dist/src/project-scope.js +5 -12
- package/dist/src/project-selector.d.ts +0 -5
- package/dist/src/project-selector.js +0 -11
- package/dist/src/retrieval-eval.d.ts +15 -6
- package/dist/src/retrieval-eval.js +388 -59
- 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/result-shaping.d.ts +4 -0
- package/dist/src/search/result-shaping.js +19 -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 +10 -106
- package/dist/src/services/AstParserService.js +37 -1068
- package/dist/src/services/DatabaseService.d.ts +10 -17
- package/dist/src/services/DatabaseService.js +71 -115
- package/dist/src/services/EmbedderFactory.d.ts +0 -4
- package/dist/src/services/EmbedderFactory.js +0 -5
- package/dist/src/services/IndexerService.d.ts +7 -26
- package/dist/src/services/IndexerService.js +38 -286
- package/dist/src/services/InfinityEmbedder.d.ts +0 -21
- package/dist/src/services/InfinityEmbedder.js +0 -15
- package/dist/src/services/LoggerService.d.ts +7 -5
- package/dist/src/services/LoggerService.js +37 -41
- package/dist/src/services/McpReadiness.d.ts +18 -0
- package/dist/src/services/McpReadiness.js +73 -0
- package/dist/src/services/McpServer.d.ts +50 -19
- package/dist/src/services/McpServer.js +132 -62
- package/dist/src/services/MonorepoAwareDiscoveryService.d.ts +1 -45
- package/dist/src/services/MonorepoAwareDiscoveryService.js +1 -51
- package/dist/src/services/NxMonorepoResolver.d.ts +0 -29
- package/dist/src/services/NxMonorepoResolver.js +5 -56
- package/dist/src/services/OpenAICompatibleEmbedder.d.ts +0 -6
- package/dist/src/services/OpenAICompatibleEmbedder.js +0 -14
- package/dist/src/services/ProjectDiscoveryService.d.ts +0 -4
- package/dist/src/services/ProjectDiscoveryService.js +0 -4
- package/dist/src/services/VoyageEmbedder.d.ts +0 -6
- package/dist/src/services/VoyageEmbedder.js +0 -6
- package/dist/src/services/WebServerService.d.ts +5 -56
- package/dist/src/services/WebServerService.js +25 -63
- package/dist/src/services/http-retry.d.ts +0 -7
- package/dist/src/services/http-retry.js +1 -10
- package/dist/src/services/infinity-provisioning.d.ts +0 -74
- package/dist/src/services/infinity-provisioning.js +5 -88
- package/dist/src/services/legacy-ollama-index.d.ts +0 -16
- package/dist/src/services/legacy-ollama-index.js +0 -23
- package/dist/src/services/reranker.d.ts +0 -9
- package/dist/src/services/reranker.js +46 -12
- package/dist/src/setup.d.ts +24 -24
- package/dist/src/setup.js +205 -103
- package/dist/src/symbol-name.d.ts +1 -12
- package/dist/src/symbol-name.js +16 -25
- package/dist/src/symbol-rows.d.ts +0 -14
- package/dist/src/symbol-rows.js +0 -14
- package/dist/src/tool-call-log.d.ts +2 -0
- package/dist/src/tool-call-log.js +24 -0
- 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 +36 -29
- package/dist/src/tools/GetDependentsTool.d.ts +20 -8
- package/dist/src/tools/GetDependentsTool.js +48 -34
- 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 +71 -50
- package/dist/src/tools/format-helpers.d.ts +9 -9
- package/dist/src/tools/format-helpers.js +146 -28
- package/dist/src/tools/tool-args.d.ts +38 -0
- package/dist/src/tools/tool-args.js +95 -0
- package/dist/src/web/dashboard.d.ts +0 -8
- package/dist/src/web/dashboard.js +7 -10
- 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 +5 -4
- package/dist/src/interfaces/ISearcher.d.ts +0 -35
- package/dist/src/services/AstChunker.d.ts +0 -42
- package/dist/src/services/AstChunker.js +0 -158
- package/dist/src/services/SearcherService.d.ts +0 -342
- package/dist/src/services/SearcherService.js +0 -1199
- package/docs/web-dashboard.md +0 -206
- /package/dist/src/{interfaces/ISearcher.js → chunking/interfaces.js} +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IDatabase } from '../interfaces/IDatabase';
|
|
2
|
+
export type SchemaDb = Pick<IDatabase, 'query' | 'transaction' | 'ensureChunkTable'>;
|
|
3
|
+
export interface SchemaStep {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
run(db: SchemaDb): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare const SCHEMA_STEPS: readonly SchemaStep[];
|
|
8
|
+
export declare function runSchemaSteps(db: SchemaDb, steps?: readonly SchemaStep[]): Promise<void>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCHEMA_STEPS = void 0;
|
|
4
|
+
exports.runSchemaSteps = runSchemaSteps;
|
|
5
|
+
async function codeChunkTable(db) {
|
|
6
|
+
await db.ensureChunkTable(1024);
|
|
7
|
+
}
|
|
8
|
+
async function indexMetaTable(db) {
|
|
9
|
+
await db.query(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS index_meta (
|
|
11
|
+
id BOOLEAN PRIMARY KEY DEFAULT true,
|
|
12
|
+
provider TEXT NOT NULL,
|
|
13
|
+
model TEXT NOT NULL,
|
|
14
|
+
dimensions INT NOT NULL,
|
|
15
|
+
"indexedAt" TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
16
|
+
)
|
|
17
|
+
`);
|
|
18
|
+
}
|
|
19
|
+
async function codeDependencyTable(db) {
|
|
20
|
+
const [{ existsDep }] = await db.query(`
|
|
21
|
+
SELECT EXISTS (
|
|
22
|
+
SELECT 1 FROM information_schema.tables
|
|
23
|
+
WHERE table_schema = 'public' AND table_name = 'code_dependency'
|
|
24
|
+
) AS "existsDep"
|
|
25
|
+
`);
|
|
26
|
+
if (!existsDep) {
|
|
27
|
+
await db.query(`
|
|
28
|
+
CREATE TABLE code_dependency (
|
|
29
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
30
|
+
project TEXT NOT NULL,
|
|
31
|
+
"fromFile" TEXT NOT NULL,
|
|
32
|
+
"fromSymbol" TEXT,
|
|
33
|
+
"toFile" TEXT NOT NULL,
|
|
34
|
+
"toSymbol" TEXT,
|
|
35
|
+
"depType" TEXT NOT NULL
|
|
36
|
+
)
|
|
37
|
+
`);
|
|
38
|
+
}
|
|
39
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_dep_project_from ON code_dependency (project, "fromFile")`);
|
|
40
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_dep_project_to ON code_dependency (project, "toFile")`);
|
|
41
|
+
await db.query(`DROP INDEX IF EXISTS idx_dep_from`);
|
|
42
|
+
await db.query(`DROP INDEX IF EXISTS idx_dep_to`);
|
|
43
|
+
await db.query(`DROP INDEX IF EXISTS idx_dep_project`);
|
|
44
|
+
}
|
|
45
|
+
async function codeSymbolTable(db) {
|
|
46
|
+
const [{ existsSym }] = await db.query(`
|
|
47
|
+
SELECT EXISTS (
|
|
48
|
+
SELECT 1 FROM information_schema.tables
|
|
49
|
+
WHERE table_schema = 'public' AND table_name = 'code_symbol'
|
|
50
|
+
) AS "existsSym"
|
|
51
|
+
`);
|
|
52
|
+
if (!existsSym) {
|
|
53
|
+
await db.query(`
|
|
54
|
+
CREATE TABLE code_symbol (
|
|
55
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
56
|
+
project TEXT NOT NULL,
|
|
57
|
+
"filePath" TEXT NOT NULL,
|
|
58
|
+
name TEXT NOT NULL,
|
|
59
|
+
kind TEXT NOT NULL,
|
|
60
|
+
signature TEXT,
|
|
61
|
+
line INT,
|
|
62
|
+
col INT
|
|
63
|
+
)
|
|
64
|
+
`);
|
|
65
|
+
}
|
|
66
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_symbol_name ON code_symbol (name, project)`);
|
|
67
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_symbol_file ON code_symbol (project, "filePath")`);
|
|
68
|
+
await db.query(`ALTER TABLE code_symbol ADD COLUMN IF NOT EXISTS container TEXT`);
|
|
69
|
+
await db.query(`ALTER TABLE code_symbol ADD COLUMN IF NOT EXISTS "isStatic" BOOLEAN NOT NULL DEFAULT false`);
|
|
70
|
+
await db.query(`ALTER TABLE code_symbol ADD COLUMN IF NOT EXISTS "target" TEXT`);
|
|
71
|
+
await db.transaction(async (tx) => {
|
|
72
|
+
await tx.execute('DROP INDEX IF EXISTS idx_symbol_unique');
|
|
73
|
+
await tx.execute('CREATE UNIQUE INDEX IF NOT EXISTS idx_symbol_unique_v2 ' +
|
|
74
|
+
'ON code_symbol (project, "filePath", container, name, kind, line) NULLS NOT DISTINCT');
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async function codeCallTable(db) {
|
|
78
|
+
await db.query(`
|
|
79
|
+
CREATE TABLE IF NOT EXISTS code_call (
|
|
80
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
81
|
+
project TEXT NOT NULL,
|
|
82
|
+
"fromFile" TEXT NOT NULL,
|
|
83
|
+
"fromSymbol" TEXT,
|
|
84
|
+
"calleeName" TEXT NOT NULL,
|
|
85
|
+
"calleeFile" TEXT NOT NULL,
|
|
86
|
+
"calleeSymbol" TEXT,
|
|
87
|
+
line INT,
|
|
88
|
+
col INT
|
|
89
|
+
)
|
|
90
|
+
`);
|
|
91
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_call_callee ON code_call (project, "calleeName")`);
|
|
92
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_call_callee_file ON code_call (project, "calleeFile")`);
|
|
93
|
+
await db.query(`CREATE INDEX IF NOT EXISTS idx_call_from ON code_call (project, "fromFile")`);
|
|
94
|
+
}
|
|
95
|
+
exports.SCHEMA_STEPS = [
|
|
96
|
+
{ name: 'codeChunkTable', run: codeChunkTable },
|
|
97
|
+
{ name: 'indexMetaTable', run: indexMetaTable },
|
|
98
|
+
{ name: 'codeDependencyTable', run: codeDependencyTable },
|
|
99
|
+
{ name: 'codeSymbolTable', run: codeSymbolTable },
|
|
100
|
+
{ name: 'codeCallTable', run: codeCallTable },
|
|
101
|
+
];
|
|
102
|
+
async function runSchemaSteps(db, steps = exports.SCHEMA_STEPS) {
|
|
103
|
+
for (const step of steps)
|
|
104
|
+
await step.run(db);
|
|
105
|
+
}
|
package/dist/src/db/schema.d.ts
CHANGED
|
@@ -161,6 +161,23 @@ export declare const codeChunk: import("drizzle-orm/pg-core").PgTableWithColumns
|
|
|
161
161
|
}, {}, {
|
|
162
162
|
length: number | undefined;
|
|
163
163
|
}>;
|
|
164
|
+
endLine: import("drizzle-orm/pg-core").PgColumn<{
|
|
165
|
+
name: "endLine";
|
|
166
|
+
tableName: "code_chunk";
|
|
167
|
+
dataType: "number";
|
|
168
|
+
columnType: "PgInteger";
|
|
169
|
+
data: number;
|
|
170
|
+
driverParam: string | number;
|
|
171
|
+
notNull: false;
|
|
172
|
+
hasDefault: false;
|
|
173
|
+
isPrimaryKey: false;
|
|
174
|
+
isAutoincrement: false;
|
|
175
|
+
hasRuntimeDefault: false;
|
|
176
|
+
enumValues: undefined;
|
|
177
|
+
baseColumn: never;
|
|
178
|
+
identity: undefined;
|
|
179
|
+
generated: undefined;
|
|
180
|
+
}, {}, {}>;
|
|
164
181
|
};
|
|
165
182
|
dialect: "pg";
|
|
166
183
|
}>;
|
package/dist/src/db/schema.js
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.indexMeta = exports.codeCall = exports.codeSymbol = exports.codeDependency = exports.codeChunk = void 0;
|
|
4
4
|
const pg_core_1 = require("drizzle-orm/pg-core");
|
|
5
|
-
// NOTE: the `dimensions` literal below is nominal only. `dataType()` is invoked
|
|
6
|
-
// solely by drizzle-kit DDL generation, which this project does not use — the
|
|
7
|
-
// `code_chunk` table is created by raw SQL in DatabaseService at the dimension
|
|
8
|
-
// resolved from the active model, and the real width is recorded in index_meta.
|
|
9
5
|
const vector = (0, pg_core_1.customType)({
|
|
10
6
|
dataType(config) { return `vector(${config?.dimensions ?? 1024})`; },
|
|
11
7
|
});
|
|
@@ -19,6 +15,7 @@ exports.codeChunk = (0, pg_core_1.pgTable)('code_chunk', {
|
|
|
19
15
|
lastModified: (0, pg_core_1.doublePrecision)('lastModified'),
|
|
20
16
|
contentHash: (0, pg_core_1.varchar)('contentHash', { length: 64 }),
|
|
21
17
|
ownerPath: (0, pg_core_1.varchar)('ownerPath'),
|
|
18
|
+
endLine: (0, pg_core_1.integer)('endLine'),
|
|
22
19
|
});
|
|
23
20
|
exports.codeDependency = (0, pg_core_1.pgTable)('code_dependency', {
|
|
24
21
|
id: (0, pg_core_1.uuid)('id').primaryKey().defaultRandom(),
|
|
@@ -53,8 +50,6 @@ exports.codeCall = (0, pg_core_1.pgTable)('code_call', {
|
|
|
53
50
|
line: (0, pg_core_1.integer)('line'),
|
|
54
51
|
col: (0, pg_core_1.integer)('col'),
|
|
55
52
|
});
|
|
56
|
-
// Single-row source of truth for which model built the current index. The
|
|
57
|
-
// `id` column is a boolean pinned to `true` so at most one row can exist.
|
|
58
53
|
exports.indexMeta = (0, pg_core_1.pgTable)('index_meta', {
|
|
59
54
|
id: (0, pg_core_1.boolean)('id').primaryKey().default(true),
|
|
60
55
|
provider: (0, pg_core_1.text)('provider').notNull(),
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SymbolKind } from '../interfaces/SymbolKind';
|
|
2
|
+
import type { LineRange } from './SourceLines';
|
|
3
|
+
export interface DeclarationNode {
|
|
4
|
+
start: number;
|
|
5
|
+
end: number;
|
|
6
|
+
nameLine: number;
|
|
7
|
+
qualifiedName: string;
|
|
8
|
+
kind: SymbolKind;
|
|
9
|
+
children: DeclarationNode[];
|
|
10
|
+
}
|
|
11
|
+
export declare class DeclarationTree {
|
|
12
|
+
static readonly EMPTY: DeclarationTree;
|
|
13
|
+
readonly roots: DeclarationNode[];
|
|
14
|
+
constructor(roots: DeclarationNode[]);
|
|
15
|
+
contains(line: number): boolean;
|
|
16
|
+
smallestContaining(lines: number[]): DeclarationNode | null;
|
|
17
|
+
within(range: LineRange): DeclarationNode[];
|
|
18
|
+
private static sorted;
|
|
19
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeclarationTree = void 0;
|
|
4
|
+
class DeclarationTree {
|
|
5
|
+
static EMPTY = new DeclarationTree([]);
|
|
6
|
+
roots;
|
|
7
|
+
constructor(roots) {
|
|
8
|
+
this.roots = DeclarationTree.sorted(roots);
|
|
9
|
+
}
|
|
10
|
+
contains(line) {
|
|
11
|
+
return this.roots.some(r => r.start <= line && line <= r.end);
|
|
12
|
+
}
|
|
13
|
+
smallestContaining(lines) {
|
|
14
|
+
if (lines.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
const lo = Math.min(...lines);
|
|
17
|
+
const hi = Math.max(...lines);
|
|
18
|
+
const covers = (n) => n.start <= lo && n.end >= hi;
|
|
19
|
+
const span = (n) => n.end - n.start;
|
|
20
|
+
let fewest = Infinity;
|
|
21
|
+
const measure = (nodes) => {
|
|
22
|
+
for (const node of nodes) {
|
|
23
|
+
if (!covers(node))
|
|
24
|
+
continue;
|
|
25
|
+
fewest = Math.min(fewest, span(node));
|
|
26
|
+
measure(node.children);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
measure(this.roots);
|
|
30
|
+
let best = null;
|
|
31
|
+
const pick = (nodes) => {
|
|
32
|
+
let anyTied = false;
|
|
33
|
+
for (const node of nodes) {
|
|
34
|
+
if (!covers(node))
|
|
35
|
+
continue;
|
|
36
|
+
const nestedTied = pick(node.children);
|
|
37
|
+
const tied = span(node) === fewest;
|
|
38
|
+
if (tied && !nestedTied && (best === null || node.nameLine < best.nameLine))
|
|
39
|
+
best = node;
|
|
40
|
+
anyTied ||= tied || nestedTied;
|
|
41
|
+
}
|
|
42
|
+
return anyTied;
|
|
43
|
+
};
|
|
44
|
+
pick(this.roots);
|
|
45
|
+
return best;
|
|
46
|
+
}
|
|
47
|
+
within(range) {
|
|
48
|
+
const out = [];
|
|
49
|
+
const visit = (nodes) => {
|
|
50
|
+
for (const node of nodes) {
|
|
51
|
+
if (node.end < range.start || node.start > range.end)
|
|
52
|
+
continue;
|
|
53
|
+
out.push(node);
|
|
54
|
+
visit(node.children);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
visit(this.roots);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
static sorted(nodes) {
|
|
61
|
+
return [...nodes]
|
|
62
|
+
.sort((a, b) => a.start - b.start || b.end - a.end)
|
|
63
|
+
.map(n => ({ ...n, children: DeclarationTree.sorted(n.children) }));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.DeclarationTree = DeclarationTree;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Node, type SourceFile } from 'ts-morph';
|
|
2
|
+
import type { SymbolEntry } from '../interfaces/IAstParser';
|
|
3
|
+
import { DeclarationTree } from './DeclarationTree';
|
|
4
|
+
export interface DeclarationCandidate {
|
|
5
|
+
entry: SymbolEntry;
|
|
6
|
+
declNode: Node;
|
|
7
|
+
}
|
|
8
|
+
export declare class DeclarationTreeBuilder {
|
|
9
|
+
build(sourceFile: SourceFile, candidates: DeclarationCandidate[]): DeclarationTree;
|
|
10
|
+
flat(candidates: DeclarationCandidate[]): DeclarationTree;
|
|
11
|
+
leadingStart(sourceFile: SourceFile, declNode: Node, lines?: LineIndex): number;
|
|
12
|
+
private safeLeadingStart;
|
|
13
|
+
private triviaNode;
|
|
14
|
+
private overloadSets;
|
|
15
|
+
private nearestCandidateAncestor;
|
|
16
|
+
}
|
|
17
|
+
declare class LineIndex {
|
|
18
|
+
private readonly starts;
|
|
19
|
+
constructor(text: string);
|
|
20
|
+
lineAt(pos: number): number;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeclarationTreeBuilder = void 0;
|
|
4
|
+
const ts_morph_1 = require("ts-morph");
|
|
5
|
+
const DeclarationTree_1 = require("./DeclarationTree");
|
|
6
|
+
class DeclarationTreeBuilder {
|
|
7
|
+
build(sourceFile, candidates) {
|
|
8
|
+
const lines = new LineIndex(sourceFile.getFullText());
|
|
9
|
+
const siblings = new SiblingIndex();
|
|
10
|
+
const groups = this.overloadSets(candidates.filter(c => c.entry.kind !== 'method_signature'), siblings);
|
|
11
|
+
const nodeOf = new Map();
|
|
12
|
+
const entries = [];
|
|
13
|
+
for (const group of groups) {
|
|
14
|
+
const first = group[0];
|
|
15
|
+
const last = group[group.length - 1];
|
|
16
|
+
const named = group.find(c => c.entry.hasBody) ?? first;
|
|
17
|
+
const node = {
|
|
18
|
+
start: this.safeLeadingStart(sourceFile, siblings.firstSignature(first.declNode), lines),
|
|
19
|
+
end: lines.lineAt(last.declNode.getEnd()),
|
|
20
|
+
nameLine: named.entry.line ?? first.declNode.getStartLineNumber(),
|
|
21
|
+
qualifiedName: named.entry.container ? `${named.entry.container}.${named.entry.name}` : named.entry.name,
|
|
22
|
+
kind: named.entry.kind,
|
|
23
|
+
children: [],
|
|
24
|
+
};
|
|
25
|
+
for (const c of group)
|
|
26
|
+
nodeOf.set(c.declNode, node);
|
|
27
|
+
entries.push({ first: first.declNode, node });
|
|
28
|
+
}
|
|
29
|
+
const roots = [];
|
|
30
|
+
for (const { first, node } of entries) {
|
|
31
|
+
const parent = this.nearestCandidateAncestor(first, nodeOf);
|
|
32
|
+
if (parent && parent !== node) {
|
|
33
|
+
node.start = Math.max(node.start, parent.start);
|
|
34
|
+
parent.children.push(node);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
roots.push(node);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return new DeclarationTree_1.DeclarationTree(roots);
|
|
41
|
+
}
|
|
42
|
+
flat(candidates) {
|
|
43
|
+
const siblings = new SiblingIndex();
|
|
44
|
+
return new DeclarationTree_1.DeclarationTree(this.overloadSets(candidates, siblings).map(group => {
|
|
45
|
+
const first = group[0];
|
|
46
|
+
const named = group.find(c => c.entry.hasBody) ?? first;
|
|
47
|
+
return {
|
|
48
|
+
start: siblings.firstSignature(first.declNode).getStartLineNumber(),
|
|
49
|
+
end: group[group.length - 1].declNode.getEndLineNumber(),
|
|
50
|
+
nameLine: named.entry.line ?? first.declNode.getStartLineNumber(),
|
|
51
|
+
qualifiedName: named.entry.container ? `${named.entry.container}.${named.entry.name}` : named.entry.name,
|
|
52
|
+
kind: named.entry.kind,
|
|
53
|
+
children: [],
|
|
54
|
+
};
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
leadingStart(sourceFile, declNode, lines = new LineIndex(sourceFile.getFullText())) {
|
|
58
|
+
const triviaNode = this.triviaNode(declNode);
|
|
59
|
+
let boundary = Math.min(lines.lineAt(declNode.getStart()), lines.lineAt(triviaNode.getStart()));
|
|
60
|
+
const ranges = ts_morph_1.ts.getLeadingCommentRanges(sourceFile.getFullText(), triviaNode.getPos()) ?? [];
|
|
61
|
+
for (let i = ranges.length - 1; i >= 0; i--) {
|
|
62
|
+
const endLine = lines.lineAt(Math.max(ranges[i].pos, ranges[i].end - 1));
|
|
63
|
+
if (endLine < boundary - 1)
|
|
64
|
+
break;
|
|
65
|
+
boundary = Math.min(boundary, lines.lineAt(ranges[i].pos));
|
|
66
|
+
}
|
|
67
|
+
return boundary;
|
|
68
|
+
}
|
|
69
|
+
safeLeadingStart(sourceFile, declNode, lines) {
|
|
70
|
+
try {
|
|
71
|
+
return this.leadingStart(sourceFile, declNode, lines);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return declNode.getStartLineNumber();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
triviaNode(declNode) {
|
|
78
|
+
if (!ts_morph_1.Node.isVariableDeclaration(declNode))
|
|
79
|
+
return declNode;
|
|
80
|
+
const list = declNode.getParent();
|
|
81
|
+
const statement = list?.getParent();
|
|
82
|
+
if (!ts_morph_1.Node.isVariableDeclarationList(list) || !ts_morph_1.Node.isVariableStatement(statement))
|
|
83
|
+
return declNode;
|
|
84
|
+
return list.getDeclarations()[0] === declNode ? statement : declNode;
|
|
85
|
+
}
|
|
86
|
+
overloadSets(candidates, siblings) {
|
|
87
|
+
const key = (c) => JSON.stringify([c.entry.container, c.entry.name, c.entry.kind, c.entry.isStatic]);
|
|
88
|
+
const sorted = [...candidates].sort((a, b) => a.declNode.getStart() - b.declNode.getStart());
|
|
89
|
+
const sets = [];
|
|
90
|
+
const openSet = new Map();
|
|
91
|
+
for (const c of sorted) {
|
|
92
|
+
const k = key(c);
|
|
93
|
+
const open = openSet.get(k);
|
|
94
|
+
const prev = open?.[open.length - 1];
|
|
95
|
+
if (open && prev && siblings.adjacent(prev.declNode, c.declNode)) {
|
|
96
|
+
open.push(c);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const set = [c];
|
|
100
|
+
sets.push(set);
|
|
101
|
+
openSet.set(k, set);
|
|
102
|
+
}
|
|
103
|
+
return sets;
|
|
104
|
+
}
|
|
105
|
+
nearestCandidateAncestor(declNode, nodeOf) {
|
|
106
|
+
for (let current = declNode.getParent(); current; current = current.getParent()) {
|
|
107
|
+
const found = nodeOf.get(current);
|
|
108
|
+
if (found)
|
|
109
|
+
return found;
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.DeclarationTreeBuilder = DeclarationTreeBuilder;
|
|
115
|
+
class SiblingIndex {
|
|
116
|
+
positions = new Map();
|
|
117
|
+
read = new Set();
|
|
118
|
+
statements = new Map();
|
|
119
|
+
adjacent(a, b) {
|
|
120
|
+
const pa = this.position(a.compilerNode);
|
|
121
|
+
const pb = this.position(b.compilerNode);
|
|
122
|
+
return !!pa && !!pb && pa.list === pb.list && pb.index === pa.index + 1;
|
|
123
|
+
}
|
|
124
|
+
firstSignature(declNode) {
|
|
125
|
+
if (!ts_morph_1.Node.isFunctionDeclaration(declNode) || !declNode.compilerNode.body)
|
|
126
|
+
return declNode;
|
|
127
|
+
const name = declNode.getName();
|
|
128
|
+
const position = this.position(declNode.compilerNode);
|
|
129
|
+
if (!name || !position)
|
|
130
|
+
return declNode;
|
|
131
|
+
const isSignature = (n) => ts_morph_1.ts.isFunctionDeclaration(n) && !n.body && n.name?.text === name;
|
|
132
|
+
let i = position.index;
|
|
133
|
+
while (i > 0 && isSignature(position.list[i - 1]))
|
|
134
|
+
i--;
|
|
135
|
+
if (i === position.index)
|
|
136
|
+
return declNode;
|
|
137
|
+
return this.statement(declNode.getParentOrThrow(), position.list[i]) ?? declNode;
|
|
138
|
+
}
|
|
139
|
+
position(node) {
|
|
140
|
+
const parent = node.parent;
|
|
141
|
+
if (parent && !this.read.has(parent)) {
|
|
142
|
+
this.read.add(parent);
|
|
143
|
+
ts_morph_1.ts.forEachChild(parent, () => undefined, list => {
|
|
144
|
+
list.forEach((child, index) => this.positions.set(child, { list, index }));
|
|
145
|
+
return undefined;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return this.positions.get(node);
|
|
149
|
+
}
|
|
150
|
+
statement(parent, compilerNode) {
|
|
151
|
+
if (!ts_morph_1.Node.isStatemented(parent))
|
|
152
|
+
return undefined;
|
|
153
|
+
let byCompilerNode = this.statements.get(parent);
|
|
154
|
+
if (!byCompilerNode) {
|
|
155
|
+
byCompilerNode = new Map(parent.getStatements().map(s => [s.compilerNode, s]));
|
|
156
|
+
this.statements.set(parent, byCompilerNode);
|
|
157
|
+
}
|
|
158
|
+
return byCompilerNode.get(compilerNode);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
class LineIndex {
|
|
162
|
+
starts = [0];
|
|
163
|
+
constructor(text) {
|
|
164
|
+
for (let i = text.indexOf('\n'); i !== -1; i = text.indexOf('\n', i + 1))
|
|
165
|
+
this.starts.push(i + 1);
|
|
166
|
+
}
|
|
167
|
+
lineAt(pos) {
|
|
168
|
+
let lo = 0;
|
|
169
|
+
let hi = this.starts.length - 1;
|
|
170
|
+
while (lo < hi) {
|
|
171
|
+
const mid = (lo + hi + 1) >> 1;
|
|
172
|
+
if (this.starts[mid] <= pos)
|
|
173
|
+
lo = mid;
|
|
174
|
+
else
|
|
175
|
+
hi = mid - 1;
|
|
176
|
+
}
|
|
177
|
+
return lo + 1;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface LineRange {
|
|
2
|
+
start: number;
|
|
3
|
+
end: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class SourceLines {
|
|
6
|
+
readonly text: string;
|
|
7
|
+
private readonly lines;
|
|
8
|
+
private readonly stripped;
|
|
9
|
+
private readonly code;
|
|
10
|
+
private readonly startsInCode;
|
|
11
|
+
private importLines?;
|
|
12
|
+
constructor(text: string, { jsx }?: {
|
|
13
|
+
jsx?: boolean;
|
|
14
|
+
});
|
|
15
|
+
get count(): number;
|
|
16
|
+
line(n: number): string;
|
|
17
|
+
slice(start: number, end: number): string;
|
|
18
|
+
length(start: number, end: number): number;
|
|
19
|
+
isBlank(n: number): boolean;
|
|
20
|
+
isCommentOnly(n: number): boolean;
|
|
21
|
+
isDirective(n: number): boolean;
|
|
22
|
+
isPunctuationOnly(n: number): boolean;
|
|
23
|
+
isSignificant(n: number): boolean;
|
|
24
|
+
significantLength(start: number, end: number): number;
|
|
25
|
+
importRegions(start: number, end: number): LineRange[];
|
|
26
|
+
private importStatementEnd;
|
|
27
|
+
private startsImport;
|
|
28
|
+
private nextCode;
|
|
29
|
+
private static bracketDepth;
|
|
30
|
+
static isImportOrReexportOnly(content: string): boolean;
|
|
31
|
+
isImportOnly(start: number, end: number): boolean;
|
|
32
|
+
private importStatementLines;
|
|
33
|
+
private static isImportLine;
|
|
34
|
+
private static statements;
|
|
35
|
+
private static opensElement;
|
|
36
|
+
private static scanCode;
|
|
37
|
+
}
|