@mirnoorata/codexa 0.3.0 → 0.5.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 +23 -5
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/eval/scoring.js +17 -0
- package/dist/eval/scoring.js.map +1 -1
- package/dist/indexer/external-facts.d.ts +2 -1
- package/dist/indexer/external-facts.js +16 -0
- package/dist/indexer/external-facts.js.map +1 -1
- package/dist/indexer/freshness.d.ts +6 -1
- package/dist/indexer/freshness.js +13 -3
- package/dist/indexer/freshness.js.map +1 -1
- package/dist/indexer.js +46 -15
- package/dist/indexer.js.map +1 -1
- package/dist/init.js +9 -4
- package/dist/init.js.map +1 -1
- package/dist/mcp/compaction.js +5 -0
- package/dist/mcp/compaction.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +19 -19
- package/dist/mcp/tool-registry.js +19 -19
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools.js +5 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-repo-root.js +37 -9
- package/dist/mcp-repo-root.js.map +1 -1
- package/dist/query/change-plan.js +11 -0
- package/dist/query/change-plan.js.map +1 -1
- package/dist/query/complexity.d.ts +27 -0
- package/dist/query/complexity.js +226 -0
- package/dist/query/complexity.js.map +1 -0
- package/dist/query/post-edit/decision.js +17 -6
- package/dist/query/post-edit/decision.js.map +1 -1
- package/dist/query/post-edit.js +49 -15
- package/dist/query/post-edit.js.map +1 -1
- package/dist/risk-ingest.d.ts +2 -2
- package/dist/risk-ingest.js +152 -63
- package/dist/risk-ingest.js.map +1 -1
- package/dist/scip-import.d.ts +3 -0
- package/dist/scip-import.js +569 -0
- package/dist/scip-import.js.map +1 -0
- package/dist/static-analysis.d.ts +2 -1
- package/dist/static-analysis.js +353 -37
- package/dist/static-analysis.js.map +1 -1
- package/dist/symbol-report-ingest.d.ts +10 -1
- package/dist/symbol-report-ingest.js +256 -23
- package/dist/symbol-report-ingest.js.map +1 -1
- package/dist/types.d.ts +33 -1
- package/dist/types.js.map +1 -1
- package/integrations/.claude-plugin/marketplace.json +1 -1
- package/integrations/claude-code/.claude-plugin/plugin.json +1 -1
- package/package.json +4 -3
- package/plugins/codexa/.codex-plugin/plugin.json +1 -1
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { isSubpath, normalizePath, stableId } from "./util.js";
|
|
4
|
+
const MAX_SCIP_JSON_BYTES = 16 * 1024 * 1024;
|
|
5
|
+
const MAX_SCIP_DOCUMENTS = 5_000;
|
|
6
|
+
const MAX_SCIP_OCCURRENCES = 100_000;
|
|
7
|
+
const MAX_SCIP_SYMBOLS = 20_000;
|
|
8
|
+
const MAX_SCIP_RELATIONSHIPS = 50_000;
|
|
9
|
+
const MAX_SCIP_ENCLOSING_RANGE_CHECKS = 1_000_000;
|
|
10
|
+
const MAX_SCIP_INT32 = 2_147_483_647;
|
|
11
|
+
const SCIP_ROLE_DEFINITION = 1;
|
|
12
|
+
const SCIP_ROLE_IMPORT = 2;
|
|
13
|
+
const SCIP_ROLE_FORWARD_DEFINITION = 64;
|
|
14
|
+
export const CODEXA_SCIP_SYMBOL_REPORT_GENERATOR = "codexa-scip-import";
|
|
15
|
+
export async function convertScipJsonReportToSymbolReport(repoRootInput, sourceInput) {
|
|
16
|
+
const repoRoot = path.resolve(repoRootInput);
|
|
17
|
+
const repoReal = await fs.realpath(repoRoot);
|
|
18
|
+
const source = path.resolve(sourceInput);
|
|
19
|
+
const stat = await fs.stat(source).catch(() => null);
|
|
20
|
+
if (!stat?.isFile()) {
|
|
21
|
+
throw new Error(`SCIP report not found or not a file: ${sourceInput}`);
|
|
22
|
+
}
|
|
23
|
+
if (stat.size > MAX_SCIP_JSON_BYTES) {
|
|
24
|
+
throw new Error(`SCIP JSON report exceeds ${MAX_SCIP_JSON_BYTES} bytes: ${sourceInput}`);
|
|
25
|
+
}
|
|
26
|
+
const parsed = parseScipJson(await fs.readFile(source, "utf8"), sourceInput);
|
|
27
|
+
const documents = arrayField(parsed, "documents");
|
|
28
|
+
if (!documents) {
|
|
29
|
+
throw new Error("SCIP JSON report must contain a documents array.");
|
|
30
|
+
}
|
|
31
|
+
if (documents.length > MAX_SCIP_DOCUMENTS) {
|
|
32
|
+
throw new Error(`SCIP JSON report contains ${documents.length} documents; limit is ${MAX_SCIP_DOCUMENTS}.`);
|
|
33
|
+
}
|
|
34
|
+
let occurrenceCount = 0;
|
|
35
|
+
let scipSymbolCount = 0;
|
|
36
|
+
let scipRelationshipCount = 0;
|
|
37
|
+
let scipContainmentCheckCount = 0;
|
|
38
|
+
const documentInfos = [];
|
|
39
|
+
const symbolByScipId = new Map();
|
|
40
|
+
const convertedSymbols = new Map();
|
|
41
|
+
for (let documentIndex = 0; documentIndex < documents.length; documentIndex += 1) {
|
|
42
|
+
const document = objectValue(documents[documentIndex], `documents[${documentIndex}]`);
|
|
43
|
+
const relativePath = documentPathField(document);
|
|
44
|
+
if (!relativePath) {
|
|
45
|
+
throw new Error(`SCIP document ${documentIndex} is missing relativePath.`);
|
|
46
|
+
}
|
|
47
|
+
const normalizedPath = await normalizeScipDocumentPath(repoReal, relativePath);
|
|
48
|
+
const occurrences = arrayField(document, "occurrences") ?? [];
|
|
49
|
+
const symbolInfos = arrayField(document, "symbols") ?? [];
|
|
50
|
+
occurrenceCount += occurrences.length;
|
|
51
|
+
scipSymbolCount += symbolInfos.length;
|
|
52
|
+
if (occurrenceCount > MAX_SCIP_OCCURRENCES) {
|
|
53
|
+
throw new Error(`SCIP JSON report contains more than ${MAX_SCIP_OCCURRENCES} occurrences.`);
|
|
54
|
+
}
|
|
55
|
+
if (scipSymbolCount > MAX_SCIP_SYMBOLS) {
|
|
56
|
+
throw new Error(`SCIP JSON report contains more than ${MAX_SCIP_SYMBOLS} symbols.`);
|
|
57
|
+
}
|
|
58
|
+
const definitions = definitionRanges(occurrences, documentIndex);
|
|
59
|
+
const documentSymbols = new Map();
|
|
60
|
+
const language = stringField(document, "language") ?? languageFromPath(normalizedPath);
|
|
61
|
+
for (let symbolIndex = 0; symbolIndex < symbolInfos.length; symbolIndex += 1) {
|
|
62
|
+
const symbolInfo = objectValue(symbolInfos[symbolIndex], `documents[${documentIndex}].symbols[${symbolIndex}]`);
|
|
63
|
+
const symbolId = stringField(symbolInfo, "symbol");
|
|
64
|
+
if (!symbolId || isLocalScipSymbol(symbolId)) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const definition = definitions.get(symbolId);
|
|
68
|
+
const localInfo = {
|
|
69
|
+
symbol: symbolId,
|
|
70
|
+
path: normalizedPath,
|
|
71
|
+
line: definition?.line,
|
|
72
|
+
endLine: definition?.endLine,
|
|
73
|
+
bodyRange: definition?.bodyRange,
|
|
74
|
+
name: stringField(symbolInfo, "displayName", "display_name") ?? displayNameFromScipSymbol(symbolId),
|
|
75
|
+
kind: scipSymbolKind(symbolInfo)
|
|
76
|
+
};
|
|
77
|
+
addSymbol(localInfo, convertedSymbols, symbolByScipId, documentSymbols);
|
|
78
|
+
}
|
|
79
|
+
for (const [symbolId, definition] of definitions) {
|
|
80
|
+
if (isLocalScipSymbol(symbolId) || documentSymbols.has(symbolId)) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const localInfo = {
|
|
84
|
+
symbol: symbolId,
|
|
85
|
+
path: normalizedPath,
|
|
86
|
+
line: definition.line,
|
|
87
|
+
endLine: definition.endLine,
|
|
88
|
+
bodyRange: definition.bodyRange,
|
|
89
|
+
name: displayNameFromScipSymbol(symbolId),
|
|
90
|
+
kind: "unknown"
|
|
91
|
+
};
|
|
92
|
+
addSymbol(localInfo, convertedSymbols, symbolByScipId, documentSymbols);
|
|
93
|
+
}
|
|
94
|
+
documentInfos.push({ path: normalizedPath, language, symbols: documentSymbols });
|
|
95
|
+
}
|
|
96
|
+
const relationships = new Map();
|
|
97
|
+
const countRelationship = () => {
|
|
98
|
+
scipRelationshipCount += 1;
|
|
99
|
+
if (scipRelationshipCount > MAX_SCIP_RELATIONSHIPS) {
|
|
100
|
+
throw new Error(`SCIP JSON report contains more than ${MAX_SCIP_RELATIONSHIPS} relationships.`);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const countContainmentCheck = () => {
|
|
104
|
+
scipContainmentCheckCount += 1;
|
|
105
|
+
if (scipContainmentCheckCount > MAX_SCIP_ENCLOSING_RANGE_CHECKS) {
|
|
106
|
+
throw new Error(`SCIP JSON report requires more than ${MAX_SCIP_ENCLOSING_RANGE_CHECKS} enclosing range checks.`);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
for (let documentIndex = 0; documentIndex < documents.length; documentIndex += 1) {
|
|
110
|
+
const document = documents[documentIndex];
|
|
111
|
+
const documentInfo = documentInfos[documentIndex];
|
|
112
|
+
addRelationshipsFromSymbolInfo(document, documentInfo, symbolByScipId, relationships, countRelationship);
|
|
113
|
+
addRelationshipsFromOccurrences(document, documentInfo, symbolByScipId, relationships, countRelationship, countContainmentCheck);
|
|
114
|
+
}
|
|
115
|
+
const symbols = [...convertedSymbols.values()].sort(sortSymbols);
|
|
116
|
+
const language = reportLanguage(documentInfos);
|
|
117
|
+
return {
|
|
118
|
+
schemaVersion: 1,
|
|
119
|
+
tool: scipToolName(parsed),
|
|
120
|
+
generatedBy: CODEXA_SCIP_SYMBOL_REPORT_GENERATOR,
|
|
121
|
+
language,
|
|
122
|
+
symbols,
|
|
123
|
+
relationships: [...relationships.values()].sort(sortRelationships)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function parseScipJson(content, sourceInput) {
|
|
127
|
+
try {
|
|
128
|
+
const parsed = JSON.parse(content);
|
|
129
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
130
|
+
throw new Error("top-level value must be an object");
|
|
131
|
+
}
|
|
132
|
+
return parsed;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
throw new Error(`SCIP report must be JSON from "scip print --json"; binary index.scip files are not imported directly: ${error.message} (${sourceInput})`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function normalizeScipDocumentPath(repoReal, relativePath) {
|
|
139
|
+
if (!relativePath ||
|
|
140
|
+
relativePath !== relativePath.trim() ||
|
|
141
|
+
/[\x00-\x1f\x7f]/u.test(relativePath) ||
|
|
142
|
+
relativePath.includes("\\") ||
|
|
143
|
+
relativePath.startsWith("/") ||
|
|
144
|
+
path.win32.isAbsolute(relativePath)) {
|
|
145
|
+
throw new Error(`SCIP document path is not a canonical relative path: ${relativePath}`);
|
|
146
|
+
}
|
|
147
|
+
const parts = relativePath.split("/");
|
|
148
|
+
if (parts.some((part) => part.length === 0 || part === "." || part === "..")) {
|
|
149
|
+
throw new Error(`SCIP document path is not a canonical relative path: ${relativePath}`);
|
|
150
|
+
}
|
|
151
|
+
const absolute = path.resolve(repoReal, relativePath);
|
|
152
|
+
const lstat = await fs.lstat(absolute).catch(() => null);
|
|
153
|
+
if (!lstat?.isFile() || lstat.isSymbolicLink()) {
|
|
154
|
+
throw new Error(`SCIP document path must be an existing repository file: ${relativePath}`);
|
|
155
|
+
}
|
|
156
|
+
const real = await fs.realpath(absolute).catch(() => "");
|
|
157
|
+
if (!real || !isSubpath(real, repoReal)) {
|
|
158
|
+
throw new Error(`SCIP document path resolves outside the repository: ${relativePath}`);
|
|
159
|
+
}
|
|
160
|
+
return normalizePath(path.relative(repoReal, real));
|
|
161
|
+
}
|
|
162
|
+
function definitionRanges(occurrences, documentIndex) {
|
|
163
|
+
const definitions = new Map();
|
|
164
|
+
for (let occurrenceIndex = 0; occurrenceIndex < occurrences.length; occurrenceIndex += 1) {
|
|
165
|
+
const occurrence = objectValue(occurrences[occurrenceIndex], `documents[${documentIndex}].occurrences[${occurrenceIndex}]`);
|
|
166
|
+
const symbol = stringField(occurrence, "symbol");
|
|
167
|
+
if (!symbol || !hasDefinitionRole(occurrence, `documents[${documentIndex}].occurrences[${occurrenceIndex}]`)) {
|
|
168
|
+
parseOptionalRange(occurrence, `documents[${documentIndex}].occurrences[${occurrenceIndex}]`);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const range = parseOptionalRange(occurrence, `documents[${documentIndex}].occurrences[${occurrenceIndex}]`);
|
|
172
|
+
const bodyRange = parseOptionalRange(occurrence, `documents[${documentIndex}].occurrences[${occurrenceIndex}].enclosingRange`, "enclosingRange", "enclosing_range");
|
|
173
|
+
if (!definitions.has(symbol)) {
|
|
174
|
+
definitions.set(symbol, {
|
|
175
|
+
line: range ? range.startLine + 1 : undefined,
|
|
176
|
+
endLine: range ? Math.max(range.endLine + 1, range.startLine + 1) : undefined,
|
|
177
|
+
bodyRange
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return definitions;
|
|
182
|
+
}
|
|
183
|
+
function addSymbol(localInfo, convertedSymbols, symbolByScipId, documentSymbols) {
|
|
184
|
+
const symbolKey = `${localInfo.symbol}\0${localInfo.path}`;
|
|
185
|
+
if (!convertedSymbols.has(symbolKey) && convertedSymbols.size >= MAX_SCIP_SYMBOLS) {
|
|
186
|
+
throw new Error(`SCIP JSON report generates more than ${MAX_SCIP_SYMBOLS} symbols.`);
|
|
187
|
+
}
|
|
188
|
+
symbolByScipId.set(localInfo.symbol, localInfo);
|
|
189
|
+
documentSymbols.set(localInfo.symbol, localInfo);
|
|
190
|
+
convertedSymbols.set(symbolKey, {
|
|
191
|
+
id: localInfo.symbol,
|
|
192
|
+
name: localInfo.name,
|
|
193
|
+
qualifiedName: localInfo.symbol,
|
|
194
|
+
kind: localInfo.kind,
|
|
195
|
+
path: localInfo.path,
|
|
196
|
+
line: localInfo.line,
|
|
197
|
+
endLine: localInfo.endLine,
|
|
198
|
+
exported: false,
|
|
199
|
+
confidence: "derived"
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
function addRelationshipsFromSymbolInfo(document, documentInfo, symbolByScipId, relationships, countRelationship) {
|
|
203
|
+
for (const symbolInfoValue of arrayField(document, "symbols") ?? []) {
|
|
204
|
+
const symbolInfo = objectValue(symbolInfoValue, "SCIP symbol information");
|
|
205
|
+
const fromSymbol = stringField(symbolInfo, "symbol");
|
|
206
|
+
const from = fromSymbol ? documentInfo.symbols.get(fromSymbol) : undefined;
|
|
207
|
+
if (!from) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
for (const relationshipValue of arrayField(symbolInfo, "relationships") ?? []) {
|
|
211
|
+
countRelationship();
|
|
212
|
+
const relationship = objectValue(relationshipValue, `SCIP relationships for ${fromSymbol}`);
|
|
213
|
+
const toSymbol = stringField(relationship, "symbol");
|
|
214
|
+
const to = toSymbol ? documentInfo.symbols.get(toSymbol) ?? symbolByScipId.get(toSymbol) : undefined;
|
|
215
|
+
if (!to) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (truthyField(relationship, "isImplementation", "is_implementation")) {
|
|
219
|
+
addRelationship(relationships, "IMPLEMENTS", from, to, from.line, "SCIP implementation relationship");
|
|
220
|
+
}
|
|
221
|
+
if (truthyField(relationship, "isReference", "is_reference")) {
|
|
222
|
+
addRelationship(relationships, "REFERENCES", from, to, from.line, "SCIP reference relationship");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function addRelationshipsFromOccurrences(document, documentInfo, symbolByScipId, relationships, countRelationship, countContainmentCheck) {
|
|
228
|
+
const enclosingDefinitions = [...documentInfo.symbols.values()]
|
|
229
|
+
.filter((symbol) => symbol.bodyRange)
|
|
230
|
+
.sort((a, b) => compareRangeSpecificity(a.bodyRange, b.bodyRange) || a.symbol.localeCompare(b.symbol));
|
|
231
|
+
for (const occurrenceValue of arrayField(document, "occurrences") ?? []) {
|
|
232
|
+
const occurrence = objectValue(occurrenceValue, "SCIP occurrence");
|
|
233
|
+
const toSymbolId = stringField(occurrence, "symbol");
|
|
234
|
+
const to = toSymbolId ? documentInfo.symbols.get(toSymbolId) ?? symbolByScipId.get(toSymbolId) : undefined;
|
|
235
|
+
if (!to || hasDefinitionRole(occurrence, "SCIP occurrence")) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const range = parseOptionalRange(occurrence, "SCIP occurrence");
|
|
239
|
+
if (!range) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
let from;
|
|
243
|
+
for (const candidate of enclosingDefinitions) {
|
|
244
|
+
countContainmentCheck();
|
|
245
|
+
if (candidate.bodyRange && rangeWithin(range, candidate.bodyRange)) {
|
|
246
|
+
from = candidate;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
countRelationship();
|
|
251
|
+
const kind = hasRole(occurrence, SCIP_ROLE_IMPORT, "SCIP occurrence") ? "IMPORTS" : "REFERENCES";
|
|
252
|
+
if (from) {
|
|
253
|
+
addRelationship(relationships, kind, from, to, range.startLine + 1, `SCIP ${kind.toLowerCase()} occurrence`);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
addFileRelationship(relationships, kind, documentInfo.path, to, range.startLine + 1, `SCIP file-level ${kind.toLowerCase()} occurrence`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function addRelationship(relationships, kind, from, to, line, reason) {
|
|
261
|
+
const key = `${kind}\0${from.path}\0${from.symbol}\0${to.path}\0${to.symbol}\0${line ?? 0}`;
|
|
262
|
+
if (!relationships.has(key) && relationships.size >= MAX_SCIP_RELATIONSHIPS) {
|
|
263
|
+
throw new Error(`SCIP JSON report generates more than ${MAX_SCIP_RELATIONSHIPS} relationships.`);
|
|
264
|
+
}
|
|
265
|
+
const relationship = {
|
|
266
|
+
kind,
|
|
267
|
+
fromSymbol: from.symbol,
|
|
268
|
+
fromPath: from.path,
|
|
269
|
+
toSymbol: to.symbol,
|
|
270
|
+
toPath: to.path,
|
|
271
|
+
line,
|
|
272
|
+
confidence: "derived",
|
|
273
|
+
reason
|
|
274
|
+
};
|
|
275
|
+
relationships.set(key, relationship);
|
|
276
|
+
}
|
|
277
|
+
function addFileRelationship(relationships, kind, fromPath, to, line, reason) {
|
|
278
|
+
const key = `${kind}\0${fromPath}\0${to.symbol}\0${line ?? 0}`;
|
|
279
|
+
if (!relationships.has(key) && relationships.size >= MAX_SCIP_RELATIONSHIPS) {
|
|
280
|
+
throw new Error(`SCIP JSON report generates more than ${MAX_SCIP_RELATIONSHIPS} relationships.`);
|
|
281
|
+
}
|
|
282
|
+
relationships.set(key, {
|
|
283
|
+
kind,
|
|
284
|
+
fromPath,
|
|
285
|
+
toSymbol: to.symbol,
|
|
286
|
+
toPath: to.path,
|
|
287
|
+
line,
|
|
288
|
+
confidence: "derived",
|
|
289
|
+
reason
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
function parseOptionalRange(record, context, camel = "range", snake = "range") {
|
|
293
|
+
const typed = typedRange(record, camel === "enclosingRange" || camel === "enclosing_range");
|
|
294
|
+
if (typed) {
|
|
295
|
+
return typed;
|
|
296
|
+
}
|
|
297
|
+
const value = field(record, camel, snake);
|
|
298
|
+
if (value === undefined) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
301
|
+
const parsed = rangeValue(value, context);
|
|
302
|
+
return parsed;
|
|
303
|
+
}
|
|
304
|
+
function typedRange(record, enclosing) {
|
|
305
|
+
const single = enclosing ? field(record, "singleLineEnclosingRange", "single_line_enclosing_range") : field(record, "singleLineRange", "single_line_range");
|
|
306
|
+
if (single !== undefined) {
|
|
307
|
+
if (!single || typeof single !== "object" || Array.isArray(single)) {
|
|
308
|
+
throw new Error("SCIP typed range has a malformed range.");
|
|
309
|
+
}
|
|
310
|
+
const singleRecord = single;
|
|
311
|
+
const line = numberField(singleRecord, "line");
|
|
312
|
+
const startCharacter = numberField(singleRecord, "startCharacter", "start_character");
|
|
313
|
+
const endCharacter = numberField(singleRecord, "endCharacter", "end_character");
|
|
314
|
+
if (line === undefined || startCharacter === undefined || endCharacter === undefined) {
|
|
315
|
+
throw new Error("SCIP typed range has a malformed range.");
|
|
316
|
+
}
|
|
317
|
+
return validatedRange({ startLine: line, startCharacter, endLine: line, endCharacter }, "typed range");
|
|
318
|
+
}
|
|
319
|
+
const multi = enclosing ? field(record, "multiLineEnclosingRange", "multi_line_enclosing_range") : field(record, "multiLineRange", "multi_line_range");
|
|
320
|
+
if (multi !== undefined) {
|
|
321
|
+
if (!multi || typeof multi !== "object" || Array.isArray(multi)) {
|
|
322
|
+
throw new Error("SCIP typed range has a malformed range.");
|
|
323
|
+
}
|
|
324
|
+
const multiRecord = multi;
|
|
325
|
+
const startLine = numberField(multiRecord, "startLine", "start_line");
|
|
326
|
+
const startCharacter = numberField(multiRecord, "startCharacter", "start_character");
|
|
327
|
+
const endLine = numberField(multiRecord, "endLine", "end_line");
|
|
328
|
+
const endCharacter = numberField(multiRecord, "endCharacter", "end_character");
|
|
329
|
+
if (startLine === undefined || startCharacter === undefined || endLine === undefined || endCharacter === undefined) {
|
|
330
|
+
throw new Error("SCIP typed range has a malformed range.");
|
|
331
|
+
}
|
|
332
|
+
return validatedRange({ startLine, startCharacter, endLine, endCharacter }, "typed range");
|
|
333
|
+
}
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
function rangeValue(value, context) {
|
|
337
|
+
if (Array.isArray(value)) {
|
|
338
|
+
const numbers = value.map((entry) => (typeof entry === "number" && Number.isSafeInteger(entry) && entry >= 0 && entry <= MAX_SCIP_INT32 ? entry : undefined));
|
|
339
|
+
if ((numbers.length === 3 || numbers.length === 4) && numbers.every((entry) => entry !== undefined)) {
|
|
340
|
+
return validatedRange({
|
|
341
|
+
startLine: numbers[0],
|
|
342
|
+
startCharacter: numbers[1],
|
|
343
|
+
endLine: numbers.length === 3 ? numbers[0] : numbers[2],
|
|
344
|
+
endCharacter: numbers.length === 3 ? numbers[2] : numbers[3]
|
|
345
|
+
}, context);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (value && typeof value === "object") {
|
|
349
|
+
const record = value;
|
|
350
|
+
const single = field(record, "singleLineRange", "single_line_range");
|
|
351
|
+
if (single && typeof single === "object") {
|
|
352
|
+
const singleRecord = single;
|
|
353
|
+
const line = numberField(singleRecord, "line");
|
|
354
|
+
const startCharacter = numberField(singleRecord, "startCharacter", "start_character");
|
|
355
|
+
const endCharacter = numberField(singleRecord, "endCharacter", "end_character");
|
|
356
|
+
if (line !== undefined && startCharacter !== undefined && endCharacter !== undefined)
|
|
357
|
+
return validatedRange({ startLine: line, startCharacter, endLine: line, endCharacter }, context);
|
|
358
|
+
}
|
|
359
|
+
const multi = field(record, "multiLineRange", "multi_line_range");
|
|
360
|
+
if (multi && typeof multi === "object") {
|
|
361
|
+
const multiRecord = multi;
|
|
362
|
+
const startLine = numberField(multiRecord, "startLine", "start_line");
|
|
363
|
+
const startCharacter = numberField(multiRecord, "startCharacter", "start_character");
|
|
364
|
+
const endLine = numberField(multiRecord, "endLine", "end_line");
|
|
365
|
+
const endCharacter = numberField(multiRecord, "endCharacter", "end_character");
|
|
366
|
+
if (startLine !== undefined && startCharacter !== undefined && endLine !== undefined && endCharacter !== undefined)
|
|
367
|
+
return validatedRange({ startLine, startCharacter, endLine, endCharacter }, context);
|
|
368
|
+
}
|
|
369
|
+
const startLine = requiredRangeIntegerField(record, context, "startLine", "start_line");
|
|
370
|
+
const startCharacter = optionalRangeIntegerField(record, context, 0, "startCharacter", "start_character");
|
|
371
|
+
const endLine = optionalRangeIntegerField(record, context, startLine, "endLine", "end_line");
|
|
372
|
+
const endCharacter = optionalRangeIntegerField(record, context, startCharacter, "endCharacter", "end_character");
|
|
373
|
+
if (startLine !== undefined && endLine !== undefined) {
|
|
374
|
+
return validatedRange({ startLine, startCharacter, endLine, endCharacter }, context);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
throw new Error(`SCIP ${context} has a malformed range.`);
|
|
378
|
+
}
|
|
379
|
+
function validatedRange(range, context) {
|
|
380
|
+
if (range.endLine < range.startLine || (range.endLine === range.startLine && range.endCharacter < range.startCharacter)) {
|
|
381
|
+
throw new Error(`SCIP ${context} has an invalid range.`);
|
|
382
|
+
}
|
|
383
|
+
return range;
|
|
384
|
+
}
|
|
385
|
+
function hasRole(record, bit, context) {
|
|
386
|
+
const value = field(record, "symbolRoles", "symbol_roles");
|
|
387
|
+
if (value === undefined) {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0 && value <= MAX_SCIP_INT32) {
|
|
391
|
+
return (value & bit) !== 0;
|
|
392
|
+
}
|
|
393
|
+
throw new Error(`SCIP ${context} symbolRoles must be a non-negative integer bitset.`);
|
|
394
|
+
}
|
|
395
|
+
function hasDefinitionRole(record, context) {
|
|
396
|
+
return hasRole(record, SCIP_ROLE_DEFINITION, context) || hasRole(record, SCIP_ROLE_FORWARD_DEFINITION, context);
|
|
397
|
+
}
|
|
398
|
+
function requiredRangeIntegerField(record, context, camel, snake = camel) {
|
|
399
|
+
const value = field(record, camel, snake);
|
|
400
|
+
if (value === undefined) {
|
|
401
|
+
return undefined;
|
|
402
|
+
}
|
|
403
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0 && value <= MAX_SCIP_INT32) {
|
|
404
|
+
return value;
|
|
405
|
+
}
|
|
406
|
+
throw new Error(`SCIP ${context} has a malformed range.`);
|
|
407
|
+
}
|
|
408
|
+
function optionalRangeIntegerField(record, context, fallback, camel, snake = camel) {
|
|
409
|
+
const value = field(record, camel, snake);
|
|
410
|
+
if (value === undefined) {
|
|
411
|
+
return fallback ?? 0;
|
|
412
|
+
}
|
|
413
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0 && value <= MAX_SCIP_INT32) {
|
|
414
|
+
return value;
|
|
415
|
+
}
|
|
416
|
+
throw new Error(`SCIP ${context} has a malformed range.`);
|
|
417
|
+
}
|
|
418
|
+
function scipSymbolKind(symbolInfo) {
|
|
419
|
+
const value = field(symbolInfo, "kind");
|
|
420
|
+
if (typeof value === "number") {
|
|
421
|
+
return scipNumericKind(value);
|
|
422
|
+
}
|
|
423
|
+
if (typeof value !== "string") {
|
|
424
|
+
return "unknown";
|
|
425
|
+
}
|
|
426
|
+
const normalized = value.toLowerCase();
|
|
427
|
+
if (normalized.includes("method") || normalized.includes("constructor"))
|
|
428
|
+
return "method";
|
|
429
|
+
if (normalized.includes("function") || normalized.includes("macro"))
|
|
430
|
+
return "function";
|
|
431
|
+
if (normalized.includes("class") || normalized.includes("object") || normalized.includes("contract"))
|
|
432
|
+
return "class";
|
|
433
|
+
if (normalized.includes("interface") || normalized.includes("trait"))
|
|
434
|
+
return "interface";
|
|
435
|
+
if (normalized.includes("enum"))
|
|
436
|
+
return "enum";
|
|
437
|
+
if (normalized.includes("struct") || normalized.includes("type"))
|
|
438
|
+
return "type";
|
|
439
|
+
if (normalized.includes("module") || normalized.includes("namespace") || normalized.includes("package") || normalized.includes("library"))
|
|
440
|
+
return "module";
|
|
441
|
+
if (normalized.includes("variable") || normalized.includes("property") || normalized.includes("field") || normalized.includes("parameter") || normalized.includes("constant") || normalized.includes("value"))
|
|
442
|
+
return "variable";
|
|
443
|
+
return "unknown";
|
|
444
|
+
}
|
|
445
|
+
function scipNumericKind(value) {
|
|
446
|
+
if ([9, 26, 80].includes(value))
|
|
447
|
+
return "method";
|
|
448
|
+
if ([17, 25].includes(value))
|
|
449
|
+
return "function";
|
|
450
|
+
if ([7, 62].includes(value))
|
|
451
|
+
return "class";
|
|
452
|
+
if ([21, 53].includes(value))
|
|
453
|
+
return "interface";
|
|
454
|
+
if ([11].includes(value))
|
|
455
|
+
return "enum";
|
|
456
|
+
if ([49, 54, 55, 58].includes(value))
|
|
457
|
+
return "type";
|
|
458
|
+
if ([29, 30, 35, 64].includes(value))
|
|
459
|
+
return "module";
|
|
460
|
+
if ([8, 12, 15, 37, 41, 60, 61, 82].includes(value))
|
|
461
|
+
return "variable";
|
|
462
|
+
return "unknown";
|
|
463
|
+
}
|
|
464
|
+
function displayNameFromScipSymbol(symbol) {
|
|
465
|
+
const token = symbol.trim().split(/\s+/).at(-1) ?? symbol;
|
|
466
|
+
const withoutSuffix = token.replace(/[().:#[\]/!]+$/g, "");
|
|
467
|
+
const parts = withoutSuffix.split(/[/.#:![\]()`]+/).filter(Boolean);
|
|
468
|
+
return parts.at(-1)?.replaceAll("``", "`") || `scip-${stableId(symbol)}`;
|
|
469
|
+
}
|
|
470
|
+
function reportLanguage(documents) {
|
|
471
|
+
const languages = [...new Set(documents.map((document) => document.language).filter((value) => Boolean(value)))].sort((a, b) => a.localeCompare(b));
|
|
472
|
+
return languages.length === 1 ? languages[0] : languages.length > 1 ? "mixed" : "unknown";
|
|
473
|
+
}
|
|
474
|
+
function scipToolName(parsed) {
|
|
475
|
+
const metadata = field(parsed, "metadata");
|
|
476
|
+
const toolInfo = metadata && typeof metadata === "object" ? field(metadata, "toolInfo", "tool_info") : undefined;
|
|
477
|
+
const name = toolInfo && typeof toolInfo === "object" ? stringField(toolInfo, "name") : undefined;
|
|
478
|
+
const version = toolInfo && typeof toolInfo === "object" ? stringField(toolInfo, "version") : undefined;
|
|
479
|
+
return ["scip", name, version].filter(Boolean).join(":");
|
|
480
|
+
}
|
|
481
|
+
function languageFromPath(filePath) {
|
|
482
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
483
|
+
const languages = {
|
|
484
|
+
".rs": "rust",
|
|
485
|
+
".go": "go",
|
|
486
|
+
".java": "java",
|
|
487
|
+
".js": "javascript",
|
|
488
|
+
".jsx": "javascript",
|
|
489
|
+
".ts": "typescript",
|
|
490
|
+
".tsx": "typescript",
|
|
491
|
+
".py": "python",
|
|
492
|
+
".rb": "ruby",
|
|
493
|
+
".php": "php",
|
|
494
|
+
".cs": "csharp",
|
|
495
|
+
".cpp": "cpp",
|
|
496
|
+
".cc": "cpp",
|
|
497
|
+
".cxx": "cpp",
|
|
498
|
+
".c": "c"
|
|
499
|
+
};
|
|
500
|
+
return languages[ext];
|
|
501
|
+
}
|
|
502
|
+
function objectValue(value, context) {
|
|
503
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
504
|
+
throw new Error(`SCIP ${context} must be an object.`);
|
|
505
|
+
}
|
|
506
|
+
return value;
|
|
507
|
+
}
|
|
508
|
+
function arrayField(record, camel, snake = camel) {
|
|
509
|
+
const value = field(record, camel, snake);
|
|
510
|
+
if (value === undefined) {
|
|
511
|
+
return undefined;
|
|
512
|
+
}
|
|
513
|
+
if (!Array.isArray(value)) {
|
|
514
|
+
throw new Error(`SCIP ${camel} must be an array.`);
|
|
515
|
+
}
|
|
516
|
+
return value;
|
|
517
|
+
}
|
|
518
|
+
function stringField(record, camel, snake = camel) {
|
|
519
|
+
const value = field(record, camel, snake);
|
|
520
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
521
|
+
}
|
|
522
|
+
function documentPathField(record) {
|
|
523
|
+
const value = field(record, "relativePath", "relative_path");
|
|
524
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
525
|
+
}
|
|
526
|
+
function numberField(record, camel, snake = camel) {
|
|
527
|
+
const value = field(record, camel, snake);
|
|
528
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 && value <= MAX_SCIP_INT32 ? value : undefined;
|
|
529
|
+
}
|
|
530
|
+
function truthyField(record, camel, snake = camel) {
|
|
531
|
+
return field(record, camel, snake) === true;
|
|
532
|
+
}
|
|
533
|
+
function field(record, camel, snake = camel) {
|
|
534
|
+
return record[camel] ?? record[snake];
|
|
535
|
+
}
|
|
536
|
+
function isLocalScipSymbol(symbol) {
|
|
537
|
+
return symbol.trim().startsWith("local ");
|
|
538
|
+
}
|
|
539
|
+
function rangeWithin(candidate, container) {
|
|
540
|
+
return comparePosition(candidate.startLine, candidate.startCharacter, container.startLine, container.startCharacter) >= 0 && comparePosition(candidate.endLine, candidate.endCharacter, container.endLine, container.endCharacter) <= 0;
|
|
541
|
+
}
|
|
542
|
+
function compareRangeSpecificity(a, b) {
|
|
543
|
+
return (lineSpan(a) - lineSpan(b) ||
|
|
544
|
+
comparePosition(b.startLine, b.startCharacter, a.startLine, a.startCharacter) ||
|
|
545
|
+
comparePosition(a.endLine, a.endCharacter, b.endLine, b.endCharacter) ||
|
|
546
|
+
characterSpan(a) - characterSpan(b));
|
|
547
|
+
}
|
|
548
|
+
function lineSpan(range) {
|
|
549
|
+
return range.endLine - range.startLine;
|
|
550
|
+
}
|
|
551
|
+
function characterSpan(range) {
|
|
552
|
+
return range.endLine === range.startLine ? Math.max(0, range.endCharacter - range.startCharacter) : 0;
|
|
553
|
+
}
|
|
554
|
+
function comparePosition(lineA, characterA, lineB, characterB) {
|
|
555
|
+
return lineA - lineB || characterA - characterB;
|
|
556
|
+
}
|
|
557
|
+
function sortSymbols(a, b) {
|
|
558
|
+
return a.path.localeCompare(b.path) || (a.line ?? 0) - (b.line ?? 0) || a.name.localeCompare(b.name) || (a.id ?? "").localeCompare(b.id ?? "");
|
|
559
|
+
}
|
|
560
|
+
function sortRelationships(a, b) {
|
|
561
|
+
return (a.kind.localeCompare(b.kind) ||
|
|
562
|
+
(a.fromPath ?? "").localeCompare(b.fromPath ?? "") ||
|
|
563
|
+
(a.toPath ?? "").localeCompare(b.toPath ?? "") ||
|
|
564
|
+
(a.fromSymbol ?? "").localeCompare(b.fromSymbol ?? "") ||
|
|
565
|
+
(a.toSymbol ?? "").localeCompare(b.toSymbol ?? "") ||
|
|
566
|
+
(a.line ?? 0) - (b.line ?? 0) ||
|
|
567
|
+
(a.reason ?? "").localeCompare(b.reason ?? ""));
|
|
568
|
+
}
|
|
569
|
+
//# sourceMappingURL=scip-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scip-import.js","sourceRoot":"","sources":["../src/scip-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export interface StaticAnalysisOptions {
|
|
|
5
5
|
sarifReports?: string[];
|
|
6
6
|
genericReports?: string[];
|
|
7
7
|
symbolReports?: string[];
|
|
8
|
+
scipReports?: string[];
|
|
8
9
|
runSemgrep?: boolean;
|
|
9
10
|
semgrepConfigs?: string[];
|
|
10
11
|
runCodeql?: boolean;
|
|
@@ -15,7 +16,7 @@ export interface StaticAnalysisOptions {
|
|
|
15
16
|
index?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export interface StaticAnalysisReport {
|
|
18
|
-
kind: "semgrep" | "codeql" | "sarif" | "generic" | "shellcheck" | "symbol-report";
|
|
19
|
+
kind: "semgrep" | "codeql" | "sarif" | "generic" | "shellcheck" | "symbol-report" | "scip";
|
|
19
20
|
source: string;
|
|
20
21
|
path: string;
|
|
21
22
|
copied: boolean;
|