kiri-mcp-server 0.16.1 → 0.18.0
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 +65 -22
- package/dist/package.json +4 -2
- package/dist/src/client/proxy.js +0 -0
- package/dist/src/daemon/daemon.js +0 -0
- 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/{indexer/codeintel.js → src/indexer/codeintel/typescript/analyzer.js} +62 -34
- 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/dist/src/indexer/graph-metrics.d.ts.map +1 -1
- package/dist/src/indexer/graph-metrics.js +16 -4
- package/dist/src/indexer/graph-metrics.js.map +1 -1
- package/dist/src/server/boost-profiles.d.ts +1 -1
- package/dist/src/server/boost-profiles.d.ts.map +1 -1
- package/dist/src/server/boost-profiles.js +22 -0
- package/dist/src/server/boost-profiles.js.map +1 -1
- package/dist/src/server/main.js +0 -0
- package/dist/src/server/rpc.js +4 -4
- package/dist/src/server/rpc.js.map +1 -1
- package/package.json +10 -2
- package/dist/client/cli.js +0 -68
- package/dist/client/cli.js.map +0 -1
- package/dist/client/index.js +0 -5
- package/dist/client/index.js.map +0 -1
- package/dist/eval/metrics.js +0 -47
- package/dist/eval/metrics.js.map +0 -1
- package/dist/indexer/cli.js +0 -362
- package/dist/indexer/cli.js.map +0 -1
- package/dist/indexer/codeintel.js.map +0 -1
- package/dist/indexer/git.js +0 -30
- package/dist/indexer/git.js.map +0 -1
- package/dist/indexer/language.js +0 -34
- package/dist/indexer/language.js.map +0 -1
- package/dist/indexer/pipeline/filters/denylist.js +0 -71
- package/dist/indexer/pipeline/filters/denylist.js.map +0 -1
- package/dist/indexer/schema.js +0 -101
- package/dist/indexer/schema.js.map +0 -1
- package/dist/server/bootstrap.js +0 -19
- package/dist/server/bootstrap.js.map +0 -1
- package/dist/server/context.js +0 -1
- package/dist/server/context.js.map +0 -1
- package/dist/server/fallbacks/degradeController.js +0 -69
- package/dist/server/fallbacks/degradeController.js.map +0 -1
- package/dist/server/handlers.js +0 -1268
- package/dist/server/handlers.js.map +0 -1
- package/dist/server/main.js +0 -151
- package/dist/server/main.js.map +0 -1
- package/dist/server/observability/metrics.js +0 -56
- package/dist/server/observability/metrics.js.map +0 -1
- package/dist/server/observability/tracing.js +0 -58
- package/dist/server/observability/tracing.js.map +0 -1
- package/dist/server/rpc.js +0 -477
- package/dist/server/rpc.js.map +0 -1
- package/dist/server/runtime.js +0 -47
- package/dist/server/runtime.js.map +0 -1
- package/dist/server/scoring.js +0 -116
- package/dist/server/scoring.js.map +0 -1
- package/dist/server/stdio.js +0 -76
- package/dist/server/stdio.js.map +0 -1
- package/dist/shared/duckdb.js +0 -119
- package/dist/shared/duckdb.js.map +0 -1
- package/dist/shared/embedding.js +0 -98
- package/dist/shared/embedding.js.map +0 -1
- package/dist/shared/index.js +0 -9
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/security/config.js +0 -64
- package/dist/shared/security/config.js.map +0 -1
- package/dist/shared/security/masker.js +0 -56
- package/dist/shared/security/masker.js.map +0 -1
- package/dist/shared/tokenizer.js +0 -4
- package/dist/shared/tokenizer.js.map +0 -1
- package/dist/shared/utils/simpleYaml.js +0 -89
- package/dist/shared/utils/simpleYaml.js.map +0 -1
- package/dist/src/server/rrf.d.ts +0 -86
- package/dist/src/server/rrf.d.ts.map +0 -1
- package/dist/src/server/rrf.js +0 -108
- package/dist/src/server/rrf.js.map +0 -1
- package/dist/src/shared/embedding/engine.d.ts +0 -38
- package/dist/src/shared/embedding/engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/engine.js +0 -6
- package/dist/src/shared/embedding/engine.js.map +0 -1
- package/dist/src/shared/embedding/lsh-engine.d.ts +0 -11
- package/dist/src/shared/embedding/lsh-engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/lsh-engine.js +0 -14
- package/dist/src/shared/embedding/lsh-engine.js.map +0 -1
- package/dist/src/shared/embedding/registry.d.ts +0 -25
- package/dist/src/shared/embedding/registry.d.ts.map +0 -1
- package/dist/src/shared/embedding/registry.js +0 -50
- package/dist/src/shared/embedding/registry.js.map +0 -1
- package/dist/src/shared/embedding/semantic-engine.d.ts +0 -14
- package/dist/src/shared/embedding/semantic-engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/semantic-engine.js +0 -50
- package/dist/src/shared/embedding/semantic-engine.js.map +0 -1
- package/dist/src/shared/models/model-manager.d.ts +0 -38
- package/dist/src/shared/models/model-manager.d.ts.map +0 -1
- package/dist/src/shared/models/model-manager.js +0 -116
- package/dist/src/shared/models/model-manager.js.map +0 -1
- package/dist/src/shared/models/model-manifest.d.ts +0 -22
- package/dist/src/shared/models/model-manifest.d.ts.map +0 -1
- package/dist/src/shared/models/model-manifest.js +0 -24
- package/dist/src/shared/models/model-manifest.js.map +0 -1
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHP Language Analyzer
|
|
3
|
+
*
|
|
4
|
+
* tree-sitter-php を使用したシンボル抽出と依存関係解析。
|
|
5
|
+
* class, interface, trait, function, method, property, constant, namespace をサポート。
|
|
6
|
+
* Pure PHP ファイルと HTML-mixed PHP ファイルの両方に対応。
|
|
7
|
+
*/
|
|
8
|
+
import { createRequire } from "node:module";
|
|
9
|
+
import Parser from "tree-sitter";
|
|
10
|
+
import { treeSitterPointToLine, sanitizeTreeSitterSignature, assignSymbolIds, symbolsToSnippets, createDependencyRecorder, cleanDocComment, } from "../utils.js";
|
|
11
|
+
// tree-sitter-php is a CommonJS module, so import it using require.
|
|
12
|
+
// tree-sitter-php: Using version 0.22.8 for compatibility with tree-sitter 0.22.4.
|
|
13
|
+
// Version 0.24.2 had a nodeTypeInfo bug that caused runtime errors.
|
|
14
|
+
// php_only: for pure PHP files (<?php at start)
|
|
15
|
+
// php: for HTML-mixed PHP files (HTML with <?php ... ?> tags)
|
|
16
|
+
const require = createRequire(import.meta.url);
|
|
17
|
+
const PHPModule = require("tree-sitter-php");
|
|
18
|
+
const PHP_ONLY = PHPModule.php_only;
|
|
19
|
+
const PHP_MIXED = PHPModule.php;
|
|
20
|
+
/**
|
|
21
|
+
* PHP ファイルが pure PHP か HTML-mixed かを検出
|
|
22
|
+
*
|
|
23
|
+
* Pure PHP: ファイル先頭が <?php タグで始まる (空白、shebang、BOM は許容)
|
|
24
|
+
* HTML-mixed: <?php タグより前に HTML コンテンツがある
|
|
25
|
+
*
|
|
26
|
+
* 対応するケース:
|
|
27
|
+
* - 大文字小文字を無視した PHP タグ (<?php, <?PHP)
|
|
28
|
+
* - ショートタグ (<?=)
|
|
29
|
+
* - shebang (#!/usr/bin/env php)
|
|
30
|
+
* - UTF-8 BOM (\uFEFF)
|
|
31
|
+
*/
|
|
32
|
+
function detectPHPType(content) {
|
|
33
|
+
// Regex to find the first PHP open tag, ignoring shebangs, whitespace, and BOM.
|
|
34
|
+
// It checks for <?php (case-insensitive), <?=, or <? (short tag)
|
|
35
|
+
const phpTagRegex = /^(?:\s*|#!\/.*?\n|\uFEFF)*<\?(?:php|=)?/i;
|
|
36
|
+
const match = content.match(phpTagRegex);
|
|
37
|
+
if (!match) {
|
|
38
|
+
// No PHP tags found at the beginning - treat as HTML-mixed
|
|
39
|
+
return "html-mixed";
|
|
40
|
+
}
|
|
41
|
+
// If the match occurs at or near the beginning (after only whitespace/shebang/BOM),
|
|
42
|
+
// it's a pure PHP file
|
|
43
|
+
return "pure";
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* PHPDoc コメント (ブロックコメント形式) を抽出
|
|
47
|
+
*/
|
|
48
|
+
function getPHPDocComment(node, content) {
|
|
49
|
+
const parent = node.parent;
|
|
50
|
+
if (!parent)
|
|
51
|
+
return null;
|
|
52
|
+
// 親ノードのすべての子から、このノードの直前にあるコメントを探す
|
|
53
|
+
const precedingComments = [];
|
|
54
|
+
const siblings = parent.children;
|
|
55
|
+
const nodeIndex = siblings.indexOf(node);
|
|
56
|
+
// このノードより前の兄弟を逆順で調べる
|
|
57
|
+
for (let i = nodeIndex - 1; i >= 0; i--) {
|
|
58
|
+
const sibling = siblings[i];
|
|
59
|
+
if (!sibling)
|
|
60
|
+
continue;
|
|
61
|
+
// commentをチェック
|
|
62
|
+
if (sibling.type === "comment") {
|
|
63
|
+
const commentText = content.substring(sibling.startIndex, sibling.endIndex);
|
|
64
|
+
// PHPDoc コメント形式のみ抽出
|
|
65
|
+
if (commentText.startsWith("/**") && commentText.endsWith("*/")) {
|
|
66
|
+
precedingComments.unshift(cleanDocComment(commentText));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (sibling.type !== "text" && !sibling.text.trim().match(/^\s*$/)) {
|
|
70
|
+
// コメント以外の実質的なノードに到達したら終了
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (precedingComments.length === 0) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return precedingComments.join("\n");
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 子ノードから名前を抽出
|
|
81
|
+
*/
|
|
82
|
+
function extractName(node, content) {
|
|
83
|
+
function findName(n) {
|
|
84
|
+
if (n.type === "name") {
|
|
85
|
+
return n;
|
|
86
|
+
}
|
|
87
|
+
for (const child of n.namedChildren) {
|
|
88
|
+
const found = findName(child);
|
|
89
|
+
if (found)
|
|
90
|
+
return found;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const nameNode = findName(node);
|
|
95
|
+
return nameNode ? content.substring(nameNode.startIndex, nameNode.endIndex) : null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* シンボルレコードを作成
|
|
99
|
+
*/
|
|
100
|
+
function createPHPSymbolRecords(tree, content) {
|
|
101
|
+
const results = [];
|
|
102
|
+
/**
|
|
103
|
+
* ノードからシグネチャを取得
|
|
104
|
+
*/
|
|
105
|
+
function getSignature(node) {
|
|
106
|
+
const nodeText = content.substring(node.startIndex, node.endIndex);
|
|
107
|
+
return sanitizeTreeSitterSignature(nodeText);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* ツリーを再帰的にトラバースしてシンボルを抽出
|
|
111
|
+
*/
|
|
112
|
+
function visit(node) {
|
|
113
|
+
// class_declaration: クラス宣言
|
|
114
|
+
if (node.type === "class_declaration") {
|
|
115
|
+
const name = extractName(node, content);
|
|
116
|
+
if (name) {
|
|
117
|
+
results.push({
|
|
118
|
+
name,
|
|
119
|
+
kind: "class",
|
|
120
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
121
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
122
|
+
signature: getSignature(node),
|
|
123
|
+
doc: getPHPDocComment(node, content),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// interface_declaration: インターフェース宣言
|
|
128
|
+
else if (node.type === "interface_declaration") {
|
|
129
|
+
const name = extractName(node, content);
|
|
130
|
+
if (name) {
|
|
131
|
+
results.push({
|
|
132
|
+
name,
|
|
133
|
+
kind: "interface",
|
|
134
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
135
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
136
|
+
signature: getSignature(node),
|
|
137
|
+
doc: getPHPDocComment(node, content),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// trait_declaration: トレイト宣言
|
|
142
|
+
else if (node.type === "trait_declaration") {
|
|
143
|
+
const name = extractName(node, content);
|
|
144
|
+
if (name) {
|
|
145
|
+
results.push({
|
|
146
|
+
name,
|
|
147
|
+
kind: "trait",
|
|
148
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
149
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
150
|
+
signature: getSignature(node),
|
|
151
|
+
doc: getPHPDocComment(node, content),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// function_definition: トップレベル関数またはメソッド
|
|
156
|
+
else if (node.type === "function_definition" || node.type === "method_declaration") {
|
|
157
|
+
const name = extractName(node, content);
|
|
158
|
+
if (name) {
|
|
159
|
+
// 親がclass_declaration/trait_declaration/interface_declarationの子孫の場合はmethod、それ以外はfunction
|
|
160
|
+
let isMethod = false;
|
|
161
|
+
let parentNode = node.parent;
|
|
162
|
+
while (parentNode) {
|
|
163
|
+
if (parentNode.type === "class_declaration" ||
|
|
164
|
+
parentNode.type === "trait_declaration" ||
|
|
165
|
+
parentNode.type === "interface_declaration") {
|
|
166
|
+
isMethod = true;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
parentNode = parentNode.parent;
|
|
170
|
+
}
|
|
171
|
+
const kind = isMethod ? "method" : "function";
|
|
172
|
+
results.push({
|
|
173
|
+
name,
|
|
174
|
+
kind,
|
|
175
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
176
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
177
|
+
signature: getSignature(node),
|
|
178
|
+
doc: getPHPDocComment(node, content),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// property_declaration: プロパティ
|
|
183
|
+
else if (node.type === "property_declaration") {
|
|
184
|
+
// property_element から変数名を抽出
|
|
185
|
+
const propertyElement = node.namedChildren.find((child) => child.type === "property_element");
|
|
186
|
+
if (propertyElement) {
|
|
187
|
+
const variableNameNode = propertyElement.namedChildren.find((child) => child.type === "variable_name");
|
|
188
|
+
if (variableNameNode) {
|
|
189
|
+
const name = content
|
|
190
|
+
.substring(variableNameNode.startIndex, variableNameNode.endIndex)
|
|
191
|
+
.replace(/^\$/, ""); // $を除去
|
|
192
|
+
results.push({
|
|
193
|
+
name,
|
|
194
|
+
kind: "property",
|
|
195
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
196
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
197
|
+
signature: getSignature(node),
|
|
198
|
+
doc: getPHPDocComment(node, content),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// const_declaration: 定数(クラス定数)
|
|
204
|
+
else if (node.type === "const_declaration") {
|
|
205
|
+
const constElement = node.namedChildren.find((child) => child.type === "const_element");
|
|
206
|
+
if (constElement) {
|
|
207
|
+
const name = extractName(constElement, content);
|
|
208
|
+
if (name) {
|
|
209
|
+
results.push({
|
|
210
|
+
name,
|
|
211
|
+
kind: "constant",
|
|
212
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
213
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
214
|
+
signature: getSignature(node),
|
|
215
|
+
doc: getPHPDocComment(node, content),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// namespace_definition: 名前空間
|
|
221
|
+
else if (node.type === "namespace_definition") {
|
|
222
|
+
const namespaceName = node.namedChildren.find((child) => child.type === "namespace_name");
|
|
223
|
+
if (namespaceName) {
|
|
224
|
+
const name = content.substring(namespaceName.startIndex, namespaceName.endIndex);
|
|
225
|
+
results.push({
|
|
226
|
+
name,
|
|
227
|
+
kind: "namespace",
|
|
228
|
+
rangeStartLine: treeSitterPointToLine(node.startPosition),
|
|
229
|
+
rangeEndLine: treeSitterPointToLine(node.endPosition),
|
|
230
|
+
signature: getSignature(node),
|
|
231
|
+
doc: getPHPDocComment(node, content),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// 子ノードを再帰的に訪問
|
|
236
|
+
for (const child of node.namedChildren) {
|
|
237
|
+
visit(child);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
visit(tree.rootNode);
|
|
241
|
+
return assignSymbolIds(results);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* PHP の use 文を解析して依存関係を収集
|
|
245
|
+
*/
|
|
246
|
+
function collectPHPDependencies(_sourcePath, tree, content, _fileSet) {
|
|
247
|
+
const { record, getDependencies } = createDependencyRecorder();
|
|
248
|
+
function visit(node) {
|
|
249
|
+
// namespace_use_declaration: use文
|
|
250
|
+
if (node.type === "namespace_use_declaration") {
|
|
251
|
+
// namespace_use_clauseを探す(通常のuse文)
|
|
252
|
+
const useClauses = node.namedChildren.filter((child) => child.type === "namespace_use_clause");
|
|
253
|
+
for (const useClause of useClauses) {
|
|
254
|
+
// qualified_nameまたはnameを抽出
|
|
255
|
+
const qualifiedName = useClause.namedChildren.find((child) => child.type === "qualified_name" || child.type === "name");
|
|
256
|
+
if (qualifiedName) {
|
|
257
|
+
const importName = content.substring(qualifiedName.startIndex, qualifiedName.endIndex);
|
|
258
|
+
// Treat all namespaced imports as packages until composer.json parsing is implemented.
|
|
259
|
+
// PSR-4 maps namespace prefixes to base directories (e.g., App\ -> src/),
|
|
260
|
+
// not relative paths from the current file's directory.
|
|
261
|
+
// TODO: Implement proper PSR-4 resolution by parsing composer.json
|
|
262
|
+
record("package", importName);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// namespace_use_groupを探す(グループ化されたuse文: use Foo\{Bar, Baz};)
|
|
266
|
+
const useGroups = node.namedChildren.filter((child) => child.type === "namespace_use_group");
|
|
267
|
+
if (useGroups.length > 0) {
|
|
268
|
+
// プレフィックスを取得(例: App\Services)
|
|
269
|
+
const prefixNode = node.namedChildren.find((child) => child.type === "namespace_name");
|
|
270
|
+
const prefix = prefixNode
|
|
271
|
+
? content.substring(prefixNode.startIndex, prefixNode.endIndex)
|
|
272
|
+
: "";
|
|
273
|
+
for (const useGroup of useGroups) {
|
|
274
|
+
// namespace_use_group_clauseを処理
|
|
275
|
+
const groupClauses = useGroup.namedChildren.filter((child) => child.type === "namespace_use_group_clause");
|
|
276
|
+
for (const groupClause of groupClauses) {
|
|
277
|
+
const namespaceName = groupClause.namedChildren.find((child) => child.type === "namespace_name" || child.type === "name");
|
|
278
|
+
if (namespaceName) {
|
|
279
|
+
const suffix = content.substring(namespaceName.startIndex, namespaceName.endIndex);
|
|
280
|
+
const fullName = prefix ? `${prefix}\\${suffix}` : suffix;
|
|
281
|
+
// Treat all namespaced imports as packages (same reasoning as above)
|
|
282
|
+
record("package", fullName);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// 子ノードを再帰的に訪問
|
|
289
|
+
for (const child of node.namedChildren) {
|
|
290
|
+
visit(child);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
visit(tree.rootNode);
|
|
294
|
+
return getDependencies();
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* PHP Language Analyzer
|
|
298
|
+
*
|
|
299
|
+
* LanguageAnalyzer インターフェースを実装し、
|
|
300
|
+
* PHP ファイルのシンボル抽出と依存関係解析を提供
|
|
301
|
+
*/
|
|
302
|
+
export class PHPAnalyzer {
|
|
303
|
+
language = "PHP";
|
|
304
|
+
async analyze(context) {
|
|
305
|
+
const { pathInRepo, content, fileSet } = context;
|
|
306
|
+
try {
|
|
307
|
+
// Create new parser instance for each file (thread-safety for concurrent processing)
|
|
308
|
+
const parser = new Parser();
|
|
309
|
+
// tree-sitter-php provides two parsers:
|
|
310
|
+
// - php_only: for pure PHP files (<?php at start)
|
|
311
|
+
// - php: for HTML-mixed PHP files (HTML with <?php ... ?> tags)
|
|
312
|
+
const phpType = detectPHPType(content);
|
|
313
|
+
const language = phpType === "html-mixed" ? PHP_MIXED : PHP_ONLY;
|
|
314
|
+
// Validate language object before setting it
|
|
315
|
+
if (!language || typeof language !== "object") {
|
|
316
|
+
throw new Error(`Tree-sitter language for PHP type "${phpType}" is invalid or undefined`);
|
|
317
|
+
}
|
|
318
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
319
|
+
parser.setLanguage(language);
|
|
320
|
+
const tree = parser.parse(content);
|
|
321
|
+
// シンボル抽出
|
|
322
|
+
const symbols = createPHPSymbolRecords(tree, content);
|
|
323
|
+
// シンボルからスニペットを生成
|
|
324
|
+
const snippets = symbolsToSnippets(symbols);
|
|
325
|
+
// 依存関係を収集
|
|
326
|
+
const dependencies = collectPHPDependencies(pathInRepo, tree, content, fileSet);
|
|
327
|
+
return { symbols, snippets, dependencies };
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
// パース失敗時は空の結果を返して他のファイルの処理を継続
|
|
331
|
+
console.error(`Failed to parse PHP file ${pathInRepo}:`, error);
|
|
332
|
+
return { symbols: [], snippets: [], dependencies: [] };
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* PHP アナライザーのファクトリ関数
|
|
338
|
+
*/
|
|
339
|
+
export function createPHPAnalyzer() {
|
|
340
|
+
return new PHPAnalyzer();
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/php/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/php/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/php/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Analyzer Registry
|
|
3
|
+
*
|
|
4
|
+
* Alloyで検証済みのPlan A (Central Registry) 設計に基づく実装。
|
|
5
|
+
*
|
|
6
|
+
* 検証済みの不変条件:
|
|
7
|
+
* - NoConflictingAnalyzers: 各言語に対して最大1つのアナライザー
|
|
8
|
+
* - DeterministicLookup: レジストリ検索は決定的
|
|
9
|
+
* - LockConsistency: ファイルレベルのロック整合性
|
|
10
|
+
* - NoDeadlock: デッドロックなし
|
|
11
|
+
*/
|
|
12
|
+
import type { AnalysisContext, AnalysisResult, LanguageAnalyzer } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* 言語アナライザーを管理するシングルトンレジストリ
|
|
15
|
+
*/
|
|
16
|
+
export declare class LanguageRegistry {
|
|
17
|
+
private static instance;
|
|
18
|
+
private readonly analyzers;
|
|
19
|
+
private constructor();
|
|
20
|
+
/**
|
|
21
|
+
* レジストリのシングルトンインスタンスを取得
|
|
22
|
+
*/
|
|
23
|
+
static getInstance(): LanguageRegistry;
|
|
24
|
+
/**
|
|
25
|
+
* テスト用: レジストリをリセット
|
|
26
|
+
*/
|
|
27
|
+
static resetForTesting(): void;
|
|
28
|
+
/**
|
|
29
|
+
* アナライザーを登録
|
|
30
|
+
*
|
|
31
|
+
* @param analyzer - 登録するアナライザー
|
|
32
|
+
* @throws Error - 同じ言語のアナライザーが既に登録されている場合
|
|
33
|
+
*/
|
|
34
|
+
register(analyzer: LanguageAnalyzer): void;
|
|
35
|
+
/**
|
|
36
|
+
* 既存のアナライザーを置換
|
|
37
|
+
* 既存のアナライザーがあればdispose()を呼び出してから置換
|
|
38
|
+
*
|
|
39
|
+
* @param analyzer - 新しいアナライザー
|
|
40
|
+
*/
|
|
41
|
+
replace(analyzer: LanguageAnalyzer): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* 指定した言語のアナライザーを取得
|
|
44
|
+
*
|
|
45
|
+
* @param language - 言語識別子
|
|
46
|
+
* @returns アナライザー (未登録の場合はundefined)
|
|
47
|
+
*/
|
|
48
|
+
getAnalyzer(language: string): LanguageAnalyzer | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* 指定した言語がサポートされているかを確認
|
|
51
|
+
*
|
|
52
|
+
* @param language - 言語識別子
|
|
53
|
+
* @returns サポートされていればtrue
|
|
54
|
+
*/
|
|
55
|
+
isSupported(language: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* 登録されている全ての言語を取得
|
|
58
|
+
*
|
|
59
|
+
* @returns 言語識別子の配列
|
|
60
|
+
*/
|
|
61
|
+
getRegisteredLanguages(): string[];
|
|
62
|
+
/**
|
|
63
|
+
* ソースコードを解析
|
|
64
|
+
*
|
|
65
|
+
* @param language - 言語識別子 (nullの場合は空の結果を返す)
|
|
66
|
+
* @param context - 解析コンテキスト
|
|
67
|
+
* @returns 解析結果
|
|
68
|
+
*/
|
|
69
|
+
analyze(language: string | null, context: AnalysisContext): Promise<AnalysisResult>;
|
|
70
|
+
/**
|
|
71
|
+
* 全てのアナライザーのリソースを解放
|
|
72
|
+
* プロセス終了時やテスト終了時に呼び出す
|
|
73
|
+
*/
|
|
74
|
+
cleanup(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/indexer/codeintel/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpF;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,IAAI;IAQ9B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAU1C;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI3D;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;;;;;OAMG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAazF;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Analyzer Registry
|
|
3
|
+
*
|
|
4
|
+
* Alloyで検証済みのPlan A (Central Registry) 設計に基づく実装。
|
|
5
|
+
*
|
|
6
|
+
* 検証済みの不変条件:
|
|
7
|
+
* - NoConflictingAnalyzers: 各言語に対して最大1つのアナライザー
|
|
8
|
+
* - DeterministicLookup: レジストリ検索は決定的
|
|
9
|
+
* - LockConsistency: ファイルレベルのロック整合性
|
|
10
|
+
* - NoDeadlock: デッドロックなし
|
|
11
|
+
*/
|
|
12
|
+
import { emptyResult } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* 言語アナライザーを管理するシングルトンレジストリ
|
|
15
|
+
*/
|
|
16
|
+
export class LanguageRegistry {
|
|
17
|
+
static instance = null;
|
|
18
|
+
analyzers = new Map();
|
|
19
|
+
constructor() {
|
|
20
|
+
// シングルトンパターン: 外部からのインスタンス化を防止
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* レジストリのシングルトンインスタンスを取得
|
|
24
|
+
*/
|
|
25
|
+
static getInstance() {
|
|
26
|
+
if (!LanguageRegistry.instance) {
|
|
27
|
+
LanguageRegistry.instance = new LanguageRegistry();
|
|
28
|
+
}
|
|
29
|
+
return LanguageRegistry.instance;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* テスト用: レジストリをリセット
|
|
33
|
+
*/
|
|
34
|
+
static resetForTesting() {
|
|
35
|
+
if (LanguageRegistry.instance) {
|
|
36
|
+
// 既存のアナライザーをクリーンアップ (同期的)
|
|
37
|
+
LanguageRegistry.instance.analyzers.clear();
|
|
38
|
+
}
|
|
39
|
+
LanguageRegistry.instance = null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* アナライザーを登録
|
|
43
|
+
*
|
|
44
|
+
* @param analyzer - 登録するアナライザー
|
|
45
|
+
* @throws Error - 同じ言語のアナライザーが既に登録されている場合
|
|
46
|
+
*/
|
|
47
|
+
register(analyzer) {
|
|
48
|
+
if (this.analyzers.has(analyzer.language)) {
|
|
49
|
+
throw new Error(`Analyzer already registered for language: ${analyzer.language}. ` +
|
|
50
|
+
`Use replace() to update an existing analyzer.`);
|
|
51
|
+
}
|
|
52
|
+
this.analyzers.set(analyzer.language, analyzer);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 既存のアナライザーを置換
|
|
56
|
+
* 既存のアナライザーがあればdispose()を呼び出してから置換
|
|
57
|
+
*
|
|
58
|
+
* @param analyzer - 新しいアナライザー
|
|
59
|
+
*/
|
|
60
|
+
async replace(analyzer) {
|
|
61
|
+
const existing = this.analyzers.get(analyzer.language);
|
|
62
|
+
if (existing?.dispose) {
|
|
63
|
+
await existing.dispose();
|
|
64
|
+
}
|
|
65
|
+
this.analyzers.set(analyzer.language, analyzer);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 指定した言語のアナライザーを取得
|
|
69
|
+
*
|
|
70
|
+
* @param language - 言語識別子
|
|
71
|
+
* @returns アナライザー (未登録の場合はundefined)
|
|
72
|
+
*/
|
|
73
|
+
getAnalyzer(language) {
|
|
74
|
+
return this.analyzers.get(language);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 指定した言語がサポートされているかを確認
|
|
78
|
+
*
|
|
79
|
+
* @param language - 言語識別子
|
|
80
|
+
* @returns サポートされていればtrue
|
|
81
|
+
*/
|
|
82
|
+
isSupported(language) {
|
|
83
|
+
return this.analyzers.has(language);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 登録されている全ての言語を取得
|
|
87
|
+
*
|
|
88
|
+
* @returns 言語識別子の配列
|
|
89
|
+
*/
|
|
90
|
+
getRegisteredLanguages() {
|
|
91
|
+
return Array.from(this.analyzers.keys());
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* ソースコードを解析
|
|
95
|
+
*
|
|
96
|
+
* @param language - 言語識別子 (nullの場合は空の結果を返す)
|
|
97
|
+
* @param context - 解析コンテキスト
|
|
98
|
+
* @returns 解析結果
|
|
99
|
+
*/
|
|
100
|
+
async analyze(language, context) {
|
|
101
|
+
if (!language) {
|
|
102
|
+
return emptyResult();
|
|
103
|
+
}
|
|
104
|
+
const analyzer = this.analyzers.get(language);
|
|
105
|
+
if (!analyzer) {
|
|
106
|
+
return emptyResult();
|
|
107
|
+
}
|
|
108
|
+
return analyzer.analyze(context);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 全てのアナライザーのリソースを解放
|
|
112
|
+
* プロセス終了時やテスト終了時に呼び出す
|
|
113
|
+
*/
|
|
114
|
+
async cleanup() {
|
|
115
|
+
const disposePromises = [];
|
|
116
|
+
for (const analyzer of this.analyzers.values()) {
|
|
117
|
+
if (analyzer.dispose) {
|
|
118
|
+
disposePromises.push(analyzer.dispose().catch((err) => {
|
|
119
|
+
console.error(`Failed to dispose analyzer for ${analyzer.language}:`, err);
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
await Promise.allSettled(disposePromises);
|
|
124
|
+
this.analyzers.clear();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/indexer/codeintel/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Language Analyzer
|
|
3
|
+
*
|
|
4
|
+
* tree-sitter-rust を使用して Rust コードのシンボルと依存関係を抽出する。
|
|
5
|
+
* 構造化シンボルは struct/enum/trait/impl/fn/mod/type/const/static/macro を対象とし、
|
|
6
|
+
* use/extern crate/mod から依存関係を推定する。
|
|
7
|
+
*/
|
|
8
|
+
import type { AnalysisContext, AnalysisResult, LanguageAnalyzer } from "../types.js";
|
|
9
|
+
export declare class RustAnalyzer implements LanguageAnalyzer {
|
|
10
|
+
readonly language = "Rust";
|
|
11
|
+
analyze(context: AnalysisContext): Promise<AnalysisResult>;
|
|
12
|
+
}
|
|
13
|
+
export declare function createRustAnalyzer(): RustAnalyzer;
|
|
14
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../../../src/indexer/codeintel/rust/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAgB,MAAM,aAAa,CAAC;AAgcnG,qBAAa,YAAa,YAAW,gBAAgB;IACnD,QAAQ,CAAC,QAAQ,UAAU;IAErB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAwBjE;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
|