circle-ir 4.9.29 → 4.10.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/dist/index.js CHANGED
@@ -32,6 +32,10 @@ export { DominatorGraph } from './graph/dominator-graph.js';
32
32
  export { ExceptionFlowGraph } from './graph/exception-flow-graph.js';
33
33
  // Resolution utilities
34
34
  export { TypeHierarchyResolver, createWithJdkTypes, SymbolTable, buildSymbolTable, CrossFileResolver, buildCrossFileResolver, } from './resolution/index.js';
35
+ // Navigation queries — callers and callees, each answer carrying its tier and
36
+ // each non-answer its reason. Additive: nothing in the resolution path above
37
+ // changes, because the SAST passes and the taint corpora depend on it exactly.
38
+ export { buildNavigationIndex, NavigationIndex, } from './navigation/index.js';
35
39
  // Language plugins
36
40
  export { getLanguageRegistry, registerLanguage, getLanguagePlugin, getLanguageForFile, detectLanguage, isLanguageSupported, registerBuiltinPlugins, JavaPlugin, JavaScriptPlugin, PythonPlugin, RustPlugin, HtmlPlugin, BaseLanguagePlugin, } from './languages/index.js';
37
41
  // Logger (dependency injection)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,GAEd,MAAM,eAAe,CAAC;AAEvB,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,MAAM,GACP,MAAM,oBAAoB,CAAC;AA+E5B,sEAAsE;AACtE,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5D,+EAA+E;AAC/E,yCAAyC;AACzC,OAAO,EACL,eAAe,EACf,aAAa,EACb,WAAW,GAEZ,MAAM,6BAA6B,CAAC;AAYrC,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,GAMhB,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gCAAgC,EAChC,0BAA0B,EAC1B,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,GAMnB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iCAAiC,CAAC;AAExF,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,gCAAgC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,GAIZ,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,GAEd,MAAM,eAAe,CAAC;AAEvB,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,MAAM,GACP,MAAM,oBAAoB,CAAC;AA+E5B,sEAAsE;AACtE,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5D,+EAA+E;AAC/E,yCAAyC;AACzC,OAAO,EACL,eAAe,EACf,aAAa,EACb,WAAW,GAEZ,MAAM,6BAA6B,CAAC;AAYrC,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,GAMhB,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gCAAgC,EAChC,0BAA0B,EAC1B,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,GAMnB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iCAAiC,CAAC;AAExF,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAiB/B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,gCAAgC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,GAIZ,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Navigation queries — callers and callees, each answer carrying how it was
