scip-query 0.4.1 → 0.4.3
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/{chunk-JHVQB4Y5.js → chunk-334PCFO3.js} +12 -12
- package/dist/{chunk-OXX3QF24.js → chunk-46ZTW4AI.js} +2 -2
- package/dist/{chunk-24LF6IZB.js → chunk-4YN3PE57.js} +3 -3
- package/dist/{chunk-3NJSJ7TE.js → chunk-5YB6UXQ3.js} +4 -15
- package/dist/{chunk-Z5VSUOEE.js → chunk-6PVHJ332.js} +2 -2
- package/dist/{chunk-EAGKJFDX.js → chunk-7KGTWDAX.js} +3 -3
- package/dist/{chunk-PU2254N2.js → chunk-7OGXSMLY.js} +5 -15
- package/dist/{chunk-R7HPHMRZ.js → chunk-AEBM56CO.js} +3 -3
- package/dist/{chunk-SYQR4QGK.js → chunk-B747RITP.js} +3 -3
- package/dist/{chunk-A6XLXV6W.js → chunk-B7LDMCUS.js} +3 -3
- package/dist/{chunk-KLNKDX6A.js → chunk-C2VSV54P.js} +4 -4
- package/dist/{chunk-VKBOLNYN.js → chunk-DIYEUFVP.js} +10 -8
- package/dist/{chunk-RE7POFGI.js → chunk-E74RY6AQ.js} +2 -2
- package/dist/{chunk-RL74LF47.js → chunk-FIMTTUGE.js} +2 -2
- package/dist/{chunk-ALUFWH3U.js → chunk-FMAYH7GS.js} +116 -269
- package/dist/{chunk-MGNMHKX3.js → chunk-FO2CBB7U.js} +10 -2
- package/dist/{chunk-7BS4CPJX.js → chunk-HESWGDIV.js} +3 -3
- package/dist/{chunk-FVJE4MQL.js → chunk-HL2LXSBW.js} +5 -8
- package/dist/{chunk-KG4OFQEN.js → chunk-HW76DVE4.js} +3 -3
- package/dist/{chunk-RJ5GULL6.js → chunk-IC5NTO47.js} +2 -2
- package/dist/{chunk-VY2L4TP6.js → chunk-J34HAAEQ.js} +3 -3
- package/dist/{chunk-PCU455MX.js → chunk-JSXGC2EH.js} +2 -2
- package/dist/{chunk-NXUIWD6K.js → chunk-LQXBFCP2.js} +3 -3
- package/dist/{chunk-GNAMV3JC.js → chunk-NML6M5AS.js} +3 -3
- package/dist/{chunk-UJWI5CBB.js → chunk-NNFP4ZRF.js} +4 -7
- package/dist/{chunk-6ECR2FLR.js → chunk-NWXTQGUE.js} +4 -15
- package/dist/{chunk-ZVZAIIB5.js → chunk-NYZ6INK3.js} +3 -3
- package/dist/{chunk-JKXHHV4B.js → chunk-OMVF3BHY.js} +2 -2
- package/dist/{chunk-CBIWNZZZ.js → chunk-PGQXIAJF.js} +3 -3
- package/dist/{chunk-J47VSL6I.js → chunk-PKDFXASW.js} +3 -3
- package/dist/{chunk-POLELLNM.js → chunk-PSK5BPFE.js} +3 -3
- package/dist/{chunk-6CH23IAS.js → chunk-QZ4FRB65.js} +9 -7
- package/dist/{chunk-TWVXFKJA.js → chunk-R2QBMQQN.js} +4 -4
- package/dist/{chunk-5GCORUNV.js → chunk-T3ALCNCP.js} +30 -17
- package/dist/{chunk-QMXSLHZP.js → chunk-T6UVM534.js} +2 -2
- package/dist/{chunk-6UZU7DFL.js → chunk-U74VYTLX.js} +3 -3
- package/dist/{chunk-XUVPQDXW.js → chunk-UIRCHPOU.js} +4 -4
- package/dist/{chunk-43A4UCS7.js → chunk-UNS6ZQVX.js} +3 -3
- package/dist/{chunk-J6QXMYAQ.js → chunk-VJMTX3OR.js} +3 -3
- package/dist/{chunk-SVLUJSY7.js → chunk-XJSPWHNT.js} +4 -15
- package/dist/{chunk-W46L2BXT.js → chunk-XMZAC2VU.js} +2 -2
- package/dist/{chunk-ELFGD5EW.js → chunk-Y7FKURZG.js} +3 -3
- package/dist/{chunk-TO3L4YNK.js → chunk-YMSJCSRG.js} +5 -1
- package/dist/{chunk-DUJNJQPO.js → chunk-YQIWS5V6.js} +3 -3
- package/dist/{chunk-KYPXKV64.js → chunk-ZPEI7DRJ.js} +30 -15
- package/dist/cli.js +471 -473
- package/dist/{db-C4rPbKkI.d.ts → db-6F9R9e_t.d.ts} +0 -4
- package/dist/index.d.ts +20 -5
- package/dist/index.js +237 -81
- package/dist/queries/affected.d.ts +1 -1
- package/dist/queries/affected.js +3 -3
- package/dist/queries/bottlenecks.d.ts +1 -1
- package/dist/queries/bottlenecks.js +3 -3
- package/dist/queries/by-kind.d.ts +1 -1
- package/dist/queries/by-kind.js +3 -3
- package/dist/queries/call-graph.d.ts +1 -1
- package/dist/queries/call-graph.js +3 -3
- package/dist/queries/change-surface.d.ts +1 -1
- package/dist/queries/change-surface.js +3 -3
- package/dist/queries/code.d.ts +1 -1
- package/dist/queries/code.js +3 -3
- package/dist/queries/complexity-hotspots.d.ts +1 -1
- package/dist/queries/complexity-hotspots.js +3 -3
- package/dist/queries/complexity.d.ts +1 -1
- package/dist/queries/complexity.js +3 -3
- package/dist/queries/convergence.d.ts +1 -1
- package/dist/queries/convergence.js +3 -3
- package/dist/queries/coupling.d.ts +1 -1
- package/dist/queries/coupling.js +3 -3
- package/dist/queries/cycles.d.ts +1 -1
- package/dist/queries/cycles.js +3 -3
- package/dist/queries/dataflow.d.ts +1 -1
- package/dist/queries/dataflow.js +3 -3
- package/dist/queries/dead.d.ts +1 -1
- package/dist/queries/dead.js +4 -4
- package/dist/queries/deep-chains.d.ts +1 -1
- package/dist/queries/deep-chains.js +3 -3
- package/dist/queries/deps.d.ts +1 -1
- package/dist/queries/deps.js +3 -3
- package/dist/queries/diff-impact.d.ts +1 -1
- package/dist/queries/diff-impact.js +2 -2
- package/dist/queries/drift.d.ts +1 -1
- package/dist/queries/drift.js +3 -3
- package/dist/queries/extract-candidates.d.ts +1 -1
- package/dist/queries/extract-candidates.js +3 -3
- package/dist/queries/fan.d.ts +1 -1
- package/dist/queries/fan.js +3 -3
- package/dist/queries/files.d.ts +1 -1
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.d.ts +1 -1
- package/dist/queries/health.js +14 -14
- package/dist/queries/hierarchy.d.ts +1 -1
- package/dist/queries/hierarchy.js +3 -3
- package/dist/queries/hotspots.d.ts +1 -1
- package/dist/queries/hotspots.js +3 -3
- package/dist/queries/imports.d.ts +1 -1
- package/dist/queries/imports.js +3 -3
- package/dist/queries/index.d.ts +1 -1
- package/dist/queries/index.js +45 -45
- package/dist/queries/isolated.d.ts +1 -1
- package/dist/queries/isolated.js +4 -4
- package/dist/queries/members.d.ts +1 -1
- package/dist/queries/members.js +3 -3
- package/dist/queries/methods.d.ts +1 -1
- package/dist/queries/methods.js +3 -3
- package/dist/queries/outline.d.ts +1 -1
- package/dist/queries/outline.js +3 -3
- package/dist/queries/passthrough-candidates.d.ts +1 -1
- package/dist/queries/passthrough-candidates.js +3 -3
- package/dist/queries/redundant-reexports.d.ts +1 -1
- package/dist/queries/redundant-reexports.js +4 -4
- package/dist/queries/refs.d.ts +1 -1
- package/dist/queries/refs.js +3 -3
- package/dist/queries/similar-chains.d.ts +1 -1
- package/dist/queries/similar-chains.js +3 -3
- package/dist/queries/similar-files.d.ts +1 -1
- package/dist/queries/similar-files.js +3 -3
- package/dist/queries/similar-signatures.d.ts +1 -1
- package/dist/queries/similar-signatures.js +3 -3
- package/dist/queries/similar.d.ts +2 -1
- package/dist/queries/similar.js +3 -3
- package/dist/queries/slice.d.ts +4 -3
- package/dist/queries/slice.js +3 -3
- package/dist/queries/stale-abstractions.d.ts +1 -1
- package/dist/queries/stale-abstractions.js +3 -3
- package/dist/queries/stats.d.ts +1 -1
- package/dist/queries/surface.d.ts +1 -1
- package/dist/queries/surface.js +3 -3
- package/dist/queries/symbols.d.ts +1 -1
- package/dist/queries/symbols.js +3 -3
- package/dist/queries/system.d.ts +1 -1
- package/dist/queries/system.js +3 -3
- package/dist/queries/trace.d.ts +1 -1
- package/dist/queries/trace.js +3 -3
- package/dist/queries/wrapper-candidates.d.ts +1 -1
- package/dist/queries/wrapper-candidates.js +3 -3
- package/dist/reindex-worker.js +146 -5
- package/package.json +3 -1
package/dist/reindex-worker.js
CHANGED
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
|
|
12
12
|
// src/reindex/index.ts
|
|
13
13
|
import { execFileSync } from "child_process";
|
|
14
|
-
import { existsSync as existsSync3, renameSync } from "fs";
|
|
15
|
-
import { join as join3 } from "path";
|
|
14
|
+
import { existsSync as existsSync3, renameSync, rmSync } from "fs";
|
|
15
|
+
import { basename, dirname, extname as extname2, join as join3 } from "path";
|
|
16
16
|
|
|
17
17
|
// src/reindex/detect.ts
|
|
18
18
|
import { existsSync, readdirSync } from "fs";
|
|
@@ -390,6 +390,128 @@ function resolveDotnetProject(projectRoot2, suffixes) {
|
|
|
390
390
|
return null;
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
+
// src/reindex/merge.ts
|
|
394
|
+
import { readFileSync, writeFileSync } from "fs";
|
|
395
|
+
import { create } from "@bufbuild/protobuf";
|
|
396
|
+
import {
|
|
397
|
+
deserializeSCIP,
|
|
398
|
+
serializeSCIP,
|
|
399
|
+
DocumentSchema,
|
|
400
|
+
IndexSchema,
|
|
401
|
+
SymbolInformationSchema
|
|
402
|
+
} from "@c4312/scip";
|
|
403
|
+
function mergeScipIndexes(indexes) {
|
|
404
|
+
if (indexes.length === 0) {
|
|
405
|
+
throw new Error("Cannot merge zero SCIP indexes");
|
|
406
|
+
}
|
|
407
|
+
if (indexes.length === 1) {
|
|
408
|
+
return indexes[0];
|
|
409
|
+
}
|
|
410
|
+
const metadata = mergeMetadata(indexes);
|
|
411
|
+
const documents = mergeDocuments(indexes.flatMap((index) => index.documents ?? []));
|
|
412
|
+
const externalSymbols = mergeSymbolInfos(indexes.flatMap((index) => index.externalSymbols ?? []));
|
|
413
|
+
return create(IndexSchema, {
|
|
414
|
+
metadata,
|
|
415
|
+
documents,
|
|
416
|
+
externalSymbols
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
function mergeScipFiles(inputPaths, outputPath) {
|
|
420
|
+
if (inputPaths.length === 0) {
|
|
421
|
+
throw new Error("Cannot merge zero SCIP files");
|
|
422
|
+
}
|
|
423
|
+
const indexes = inputPaths.map((path) => deserializeSCIP(readFileSync(path)));
|
|
424
|
+
const merged = mergeScipIndexes(indexes);
|
|
425
|
+
writeFileSync(outputPath, Buffer.from(serializeSCIP(merged)));
|
|
426
|
+
return {
|
|
427
|
+
documentCount: merged.documents.length,
|
|
428
|
+
externalSymbolCount: merged.externalSymbols.length,
|
|
429
|
+
inputCount: inputPaths.length
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function mergeMetadata(indexes) {
|
|
433
|
+
const first = indexes[0]?.metadata;
|
|
434
|
+
if (!first) {
|
|
435
|
+
return void 0;
|
|
436
|
+
}
|
|
437
|
+
const expectedProjectRoot = first.projectRoot;
|
|
438
|
+
for (const index of indexes.slice(1)) {
|
|
439
|
+
const actualProjectRoot = index.metadata?.projectRoot;
|
|
440
|
+
if (expectedProjectRoot && actualProjectRoot && actualProjectRoot !== expectedProjectRoot) {
|
|
441
|
+
throw new Error(
|
|
442
|
+
`Cannot merge SCIP indexes with different project roots: ${expectedProjectRoot} vs ${actualProjectRoot}`
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return first;
|
|
447
|
+
}
|
|
448
|
+
function mergeDocuments(documents) {
|
|
449
|
+
const byPath = /* @__PURE__ */ new Map();
|
|
450
|
+
for (const document of documents) {
|
|
451
|
+
const existing = byPath.get(document.relativePath);
|
|
452
|
+
if (!existing) {
|
|
453
|
+
byPath.set(document.relativePath, document);
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
byPath.set(document.relativePath, create(DocumentSchema, {
|
|
457
|
+
language: existing.language || document.language,
|
|
458
|
+
relativePath: existing.relativePath || document.relativePath,
|
|
459
|
+
occurrences: [...existing.occurrences, ...document.occurrences],
|
|
460
|
+
symbols: mergeSymbolInfos([...existing.symbols, ...document.symbols]),
|
|
461
|
+
text: chooseText(existing.text, document.text),
|
|
462
|
+
positionEncoding: existing.positionEncoding || document.positionEncoding
|
|
463
|
+
}));
|
|
464
|
+
}
|
|
465
|
+
return [...byPath.values()];
|
|
466
|
+
}
|
|
467
|
+
function mergeSymbolInfos(symbols) {
|
|
468
|
+
const bySymbol = /* @__PURE__ */ new Map();
|
|
469
|
+
for (const symbol of symbols) {
|
|
470
|
+
const existing = bySymbol.get(symbol.symbol);
|
|
471
|
+
if (!existing) {
|
|
472
|
+
bySymbol.set(symbol.symbol, symbol);
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
bySymbol.set(symbol.symbol, create(SymbolInformationSchema, {
|
|
476
|
+
symbol: existing.symbol,
|
|
477
|
+
documentation: uniqueStrings([...existing.documentation, ...symbol.documentation]),
|
|
478
|
+
relationships: mergeRelationships([...existing.relationships, ...symbol.relationships]),
|
|
479
|
+
kind: existing.kind || symbol.kind,
|
|
480
|
+
displayName: existing.displayName || symbol.displayName,
|
|
481
|
+
enclosingSymbol: existing.enclosingSymbol || symbol.enclosingSymbol,
|
|
482
|
+
signatureDocumentation: existing.signatureDocumentation ?? symbol.signatureDocumentation
|
|
483
|
+
}));
|
|
484
|
+
}
|
|
485
|
+
return [...bySymbol.values()];
|
|
486
|
+
}
|
|
487
|
+
function mergeRelationships(relationships) {
|
|
488
|
+
const seen = /* @__PURE__ */ new Set();
|
|
489
|
+
const merged = [];
|
|
490
|
+
for (const relationship of relationships) {
|
|
491
|
+
const key = [
|
|
492
|
+
relationship.symbol,
|
|
493
|
+
relationship.isReference ? "1" : "0",
|
|
494
|
+
relationship.isImplementation ? "1" : "0",
|
|
495
|
+
relationship.isTypeDefinition ? "1" : "0",
|
|
496
|
+
relationship.isDefinition ? "1" : "0"
|
|
497
|
+
].join("|");
|
|
498
|
+
if (seen.has(key)) {
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
seen.add(key);
|
|
502
|
+
merged.push(relationship);
|
|
503
|
+
}
|
|
504
|
+
return merged;
|
|
505
|
+
}
|
|
506
|
+
function chooseText(left, right) {
|
|
507
|
+
if (!left) return right;
|
|
508
|
+
if (!right) return left;
|
|
509
|
+
return left.length >= right.length ? left : right;
|
|
510
|
+
}
|
|
511
|
+
function uniqueStrings(values) {
|
|
512
|
+
return [...new Set(values)];
|
|
513
|
+
}
|
|
514
|
+
|
|
393
515
|
// src/reindex/index.ts
|
|
394
516
|
async function reindex(opts) {
|
|
395
517
|
const {
|
|
@@ -425,7 +547,11 @@ async function reindex(opts) {
|
|
|
425
547
|
...process.env,
|
|
426
548
|
NODE_OPTIONS: `--max-old-space-size=${maxHeapMb}`
|
|
427
549
|
};
|
|
428
|
-
|
|
550
|
+
const languageOutputs = languages2.map((language, index) => ({
|
|
551
|
+
language,
|
|
552
|
+
scipPath: languages2.length > 1 ? tempScipPath(outputScip2, language, index) : outputScip2
|
|
553
|
+
}));
|
|
554
|
+
for (const { language: lang, scipPath } of languageOutputs) {
|
|
429
555
|
const config = getIndexerConfig(lang);
|
|
430
556
|
const binaryLabel = describeIndexerBinary(config);
|
|
431
557
|
const projectLocalBinary = resolveProjectLocalIndexerBinary(config, projectRoot2);
|
|
@@ -455,7 +581,7 @@ async function reindex(opts) {
|
|
|
455
581
|
const indexerEnv = getIndexerExecutionEnv(config, env, resolvedBinary);
|
|
456
582
|
const { binary, args } = config.indexArgs({
|
|
457
583
|
projectRoot: projectRoot2,
|
|
458
|
-
outputPath:
|
|
584
|
+
outputPath: scipPath,
|
|
459
585
|
pnpmWorkspaces: opts.pnpmWorkspaces,
|
|
460
586
|
indexerBinary: resolvedBinary
|
|
461
587
|
});
|
|
@@ -474,7 +600,11 @@ Make sure ${binaryLabel} is installed and available on PATH.`,
|
|
|
474
600
|
{ cause: err }
|
|
475
601
|
);
|
|
476
602
|
}
|
|
477
|
-
moveDefaultOutputIfNeeded(config, projectRoot2,
|
|
603
|
+
moveDefaultOutputIfNeeded(config, projectRoot2, scipPath);
|
|
604
|
+
}
|
|
605
|
+
if (languageOutputs.length > 1) {
|
|
606
|
+
onStatus(`Merging ${languageOutputs.length} language indexes...`);
|
|
607
|
+
mergeScipFiles(languageOutputs.map((entry) => entry.scipPath), outputScip2);
|
|
478
608
|
}
|
|
479
609
|
onStatus("Converting to SQLite...");
|
|
480
610
|
if (!existsSync3(outputScip2)) {
|
|
@@ -489,6 +619,12 @@ Make sure ${binaryLabel} is installed and available on PATH.`,
|
|
|
489
619
|
} catch (err) {
|
|
490
620
|
const msg = err instanceof Error ? err.message : String(err);
|
|
491
621
|
throw new Error(`Failed to convert SCIP index to SQLite: ${msg}`, { cause: err });
|
|
622
|
+
} finally {
|
|
623
|
+
for (const { scipPath } of languageOutputs) {
|
|
624
|
+
if (scipPath !== outputScip2) {
|
|
625
|
+
rmSync(scipPath, { force: true });
|
|
626
|
+
}
|
|
627
|
+
}
|
|
492
628
|
}
|
|
493
629
|
const durationMs = Date.now() - start;
|
|
494
630
|
onStatus(`Done in ${(durationMs / 1e3).toFixed(1)}s`);
|
|
@@ -503,6 +639,11 @@ function moveDefaultOutputIfNeeded(config, projectRoot2, outputScip2) {
|
|
|
503
639
|
renameSync(defaultOutputPath, outputScip2);
|
|
504
640
|
}
|
|
505
641
|
}
|
|
642
|
+
function tempScipPath(outputScip2, language, index) {
|
|
643
|
+
const extension = extname2(outputScip2) || ".scip";
|
|
644
|
+
const stem = basename(outputScip2, extension);
|
|
645
|
+
return join3(dirname(outputScip2), `${stem}.${index + 1}.${language}${extension}`);
|
|
646
|
+
}
|
|
506
647
|
|
|
507
648
|
// src/reindex-worker.ts
|
|
508
649
|
var projectRoot = process.env["SCIP_REINDEX_PROJECT_ROOT"];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scip-query",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Language-agnostic code intelligence CLI powered by SCIP indexes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -60,6 +60,8 @@
|
|
|
60
60
|
"node": ">=18.0.0"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
+
"@bufbuild/protobuf": "^2.11.0",
|
|
64
|
+
"@c4312/scip": "^0.1.0",
|
|
63
65
|
"better-sqlite3": "^11.7.0",
|
|
64
66
|
"commander": "^13.1.0",
|
|
65
67
|
"ignore": "^7.0.3"
|