kiri-mcp-server 0.17.0 → 0.18.1
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/README.md +118 -890
- package/dist/package.json +4 -2
- package/dist/src/indexer/codeintel/dart/adapter.d.ts +36 -0
- package/dist/src/indexer/codeintel/dart/adapter.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/dart/adapter.js +60 -0
- package/dist/src/indexer/codeintel/dart/adapter.js.map +1 -0
- package/dist/src/indexer/codeintel/dart/index.d.ts +7 -0
- package/dist/src/indexer/codeintel/dart/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/dart/index.js +7 -0
- package/dist/src/indexer/codeintel/dart/index.js.map +1 -0
- package/dist/src/indexer/codeintel/index.d.ts +30 -0
- package/dist/src/indexer/codeintel/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/index.js +32 -0
- package/dist/src/indexer/codeintel/index.js.map +1 -0
- package/dist/src/indexer/codeintel/java/analyzer.d.ts +22 -0
- package/dist/src/indexer/codeintel/java/analyzer.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/java/analyzer.js +281 -0
- package/dist/src/indexer/codeintel/java/analyzer.js.map +1 -0
- package/dist/src/indexer/codeintel/java/index.d.ts +7 -0
- package/dist/src/indexer/codeintel/java/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/java/index.js +7 -0
- package/dist/src/indexer/codeintel/java/index.js.map +1 -0
- package/dist/src/indexer/codeintel/php/analyzer.d.ts +23 -0
- package/dist/src/indexer/codeintel/php/analyzer.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/php/analyzer.js +342 -0
- package/dist/src/indexer/codeintel/php/analyzer.js.map +1 -0
- package/dist/src/indexer/codeintel/php/index.d.ts +7 -0
- package/dist/src/indexer/codeintel/php/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/php/index.js +7 -0
- package/dist/src/indexer/codeintel/php/index.js.map +1 -0
- package/dist/src/indexer/codeintel/registry.d.ts +76 -0
- package/dist/src/indexer/codeintel/registry.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/registry.js +127 -0
- package/dist/src/indexer/codeintel/registry.js.map +1 -0
- package/dist/src/indexer/codeintel/rust/analyzer.d.ts +14 -0
- package/dist/src/indexer/codeintel/rust/analyzer.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/rust/analyzer.js +388 -0
- package/dist/src/indexer/codeintel/rust/analyzer.js.map +1 -0
- package/dist/src/indexer/codeintel/rust/index.d.ts +5 -0
- package/dist/src/indexer/codeintel/rust/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/rust/index.js +5 -0
- package/dist/src/indexer/codeintel/rust/index.js.map +1 -0
- package/dist/src/indexer/codeintel/swift/analyzer.d.ts +22 -0
- package/dist/src/indexer/codeintel/swift/analyzer.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/swift/analyzer.js +271 -0
- package/dist/src/indexer/codeintel/swift/analyzer.js.map +1 -0
- package/dist/src/indexer/codeintel/swift/index.d.ts +7 -0
- package/dist/src/indexer/codeintel/swift/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/swift/index.js +7 -0
- package/dist/src/indexer/codeintel/swift/index.js.map +1 -0
- package/dist/src/indexer/codeintel/types.d.ts +114 -0
- package/dist/src/indexer/codeintel/types.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/types.js +13 -0
- package/dist/src/indexer/codeintel/types.js.map +1 -0
- package/dist/src/indexer/codeintel/typescript/analyzer.d.ts +22 -0
- package/dist/src/indexer/codeintel/typescript/analyzer.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/typescript/analyzer.js +210 -0
- package/dist/src/indexer/codeintel/typescript/analyzer.js.map +1 -0
- package/dist/src/indexer/codeintel/typescript/index.d.ts +7 -0
- package/dist/src/indexer/codeintel/typescript/index.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/typescript/index.js +7 -0
- package/dist/src/indexer/codeintel/typescript/index.js.map +1 -0
- package/dist/src/indexer/codeintel/utils.d.ts +91 -0
- package/dist/src/indexer/codeintel/utils.d.ts.map +1 -0
- package/dist/src/indexer/codeintel/utils.js +145 -0
- package/dist/src/indexer/codeintel/utils.js.map +1 -0
- package/dist/src/indexer/codeintel.d.ts +33 -26
- package/dist/src/indexer/codeintel.d.ts.map +1 -1
- package/dist/src/indexer/codeintel.js +56 -1078
- package/dist/src/indexer/codeintel.js.map +1 -1
- package/package.json +10 -2
- package/dist/src/client/model-cli.d.ts +0 -12
- package/dist/src/client/model-cli.d.ts.map +0 -1
- package/dist/src/client/model-cli.js +0 -247
- package/dist/src/client/model-cli.js.map +0 -1
- package/dist/src/shared/utils/global-dirs.d.ts +0 -64
- package/dist/src/shared/utils/global-dirs.d.ts.map +0 -1
- package/dist/src/shared/utils/global-dirs.js +0 -134
- package/dist/src/shared/utils/global-dirs.js.map +0 -1
- package/dist/src/vss/config.d.ts +0 -66
- package/dist/src/vss/config.d.ts.map +0 -1
- package/dist/src/vss/config.js +0 -233
- package/dist/src/vss/config.js.map +0 -1
- package/dist/src/vss/index.d.ts +0 -9
- package/dist/src/vss/index.d.ts.map +0 -1
- package/dist/src/vss/index.js +0 -9
- package/dist/src/vss/index.js.map +0 -1
- package/dist/src/vss/model-downloader.d.ts +0 -101
- package/dist/src/vss/model-downloader.d.ts.map +0 -1
- package/dist/src/vss/model-downloader.js +0 -320
- package/dist/src/vss/model-downloader.js.map +0 -1
- package/dist/src/vss/provider.d.ts +0 -132
- package/dist/src/vss/provider.d.ts.map +0 -1
- package/dist/src/vss/provider.js +0 -254
- package/dist/src/vss/provider.js.map +0 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Language Analyzer
|
|
3
|
+
*
|
|
4
|
+
* TypeScript Compiler APIを使用したシンボル抽出と依存関係解析。
|
|
5
|
+
* TypeScript/TSX両方をサポート。
|
|
6
|
+
*/
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import ts from "typescript";
|
|
9
|
+
import { assignSymbolIds, symbolsToSnippets, createDependencyRecorder } from "../utils.js";
|
|
10
|
+
/**
|
|
11
|
+
* TypeScript Compiler API の位置情報を 1-based 行番号に変換
|
|
12
|
+
*/
|
|
13
|
+
function toLineNumber(source, position) {
|
|
14
|
+
return source.getLineAndCharacterOfPosition(position).line + 1;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* シグネチャテキストをサニタイズ
|
|
18
|
+
* - ブロック本体 ({...}) を除去
|
|
19
|
+
* - 最大200文字に切り詰め
|
|
20
|
+
* - 最初の行のみを取得
|
|
21
|
+
*/
|
|
22
|
+
function sanitizeSignature(source, node) {
|
|
23
|
+
const start = node.getStart(source);
|
|
24
|
+
const endCandidate = node.forEachChild((child) => {
|
|
25
|
+
if (ts.isBlock(child) || ts.isModuleBlock(child)) {
|
|
26
|
+
return child.getFullStart();
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
});
|
|
30
|
+
const end = typeof endCandidate === "number" ? endCandidate : node.getEnd();
|
|
31
|
+
const snippet = source.text.slice(start, Math.min(end, start + 200));
|
|
32
|
+
return snippet.split(/\r?\n/)[0]?.trim().replace(/\s+/g, " ") ?? "";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* JSDoc コメントを抽出
|
|
36
|
+
*/
|
|
37
|
+
function getDocComment(node) {
|
|
38
|
+
const tags = ts.getJSDocCommentsAndTags(node);
|
|
39
|
+
const parts = [];
|
|
40
|
+
for (const tag of tags) {
|
|
41
|
+
if (ts.isJSDoc(tag)) {
|
|
42
|
+
if (typeof tag.comment === "string") {
|
|
43
|
+
parts.push(tag.comment);
|
|
44
|
+
}
|
|
45
|
+
else if (Array.isArray(tag.comment)) {
|
|
46
|
+
parts.push(tag.comment.map((part) => (typeof part === "string" ? part : part.text)).join(""));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (parts.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return parts.join("\n").trim() || null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* AST を走査してシンボルを抽出
|
|
57
|
+
*/
|
|
58
|
+
function extractSymbols(source) {
|
|
59
|
+
const results = [];
|
|
60
|
+
const visit = (node) => {
|
|
61
|
+
if (ts.isFunctionDeclaration(node) && node.name) {
|
|
62
|
+
results.push({
|
|
63
|
+
name: node.name.getText(source),
|
|
64
|
+
kind: "function",
|
|
65
|
+
rangeStartLine: toLineNumber(source, node.getStart(source)),
|
|
66
|
+
rangeEndLine: toLineNumber(source, node.getEnd()),
|
|
67
|
+
signature: sanitizeSignature(source, node),
|
|
68
|
+
doc: getDocComment(node),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else if (ts.isClassDeclaration(node) && node.name) {
|
|
72
|
+
results.push({
|
|
73
|
+
name: node.name.getText(source),
|
|
74
|
+
kind: "class",
|
|
75
|
+
rangeStartLine: toLineNumber(source, node.getStart(source)),
|
|
76
|
+
rangeEndLine: toLineNumber(source, node.getEnd()),
|
|
77
|
+
signature: sanitizeSignature(source, node),
|
|
78
|
+
doc: getDocComment(node),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (ts.isInterfaceDeclaration(node) && node.name) {
|
|
82
|
+
results.push({
|
|
83
|
+
name: node.name.getText(source),
|
|
84
|
+
kind: "interface",
|
|
85
|
+
rangeStartLine: toLineNumber(source, node.getStart(source)),
|
|
86
|
+
rangeEndLine: toLineNumber(source, node.getEnd()),
|
|
87
|
+
signature: sanitizeSignature(source, node),
|
|
88
|
+
doc: getDocComment(node),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (ts.isEnumDeclaration(node) && node.name) {
|
|
92
|
+
results.push({
|
|
93
|
+
name: node.name.getText(source),
|
|
94
|
+
kind: "enum",
|
|
95
|
+
rangeStartLine: toLineNumber(source, node.getStart(source)),
|
|
96
|
+
rangeEndLine: toLineNumber(source, node.getEnd()),
|
|
97
|
+
signature: sanitizeSignature(source, node),
|
|
98
|
+
doc: getDocComment(node),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else if (ts.isMethodDeclaration(node) && node.name) {
|
|
102
|
+
results.push({
|
|
103
|
+
name: node.name.getText(source),
|
|
104
|
+
kind: "method",
|
|
105
|
+
rangeStartLine: toLineNumber(source, node.getStart(source)),
|
|
106
|
+
rangeEndLine: toLineNumber(source, node.getEnd()),
|
|
107
|
+
signature: sanitizeSignature(source, node),
|
|
108
|
+
doc: getDocComment(node),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
ts.forEachChild(node, visit);
|
|
112
|
+
};
|
|
113
|
+
ts.forEachChild(source, visit);
|
|
114
|
+
return assignSymbolIds(results);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* import/export/require 文からモジュールパスを正規化
|
|
118
|
+
* 相対パスはファイルセットと照合してpath、それ以外はpackageとして分類
|
|
119
|
+
*/
|
|
120
|
+
function normalizePathSpecifier(sourcePath, specifier, fileSet) {
|
|
121
|
+
if (specifier.startsWith(".") || specifier.startsWith("/")) {
|
|
122
|
+
const baseDir = path.posix.dirname(sourcePath);
|
|
123
|
+
// Strip .js extension if present (ESM imports use .js but source files are .ts)
|
|
124
|
+
const pathWithoutJs = specifier.endsWith(".js") ? specifier.slice(0, -3) : specifier;
|
|
125
|
+
const joined = path.posix.normalize(path.posix.join(baseDir, pathWithoutJs));
|
|
126
|
+
const candidates = [
|
|
127
|
+
joined,
|
|
128
|
+
`${joined}.ts`,
|
|
129
|
+
`${joined}.tsx`,
|
|
130
|
+
`${joined}.js`,
|
|
131
|
+
`${joined}.jsx`,
|
|
132
|
+
`${joined}/index.ts`,
|
|
133
|
+
`${joined}/index.tsx`,
|
|
134
|
+
];
|
|
135
|
+
for (const candidate of candidates) {
|
|
136
|
+
if (fileSet.has(candidate)) {
|
|
137
|
+
return { kind: "path", target: candidate };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return { kind: "package", target: specifier };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* import/export 文を解析して依存関係を収集
|
|
146
|
+
*/
|
|
147
|
+
function collectDependencies(sourcePath, source, fileSet) {
|
|
148
|
+
const { record, getDependencies } = createDependencyRecorder();
|
|
149
|
+
const visit = (node) => {
|
|
150
|
+
if (ts.isImportDeclaration(node) &&
|
|
151
|
+
node.moduleSpecifier &&
|
|
152
|
+
ts.isStringLiteral(node.moduleSpecifier)) {
|
|
153
|
+
const target = normalizePathSpecifier(sourcePath, node.moduleSpecifier.text, fileSet);
|
|
154
|
+
if (target) {
|
|
155
|
+
record(target.kind, target.target);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (ts.isExportDeclaration(node) &&
|
|
159
|
+
node.moduleSpecifier &&
|
|
160
|
+
ts.isStringLiteral(node.moduleSpecifier)) {
|
|
161
|
+
const target = normalizePathSpecifier(sourcePath, node.moduleSpecifier.text, fileSet);
|
|
162
|
+
if (target) {
|
|
163
|
+
record(target.kind, target.target);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (ts.isCallExpression(node)) {
|
|
167
|
+
const firstArg = node.arguments[0];
|
|
168
|
+
if (node.expression.getText(source) === "require" &&
|
|
169
|
+
node.arguments.length === 1 &&
|
|
170
|
+
firstArg &&
|
|
171
|
+
ts.isStringLiteral(firstArg)) {
|
|
172
|
+
const target = normalizePathSpecifier(sourcePath, firstArg.text, fileSet);
|
|
173
|
+
if (target) {
|
|
174
|
+
record(target.kind, target.target);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
ts.forEachChild(node, visit);
|
|
179
|
+
};
|
|
180
|
+
ts.forEachChild(source, visit);
|
|
181
|
+
return getDependencies();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* TypeScript Language Analyzer
|
|
185
|
+
*
|
|
186
|
+
* LanguageAnalyzer インターフェースを実装し、
|
|
187
|
+
* TypeScript/TSX ファイルのシンボル抽出と依存関係解析を提供
|
|
188
|
+
*/
|
|
189
|
+
export class TypeScriptAnalyzer {
|
|
190
|
+
language = "TypeScript";
|
|
191
|
+
async analyze(context) {
|
|
192
|
+
const { pathInRepo, content, fileSet } = context;
|
|
193
|
+
// TypeScript Compiler API でパース
|
|
194
|
+
const sourceFile = ts.createSourceFile(pathInRepo, content, ts.ScriptTarget.Latest, true);
|
|
195
|
+
// シンボル抽出
|
|
196
|
+
const symbols = extractSymbols(sourceFile);
|
|
197
|
+
// シンボルからスニペットを生成
|
|
198
|
+
const snippets = symbolsToSnippets(symbols);
|
|
199
|
+
// 依存関係を収集
|
|
200
|
+
const dependencies = collectDependencies(pathInRepo, sourceFile, fileSet);
|
|
201
|
+
return { symbols, snippets, dependencies };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* TypeScript アナライザーのファクトリ関数
|
|
206
|
+
*/
|
|
207
|
+
export function createTypeScriptAnalyzer() {
|
|
208
|
+
return new TypeScriptAnalyzer();
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/typescript/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 共通ユーティリティ関数
|
|
3
|
+
*
|
|
4
|
+
* 複数の言語アナライザーで共有されるヘルパー関数を提供します。
|
|
5
|
+
*/
|
|
6
|
+
import type Parser from "tree-sitter";
|
|
7
|
+
import type { SymbolRecord, SnippetRecord } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* tree-sitter の Point を 1-based の行番号に変換
|
|
10
|
+
*
|
|
11
|
+
* @param position - tree-sitter の位置情報 (0-based row)
|
|
12
|
+
* @returns 1-based の行番号
|
|
13
|
+
*/
|
|
14
|
+
export declare function treeSitterPointToLine(position: Parser.Point): number;
|
|
15
|
+
/**
|
|
16
|
+
* シグネチャテキストをサニタイズ
|
|
17
|
+
* - 関数本体 ({...}) を除去
|
|
18
|
+
* - 最大長に切り詰め
|
|
19
|
+
* - 空白を正規化
|
|
20
|
+
*
|
|
21
|
+
* @param nodeText - ノードのテキスト
|
|
22
|
+
* @param options - オプション
|
|
23
|
+
* @returns サニタイズされたシグネチャ
|
|
24
|
+
*/
|
|
25
|
+
export declare function sanitizeTreeSitterSignature(nodeText: string, options?: {
|
|
26
|
+
/** trueの場合、切り詰め前に空白を正規化 (Java用) */
|
|
27
|
+
normalizeFirst?: boolean;
|
|
28
|
+
/** 最大文字数 (デフォルト: 200) */
|
|
29
|
+
maxLength?: number;
|
|
30
|
+
}): string;
|
|
31
|
+
/**
|
|
32
|
+
* シンボル配列をソートしてIDを割り当て
|
|
33
|
+
*
|
|
34
|
+
* @param symbols - symbolIdを除いたシンボル配列
|
|
35
|
+
* @returns symbolIdが割り当てられたシンボル配列
|
|
36
|
+
*/
|
|
37
|
+
export declare function assignSymbolIds(symbols: Array<Omit<SymbolRecord, "symbolId">>): SymbolRecord[];
|
|
38
|
+
/**
|
|
39
|
+
* シンボル配列からスニペット配列を生成
|
|
40
|
+
*
|
|
41
|
+
* @param symbols - シンボル配列
|
|
42
|
+
* @returns スニペット配列
|
|
43
|
+
*/
|
|
44
|
+
export declare function symbolsToSnippets(symbols: SymbolRecord[]): SnippetRecord[];
|
|
45
|
+
/**
|
|
46
|
+
* 依存関係の重複排除ヘルパー
|
|
47
|
+
*
|
|
48
|
+
* @returns record関数とgetDependencies関数を含むオブジェクト
|
|
49
|
+
*/
|
|
50
|
+
export declare function createDependencyRecorder(): {
|
|
51
|
+
/** 依存関係を記録 (重複は自動排除) */
|
|
52
|
+
record: (kind: "path" | "package", dst: string, rel?: string) => void;
|
|
53
|
+
/** 記録された依存関係を取得 */
|
|
54
|
+
getDependencies: () => Array<{
|
|
55
|
+
dstKind: "path" | "package";
|
|
56
|
+
dst: string;
|
|
57
|
+
rel: string;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* ファイル内容から行開始位置の配列を構築
|
|
62
|
+
* offsetToLine()と組み合わせて使用
|
|
63
|
+
*
|
|
64
|
+
* @param content - ファイル内容
|
|
65
|
+
* @returns 各行の開始位置の配列 (0-indexed offset)
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildLineStartsArray(content: string): number[];
|
|
68
|
+
/**
|
|
69
|
+
* オフセットから行番号を取得 (バイナリサーチ)
|
|
70
|
+
*
|
|
71
|
+
* @param lineStarts - buildLineStartsArray()で構築した配列
|
|
72
|
+
* @param offset - バイトオフセット
|
|
73
|
+
* @returns 1-based の行番号
|
|
74
|
+
*/
|
|
75
|
+
export declare function offsetToLine(lineStarts: number[], offset: number): number;
|
|
76
|
+
/**
|
|
77
|
+
* ドキュメントコメントをクリーンアップ
|
|
78
|
+
*
|
|
79
|
+
* @param text - コメントテキスト
|
|
80
|
+
* @returns クリーンアップされたテキスト
|
|
81
|
+
*/
|
|
82
|
+
export declare function cleanDocComment(text: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* フォールバックスニペットを生成
|
|
85
|
+
* シンボルが抽出できない場合にファイル全体をカバー
|
|
86
|
+
*
|
|
87
|
+
* @param totalLines - ファイルの総行数
|
|
88
|
+
* @returns スニペットレコード
|
|
89
|
+
*/
|
|
90
|
+
export declare function buildFallbackSnippet(totalLines: number): SnippetRecord;
|
|
91
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/indexer/codeintel/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAEpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,mCAAmC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,MAAM,CAgBR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,GAAG,YAAY,EAAE,CAK9F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAM1E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,wBAAwB;IACxB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,mBAAmB;IACnB,eAAe,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF,CAYA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ9D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAczE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAEtE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 共通ユーティリティ関数
|
|
3
|
+
*
|
|
4
|
+
* 複数の言語アナライザーで共有されるヘルパー関数を提供します。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* tree-sitter の Point を 1-based の行番号に変換
|
|
8
|
+
*
|
|
9
|
+
* @param position - tree-sitter の位置情報 (0-based row)
|
|
10
|
+
* @returns 1-based の行番号
|
|
11
|
+
*/
|
|
12
|
+
export function treeSitterPointToLine(position) {
|
|
13
|
+
return position.row + 1;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* シグネチャテキストをサニタイズ
|
|
17
|
+
* - 関数本体 ({...}) を除去
|
|
18
|
+
* - 最大長に切り詰め
|
|
19
|
+
* - 空白を正規化
|
|
20
|
+
*
|
|
21
|
+
* @param nodeText - ノードのテキスト
|
|
22
|
+
* @param options - オプション
|
|
23
|
+
* @returns サニタイズされたシグネチャ
|
|
24
|
+
*/
|
|
25
|
+
export function sanitizeTreeSitterSignature(nodeText, options = {}) {
|
|
26
|
+
const { normalizeFirst = false, maxLength = 200 } = options;
|
|
27
|
+
// 関数本体を除去
|
|
28
|
+
const bodyIndex = nodeText.indexOf("{");
|
|
29
|
+
const signatureText = bodyIndex >= 0 ? nodeText.substring(0, bodyIndex) : nodeText;
|
|
30
|
+
if (normalizeFirst) {
|
|
31
|
+
// Java: 先に空白を正規化してから切り詰め
|
|
32
|
+
const normalized = signatureText.replace(/\s+/g, " ").trim();
|
|
33
|
+
return normalized.substring(0, maxLength);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Swift/PHP: 先に切り詰めてから最初の行を取得
|
|
37
|
+
const truncated = signatureText.substring(0, maxLength);
|
|
38
|
+
return truncated.split(/\r?\n/)[0]?.trim().replace(/\s+/g, " ") ?? "";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* シンボル配列をソートしてIDを割り当て
|
|
43
|
+
*
|
|
44
|
+
* @param symbols - symbolIdを除いたシンボル配列
|
|
45
|
+
* @returns symbolIdが割り当てられたシンボル配列
|
|
46
|
+
*/
|
|
47
|
+
export function assignSymbolIds(symbols) {
|
|
48
|
+
// 元の配列を変更しないようにコピーしてからソート
|
|
49
|
+
return [...symbols]
|
|
50
|
+
.sort((a, b) => a.rangeStartLine - b.rangeStartLine)
|
|
51
|
+
.map((item, index) => ({ symbolId: index + 1, ...item }));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* シンボル配列からスニペット配列を生成
|
|
55
|
+
*
|
|
56
|
+
* @param symbols - シンボル配列
|
|
57
|
+
* @returns スニペット配列
|
|
58
|
+
*/
|
|
59
|
+
export function symbolsToSnippets(symbols) {
|
|
60
|
+
return symbols.map((s) => ({
|
|
61
|
+
startLine: s.rangeStartLine,
|
|
62
|
+
endLine: s.rangeEndLine,
|
|
63
|
+
symbolId: s.symbolId,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 依存関係の重複排除ヘルパー
|
|
68
|
+
*
|
|
69
|
+
* @returns record関数とgetDependencies関数を含むオブジェクト
|
|
70
|
+
*/
|
|
71
|
+
export function createDependencyRecorder() {
|
|
72
|
+
const dependencies = new Map();
|
|
73
|
+
return {
|
|
74
|
+
record: (kind, dst, rel = "import") => {
|
|
75
|
+
const key = `${kind}:${dst}`;
|
|
76
|
+
if (!dependencies.has(key)) {
|
|
77
|
+
dependencies.set(key, { dstKind: kind, dst, rel });
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
getDependencies: () => Array.from(dependencies.values()),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* ファイル内容から行開始位置の配列を構築
|
|
85
|
+
* offsetToLine()と組み合わせて使用
|
|
86
|
+
*
|
|
87
|
+
* @param content - ファイル内容
|
|
88
|
+
* @returns 各行の開始位置の配列 (0-indexed offset)
|
|
89
|
+
*/
|
|
90
|
+
export function buildLineStartsArray(content) {
|
|
91
|
+
const lineStarts = [0];
|
|
92
|
+
for (let i = 0; i < content.length; i++) {
|
|
93
|
+
if (content[i] === "\n") {
|
|
94
|
+
lineStarts.push(i + 1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return lineStarts;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* オフセットから行番号を取得 (バイナリサーチ)
|
|
101
|
+
*
|
|
102
|
+
* @param lineStarts - buildLineStartsArray()で構築した配列
|
|
103
|
+
* @param offset - バイトオフセット
|
|
104
|
+
* @returns 1-based の行番号
|
|
105
|
+
*/
|
|
106
|
+
export function offsetToLine(lineStarts, offset) {
|
|
107
|
+
let low = 0;
|
|
108
|
+
let high = lineStarts.length - 1;
|
|
109
|
+
while (low < high) {
|
|
110
|
+
const mid = Math.floor((low + high + 1) / 2);
|
|
111
|
+
if (lineStarts[mid] <= offset) {
|
|
112
|
+
low = mid;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
high = mid - 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return low + 1; // 1-based
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* ドキュメントコメントをクリーンアップ
|
|
122
|
+
*
|
|
123
|
+
* @param text - コメントテキスト
|
|
124
|
+
* @returns クリーンアップされたテキスト
|
|
125
|
+
*/
|
|
126
|
+
export function cleanDocComment(text) {
|
|
127
|
+
return text
|
|
128
|
+
.replace(/^\/\/\/\s?/gm, "") // Swift /// コメント
|
|
129
|
+
.replace(/^\/\/!\s?/gm, "") // Rust //! コメント
|
|
130
|
+
.replace(/^\/\*\*\s?|\s?\*\/$/g, "") // /** ... */ の開始/終了
|
|
131
|
+
.replace(/^\/\*!\s?|\s?\*\/$/g, "") // /*! ... */ の開始/終了
|
|
132
|
+
.replace(/^\s*\*\s?/gm, "") // 中間の * プレフィックス
|
|
133
|
+
.trim();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* フォールバックスニペットを生成
|
|
137
|
+
* シンボルが抽出できない場合にファイル全体をカバー
|
|
138
|
+
*
|
|
139
|
+
* @param totalLines - ファイルの総行数
|
|
140
|
+
* @returns スニペットレコード
|
|
141
|
+
*/
|
|
142
|
+
export function buildFallbackSnippet(totalLines) {
|
|
143
|
+
return { startLine: 1, endLine: totalLines, symbolId: null };
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/indexer/codeintel/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Code Intelligence API
|
|
3
|
+
*
|
|
4
|
+
* 言語アナライザーシステムの公開APIを提供するファサード。
|
|
5
|
+
* 実際の解析処理は codeintel/ モジュールの LanguageRegistry に委譲。
|
|
6
|
+
*
|
|
7
|
+
* 使用例:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { analyzeSource } from './codeintel.js';
|
|
10
|
+
*
|
|
11
|
+
* const result = await analyzeSource('src/index.ts', 'TypeScript', content, fileSet);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export type { SymbolRecord, SnippetRecord, DependencyRecord, AnalysisContext, AnalysisResult, } from "./codeintel/types.js";
|
|
15
|
+
export { buildFallbackSnippet } from "./codeintel/utils.js";
|
|
16
|
+
import type { AnalysisResult } from "./codeintel/types.js";
|
|
17
|
+
/**
|
|
18
|
+
* ソースコードを解析してシンボル、スニペット、依存関係を抽出
|
|
19
|
+
*
|
|
20
|
+
* @param pathInRepo - リポジトリ内のファイルパス
|
|
21
|
+
* @param lang - 言語名 (TypeScript, Swift, PHP, Java, Dart など)
|
|
22
|
+
* @param content - ファイルコンテンツ
|
|
23
|
+
* @param fileSet - リポジトリ内の全ファイルパスセット (依存関係解決用)
|
|
24
|
+
* @param workspaceRoot - ワークスペースルート (Dart 解析で必須)
|
|
25
|
+
* @returns シンボル、スニペット、依存関係を含む解析結果
|
|
26
|
+
*/
|
|
25
27
|
export declare function analyzeSource(pathInRepo: string, lang: string | null, content: string, fileSet: Set<string>, workspaceRoot?: string): Promise<AnalysisResult>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* 全言語アナライザーのリソースをクリーンアップ
|
|
30
|
+
*
|
|
31
|
+
* プロセス終了前に呼び出すことで、
|
|
32
|
+
* Dart Analysis Server などの外部プロセスを適切に終了
|
|
33
|
+
*/
|
|
34
|
+
export declare function cleanup(): Promise<void>;
|
|
28
35
|
//# sourceMappingURL=codeintel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeintel.d.ts","sourceRoot":"","sources":["../../../src/indexer/codeintel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codeintel.d.ts","sourceRoot":"","sources":["../../../src/indexer/codeintel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,YAAY,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAS5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7C"}
|