kibi-cli 0.12.3 → 0.12.4
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/dist/extractors/symbols-coordinator.d.ts +1 -1
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +36 -2
- package/dist/traceability/symbol-extract.d.ts +1 -1
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +25 -4
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ManifestSymbolEntry, enrichSymbolCoordinatesWithTsMorph } from "./symbols-ts.js";
|
|
2
2
|
export type { ManifestSymbolEntry };
|
|
3
3
|
export type SourceAnalysisMode = "parser" | "fallback";
|
|
4
|
-
export type SourceSymbolKind = "function" | "class" | "interface" | "type" | "enum" | "variable" | "unknown";
|
|
4
|
+
export type SourceSymbolKind = "function" | "class" | "method" | "interface" | "type" | "enum" | "variable" | "unknown";
|
|
5
5
|
export interface SourceSymbolAnalysis {
|
|
6
6
|
name: string;
|
|
7
7
|
kind: SourceSymbolKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,mBAAmB,EAExB,kCAAkC,EACnC,MAAM,iBAAiB,CAAC;AAazB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACtE;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAED,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,OAAO,kCAAkC,CAAC;CAChE;AA+BD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAClC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,oBAAoB,CAAC;AAkCxB,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqChC"}
|
|
1
|
+
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,mBAAmB,EAExB,kCAAkC,EACnC,MAAM,iBAAiB,CAAC;AAazB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACtE;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAED,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,OAAO,kCAAkC,CAAC;CAChE;AA+BD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAClC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,oBAAoB,CAAC;AAkCxB,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqChC"}
|
|
@@ -184,10 +184,16 @@ function collectSourceSymbols(sourceFile) {
|
|
|
184
184
|
for (const decl of sourceFile.getClasses()) {
|
|
185
185
|
if (!decl.isExported())
|
|
186
186
|
continue;
|
|
187
|
-
symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "class", decl.getNameNode() ?? decl, decl,
|
|
187
|
+
symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "class", decl.getNameNode() ?? decl, decl, decl
|
|
188
188
|
.getJsDocs()
|
|
189
189
|
.map((doc) => doc.getFullText())
|
|
190
|
-
.join("\n")
|
|
190
|
+
.join("\n")));
|
|
191
|
+
for (const method of decl.getMethods()) {
|
|
192
|
+
symbols.push(toSourceSymbolAnalysis(sourceFile, formatMethodSymbolName(decl.getName(), method.getName()), "method", method.getNameNode() ?? method, method, `${method.getFullText()}\n${method
|
|
193
|
+
.getJsDocs()
|
|
194
|
+
.map((doc) => doc.getFullText())
|
|
195
|
+
.join("\n")}`));
|
|
196
|
+
}
|
|
191
197
|
}
|
|
192
198
|
for (const decl of sourceFile.getInterfaces()) {
|
|
193
199
|
if (!decl.isExported())
|
|
@@ -226,6 +232,9 @@ function toSourceSymbolAnalysis(sourceFile, name, kind, startNode, endNode, dire
|
|
|
226
232
|
directiveText,
|
|
227
233
|
};
|
|
228
234
|
}
|
|
235
|
+
function formatMethodSymbolName(className, methodName) {
|
|
236
|
+
return className ? `${className}.${methodName}` : methodName;
|
|
237
|
+
}
|
|
229
238
|
function chooseScriptKind(filePath) {
|
|
230
239
|
const lower = filePath.toLowerCase();
|
|
231
240
|
if (lower.endsWith(".tsx"))
|
|
@@ -252,6 +261,22 @@ function inferModuleTitle(filePath) {
|
|
|
252
261
|
return basename.length > 0 ? basename : path.basename(filePath);
|
|
253
262
|
}
|
|
254
263
|
function findNamedDeclaration(sourceFile, title) {
|
|
264
|
+
const qualifiedMethod = parseQualifiedMethodTitle(title);
|
|
265
|
+
if (qualifiedMethod) {
|
|
266
|
+
for (const cls of sourceFile.getClasses()) {
|
|
267
|
+
if (cls.getName() !== qualifiedMethod.className)
|
|
268
|
+
continue;
|
|
269
|
+
for (const method of cls.getMethods()) {
|
|
270
|
+
if (method.getName() !== qualifiedMethod.methodName)
|
|
271
|
+
continue;
|
|
272
|
+
const nameNode = method.getNameNode();
|
|
273
|
+
if (!nameNode)
|
|
274
|
+
continue;
|
|
275
|
+
return { node: method, getNameNode: () => nameNode };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
255
280
|
const candidates = [];
|
|
256
281
|
for (const decl of sourceFile.getFunctions()) {
|
|
257
282
|
if (!decl.isExported())
|
|
@@ -357,3 +382,12 @@ function findNamedDeclaration(sourceFile, title) {
|
|
|
357
382
|
candidates.sort((a, b) => a.getNameNode().getStart() - b.getNameNode().getStart());
|
|
358
383
|
return candidates[0] ?? null;
|
|
359
384
|
}
|
|
385
|
+
function parseQualifiedMethodTitle(title) {
|
|
386
|
+
const separatorIndex = title.lastIndexOf(".");
|
|
387
|
+
if (separatorIndex <= 0 || separatorIndex === title.length - 1)
|
|
388
|
+
return null;
|
|
389
|
+
return {
|
|
390
|
+
className: title.slice(0, separatorIndex),
|
|
391
|
+
methodName: title.slice(separatorIndex + 1),
|
|
392
|
+
};
|
|
393
|
+
}
|
|
@@ -6,7 +6,7 @@ type TraceabilityRelationship = {
|
|
|
6
6
|
export interface ExtractedSymbol {
|
|
7
7
|
id: string;
|
|
8
8
|
name: string;
|
|
9
|
-
kind: "function" | "class" | "interface" | "type" | "variable" | "enum" | "unknown";
|
|
9
|
+
kind: "function" | "class" | "method" | "interface" | "type" | "variable" | "enum" | "unknown";
|
|
10
10
|
location: {
|
|
11
11
|
file: string;
|
|
12
12
|
startLine: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,UAAU,GACV,MAAM,GACN,SAAS,CAAC;IACd,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAkOD,wBAAgB,4BAA4B,CAE1C,UAAU,EAAE,UAAU,EACtB,cAAc,CAAC,EAAE,cAAc,GAC9B,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,UAAU,GACV,OAAO,GACP,QAAQ,GACR,WAAW,GACX,MAAM,GACN,UAAU,GACV,MAAM,GACN,SAAS,CAAC;IACd,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAkOD,wBAAgB,4BAA4B,CAE1C,UAAU,EAAE,UAAU,EACtB,cAAc,CAAC,EAAE,cAAc,GAC9B,eAAe,EAAE,CAyOnB"}
|
|
@@ -229,15 +229,30 @@ stagedFile, manifestLookup) {
|
|
|
229
229
|
const start = cls.getNameNode()?.getStart() ?? cls.getStart();
|
|
230
230
|
const end = cls.getEnd();
|
|
231
231
|
const span = getSpan(start, end);
|
|
232
|
-
const reqLinks = parseReqDirectives(
|
|
233
|
-
.getJsDocs()
|
|
234
|
-
.map((d) => d.getFullText())
|
|
235
|
-
.join("\n")}`);
|
|
232
|
+
const reqLinks = parseReqDirectives(getJsDocText(cls.getJsDocs()));
|
|
236
233
|
results.push(buildSymbolResult(stagedFile, name, "class", span, reqLinks, manifestLookup));
|
|
237
234
|
}
|
|
238
235
|
catch {
|
|
239
236
|
void stagedFile.path;
|
|
240
237
|
}
|
|
238
|
+
for (const method of typeof cls.getMethods === "function"
|
|
239
|
+
? cls.getMethods()
|
|
240
|
+
: []) {
|
|
241
|
+
try {
|
|
242
|
+
const name = formatMethodSymbolName(cls.getName(), method.getName());
|
|
243
|
+
const start = method.getNameNode()?.getStart() ?? method.getStart();
|
|
244
|
+
const end = method.getEnd();
|
|
245
|
+
const span = getSpan(start, end);
|
|
246
|
+
const reqLinks = parseReqDirectives(`${method.getFullText()}\n${method
|
|
247
|
+
.getJsDocs()
|
|
248
|
+
.map((d) => d.getFullText())
|
|
249
|
+
.join("\n")}`);
|
|
250
|
+
results.push(buildSymbolResult(stagedFile, name, "method", span, reqLinks, manifestLookup));
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
void stagedFile.path;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
241
256
|
}
|
|
242
257
|
// Enums
|
|
243
258
|
for (const en of sf.getEnums()) {
|
|
@@ -315,6 +330,12 @@ stagedFile, manifestLookup) {
|
|
|
315
330
|
}
|
|
316
331
|
return results;
|
|
317
332
|
}
|
|
333
|
+
function formatMethodSymbolName(className, methodName) {
|
|
334
|
+
return className ? `${className}.${methodName}` : methodName;
|
|
335
|
+
}
|
|
336
|
+
function getJsDocText(jsDocs) {
|
|
337
|
+
return jsDocs.map((d) => d.getFullText()).join("\n");
|
|
338
|
+
}
|
|
318
339
|
function intersectingHunks(startLine, endLine, hunks) {
|
|
319
340
|
const out = [];
|
|
320
341
|
for (const h of hunks) {
|