3
+ * reached and each non-answer carrying why. See `navigation-index.ts`.
4
+ */
5
+ export { buildNavigationIndex, NavigationIndex } from './navigation-index.js';
6
+ export type { NavigationFile, BuildOptions } from './navigation-index.js';
7
+ export type { AnswerEntry, CallSite, NavigationAnswer, Query, QueryKind, QueryOptions, Scope, Tier, Timing, UnresolvedEntry, UnresolvedReason, } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,YAAY,EACV,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,YAAY,EACZ,KAAK,EACL,IAAI,EACJ,MAAM,EACN,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Navigation queries — callers and callees, each answer carrying how it was
3
+ * reached and each non-answer carrying why. See `navigation-index.ts`.
4
+ */
5
+ export { buildNavigationIndex, NavigationIndex } from './navigation-index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Navigation queries — callers and callees, each answer carrying how it was
3
+ * reached and each non-answer carrying why.
4
+ *
5
+ * This is an **additive** surface. `CrossFileResolver.resolveCall` and
6
+ * `.findCallers` are untouched: the SAST passes and the taint corpora depend on
7
+ * their exact behaviour, and a change there ships behind the corpora gates, not
8
+ * with a navigation feature. So this module builds its own index from the same
9
+ * IR and answers its own questions.
10
+ *
11
+ * What it does that `resolveCall` does not, and why each one is here:
12
+ *
13
+ * - **A `record` receiver.** `resolveCall` cannot see a record because the
14
+ * default extraction emits no type for one. Asking `analyze` for
15
+ * `navigationTypes` fixes that upstream; this index then treats a record
16
+ * like any other class.
17
+ * - **A chained receiver.** `failed(this).feedback(x).output(y)` arrives with
18
+ * the receiver as an expression string. The chain is walked left to right,
19
+ * typing each step from the previous step's declared return type.
20
+ * - **A constructor.** `new Widget()` arrives as a call named `Widget` with
21
+ * no receiver. It is bound to `app.Widget.<init>`.
22
+ * - **A nested type's static import.** `import static app.Outer.Inner.make`
23
+ * names `app.Outer.Inner.make`, which only matches a symbol table that
24
+ * kept the nesting — hence `TypeInfo.enclosing_type`.
25
+ *
26
+ * Those four are not a wish list: they are every shape found by auditing the
27
+ * 8,015 call sites `resolveCall` leaves unanswered in a 405-file Java
28
+ * repository, of which 7,246 are correctly unanswered (the target is outside
29
+ * the tree) and 455 are these.
30
+ *
31
+ * What it deliberately does **not** do: invent a receiver type. Where no type
32
+ * is known the answer is `inferred` or there is no answer, and `inferred` is a
33
+ * permanent floor — see `Tier`.
34
+ */
35
+ import type { CircleIR, SupportedLanguage } from '../types/index.js';
36
+ import type { NavigationAnswer, Query, QueryKind, QueryOptions } from './types.js';
37
+ /** One file's input to the index. `ir` must come from `analyze` with `navigationTypes`. */
38
+ export interface NavigationFile {
39
+ path: string;
40
+ language: SupportedLanguage;
41
+ ir: CircleIR;
42
+ /** The file's text. Only used to put the source line on a site. */
43
+ source?: string;
44
+ /**
45
+ * A content hash for this file. Supplied, or derived from `source`. With
46
+ * `BuildOptions.cache` set, a file whose hash is unchanged is not re-indexed.
47
+ */
48
+ contentHash?: string;
49
+ }
50
+ export interface BuildOptions {
51
+ /**
52
+ * Reuse per-file index records across builds, keyed by content hash and by
53
+ * this module's own version marker. Minimal by design — enough to keep a
54
+ * trial's answers fresh between edits; the incremental workspace index is a
55
+ * separate piece of work.
56
+ */
57
+ cache?: boolean;
58
+ /** Paths left out of the index, each with the reason, reported in `scope.excluded`. */
59
+ excluded?: Array<{
60
+ pattern: string;
61
+ reason: string;
62
+ }>;
63
+ /** Wall time the caller spent parsing, so `timing.parseMs` is not a guess. */
64
+ parseMs?: number;
65
+ }
66
+ export declare function buildNavigationIndex(files: NavigationFile[], options?: BuildOptions): NavigationIndex;
67
+ export declare class NavigationIndex {
68
+ private readonly files;
69
+ private readonly typesByFqn;
70
+ private readonly typesBySimpleName;
71
+ /** Every method name declared anywhere in the tree — "is the target in scope at all?" */
72
+ private readonly declaredNames;
73
+ /** Package prefixes of the indexed files, longest first. */
74
+ private readonly projectPackages;
75
+ private readonly scope;
76
+ private readonly indexMs;
77
+ private readonly parseMs;
78
+ /** Direct subtypes, by supertype FQN. */
79
+ private readonly subtypes;
80
+ constructor(input: NavigationFile[], options: BuildOptions);
81
+ /**
82
+ * Every call site that calls `symbol`, with how each was bound, plus every
83
+ * site that calls something of that *name* and could not be bound, with why.
84
+ *
85
+ * The second list is the point. A name-only search on a 405-file repository
86
+ * reported 147 callers of one method where the right answer was 0 `exact`,
87
+ * 69 unverified and 78 contradicted by the resolver's own receiver type. Here
88
+ * the 78 do not appear as answers at all, and the 69 arrive labelled.
89
+ */
90
+ resolveCallers(query: Query, opts?: QueryOptions): NavigationAnswer;
91
+ /** Every call made from inside `symbol`'s body, bound the same way. */
92
+ resolveCallees(query: Query, opts?: QueryOptions): NavigationAnswer;
93
+ /**
94
+ * The symbol a call site names, so a caller holding a line of code can ask
95
+ * the same question as a caller holding a name.
96
+ *
97
+ * Keyed on `(file, line, methodName)` and **not** on a column: a chained
98
+ * expression reports several calls at one line and column, so a column
99
+ * cannot address one of them. The method name is what completes the key.
100
+ *
101
+ * For `callers` the symbol is the call's own target — "who else calls what
102
+ * this line calls". For `callees` it is the method whose body holds the
103
+ * line — "what does the method I am looking at call". Returns nothing when
104
+ * the site names no call, when the call cannot be bound to a target, or
105
+ * when the name is written twice on one line, which the key cannot separate.
106
+ */
107
+ symbolAt(file: string, line: number, methodName: string, kind: QueryKind): string | undefined;
108
+ /**
109
+ * Bind one call site to a target, or to nothing.
110
+ *
111
+ * The order matters and is the whole contract: a receiver type is sought
112
+ * first, and only when none can be had does a name-only bind happen, which
113
+ * is labelled `inferred` and never anything better.
114
+ */
115
+ private bind;
116
+ /**
117
+ * The tier for a target, once the declaring type is known.
118
+ *
119
+ * Every path to an answer goes through here, which is the point: the
120
+ * body-required rule was added in one place and the first graded record
121
+ * found it missing from another. `exact` is a promise that the target named
122
+ * is the code that runs, so it needs two things — the declaring type known,
123
+ * and the declaration **having a body**. An abstract member satisfies only
124
+ * the first; what runs there is a subclass's body or a lambda, never the
125
+ * member named. The target stays the declaring member, which is what a
126
+ * static resolver answers; only the tier changes.
127
+ */
128
+ private tierFor;
129
+ /** `new Widget()` → `app.Widget.<init>`. */
130
+ private asConstructor;
131
+ /**
132
+ * The receiver's static type, where it can be had without inventing one.
133
+ *
134
+ * Four sources, in order of how much they are trusted: the extractor's own
135
+ * fully-qualified answer, its simple-name answer resolved through this file's
136
+ * imports, a chain of calls whose declared return types can be walked, and a
137
+ * bare type name used as a static receiver.
138
+ */
139
+ private receiverTypeOf;
140
+ /**
141
+ * The type a receiver *expression* evaluates to.
142
+ *
143
+ * `Builder.of().step("a")` is typed by resolving `Builder`, then taking
144
+ * `of`'s declared return type, then `step`'s. A step whose return type is
145
+ * unknown ends the walk and the whole expression is untyped — a half-walked
146
+ * chain is not a type.
147
+ */
148
+ private typeOfExpression;
149
+ /** The owner named by a static import of this call's method. */
150
+ private staticOwnerFor;
151
+ private enclosingTypeOf;
152
+ /** The innermost declared type whose line range holds `line`. */
153
+ private enclosingTypeAt;
154
+ /** Find `method` on `fqn` or on a supertype of it, inside the tree. */
155
+ private lookupThroughHierarchy;
156
+ /**
157
+ * Whether a declaration carries no body, so nothing it names can run.
158
+ *
159
+ * A class method says so itself: `abstract` is in its modifiers. An
160
+ * interface method does not — the Java extraction reports no modifiers for
161
+ * either an abstract member or a `default` one — so the declaration line is
162
+ * read from the source, where `default` and `static` are the only two ways
163
+ * an interface member can have a body. `default` and `static` precede the
164
+ * return type, so they are on the declaration's first line.
165
+ *
166
+ * With no source supplied, an interface member is treated as body-less.
167
+ * That is the conservative direction: it costs an answer its `exact` label
168
+ * and never grants one.
169
+ */
170
+ private isBodyless;
171
+ /**
172
+ * Types in the tree that declare a **runnable** `method` and are `fqn` or
173
+ * below it.
174
+ *
175
+ * "Runnable" is the whole of it: `candidates` answers "which body could
176
+ * run", so an abstract declaration does not belong there even when it is
177
+ * the type the walk started from. An `abstract class Base { abstract step(); }`
178
+ * with nothing overriding `step` has no candidates, and saying so is the
179
+ * honest answer — listing `Base.step` would name a body that does not exist.
180
+ */
181
+ private implementorsWith;
182
+ /** The one type in the tree declaring `name`, or nothing if it is not unique. */
183
+ private uniqueByName;
184
+ /** A simple or qualified type name, resolved from one file's point of view. */
185
+ private resolveTypeRecord;
186
+ private resolveTypeName;
187
+ /**
188
+ * Why a site in range produced no answer.
189
+ *
190
+ * Every branch rests on something read from the source, not on a default.
191
+ * `unknown` is the honest end of the list: the target is in the tree and this
192
+ * index failed to bind it, which is a different claim from the other five and
193
+ * is reported as its own share.
194
+ */
195
+ private reasonFor;
196
+ /** `@Getter`/`@Setter`/`@Data`/`@Builder` would add this member. */
197
+ private wouldBeGenerated;
198
+ /** `Email.builder().title(...)` — a builder setter named after a field. */
199
+ private builderChainWouldGenerate;
200
+ private isProjectFqn;
201
+ private parses;
202
+ /** A site whose method name could be the one asked for. */
203
+ private nameCouldMatch;
204
+ private querySymbol;
205
+ private siteOf;
206
+ private finish;
207
+ }
208
+ //# sourceMappingURL=navigation-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-index.d.ts","sourceRoot":"","sources":["../../src/navigation/navigation-index.ts"],"names":[],"mappings":"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"}