circle-ir 4.17.0 → 4.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/advisories.d.ts +186 -0
- package/dist/analysis/advisories.d.ts.map +1 -0
- package/dist/analysis/advisories.js +391 -0
- package/dist/analysis/advisories.js.map +1 -0
- package/dist/analysis/comment-lines.d.ts +14 -0
- package/dist/analysis/comment-lines.d.ts.map +1 -0
- package/dist/analysis/comment-lines.js +34 -0
- package/dist/analysis/comment-lines.js.map +1 -0
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +59 -5
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/constant-caller-gate.d.ts +2 -2
- package/dist/analysis/constant-caller-gate.d.ts.map +1 -1
- package/dist/analysis/constant-caller-gate.js +205 -29
- package/dist/analysis/constant-caller-gate.js.map +1 -1
- package/dist/analysis/constant-propagation/propagator.d.ts +4 -0
- package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/propagator.js +99 -0
- package/dist/analysis/constant-propagation/propagator.js.map +1 -1
- package/dist/analysis/entry-point-detection.d.ts.map +1 -1
- package/dist/analysis/entry-point-detection.js +72 -0
- package/dist/analysis/entry-point-detection.js.map +1 -1
- package/dist/analysis/interprocedural.d.ts.map +1 -1
- package/dist/analysis/interprocedural.js +75 -8
- package/dist/analysis/interprocedural.js.map +1 -1
- package/dist/analysis/maven-declared.d.ts +72 -0
- package/dist/analysis/maven-declared.d.ts.map +1 -0
- package/dist/analysis/maven-declared.js +216 -0
- package/dist/analysis/maven-declared.js.map +1 -0
- package/dist/analysis/maven-version.d.ts +28 -0
- package/dist/analysis/maven-version.d.ts.map +1 -0
- package/dist/analysis/maven-version.js +172 -0
- package/dist/analysis/maven-version.js.map +1 -0
- package/dist/analysis/passes/constant-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/constant-propagation-pass.js +29 -1
- package/dist/analysis/passes/constant-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
- package/dist/analysis/passes/cross-file-pass.js +81 -1
- package/dist/analysis/passes/cross-file-pass.js.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +7 -0
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js +44 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.d.ts +2 -0
- package/dist/analysis/passes/insecure-cookie-pass.d.ts.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.js +25 -3
- package/dist/analysis/passes/insecure-cookie-pass.js.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.d.ts +11 -14
- package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.js +562 -0
- package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
- package/dist/analysis/passes/language-sources-pass.d.ts +18 -1
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +1057 -14
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.js +66 -3
- package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts +44 -2
- package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.js +690 -12
- package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.js +133 -10
- package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts +18 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.js +161 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.js.map +1 -1
- package/dist/analysis/passes/weak-random-pass.d.ts +6 -0
- package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-random-pass.js +29 -0
- package/dist/analysis/passes/weak-random-pass.js.map +1 -1
- package/dist/analysis/promote-cross-file-flows.d.ts +17 -0
- package/dist/analysis/promote-cross-file-flows.d.ts.map +1 -0
- package/dist/analysis/promote-cross-file-flows.js +32 -0
- package/dist/analysis/promote-cross-file-flows.js.map +1 -0
- package/dist/analysis/sbom.d.ts +100 -0
- package/dist/analysis/sbom.d.ts.map +1 -1
- package/dist/analysis/sbom.js +514 -3
- package/dist/analysis/sbom.js.map +1 -1
- package/dist/analysis/semver-version.d.ts +30 -0
- package/dist/analysis/semver-version.d.ts.map +1 -0
- package/dist/analysis/semver-version.js +76 -0
- package/dist/analysis/semver-version.js.map +1 -0
- package/dist/analysis/taint-matcher.d.ts +5 -0
- package/dist/analysis/taint-matcher.d.ts.map +1 -1
- package/dist/analysis/taint-matcher.js +225 -4
- package/dist/analysis/taint-matcher.js.map +1 -1
- package/dist/analyzer.d.ts +57 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +69 -6
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +2936 -291
- package/dist/core/circle-ir-core.cjs +634 -203
- package/dist/core/circle-ir-core.js +634 -203
- package/dist/core/extractors/dfg.js +205 -2
- package/dist/core/extractors/dfg.js.map +1 -1
- package/dist/core/extractors/ts-declaration-detail.d.ts +39 -0
- package/dist/core/extractors/ts-declaration-detail.d.ts.map +1 -0
- package/dist/core/extractors/ts-declaration-detail.js +266 -0
- package/dist/core/extractors/ts-declaration-detail.js.map +1 -0
- package/dist/graph/analysis-pass.d.ts +4 -1
- package/dist/graph/analysis-pass.d.ts.map +1 -1
- package/dist/graph/analysis-pass.js +4 -1
- package/dist/graph/analysis-pass.js.map +1 -1
- package/dist/graph-facts/dead-code.d.ts +62 -0
- package/dist/graph-facts/dead-code.d.ts.map +1 -0
- package/dist/graph-facts/dead-code.js +90 -0
- package/dist/graph-facts/dead-code.js.map +1 -0
- package/dist/graph-facts/dependency-calls.d.ts +86 -0
- package/dist/graph-facts/dependency-calls.d.ts.map +1 -0
- package/dist/graph-facts/dependency-calls.js +93 -0
- package/dist/graph-facts/dependency-calls.js.map +1 -0
- package/dist/graph-facts/index.d.ts +10 -0
- package/dist/graph-facts/index.d.ts.map +1 -0
- package/dist/graph-facts/index.js +10 -0
- package/dist/graph-facts/index.js.map +1 -0
- package/dist/graph-facts/maven-packages.d.ts +42 -0
- package/dist/graph-facts/maven-packages.d.ts.map +1 -0
- package/dist/graph-facts/maven-packages.js +133 -0
- package/dist/graph-facts/maven-packages.js.map +1 -0
- package/dist/graph-facts/reach.d.ts +203 -0
- package/dist/graph-facts/reach.d.ts.map +1 -0
- package/dist/graph-facts/reach.js +219 -0
- package/dist/graph-facts/reach.js.map +1 -0
- package/dist/graph-facts/removal-reach.d.ts +73 -0
- package/dist/graph-facts/removal-reach.d.ts.map +1 -0
- package/dist/graph-facts/removal-reach.js +64 -0
- package/dist/graph-facts/removal-reach.js.map +1 -0
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/navigation/go-graph.d.ts +68 -0
- package/dist/navigation/go-graph.d.ts.map +1 -0
- package/dist/navigation/go-graph.js +753 -0
- package/dist/navigation/go-graph.js.map +1 -0
- package/dist/navigation/index.d.ts +7 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +6 -0
- package/dist/navigation/index.js.map +1 -1
- package/dist/navigation/java-entry-tables.d.ts +43 -0
- package/dist/navigation/java-entry-tables.d.ts.map +1 -0
- package/dist/navigation/java-entry-tables.js +56 -0
- package/dist/navigation/java-entry-tables.js.map +1 -0
- package/dist/navigation/java-graph.d.ts +64 -0
- package/dist/navigation/java-graph.d.ts.map +1 -0
- package/dist/navigation/java-graph.js +466 -0
- package/dist/navigation/java-graph.js.map +1 -0
- package/dist/navigation/navigation-index.d.ts +51 -1
- package/dist/navigation/navigation-index.d.ts.map +1 -1
- package/dist/navigation/navigation-index.js +72 -0
- package/dist/navigation/navigation-index.js.map +1 -1
- package/dist/navigation/python-graph.d.ts +73 -0
- package/dist/navigation/python-graph.d.ts.map +1 -0
- package/dist/navigation/python-graph.js +867 -0
- package/dist/navigation/python-graph.js.map +1 -0
- package/dist/navigation/ts-call-edges.d.ts +193 -0
- package/dist/navigation/ts-call-edges.d.ts.map +1 -0
- package/dist/navigation/ts-call-edges.js +2089 -0
- package/dist/navigation/ts-call-edges.js.map +1 -0
- package/dist/navigation/ts-entry-tables.d.ts +88 -0
- package/dist/navigation/ts-entry-tables.d.ts.map +1 -0
- package/dist/navigation/ts-entry-tables.js +50 -0
- package/dist/navigation/ts-entry-tables.js.map +1 -0
- package/dist/path-set/branches.d.ts +52 -0
- package/dist/path-set/branches.d.ts.map +1 -0
- package/dist/path-set/branches.js +124 -0
- package/dist/path-set/branches.js.map +1 -0
- package/dist/path-set/finding-diff.d.ts +63 -0
- package/dist/path-set/finding-diff.d.ts.map +1 -0
- package/dist/path-set/finding-diff.js +150 -0
- package/dist/path-set/finding-diff.js.map +1 -0
- package/dist/path-set/index.d.ts +18 -0
- package/dist/path-set/index.d.ts.map +1 -0
- package/dist/path-set/index.js +12 -0
- package/dist/path-set/index.js.map +1 -0
- package/dist/path-set/line-diff.d.ts +19 -0
- package/dist/path-set/line-diff.d.ts.map +1 -0
- package/dist/path-set/line-diff.js +98 -0
- package/dist/path-set/line-diff.js.map +1 -0
- package/dist/path-set/path-set.d.ts +88 -0
- package/dist/path-set/path-set.d.ts.map +1 -0
- package/dist/path-set/path-set.js +716 -0
- package/dist/path-set/path-set.js.map +1 -0
- package/dist/path-set/templates.d.ts +42 -0
- package/dist/path-set/templates.d.ts.map +1 -0
- package/dist/path-set/templates.js +119 -0
- package/dist/path-set/templates.js.map +1 -0
- package/dist/path-set/types.d.ts +195 -0
- package/dist/path-set/types.d.ts.map +1 -0
- package/dist/path-set/types.js +8 -0
- package/dist/path-set/types.js.map +1 -0
- package/dist/remedy-class/index.d.ts +12 -0
- package/dist/remedy-class/index.d.ts.map +1 -0
- package/dist/remedy-class/index.js +9 -0
- package/dist/remedy-class/index.js.map +1 -0
- package/dist/remedy-class/match.d.ts +165 -0
- package/dist/remedy-class/match.d.ts.map +1 -0
- package/dist/remedy-class/match.js +705 -0
- package/dist/remedy-class/match.js.map +1 -0
- package/dist/remedy-class/output-context.d.ts +25 -0
- package/dist/remedy-class/output-context.d.ts.map +1 -0
- package/dist/remedy-class/output-context.js +150 -0
- package/dist/remedy-class/output-context.js.map +1 -0
- package/dist/remedy-class/sha256.d.ts +18 -0
- package/dist/remedy-class/sha256.d.ts.map +1 -0
- package/dist/remedy-class/sha256.js +89 -0
- package/dist/remedy-class/sha256.js.map +1 -0
- package/dist/remedy-class/table.d.ts +130 -0
- package/dist/remedy-class/table.d.ts.map +1 -0
- package/dist/remedy-class/table.js +457 -0
- package/dist/remedy-class/table.js.map +1 -0
- package/dist/resolution/cross-file.d.ts +9 -0
- package/dist/resolution/cross-file.d.ts.map +1 -1
- package/dist/resolution/cross-file.js +60 -5
- package/dist/resolution/cross-file.js.map +1 -1
- package/dist/stable-ids/builder.d.ts +20 -0
- package/dist/stable-ids/builder.d.ts.map +1 -0
- package/dist/stable-ids/builder.js +65 -0
- package/dist/stable-ids/builder.js.map +1 -0
- package/dist/stable-ids/diff.d.ts +18 -0
- package/dist/stable-ids/diff.d.ts.map +1 -0
- package/dist/stable-ids/diff.js +37 -0
- package/dist/stable-ids/diff.js.map +1 -0
- package/dist/stable-ids/go.d.ts +28 -0
- package/dist/stable-ids/go.d.ts.map +1 -0
- package/dist/stable-ids/go.js +160 -0
- package/dist/stable-ids/go.js.map +1 -0
- package/dist/stable-ids/hash.d.ts +22 -0
- package/dist/stable-ids/hash.d.ts.map +1 -0
- package/dist/stable-ids/hash.js +167 -0
- package/dist/stable-ids/hash.js.map +1 -0
- package/dist/stable-ids/index.d.ts +30 -0
- package/dist/stable-ids/index.d.ts.map +1 -0
- package/dist/stable-ids/index.js +59 -0
- package/dist/stable-ids/index.js.map +1 -0
- package/dist/stable-ids/java.d.ts +28 -0
- package/dist/stable-ids/java.d.ts.map +1 -0
- package/dist/stable-ids/java.js +224 -0
- package/dist/stable-ids/java.js.map +1 -0
- package/dist/stable-ids/moves.d.ts +87 -0
- package/dist/stable-ids/moves.d.ts.map +1 -0
- package/dist/stable-ids/moves.js +222 -0
- package/dist/stable-ids/moves.js.map +1 -0
- package/dist/stable-ids/nodes.d.ts +32 -0
- package/dist/stable-ids/nodes.d.ts.map +1 -0
- package/dist/stable-ids/nodes.js +92 -0
- package/dist/stable-ids/nodes.js.map +1 -0
- package/dist/stable-ids/normalize.d.ts +35 -0
- package/dist/stable-ids/normalize.d.ts.map +1 -0
- package/dist/stable-ids/normalize.js +174 -0
- package/dist/stable-ids/normalize.js.map +1 -0
- package/dist/stable-ids/parse-errors.d.ts +24 -0
- package/dist/stable-ids/parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/parse-errors.js +46 -0
- package/dist/stable-ids/parse-errors.js.map +1 -0
- package/dist/stable-ids/python.d.ts +27 -0
- package/dist/stable-ids/python.d.ts.map +1 -0
- package/dist/stable-ids/python.js +212 -0
- package/dist/stable-ids/python.js.map +1 -0
- package/dist/stable-ids/ts-parse-errors.d.ts +27 -0
- package/dist/stable-ids/ts-parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/ts-parse-errors.js +75 -0
- package/dist/stable-ids/ts-parse-errors.js.map +1 -0
- package/dist/stable-ids/types.d.ts +106 -0
- package/dist/stable-ids/types.d.ts.map +1 -0
- package/dist/stable-ids/types.js +16 -0
- package/dist/stable-ids/types.js.map +1 -0
- package/dist/stable-ids/typescript.d.ts +30 -0
- package/dist/stable-ids/typescript.d.ts.map +1 -0
- package/dist/stable-ids/typescript.js +362 -0
- package/dist/stable-ids/typescript.js.map +1 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/index.d.ts +35 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body normalization for `ids@0.1`: the leaf tokens of a syntax subtree with
|
|
3
|
+
* whitespace, comments and formatting removed, identifiers and literals kept.
|
|
4
|
+
*
|
|
5
|
+
* Formatting a formatter may change and that cannot change meaning is
|
|
6
|
+
* dropped: statement-terminating `;`, a trailing `,` before a closing bracket,
|
|
7
|
+
* the quote style of a plain string, the parentheses around a lone untyped
|
|
8
|
+
* arrow-function parameter, and whitespace inside JSX text.
|
|
9
|
+
*/
|
|
10
|
+
const CLOSERS = new Set([')', ']', '}', '>']);
|
|
11
|
+
/** Comment node types across the grammars (`comment`; Java's `line_comment` and `block_comment`). */
|
|
12
|
+
const COMMENTS = new Set(['comment', 'line_comment', 'block_comment']);
|
|
13
|
+
/** True for a parenthesised parameter list that holds one bare, untyped identifier. */
|
|
14
|
+
function isLoneArrowParam(node) {
|
|
15
|
+
if (node.type !== 'formal_parameters' || node.parent?.type !== 'arrow_function')
|
|
16
|
+
return null;
|
|
17
|
+
const params = namedChildren(node);
|
|
18
|
+
if (params.length !== 1)
|
|
19
|
+
return null;
|
|
20
|
+
const p = params[0];
|
|
21
|
+
if (p.type === 'identifier')
|
|
22
|
+
return p;
|
|
23
|
+
if (p.type === 'required_parameter' && p.namedChildCount === 1) {
|
|
24
|
+
const pattern = p.childForFieldName('pattern');
|
|
25
|
+
if (pattern?.type === 'identifier')
|
|
26
|
+
return pattern;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/** Named children, comments excluded. */
|
|
31
|
+
export function namedChildren(node) {
|
|
32
|
+
const out = [];
|
|
33
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
34
|
+
const c = node.namedChild(i);
|
|
35
|
+
if (c && !COMMENTS.has(c.type))
|
|
36
|
+
out.push(c);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
function emit(node, opts, out) {
|
|
41
|
+
const replaced = opts.replace?.get(node.id);
|
|
42
|
+
if (replaced !== undefined) {
|
|
43
|
+
if (replaced !== '')
|
|
44
|
+
out.push(replaced);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (opts.skip?.has(node.id))
|
|
48
|
+
return;
|
|
49
|
+
const type = node.type;
|
|
50
|
+
if (COMMENTS.has(type) || type === 'hash_bang_line')
|
|
51
|
+
return;
|
|
52
|
+
const lone = isLoneArrowParam(node);
|
|
53
|
+
if (lone) {
|
|
54
|
+
emit(lone, opts, out);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (node.childCount === 0) {
|
|
58
|
+
let text = node.text;
|
|
59
|
+
if (type === 'jsx_text')
|
|
60
|
+
text = text.replace(/\s+/g, ' ').trim();
|
|
61
|
+
if (text === '')
|
|
62
|
+
return;
|
|
63
|
+
if ((text === "'" || text === '"') && node.parent?.type === 'string')
|
|
64
|
+
text = '"';
|
|
65
|
+
out.push(text);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const wrapped = opts.wrap?.has(type) === true;
|
|
69
|
+
if (wrapped)
|
|
70
|
+
out.push('⟨');
|
|
71
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
72
|
+
const c = node.child(i);
|
|
73
|
+
if (c)
|
|
74
|
+
emit(c, opts, out);
|
|
75
|
+
}
|
|
76
|
+
if (wrapped)
|
|
77
|
+
out.push('⟩');
|
|
78
|
+
}
|
|
79
|
+
/** The normalized token stream of `nodes`, in order. */
|
|
80
|
+
export function bodyTokens(nodes, opts = {}) {
|
|
81
|
+
const raw = [];
|
|
82
|
+
for (const n of nodes)
|
|
83
|
+
emit(n, opts, raw);
|
|
84
|
+
const out = [];
|
|
85
|
+
for (let i = 0; i < raw.length; i++) {
|
|
86
|
+
const t = raw[i];
|
|
87
|
+
if (t === ';')
|
|
88
|
+
continue;
|
|
89
|
+
if (t === ',') {
|
|
90
|
+
let j = i + 1;
|
|
91
|
+
while (j < raw.length && raw[j] === ';')
|
|
92
|
+
j++;
|
|
93
|
+
if (j < raw.length && CLOSERS.has(raw[j]))
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
out.push(t);
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
const WORD_END = /[\w$#]$/;
|
|
101
|
+
const WORD_START = /^[\w$#]/;
|
|
102
|
+
/** Concatenate tokens, keeping a space only where two words would fuse. */
|
|
103
|
+
export function joinTokens(parts) {
|
|
104
|
+
let s = '';
|
|
105
|
+
for (const p of parts) {
|
|
106
|
+
if (p === '')
|
|
107
|
+
continue;
|
|
108
|
+
if (s !== '' && WORD_END.test(s) && WORD_START.test(p))
|
|
109
|
+
s += ' ';
|
|
110
|
+
s += p;
|
|
111
|
+
}
|
|
112
|
+
return s;
|
|
113
|
+
}
|
|
114
|
+
function flatten(node, type, acc) {
|
|
115
|
+
for (const c of namedChildren(node)) {
|
|
116
|
+
if (c.type === type)
|
|
117
|
+
flatten(c, type, acc);
|
|
118
|
+
else
|
|
119
|
+
acc.push(c);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* A type annotation serialized canonically: object-type members and the arms
|
|
124
|
+
* of a union or intersection are sorted, so `{b: string; a: number}` and
|
|
125
|
+
* `{a: number, b: string}` — or `A | B` and `B | A` — serialize the same.
|
|
126
|
+
*/
|
|
127
|
+
export function canonicalType(node) {
|
|
128
|
+
switch (node.type) {
|
|
129
|
+
case 'type_annotation':
|
|
130
|
+
case 'opting_type_annotation':
|
|
131
|
+
case 'omitting_type_annotation': {
|
|
132
|
+
const inner = namedChildren(node);
|
|
133
|
+
return inner.length === 1 ? canonicalType(inner[0]) : joinTokens(bodyTokens([node]));
|
|
134
|
+
}
|
|
135
|
+
case 'formal_parameters': {
|
|
136
|
+
// Parameters of a function or constructor type: types only, never names.
|
|
137
|
+
const params = namedChildren(node).map(p => {
|
|
138
|
+
const type = p.childForFieldName('type');
|
|
139
|
+
const pattern = p.childForFieldName('pattern');
|
|
140
|
+
const rest = pattern?.type === 'rest_pattern' || p.type === 'rest_pattern' ? '...' : '';
|
|
141
|
+
const optional = p.type === 'optional_parameter' ? '?' : '';
|
|
142
|
+
return rest + (type ? canonicalType(type) : '_') + optional;
|
|
143
|
+
});
|
|
144
|
+
return '(' + params.join(',') + ')';
|
|
145
|
+
}
|
|
146
|
+
case 'object_type': {
|
|
147
|
+
const members = namedChildren(node).map(canonicalType);
|
|
148
|
+
members.sort();
|
|
149
|
+
return '{' + members.join(';') + '}';
|
|
150
|
+
}
|
|
151
|
+
case 'union_type':
|
|
152
|
+
case 'intersection_type': {
|
|
153
|
+
const arms = [];
|
|
154
|
+
flatten(node, node.type, arms);
|
|
155
|
+
const parts = arms.map(canonicalType).sort();
|
|
156
|
+
return parts.join(node.type === 'union_type' ? '|' : '&');
|
|
157
|
+
}
|
|
158
|
+
default: {
|
|
159
|
+
if (node.childCount === 0)
|
|
160
|
+
return node.text;
|
|
161
|
+
const parts = [];
|
|
162
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
163
|
+
const c = node.child(i);
|
|
164
|
+
if (!c || COMMENTS.has(c.type))
|
|
165
|
+
continue;
|
|
166
|
+
parts.push(c.isNamed ? canonicalType(c) : c.text);
|
|
167
|
+
}
|
|
168
|
+
// A trailing comma before a closer is formatting.
|
|
169
|
+
const kept = parts.filter((p, i) => !(p === ',' && CLOSERS.has(parts[i + 1] ?? '')));
|
|
170
|
+
return joinTokens(kept);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/stable-ids/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The first parse error in a tree, in source order, as a `ParseErrorSite`.
|
|
3
|
+
*
|
|
4
|
+
* Stable ids call this for `StableIdFile.parseError`, so a consumer that
|
|
5
|
+
* withholds an answer because a file is partial can say which file, where,
|
|
6
|
+
* and what the parser could not read (cognium-dev#1004).
|
|
7
|
+
*/
|
|
8
|
+
import type { Node } from '../core/parser.js';
|
|
9
|
+
import type { ParseErrorSite } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* The first `ERROR` or `MISSING` node for which `ignore` is false, in source
|
|
12
|
+
* order, or `undefined` when there is none.
|
|
13
|
+
*/
|
|
14
|
+
export declare function firstParseErrorNode(root: Node, ignore?: (n: Node) => boolean): Node | undefined;
|
|
15
|
+
/** A tree node as a `ParseErrorSite`. */
|
|
16
|
+
export declare function parseErrorSite(n: Node): ParseErrorSite;
|
|
17
|
+
/** The first parse error in the tree, or `undefined` for a clean parse. */
|
|
18
|
+
export declare function firstParseError(root: Node, ignore?: (n: Node) => boolean): ParseErrorSite | undefined;
|
|
19
|
+
/** `partial` and, when set, `parseError` for a `StableIdFile`, from any error in the tree. */
|
|
20
|
+
export declare function partialOf(root: Node): {
|
|
21
|
+
partial: boolean;
|
|
22
|
+
parseError?: ParseErrorSite;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=parse-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-errors.d.ts","sourceRoot":"","sources":["../../src/stable-ids/parse-errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAqB,GAAG,IAAI,GAAG,SAAS,CAiB5G;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,cAAc,CAQtD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,GAAG,cAAc,GAAG,SAAS,CAGrG;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,CAGvF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The first `ERROR` or `MISSING` node for which `ignore` is false, in source
|
|
3
|
+
* order, or `undefined` when there is none.
|
|
4
|
+
*/
|
|
5
|
+
export function firstParseErrorNode(root, ignore = () => false) {
|
|
6
|
+
if (!root.hasError)
|
|
7
|
+
return undefined;
|
|
8
|
+
const stack = [root];
|
|
9
|
+
while (stack.length > 0) {
|
|
10
|
+
const n = stack.pop();
|
|
11
|
+
// A root the grammar gave up on is itself an ERROR; the useful site is inside it.
|
|
12
|
+
if ((n.type === 'ERROR' || n.isMissing) && n !== root) {
|
|
13
|
+
if (!ignore(n))
|
|
14
|
+
return n;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
// Push in reverse so the leftmost child is visited first.
|
|
18
|
+
for (let i = n.childCount - 1; i >= 0; i--) {
|
|
19
|
+
const c = n.child(i);
|
|
20
|
+
if (c && (c.hasError || c.isMissing))
|
|
21
|
+
stack.push(c);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return root.type === 'ERROR' && !ignore(root) ? root : undefined;
|
|
25
|
+
}
|
|
26
|
+
/** A tree node as a `ParseErrorSite`. */
|
|
27
|
+
export function parseErrorSite(n) {
|
|
28
|
+
return {
|
|
29
|
+
line: n.startPosition.row + 1,
|
|
30
|
+
column: n.startPosition.column + 1,
|
|
31
|
+
nodeKind: n.isMissing ? `MISSING ${n.type}` : 'ERROR',
|
|
32
|
+
// Directly under the root (even a root the grammar gave up on): the program.
|
|
33
|
+
parent: n.parent && n.parent.parent ? n.parent.type : 'program',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** The first parse error in the tree, or `undefined` for a clean parse. */
|
|
37
|
+
export function firstParseError(root, ignore) {
|
|
38
|
+
const n = firstParseErrorNode(root, ignore);
|
|
39
|
+
return n ? parseErrorSite(n) : undefined;
|
|
40
|
+
}
|
|
41
|
+
/** `partial` and, when set, `parseError` for a `StableIdFile`, from any error in the tree. */
|
|
42
|
+
export function partialOf(root) {
|
|
43
|
+
const parseError = firstParseError(root);
|
|
44
|
+
return parseError ? { partial: true, parseError } : { partial: false };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=parse-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-errors.js","sourceRoot":"","sources":["../../src/stable-ids/parse-errors.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,MAAM,GAAyB,GAAG,EAAE,CAAC,KAAK;IACxF,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,KAAK,GAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACvB,kFAAkF;QAClF,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,0DAA0D;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,cAAc,CAAC,CAAO;IACpC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAClC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO;QACrD,6EAA6E;QAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,MAA6B;IACvE,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ids@0.1` declaration and body ids for Python.
|
|
3
|
+
*
|
|
4
|
+
* Declarations: the module (its dotted name); functions; classes (kind
|
|
5
|
+
* `type`); methods; module- and class-level assignments to a plain name
|
|
6
|
+
* (kind `field`). Functions, classes and lambdas inside a body are keyed by
|
|
7
|
+
* their enclosing declaration plus a structural path and flagged
|
|
8
|
+
* `unstable:anonymous`.
|
|
9
|
+
*
|
|
10
|
+
* Module name: the file's dotted path — `src/` dropped, `__init__` naming
|
|
11
|
+
* its package — unless the caller passes one. Signature: arity plus
|
|
12
|
+
* annotations, parameter names never — `(_,int?,*_,_?,**_)->str` — so a
|
|
13
|
+
* parameter rename does not re-key a function. Decorators are body.
|
|
14
|
+
*
|
|
15
|
+
* Bodies: leaf tokens as in the other languages, with each `block` marked so
|
|
16
|
+
* that indentation, which carries Python's structure, is not lost; comments
|
|
17
|
+
* and docstrings are not body.
|
|
18
|
+
*/
|
|
19
|
+
import type { Node, Tree } from '../core/parser.js';
|
|
20
|
+
import { type StableIdFile, type StableIdOptions } from './types.js';
|
|
21
|
+
/** The dotted module name for a repository-relative `.py` path. */
|
|
22
|
+
export declare function pythonModuleName(filePath: string): string;
|
|
23
|
+
/** `(_,int?,*_,**_)->T` — names never, annotations and defaults (as `?`) always. */
|
|
24
|
+
export declare function pythonSignature(fn: Node): string;
|
|
25
|
+
/** Derive `ids@0.1` ids from an already-parsed Python tree. */
|
|
26
|
+
export declare function derivePythonIds(tree: Tree, filePath: string, options?: StableIdOptions): StableIdFile;
|
|
27
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/stable-ids/python.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAA0D,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAK7H,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzD;AAMD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAuBhD;AAyHD,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAMzG"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ids@0.1` declaration and body ids for Python.
|
|
3
|
+
*
|
|
4
|
+
* Declarations: the module (its dotted name); functions; classes (kind
|
|
5
|
+
* `type`); methods; module- and class-level assignments to a plain name
|
|
6
|
+
* (kind `field`). Functions, classes and lambdas inside a body are keyed by
|
|
7
|
+
* their enclosing declaration plus a structural path and flagged
|
|
8
|
+
* `unstable:anonymous`.
|
|
9
|
+
*
|
|
10
|
+
* Module name: the file's dotted path — `src/` dropped, `__init__` naming
|
|
11
|
+
* its package — unless the caller passes one. Signature: arity plus
|
|
12
|
+
* annotations, parameter names never — `(_,int?,*_,_?,**_)->str` — so a
|
|
13
|
+
* parameter rename does not re-key a function. Decorators are body.
|
|
14
|
+
*
|
|
15
|
+
* Bodies: leaf tokens as in the other languages, with each `block` marked so
|
|
16
|
+
* that indentation, which carries Python's structure, is not lost; comments
|
|
17
|
+
* and docstrings are not body.
|
|
18
|
+
*/
|
|
19
|
+
import { partialOf } from './parse-errors.js';
|
|
20
|
+
import { Builder, placeholder } from './builder.js';
|
|
21
|
+
import { bodyTokens, namedChildren } from './normalize.js';
|
|
22
|
+
import { STABLE_ID_SCHEME } from './types.js';
|
|
23
|
+
const WRAP = new Set(['block']);
|
|
24
|
+
const NESTED = new Set(['function_definition', 'class_definition', 'lambda']);
|
|
25
|
+
/** The dotted module name for a repository-relative `.py` path. */
|
|
26
|
+
export function pythonModuleName(filePath) {
|
|
27
|
+
let p = filePath.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\.pyi?$/, '');
|
|
28
|
+
if (p.startsWith('src/'))
|
|
29
|
+
p = p.slice(4);
|
|
30
|
+
const parts = p.split('/').filter(x => x !== '');
|
|
31
|
+
if (parts[parts.length - 1] === '__init__')
|
|
32
|
+
parts.pop();
|
|
33
|
+
return parts.join('.') || '__main__';
|
|
34
|
+
}
|
|
35
|
+
function compact(text) {
|
|
36
|
+
return text.replace(/\s+/g, '');
|
|
37
|
+
}
|
|
38
|
+
/** `(_,int?,*_,**_)->T` — names never, annotations and defaults (as `?`) always. */
|
|
39
|
+
export function pythonSignature(fn) {
|
|
40
|
+
const params = fn.childForFieldName('parameters');
|
|
41
|
+
const out = [];
|
|
42
|
+
for (const p of params ? namedChildren(params) : []) {
|
|
43
|
+
switch (p.type) {
|
|
44
|
+
case 'identifier':
|
|
45
|
+
out.push('_');
|
|
46
|
+
break;
|
|
47
|
+
case 'typed_parameter': {
|
|
48
|
+
const inner = namedChildren(p)[0];
|
|
49
|
+
const t = compact(p.childForFieldName('type')?.text ?? '_');
|
|
50
|
+
out.push(inner?.type === 'list_splat_pattern' ? `*${t}` : inner?.type === 'dictionary_splat_pattern' ? `**${t}` : t);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case 'default_parameter':
|
|
54
|
+
out.push('_?');
|
|
55
|
+
break;
|
|
56
|
+
case 'typed_default_parameter':
|
|
57
|
+
out.push(compact(p.childForFieldName('type')?.text ?? '_') + '?');
|
|
58
|
+
break;
|
|
59
|
+
case 'list_splat_pattern':
|
|
60
|
+
out.push('*_');
|
|
61
|
+
break;
|
|
62
|
+
case 'dictionary_splat_pattern':
|
|
63
|
+
out.push('**_');
|
|
64
|
+
break;
|
|
65
|
+
case 'keyword_separator':
|
|
66
|
+
out.push('*');
|
|
67
|
+
break;
|
|
68
|
+
case 'positional_separator':
|
|
69
|
+
out.push('/');
|
|
70
|
+
break;
|
|
71
|
+
default: out.push('_');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const ret = fn.childForFieldName('return_type');
|
|
75
|
+
return '(' + out.join(',') + ')' + (ret ? '->' + compact(ret.text) : '');
|
|
76
|
+
}
|
|
77
|
+
/** The docstring statement of a block, if it opens with one. */
|
|
78
|
+
function docstring(block) {
|
|
79
|
+
const first = block ? namedChildren(block)[0] : undefined;
|
|
80
|
+
if (first?.type !== 'expression_statement')
|
|
81
|
+
return null;
|
|
82
|
+
const inner = namedChildren(first);
|
|
83
|
+
return inner.length === 1 && inner[0].type === 'string' ? first : null;
|
|
84
|
+
}
|
|
85
|
+
/** The definition a statement holds, and the node that carries its decorators. */
|
|
86
|
+
function definitionOf(stmt) {
|
|
87
|
+
if (stmt.type === 'decorated_definition') {
|
|
88
|
+
const def = stmt.childForFieldName('definition');
|
|
89
|
+
return def ? { def, holder: stmt } : null;
|
|
90
|
+
}
|
|
91
|
+
if (stmt.type === 'function_definition' || stmt.type === 'class_definition')
|
|
92
|
+
return { def: stmt, holder: stmt };
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
class PythonExtractor {
|
|
96
|
+
b;
|
|
97
|
+
constructor(b) {
|
|
98
|
+
this.b = b;
|
|
99
|
+
}
|
|
100
|
+
tokens(nodes, skip, replace) {
|
|
101
|
+
return bodyTokens(nodes, { skip, replace, wrap: WRAP });
|
|
102
|
+
}
|
|
103
|
+
/** `self` is the declaration's own definition under its decorators: walked through, not declared again. */
|
|
104
|
+
nested(node, enclosing, exclude, path = '', self = null) {
|
|
105
|
+
const kids = namedChildren(node);
|
|
106
|
+
for (let i = 0; i < kids.length; i++) {
|
|
107
|
+
const c = kids[i];
|
|
108
|
+
if (exclude.has(c.id))
|
|
109
|
+
continue;
|
|
110
|
+
const p = path === '' ? `${i}` : `${path}.${i}`;
|
|
111
|
+
if (NESTED.has(c.type) && c.id !== self?.id)
|
|
112
|
+
this.declareNested(c, enclosing, p);
|
|
113
|
+
else
|
|
114
|
+
this.nested(c, enclosing, exclude, p, self);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
declareNested(node, enclosing, path) {
|
|
118
|
+
const own = node.childForFieldName('name');
|
|
119
|
+
const name = own?.text ?? '<lambda>';
|
|
120
|
+
const kind = node.type === 'class_definition' ? 'type' : 'function';
|
|
121
|
+
let signature = '';
|
|
122
|
+
if (node.type === 'function_definition')
|
|
123
|
+
signature = pythonSignature(node);
|
|
124
|
+
else if (node.type === 'lambda') {
|
|
125
|
+
const params = node.childForFieldName('parameters');
|
|
126
|
+
signature = '(' + (params ? namedChildren(params).map(() => '_').join(',') : '') + ')';
|
|
127
|
+
}
|
|
128
|
+
const holder = node.parent?.type === 'decorated_definition' ? node.parent : node;
|
|
129
|
+
const decl = this.b.add(kind, name, `${enclosing.qualified_name}/${name}@${path}`, signature, holder, enclosing.id, ['unstable:anonymous']);
|
|
130
|
+
const skip = new Set(own ? [own.id] : []);
|
|
131
|
+
const doc = docstring(node.childForFieldName('body'));
|
|
132
|
+
if (doc)
|
|
133
|
+
skip.add(doc.id);
|
|
134
|
+
this.b.setBody(decl, this.tokens([holder], skip));
|
|
135
|
+
this.nested(holder, decl, skip, '', node);
|
|
136
|
+
}
|
|
137
|
+
/** One statement of a module or class body. */
|
|
138
|
+
statement(stmt, prefix, parent, inClass, replace) {
|
|
139
|
+
const d = definitionOf(stmt);
|
|
140
|
+
if (d) {
|
|
141
|
+
const nameNode = d.def.childForFieldName('name');
|
|
142
|
+
const name = nameNode?.text ?? '<unnamed>';
|
|
143
|
+
if (d.def.type === 'class_definition') {
|
|
144
|
+
this.type(d.def, d.holder, name, nameNode, prefix, parent, replace);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const kind = inClass ? 'method' : 'function';
|
|
148
|
+
const signature = pythonSignature(d.def);
|
|
149
|
+
const decl = this.b.add(kind, name, prefix + name, signature, d.holder, parent.id);
|
|
150
|
+
replace.set(d.holder.id, placeholder(kind, name, signature));
|
|
151
|
+
const skip = new Set(nameNode ? [nameNode.id] : []);
|
|
152
|
+
const doc = docstring(d.def.childForFieldName('body'));
|
|
153
|
+
if (doc)
|
|
154
|
+
skip.add(doc.id);
|
|
155
|
+
this.b.setBody(decl, this.tokens([d.holder], skip));
|
|
156
|
+
this.nested(d.holder, decl, skip, '', d.def);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (stmt.type === 'expression_statement') {
|
|
160
|
+
const a = namedChildren(stmt)[0];
|
|
161
|
+
if (a?.type !== 'assignment')
|
|
162
|
+
return;
|
|
163
|
+
const left = a.childForFieldName('left');
|
|
164
|
+
if (left?.type !== 'identifier')
|
|
165
|
+
return;
|
|
166
|
+
const t = a.childForFieldName('type');
|
|
167
|
+
const signature = t ? compact(t.text) : '';
|
|
168
|
+
const decl = this.b.add('field', left.text, prefix + left.text, signature, stmt, parent.id);
|
|
169
|
+
replace.set(stmt.id, placeholder('field', left.text, signature));
|
|
170
|
+
const skip = new Set([left.id]);
|
|
171
|
+
this.b.setBody(decl, this.tokens([stmt], skip));
|
|
172
|
+
this.nested(stmt, decl, skip);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
type(def, holder, name, nameNode, prefix, parent, replace) {
|
|
176
|
+
const supers = def.childForFieldName('superclasses');
|
|
177
|
+
const signature = supers ? compact(supers.text) : '';
|
|
178
|
+
const decl = this.b.add('type', name, prefix + name, signature, holder, parent.id);
|
|
179
|
+
replace.set(holder.id, placeholder('type', name, signature));
|
|
180
|
+
const inner = new Map();
|
|
181
|
+
const body = def.childForFieldName('body');
|
|
182
|
+
const doc = docstring(body);
|
|
183
|
+
for (const s of body ? namedChildren(body) : []) {
|
|
184
|
+
if (s !== doc)
|
|
185
|
+
this.statement(s, decl.qualified_name + '.', decl, true, inner);
|
|
186
|
+
}
|
|
187
|
+
const skip = new Set(nameNode ? [nameNode.id] : []);
|
|
188
|
+
if (doc)
|
|
189
|
+
skip.add(doc.id);
|
|
190
|
+
this.b.setBody(decl, this.tokens([holder], skip, inner));
|
|
191
|
+
this.nested(holder, decl, new Set([...skip, ...inner.keys()]), '', def);
|
|
192
|
+
}
|
|
193
|
+
module(root, decl) {
|
|
194
|
+
const replace = new Map();
|
|
195
|
+
const doc = docstring(root);
|
|
196
|
+
for (const s of namedChildren(root))
|
|
197
|
+
if (s !== doc)
|
|
198
|
+
this.statement(s, decl.qualified_name + ':', decl, false, replace);
|
|
199
|
+
const skip = new Set(doc ? [doc.id] : []);
|
|
200
|
+
this.b.setBody(decl, this.tokens([root], skip, replace));
|
|
201
|
+
this.nested(root, decl, new Set([...skip, ...replace.keys()]));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Derive `ids@0.1` ids from an already-parsed Python tree. */
|
|
205
|
+
export function derivePythonIds(tree, filePath, options = {}) {
|
|
206
|
+
const module = options.module ?? pythonModuleName(filePath);
|
|
207
|
+
const builder = new Builder('python', options.keepBodyTokens === true);
|
|
208
|
+
const moduleDecl = builder.add('module', module, module, '', tree.rootNode, null);
|
|
209
|
+
new PythonExtractor(builder).module(tree.rootNode, moduleDecl);
|
|
210
|
+
return { scheme: STABLE_ID_SCHEME, file: filePath, language: 'python', module, decls: builder.decls, ...partialOf(tree.rootNode) };
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/stable-ids/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which TypeScript parse errors can hide a declaration (cognium-ai #855).
|
|
3
|
+
*
|
|
4
|
+
* tree-sitter-typescript 0.23.2, the newest release, does not parse an array
|
|
5
|
+
* of an import type, `import('m').T[]`. It is valid TypeScript, and circle-ir's
|
|
6
|
+
* own passes use it. Recovery stays local:
|
|
7
|
+
*
|
|
8
|
+
* - in a parameter, field, property or return type the `[]` becomes an
|
|
9
|
+
* `ERROR` node inside the `type_annotation`;
|
|
10
|
+
* - in a `const x: import('m').T[]` / `type A = import('m').T[]` declaration
|
|
11
|
+
* the parser inserts a `MISSING ";"` after the import type and reads the
|
|
12
|
+
* `[]` (plus any initializer) as the next expression statement.
|
|
13
|
+
*
|
|
14
|
+
* Either way every declaration is still in the tree, so the file is not
|
|
15
|
+
* "partial" for stable ids or dead code. Any other error still is.
|
|
16
|
+
*/
|
|
17
|
+
import type { Node } from '../core/parser.js';
|
|
18
|
+
import type { ParseErrorSite } from './types.js';
|
|
19
|
+
/**
|
|
20
|
+
* True when the tree has a parse error that could hide a declaration, which
|
|
21
|
+
* is what `StableIdFile.partial` means. False for a clean tree and for the
|
|
22
|
+
* import-type-array recoveries described above.
|
|
23
|
+
*/
|
|
24
|
+
export declare function hasDeclarationHidingError(root: Node): boolean;
|
|
25
|
+
/** The first error, in source order, that could hide a declaration. */
|
|
26
|
+
export declare function firstDeclarationHidingError(root: Node): ParseErrorSite | undefined;
|
|
27
|
+
//# sourceMappingURL=ts-parse-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-parse-errors.d.ts","sourceRoot":"","sources":["../../src/stable-ids/ts-parse-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA0DjD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE7D;AAED,uEAAuE;AACvE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,SAAS,CAElF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { firstParseError } from './parse-errors.js';
|
|
2
|
+
const TYPE_CONTEXTS = new Set(['type_annotation', 'type_arguments']);
|
|
3
|
+
const DECLARATIONS = new Set(['lexical_declaration', 'variable_declaration', 'type_alias_declaration']);
|
|
4
|
+
/** `import('m').T` as the grammar reads it: a member expression on an `import(...)` call. */
|
|
5
|
+
function isImportTypeExpression(n) {
|
|
6
|
+
if (!n || n.type !== 'member_expression')
|
|
7
|
+
return false;
|
|
8
|
+
const obj = n.childForFieldName('object');
|
|
9
|
+
return !!obj && obj.type === 'call_expression' && obj.childForFieldName('function')?.type === 'import';
|
|
10
|
+
}
|
|
11
|
+
function insideTypeContext(n) {
|
|
12
|
+
for (let p = n.parent; p; p = p.parent) {
|
|
13
|
+
if (TYPE_CONTEXTS.has(p.type))
|
|
14
|
+
return true;
|
|
15
|
+
if (p.type === 'statement_block' || p.type === 'program' || p.type === 'class_body')
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
/** The `[]` the parser split off: `[]` or `[] = <initializer>` as an expression statement. */
|
|
21
|
+
function isSplitArraySuffix(n) {
|
|
22
|
+
if (!n || n.type !== 'expression_statement')
|
|
23
|
+
return false;
|
|
24
|
+
const e = n.namedChild(0);
|
|
25
|
+
if (!e)
|
|
26
|
+
return false;
|
|
27
|
+
if (e.type === 'array')
|
|
28
|
+
return e.namedChildCount === 0;
|
|
29
|
+
if (e.type === 'assignment_expression') {
|
|
30
|
+
const left = e.childForFieldName('left');
|
|
31
|
+
return !!left && left.type === 'array_pattern' && left.namedChildCount === 0;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function isSplitImportArrayDeclaration(missing) {
|
|
36
|
+
const decl = missing.parent;
|
|
37
|
+
if (!decl || !DECLARATIONS.has(decl.type))
|
|
38
|
+
return false;
|
|
39
|
+
let typed;
|
|
40
|
+
if (decl.type === 'type_alias_declaration') {
|
|
41
|
+
typed = decl.childForFieldName('value');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const declarators = decl.namedChildren.filter((c) => !!c && c.type === 'variable_declarator');
|
|
45
|
+
const last = declarators[declarators.length - 1];
|
|
46
|
+
const ann = last?.childForFieldName('type');
|
|
47
|
+
if (last?.childForFieldName('value'))
|
|
48
|
+
return false;
|
|
49
|
+
typed = ann?.namedChild(0) ?? null;
|
|
50
|
+
}
|
|
51
|
+
if (!isImportTypeExpression(typed))
|
|
52
|
+
return false;
|
|
53
|
+
const holder = decl.parent?.type === 'export_statement' ? decl.parent : decl;
|
|
54
|
+
return isSplitArraySuffix(holder.nextNamedSibling);
|
|
55
|
+
}
|
|
56
|
+
function isBenign(n) {
|
|
57
|
+
if (n.type === 'ERROR')
|
|
58
|
+
return insideTypeContext(n);
|
|
59
|
+
if (n.isMissing)
|
|
60
|
+
return n.type === ';' && isSplitImportArrayDeclaration(n);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* True when the tree has a parse error that could hide a declaration, which
|
|
65
|
+
* is what `StableIdFile.partial` means. False for a clean tree and for the
|
|
66
|
+
* import-type-array recoveries described above.
|
|
67
|
+
*/
|
|
68
|
+
export function hasDeclarationHidingError(root) {
|
|
69
|
+
return firstDeclarationHidingError(root) !== undefined;
|
|
70
|
+
}
|
|
71
|
+
/** The first error, in source order, that could hide a declaration. */
|
|
72
|
+
export function firstDeclarationHidingError(root) {
|
|
73
|
+
return firstParseError(root, isBenign);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ts-parse-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-parse-errors.js","sourceRoot":"","sources":["../../src/stable-ids/ts-parse-errors.ts"],"names":[],"mappings":"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"}
|