circle-ir 3.8.4 → 3.9.8

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.
Files changed (178) hide show
  1. package/README.md +82 -5
  2. package/dist/analysis/dfg-verifier.d.ts +3 -14
  3. package/dist/analysis/dfg-verifier.js +43 -74
  4. package/dist/analysis/dfg-verifier.js.map +1 -1
  5. package/dist/analysis/interprocedural.d.ts +5 -1
  6. package/dist/analysis/interprocedural.js +62 -60
  7. package/dist/analysis/interprocedural.js.map +1 -1
  8. package/dist/analysis/metrics/index.d.ts +2 -0
  9. package/dist/analysis/metrics/index.js +2 -0
  10. package/dist/analysis/metrics/index.js.map +1 -0
  11. package/dist/analysis/metrics/metric-pass.d.ts +27 -0
  12. package/dist/analysis/metrics/metric-pass.js +2 -0
  13. package/dist/analysis/metrics/metric-pass.js.map +1 -0
  14. package/dist/analysis/metrics/metric-runner.d.ts +21 -0
  15. package/dist/analysis/metrics/metric-runner.js +47 -0
  16. package/dist/analysis/metrics/metric-runner.js.map +1 -0
  17. package/dist/analysis/metrics/passes/cohesion-metrics-pass.d.ts +21 -0
  18. package/dist/analysis/metrics/passes/cohesion-metrics-pass.js +100 -0
  19. package/dist/analysis/metrics/passes/cohesion-metrics-pass.js.map +1 -0
  20. package/dist/analysis/metrics/passes/complexity-metrics-pass.d.ts +15 -0
  21. package/dist/analysis/metrics/passes/complexity-metrics-pass.js +76 -0
  22. package/dist/analysis/metrics/passes/complexity-metrics-pass.js.map +1 -0
  23. package/dist/analysis/metrics/passes/composite-metrics-pass.d.ts +17 -0
  24. package/dist/analysis/metrics/passes/composite-metrics-pass.js +77 -0
  25. package/dist/analysis/metrics/passes/composite-metrics-pass.js.map +1 -0
  26. package/dist/analysis/metrics/passes/coupling-metrics-pass.d.ts +19 -0
  27. package/dist/analysis/metrics/passes/coupling-metrics-pass.js +94 -0
  28. package/dist/analysis/metrics/passes/coupling-metrics-pass.js.map +1 -0
  29. package/dist/analysis/metrics/passes/data-flow-metrics-pass.d.ts +14 -0
  30. package/dist/analysis/metrics/passes/data-flow-metrics-pass.js +25 -0
  31. package/dist/analysis/metrics/passes/data-flow-metrics-pass.js.map +1 -0
  32. package/dist/analysis/metrics/passes/documentation-metrics-pass.d.ts +15 -0
  33. package/dist/analysis/metrics/passes/documentation-metrics-pass.js +64 -0
  34. package/dist/analysis/metrics/passes/documentation-metrics-pass.js.map +1 -0
  35. package/dist/analysis/metrics/passes/halstead-metrics-pass.d.ts +16 -0
  36. package/dist/analysis/metrics/passes/halstead-metrics-pass.js +95 -0
  37. package/dist/analysis/metrics/passes/halstead-metrics-pass.js.map +1 -0
  38. package/dist/analysis/metrics/passes/inheritance-metrics-pass.d.ts +18 -0
  39. package/dist/analysis/metrics/passes/inheritance-metrics-pass.js +73 -0
  40. package/dist/analysis/metrics/passes/inheritance-metrics-pass.js.map +1 -0
  41. package/dist/analysis/metrics/passes/size-metrics-pass.d.ts +11 -0
  42. package/dist/analysis/metrics/passes/size-metrics-pass.js +64 -0
  43. package/dist/analysis/metrics/passes/size-metrics-pass.js.map +1 -0
  44. package/dist/analysis/passes/circular-dependency-pass.d.ts +18 -0
  45. package/dist/analysis/passes/circular-dependency-pass.js +39 -0
  46. package/dist/analysis/passes/circular-dependency-pass.js.map +1 -0
  47. package/dist/analysis/passes/constant-propagation-pass.d.ts +22 -0
  48. package/dist/analysis/passes/constant-propagation-pass.js +44 -0
  49. package/dist/analysis/passes/constant-propagation-pass.js.map +1 -0
  50. package/dist/analysis/passes/cross-file-pass.d.ts +27 -0
  51. package/dist/analysis/passes/cross-file-pass.js +102 -0
  52. package/dist/analysis/passes/cross-file-pass.js.map +1 -0
  53. package/dist/analysis/passes/dead-code-pass.d.ts +25 -0
  54. package/dist/analysis/passes/dead-code-pass.js +117 -0
  55. package/dist/analysis/passes/dead-code-pass.js.map +1 -0
  56. package/dist/analysis/passes/deep-inheritance-pass.d.ts +30 -0
  57. package/dist/analysis/passes/deep-inheritance-pass.js +82 -0
  58. package/dist/analysis/passes/deep-inheritance-pass.js.map +1 -0
  59. package/dist/analysis/passes/dependency-fan-out-pass.d.ts +19 -0
  60. package/dist/analysis/passes/dependency-fan-out-pass.js +35 -0
  61. package/dist/analysis/passes/dependency-fan-out-pass.js.map +1 -0
  62. package/dist/analysis/passes/infinite-loop-pass.d.ts +31 -0
  63. package/dist/analysis/passes/infinite-loop-pass.js +126 -0
  64. package/dist/analysis/passes/infinite-loop-pass.js.map +1 -0
  65. package/dist/analysis/passes/interprocedural-pass.d.ts +29 -0
  66. package/dist/analysis/passes/interprocedural-pass.js +169 -0
  67. package/dist/analysis/passes/interprocedural-pass.js.map +1 -0
  68. package/dist/analysis/passes/language-sources-pass.d.ts +76 -0
  69. package/dist/analysis/passes/language-sources-pass.js +491 -0
  70. package/dist/analysis/passes/language-sources-pass.js.map +1 -0
  71. package/dist/analysis/passes/leaked-global-pass.d.ts +34 -0
  72. package/dist/analysis/passes/leaked-global-pass.js +108 -0
  73. package/dist/analysis/passes/leaked-global-pass.js.map +1 -0
  74. package/dist/analysis/passes/missing-await-pass.d.ts +29 -0
  75. package/dist/analysis/passes/missing-await-pass.js +90 -0
  76. package/dist/analysis/passes/missing-await-pass.js.map +1 -0
  77. package/dist/analysis/passes/missing-public-doc-pass.d.ts +35 -0
  78. package/dist/analysis/passes/missing-public-doc-pass.js +148 -0
  79. package/dist/analysis/passes/missing-public-doc-pass.js.map +1 -0
  80. package/dist/analysis/passes/n-plus-one-pass.d.ts +29 -0
  81. package/dist/analysis/passes/n-plus-one-pass.js +100 -0
  82. package/dist/analysis/passes/n-plus-one-pass.js.map +1 -0
  83. package/dist/analysis/passes/null-deref-pass.d.ts +32 -0
  84. package/dist/analysis/passes/null-deref-pass.js +130 -0
  85. package/dist/analysis/passes/null-deref-pass.js.map +1 -0
  86. package/dist/analysis/passes/orphan-module-pass.d.ts +21 -0
  87. package/dist/analysis/passes/orphan-module-pass.js +38 -0
  88. package/dist/analysis/passes/orphan-module-pass.js.map +1 -0
  89. package/dist/analysis/passes/react-inline-jsx-pass.d.ts +36 -0
  90. package/dist/analysis/passes/react-inline-jsx-pass.js +140 -0
  91. package/dist/analysis/passes/react-inline-jsx-pass.js.map +1 -0
  92. package/dist/analysis/passes/redundant-loop-pass.d.ts +30 -0
  93. package/dist/analysis/passes/redundant-loop-pass.js +146 -0
  94. package/dist/analysis/passes/redundant-loop-pass.js.map +1 -0
  95. package/dist/analysis/passes/resource-leak-pass.d.ts +43 -0
  96. package/dist/analysis/passes/resource-leak-pass.js +156 -0
  97. package/dist/analysis/passes/resource-leak-pass.js.map +1 -0
  98. package/dist/analysis/passes/serial-await-pass.d.ts +36 -0
  99. package/dist/analysis/passes/serial-await-pass.js +132 -0
  100. package/dist/analysis/passes/serial-await-pass.js.map +1 -0
  101. package/dist/analysis/passes/sink-filter-pass.d.ts +39 -0
  102. package/dist/analysis/passes/sink-filter-pass.js +231 -0
  103. package/dist/analysis/passes/sink-filter-pass.js.map +1 -0
  104. package/dist/analysis/passes/stale-doc-ref-pass.d.ts +21 -0
  105. package/dist/analysis/passes/stale-doc-ref-pass.js +96 -0
  106. package/dist/analysis/passes/stale-doc-ref-pass.js.map +1 -0
  107. package/dist/analysis/passes/string-concat-loop-pass.d.ts +26 -0
  108. package/dist/analysis/passes/string-concat-loop-pass.js +87 -0
  109. package/dist/analysis/passes/string-concat-loop-pass.js.map +1 -0
  110. package/dist/analysis/passes/sync-io-async-pass.d.ts +28 -0
  111. package/dist/analysis/passes/sync-io-async-pass.js +80 -0
  112. package/dist/analysis/passes/sync-io-async-pass.js.map +1 -0
  113. package/dist/analysis/passes/taint-matcher-pass.d.ts +24 -0
  114. package/dist/analysis/passes/taint-matcher-pass.js +71 -0
  115. package/dist/analysis/passes/taint-matcher-pass.js.map +1 -0
  116. package/dist/analysis/passes/taint-propagation-pass.d.ts +22 -0
  117. package/dist/analysis/passes/taint-propagation-pass.js +266 -0
  118. package/dist/analysis/passes/taint-propagation-pass.js.map +1 -0
  119. package/dist/analysis/passes/todo-in-prod-pass.d.ts +28 -0
  120. package/dist/analysis/passes/todo-in-prod-pass.js +71 -0
  121. package/dist/analysis/passes/todo-in-prod-pass.js.map +1 -0
  122. package/dist/analysis/passes/unbounded-collection-pass.d.ts +32 -0
  123. package/dist/analysis/passes/unbounded-collection-pass.js +128 -0
  124. package/dist/analysis/passes/unbounded-collection-pass.js.map +1 -0
  125. package/dist/analysis/passes/unchecked-return-pass.d.ts +34 -0
  126. package/dist/analysis/passes/unchecked-return-pass.js +106 -0
  127. package/dist/analysis/passes/unchecked-return-pass.js.map +1 -0
  128. package/dist/analysis/passes/unused-variable-pass.d.ts +36 -0
  129. package/dist/analysis/passes/unused-variable-pass.js +150 -0
  130. package/dist/analysis/passes/unused-variable-pass.js.map +1 -0
  131. package/dist/analysis/passes/variable-shadowing-pass.d.ts +41 -0
  132. package/dist/analysis/passes/variable-shadowing-pass.js +211 -0
  133. package/dist/analysis/passes/variable-shadowing-pass.js.map +1 -0
  134. package/dist/analysis/path-finder.d.ts +3 -13
  135. package/dist/analysis/path-finder.js +48 -63
  136. package/dist/analysis/path-finder.js.map +1 -1
  137. package/dist/analysis/taint-matcher.js +8 -1
  138. package/dist/analysis/taint-matcher.js.map +1 -1
  139. package/dist/analysis/taint-propagation.d.ts +5 -1
  140. package/dist/analysis/taint-propagation.js +44 -41
  141. package/dist/analysis/taint-propagation.js.map +1 -1
  142. package/dist/analyzer.d.ts +48 -1
  143. package/dist/analyzer.js +252 -1476
  144. package/dist/analyzer.js.map +1 -1
  145. package/dist/browser/circle-ir.js +3952 -1270
  146. package/dist/core/circle-ir-core.cjs +360 -106
  147. package/dist/core/circle-ir-core.js +360 -106
  148. package/dist/core/extractors/imports.js +18 -0
  149. package/dist/core/extractors/imports.js.map +1 -1
  150. package/dist/graph/analysis-pass.d.ts +68 -0
  151. package/dist/graph/analysis-pass.js +51 -0
  152. package/dist/graph/analysis-pass.js.map +1 -0
  153. package/dist/graph/code-graph.d.ts +92 -0
  154. package/dist/graph/code-graph.js +262 -0
  155. package/dist/graph/code-graph.js.map +1 -0
  156. package/dist/graph/dominator-graph.d.ts +53 -0
  157. package/dist/graph/dominator-graph.js +256 -0
  158. package/dist/graph/dominator-graph.js.map +1 -0
  159. package/dist/graph/import-graph.d.ts +33 -0
  160. package/dist/graph/import-graph.js +170 -0
  161. package/dist/graph/import-graph.js.map +1 -0
  162. package/dist/graph/index.d.ts +5 -0
  163. package/dist/graph/index.js +6 -0
  164. package/dist/graph/index.js.map +1 -0
  165. package/dist/graph/project-graph.d.ts +43 -0
  166. package/dist/graph/project-graph.js +80 -0
  167. package/dist/graph/project-graph.js.map +1 -0
  168. package/dist/graph/scope-graph.d.ts +63 -0
  169. package/dist/graph/scope-graph.js +89 -0
  170. package/dist/graph/scope-graph.js.map +1 -0
  171. package/dist/index.d.ts +3 -2
  172. package/dist/index.js +3 -1
  173. package/dist/index.js.map +1 -1
  174. package/dist/resolution/cross-file.js +52 -19
  175. package/dist/resolution/cross-file.js.map +1 -1
  176. package/dist/types/index.d.ts +151 -0
  177. package/docs/SPEC.md +10 -6
  178. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * ScopeGraph
3
+ *
4
+ * Thin wrapper over CodeGraph that enriches each DFGDef with declaration-keyword
5
+ * awareness. Needed by the three Group-3 passes (variable-shadowing, leaked-global,
6
+ * unused-variable) which must distinguish between a "real" variable declaration
7
+ * (`let x = 5`) and a bare reassignment (`x = 5`).
8
+ *
9
+ * The DFG extractor treats both as `kind='local'` because reassignments also
10
+ * create new reaching definitions. ScopeGraph recovers the distinction by
11
+ * scanning the source line for language-specific declaration keywords.
12
+ *
13
+ * Design:
14
+ * - Built once per pass via `new ScopeGraph(graph, code, language)`
15
+ * - O(n) construction where n = number of DFG defs
16
+ * - No mutations — all state is computed in the constructor
17
+ * - Browser + Node.js safe (no platform APIs)
18
+ */
19
+ import type { DFGDef } from '../types/index.js';
20
+ import type { CodeGraph } from './code-graph.js';
21
+ /** Enriched view of a single DFGDef with scope metadata. */
22
+ export interface ScopeEntry {
23
+ /** The underlying DFG definition. */
24
+ readonly def: DFGDef;
25
+ /**
26
+ * True when the source line that created this def contains a declaration
27
+ * keyword appropriate for the language (e.g. `let`/`const`/`var` for JS,
28
+ * type keyword for Java, `let` for Rust). False for bare reassignments.
29
+ */
30
+ readonly hasDeclKeyword: boolean;
31
+ /**
32
+ * `start_line` of the enclosing method, or -1 if the def is at the
33
+ * top/module level (no enclosing method found).
34
+ */
35
+ readonly methodStart: number;
36
+ /**
37
+ * `end_line` of the enclosing method, or -1 if top-level.
38
+ */
39
+ readonly methodEnd: number;
40
+ }
41
+ export declare class ScopeGraph {
42
+ /** One entry per DFGDef in the IR, in original order. */
43
+ readonly entries: ScopeEntry[];
44
+ constructor(graph: CodeGraph, code: string, language: string);
45
+ /**
46
+ * Returns all entries whose def falls within the inclusive range
47
+ * [start, end] (both are 1-based source line numbers).
48
+ */
49
+ defsInMethod(start: number, end: number): ScopeEntry[];
50
+ /**
51
+ * Returns true if the given variable has at least one def with
52
+ * `hasDeclKeyword === true` inside the method whose start line is
53
+ * `methodStart` OR at module level (methodStart === -1).
54
+ *
55
+ * Module-level declarations are included because JavaScript/TypeScript
56
+ * module-level `let`/`const`/`var` variables are legitimately reassigned
57
+ * inside functions — that is not a global leak.
58
+ *
59
+ * Used by `leaked-global` to determine whether a bare assignment is truly
60
+ * undeclared within its enclosing function.
61
+ */
62
+ hasDeclaredDef(variable: string, methodStart: number): boolean;
63
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * ScopeGraph
3
+ *
4
+ * Thin wrapper over CodeGraph that enriches each DFGDef with declaration-keyword
5
+ * awareness. Needed by the three Group-3 passes (variable-shadowing, leaked-global,
6
+ * unused-variable) which must distinguish between a "real" variable declaration
7
+ * (`let x = 5`) and a bare reassignment (`x = 5`).
8
+ *
9
+ * The DFG extractor treats both as `kind='local'` because reassignments also
10
+ * create new reaching definitions. ScopeGraph recovers the distinction by
11
+ * scanning the source line for language-specific declaration keywords.
12
+ *
13
+ * Design:
14
+ * - Built once per pass via `new ScopeGraph(graph, code, language)`
15
+ * - O(n) construction where n = number of DFG defs
16
+ * - No mutations — all state is computed in the constructor
17
+ * - Browser + Node.js safe (no platform APIs)
18
+ */
19
+ // ---------------------------------------------------------------------------
20
+ // Per-language declaration keyword patterns
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Returns true when the source line text contains a variable-declaration keyword
24
+ * for the given language.
25
+ *
26
+ * Java/Rust/JS/TS: explicit keywords precede the variable name.
27
+ * Python: no declaration keyword exists → always returns false.
28
+ */
29
+ function hasDeclKeyword(lineText, language) {
30
+ switch (language) {
31
+ case 'java':
32
+ // Primitive types, `var`, `final`, generic types (upper-case first letter)
33
+ return /\b(?:int|long|float|double|boolean|byte|char|short|var|final)\b/.test(lineText)
34
+ || /\b[A-Z]\w*(?:<[^>]*>)?\s+\w/.test(lineText);
35
+ case 'javascript':
36
+ case 'typescript':
37
+ return /\b(?:let|const|var)\s+[\w{[]/.test(lineText);
38
+ case 'rust':
39
+ return /\blet\s+(?:mut\s+)?\w/.test(lineText);
40
+ default:
41
+ // Python and other languages: no reliable declaration keyword
42
+ return false;
43
+ }
44
+ }
45
+ // ---------------------------------------------------------------------------
46
+ // ScopeGraph
47
+ // ---------------------------------------------------------------------------
48
+ export class ScopeGraph {
49
+ /** One entry per DFGDef in the IR, in original order. */
50
+ entries;
51
+ constructor(graph, code, language) {
52
+ const codeLines = code.split('\n');
53
+ this.entries = graph.ir.dfg.defs.map((def) => {
54
+ const m = graph.methodAtLine(def.line);
55
+ const lineText = codeLines[def.line - 1] ?? '';
56
+ return {
57
+ def,
58
+ hasDeclKeyword: hasDeclKeyword(lineText, language),
59
+ methodStart: m?.method.start_line ?? -1,
60
+ methodEnd: m?.method.end_line ?? -1,
61
+ };
62
+ });
63
+ }
64
+ /**
65
+ * Returns all entries whose def falls within the inclusive range
66
+ * [start, end] (both are 1-based source line numbers).
67
+ */
68
+ defsInMethod(start, end) {
69
+ return this.entries.filter(e => e.def.line >= start && e.def.line <= end);
70
+ }
71
+ /**
72
+ * Returns true if the given variable has at least one def with
73
+ * `hasDeclKeyword === true` inside the method whose start line is
74
+ * `methodStart` OR at module level (methodStart === -1).
75
+ *
76
+ * Module-level declarations are included because JavaScript/TypeScript
77
+ * module-level `let`/`const`/`var` variables are legitimately reassigned
78
+ * inside functions — that is not a global leak.
79
+ *
80
+ * Used by `leaked-global` to determine whether a bare assignment is truly
81
+ * undeclared within its enclosing function.
82
+ */
83
+ hasDeclaredDef(variable, methodStart) {
84
+ return this.entries.some(e => e.def.variable === variable
85
+ && e.hasDeclKeyword
86
+ && (e.methodStart === methodStart || e.methodStart === -1));
87
+ }
88
+ }
89
+ //# sourceMappingURL=scope-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-graph.js","sourceRoot":"","sources":["../../src/graph/scope-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAE,QAAgB;IACxD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,2EAA2E;YAC3E,OAAO,iEAAiE,CAAC,IAAI,CAAC,QAAQ,CAAC;mBAChF,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtD,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YACf,OAAO,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,KAAK,MAAM;YACT,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhD;YACE,8DAA8D;YAC9D,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AA2BD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,OAAO,UAAU;IACrB,yDAAyD;IAChD,OAAO,CAAe;IAE/B,YAAY,KAAgB,EAAE,IAAY,EAAE,QAAgB;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAc,EAAE;YACvD,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO;gBACL,GAAG;gBACH,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAClD,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBACvC,SAAS,EAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAM,CAAC,CAAC;aACxC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAAa,EAAE,GAAW;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAgB,EAAE,WAAmB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ;eAC3B,CAAC,CAAC,cAAc;eAChB,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -3,13 +3,14 @@
3
3
  *
4
4
  * A universal library for static analysis and taint tracking.
5
5
  */
6
- export { initAnalyzer, analyze, analyzeForAPI, isAnalyzerInitialized, resetAnalyzer, type AnalyzerOptions, } from './analyzer.js';
7
- export type { CircleIR, Meta, TypeInfo, MethodInfo, ParameterInfo, FieldInfo, CallInfo, ArgumentInfo, CallResolution, CFG, CFGBlock, CFGEdge, DFG, DFGDef, DFGUse, DFGChain, Taint, TaintSource, TaintSink, TaintSanitizer, ImportInfo, ExportInfo, UnresolvedItem, Enriched, EnrichedFunction, ResolvedCall, Finding, TaintHop, Vulnerability, AnalysisResponse, SourceType, SinkType, Severity, ProjectAnalysis, ProjectMeta, FileAnalysis, TypeHierarchy, ClassHierarchyInfo, InterfaceHierarchyInfo, CrossFileCall, ArgMapping, TaintPath, } from './types/index.js';
6
+ export { initAnalyzer, analyze, analyzeForAPI, analyzeProject, isAnalyzerInitialized, resetAnalyzer, type AnalyzerOptions, } from './analyzer.js';
7
+ export type { CircleIR, Meta, TypeInfo, MethodInfo, ParameterInfo, FieldInfo, CallInfo, ArgumentInfo, CallResolution, CFG, CFGBlock, CFGEdge, DFG, DFGDef, DFGUse, DFGChain, Taint, TaintSource, TaintSink, TaintSanitizer, ImportInfo, ExportInfo, UnresolvedItem, Enriched, EnrichedFunction, ResolvedCall, Finding, TaintHop, Vulnerability, AnalysisResponse, SourceType, SinkType, Severity, PassCategory, SarifLevel, SastFinding, MetricCategory, MetricValue, FileMetrics, ProjectAnalysis, ProjectMeta, FileAnalysis, TypeHierarchy, ClassHierarchyInfo, InterfaceHierarchyInfo, CrossFileCall, ArgMapping, TaintPath, } from './types/index.js';
8
8
  export type { SourceConfig, SinkConfig, TaintConfig, SourcePattern, SinkPattern, SanitizerPattern, } from './types/config.js';
9
9
  export { initParser, parse, walkTree, findNodes, findAncestor, getNodeText, collectAllNodes, type SupportedLanguage, type SyntaxNode, type Node, type NodeCache, type Tree, } from './core/index.js';
10
10
  export { extractMeta, extractTypes, extractCalls, extractImports, extractExports, buildCFG, buildDFG, } from './core/index.js';
11
11
  export { getDefaultConfig, createTaintConfig, analyzeTaint, detectUnresolved, propagateTaint, generateFindings, analyzeConstantPropagation, ConstantPropagator, isKnown, createUnknown, getNodeLine, DEFAULT_SOURCES, DEFAULT_SINKS, DEFAULT_SANITIZERS, type ConstantValue, type ConstantPropagatorResult, type TaintPropagationResult, type TaintedVariable, type TaintFlow, } from './analysis/index.js';
12
12
  export { getRuleInfo, RULE_DEFINITIONS, type RuleInfo, } from './analysis/rules.js';
13
+ export { DominatorGraph } from './graph/dominator-graph.js';
13
14
  export { TypeHierarchyResolver, createWithJdkTypes, SymbolTable, buildSymbolTable, CrossFileResolver, buildCrossFileResolver, } from './resolution/index.js';
14
15
  export { getLanguageRegistry, registerLanguage, getLanguagePlugin, getLanguageForFile, detectLanguage, isLanguageSupported, registerBuiltinPlugins, JavaPlugin, JavaScriptPlugin, PythonPlugin, RustPlugin, BaseLanguagePlugin, } from './languages/index.js';
15
16
  export type { LanguagePlugin, LanguageRegistry, LanguageNodeTypes, ExtractionContext, FrameworkInfo, TaintSourcePattern, TaintSinkPattern, } from './languages/index.js';
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * A universal library for static analysis and taint tracking.
5
5
  */
6
6
  // Main analyzer
7
- export { initAnalyzer, analyze, analyzeForAPI, isAnalyzerInitialized, resetAnalyzer, } from './analyzer.js';
7
+ export { initAnalyzer, analyze, analyzeForAPI, analyzeProject, isAnalyzerInitialized, resetAnalyzer, } from './analyzer.js';
8
8
  // Core utilities (for advanced usage)
9
9
  export { initParser, parse, walkTree, findNodes, findAncestor, getNodeText, collectAllNodes, } from './core/index.js';
10
10
  // Core extractors
@@ -13,6 +13,8 @@ export { extractMeta, extractTypes, extractCalls, extractImports, extractExports
13
13
  export { getDefaultConfig, createTaintConfig, analyzeTaint, detectUnresolved, propagateTaint, generateFindings, analyzeConstantPropagation, ConstantPropagator, isKnown, createUnknown, getNodeLine, DEFAULT_SOURCES, DEFAULT_SINKS, DEFAULT_SANITIZERS, } from './analysis/index.js';
14
14
  // Rule definitions
15
15
  export { getRuleInfo, RULE_DEFINITIONS, } from './analysis/rules.js';
16
+ // Graph utilities
17
+ export { DominatorGraph } from './graph/dominator-graph.js';
16
18
  // Resolution utilities
17
19
  export { TypeHierarchyResolver, createWithJdkTypes, SymbolTable, buildSymbolTable, CrossFileResolver, buildCrossFileResolver, } from './resolution/index.js';
18
20
  // Language plugins
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,qBAAqB,EACrB,aAAa,GAEd,MAAM,eAAe,CAAC;AA+DvB,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,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,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,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,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;AAuEvB,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,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,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;AAE5D,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,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,gCAAgC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,GAIZ,MAAM,mBAAmB,CAAC"}
@@ -336,35 +336,68 @@ export class CrossFileResolver {
336
336
  */
337
337
  findCrossFileTaintFlows() {
338
338
  const flows = [];
339
+ // Deduplicate: same source + target sink should only emit one flow
340
+ const seen = new Set();
339
341
  for (const [filePath, ir] of this.fileIRs) {
340
342
  // Check each source in the file
341
343
  for (const source of ir.taint.sources) {
344
+ // `interprocedural_param` sources represent "this method's parameter MIGHT be
345
+ // tainted when called by tainted code" — they are a per-file meta-analysis result
346
+ // and are not confirmed external inputs suitable for cross-file taint flows.
347
+ // Using them here causes false positives on every internal library function that
348
+ // has typed parameters and happens to call another file that contains any sink.
349
+ if (source.type === 'interprocedural_param')
350
+ continue;
342
351
  // Find calls at or after the source line
343
352
  for (const call of ir.calls) {
344
353
  if (call.location.line < source.line)
345
354
  continue;
346
355
  const resolved = this.resolveCall(call, filePath);
347
- if (resolved && resolved.targetFile !== filePath) {
348
- // This is a cross-file call
349
- // Check if any argument might be tainted
350
- const taintedArgs = [];
351
- for (let i = 0; i < call.arguments.length; i++) {
352
- // Simple heuristic: if variable was defined at or after source, might be tainted
353
- taintedArgs.push(i);
354
- }
355
- if (taintedArgs.length > 0) {
356
- flows.push({
357
- sourceFile: filePath,
358
- sourceLine: source.line,
359
- sourceType: source.type,
360
- targetFile: resolved.targetFile,
361
- targetLine: call.location.line,
362
- targetMethod: resolved.targetMethod,
363
- flowType: 'call_arg',
364
- taintedArgPositions: taintedArgs,
365
- });
356
+ if (!resolved || resolved.targetFile === filePath)
357
+ continue;
358
+ // Only proceed if the target file has any YAML-matched sinks at all.
359
+ // Skipping sink-free files prevents the cartesian explosion of flows into
360
+ // utility modules (AST helpers, string utilities, etc.) that have no
361
+ // dangerous operations.
362
+ const targetIR = this.fileIRs.get(resolved.targetFile);
363
+ if (!targetIR || targetIR.taint.sinks.length === 0)
364
+ continue;
365
+ // Find the target method in the target file so we can locate sinks within it.
366
+ // `resolved.targetMethod` is a FQN like "ClassName.methodName"; we match on
367
+ // the suffix after the last dot.
368
+ const shortName = resolved.targetMethod.split('.').pop() ?? resolved.targetMethod;
369
+ let targetMethod;
370
+ for (const type of targetIR.types) {
371
+ const m = type.methods.find(m => m.name === shortName);
372
+ if (m) {
373
+ targetMethod = m;
374
+ break;
366
375
  }
367
376
  }
377
+ if (!targetMethod)
378
+ continue;
379
+ // Only emit a flow when at least one known sink falls inside the target method.
380
+ // This means `targetLine` now correctly points to an actual dangerous operation
381
+ // in the target file (not the caller's line in the source file).
382
+ const sinksInMethod = targetIR.taint.sinks.filter(s => s.line >= targetMethod.start_line && s.line <= targetMethod.end_line);
383
+ if (sinksInMethod.length === 0)
384
+ continue;
385
+ for (const sink of sinksInMethod) {
386
+ const key = `${filePath}:${source.line}→${resolved.targetFile}:${sink.line}`;
387
+ if (seen.has(key))
388
+ continue;
389
+ seen.add(key);
390
+ flows.push({
391
+ sourceFile: filePath,
392
+ sourceLine: source.line,
393
+ sourceType: source.type,
394
+ targetFile: resolved.targetFile,
395
+ targetLine: sink.line, // actual sink line in target file
396
+ targetMethod: resolved.targetMethod,
397
+ flowType: 'call_arg',
398
+ taintedArgPositions: call.arguments.map((_, i) => i),
399
+ });
400
+ }
368
401
  }
369
402
  }
370
403
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cross-file.js","sourceRoot":"","sources":["../../src/resolution/cross-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-file.js","sourceRoot":"","sources":["../../src/resolution/cross-file.ts"],"names":[],"mappings":"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"}
@@ -239,6 +239,153 @@ export interface ResolvedCall {
239
239
  confidence: number;
240
240
  reason: string;
241
241
  }
242
+ /**
243
+ * Category of an analysis pass, aligned with ISO/IEC 25010:2023 quality
244
+ * characteristics and SonarQube/PMD conventions.
245
+ *
246
+ * - security → Confidentiality / Integrity (CWE vulnerability classes)
247
+ * - reliability → Faultlessness, resource safety (CWE-4xx / CWE-7xx)
248
+ * - performance → Performance Efficiency (CWE-10xx)
249
+ * - maintainability → Analysability, Modifiability (documentation, complexity)
250
+ * - architecture → Modularity, reusability (dependency / coupling issues)
251
+ */
252
+ export type PassCategory = 'security' | 'reliability' | 'performance' | 'maintainability' | 'architecture';
253
+ /**
254
+ * SARIF 2.1.0 result level (OASIS standard).
255
+ * Maps to SonarQube severity: error→blocker/critical, warning→major, note→minor/info.
256
+ */
257
+ export type SarifLevel = 'error' | 'warning' | 'note' | 'none';
258
+ /**
259
+ * A finding produced directly by an analysis pass — no LLM enrichment required.
260
+ *
261
+ * Field alignment:
262
+ * - `cwe` → CWE Base-level ID (e.g. "CWE-89", "CWE-476", "CWE-1047")
263
+ * - `level` → SARIF 2.1.0 result.level
264
+ * - `severity` → circle-ir Severity (maps from level: error→critical/high,
265
+ * warning→medium, note→low)
266
+ * - `evidence` → pass-specific structured details (non-breaking extensibility)
267
+ *
268
+ * CWE mapping guide by category:
269
+ * security: CWE-89 SQL inj, CWE-79 XSS, CWE-78 command inj, …
270
+ * reliability: CWE-476 null-deref, CWE-772 resource-leak, CWE-561 dead-code,
271
+ * CWE-252 unchecked-return, CWE-391 unchecked-exception
272
+ * performance: CWE-1049 N+1 query, CWE-1046 string-concat-loop,
273
+ * CWE-1050 resource-consumption-in-loop
274
+ * maintainability: CWE-1109 variable-shadowing, CWE-1041 duplicate-code
275
+ * architecture: CWE-1047 circular-deps, CWE-1060 excessive-coupling
276
+ */
277
+ export interface SastFinding {
278
+ /** Unique finding ID: `<rule_id>-<hash(file+line)>` */
279
+ id: string;
280
+ /** Name of the AnalysisPass that produced this finding. */
281
+ pass: string;
282
+ /** ISO 25010 category. */
283
+ category: PassCategory;
284
+ /** Rule identifier, e.g. "dead-code", "n-plus-one", "missing-await". */
285
+ rule_id: string;
286
+ /** CWE reference (optional for findings without a CWE mapping). */
287
+ cwe?: string;
288
+ /** Actionable severity aligned with circle-ir Severity type. */
289
+ severity: Severity;
290
+ /** SARIF 2.1.0 level for tool-chain integration. */
291
+ level: SarifLevel;
292
+ /** Human-readable description of the finding. */
293
+ message: string;
294
+ /** Source file path. */
295
+ file: string;
296
+ /** 1-based line number of the finding. */
297
+ line: number;
298
+ /** 1-based end line (for multi-line findings). */
299
+ end_line?: number;
300
+ /** 0-based column offset. */
301
+ column?: number;
302
+ /** Code snippet at the finding location. */
303
+ snippet?: string;
304
+ /** Suggested remediation (optional). */
305
+ fix?: string;
306
+ /** Pass-specific structured details for downstream consumers. */
307
+ evidence?: Record<string, unknown>;
308
+ }
309
+ /**
310
+ * Category of a software metric, aligned with ISO/IEC 25010:2023
311
+ * quality sub-characteristics.
312
+ *
313
+ * | Category | ISO 25010 sub-characteristic | Standard metric family |
314
+ * |----------------|-------------------------------|------------------------|
315
+ * | complexity | Analysability, Testability | McCabe v(G), Halstead |
316
+ * | size | Analysability | LOC, NLOC, WMC |
317
+ * | coupling | Modularity | CBO, RFC (CK suite) |
318
+ * | inheritance | Reusability | DIT, NOC (CK suite) |
319
+ * | cohesion | Modularity | LCOM (CK suite) |
320
+ * | documentation | Analysability | doc_coverage ratio |
321
+ * | duplication | Analysability, Modifiability | duplicate_ratio |
322
+ */
323
+ export type MetricCategory = 'complexity' | 'size' | 'coupling' | 'inheritance' | 'cohesion' | 'documentation' | 'duplication';
324
+ /**
325
+ * A single metric observation.
326
+ *
327
+ * Standard `name` values (use these exact strings for interoperability):
328
+ *
329
+ * Complexity (McCabe / Halstead):
330
+ * "v(G)" McCabe Cyclomatic Complexity (IEEE Std 1008)
331
+ * "cognitive_complexity" SonarSource Cognitive Complexity
332
+ * "halstead_volume" Halstead Volume (V = N × log₂ n)
333
+ * "halstead_difficulty" Halstead Difficulty (D)
334
+ * "halstead_effort" Halstead Effort (E)
335
+ * "halstead_bugs" Halstead Bug estimate (B = E^(2/3) / 3000)
336
+ *
337
+ * Size (Chidamber & Kemerer + standard):
338
+ * "LOC" Lines of Code (total, including comments/blanks)
339
+ * "NLOC" Non-comment Non-blank Lines of Code
340
+ * "WMC" Weighted Methods per Class (sum of v(G) per method)
341
+ * "statements" Statement count
342
+ *
343
+ * Coupling (CK suite):
344
+ * "CBO" Coupling Between Objects
345
+ * "RFC" Response For a Class
346
+ *
347
+ * Inheritance (CK suite):
348
+ * "DIT" Depth of Inheritance Tree
349
+ * "NOC" Number of Children
350
+ *
351
+ * Cohesion (CK suite):
352
+ * "LCOM" Lack of Cohesion in Methods
353
+ *
354
+ * Documentation:
355
+ * "doc_coverage" Ratio 0–1 of public methods/types with doc comments
356
+ *
357
+ * Duplication:
358
+ * "duplicate_ratio" Ratio 0–1 of duplicate lines in the file
359
+ */
360
+ export interface MetricValue {
361
+ /** Standard metric name (see JSDoc above for canonical values). */
362
+ name: string;
363
+ /** ISO 25010 category. */
364
+ category: MetricCategory;
365
+ /** Numeric value of the metric. */
366
+ value: number;
367
+ /**
368
+ * Unit of measurement.
369
+ * Common values: "lines", "count", "ratio" (0–1), "bits", "tokens"
370
+ */
371
+ unit?: string;
372
+ /**
373
+ * ISO 25010:2023 sub-characteristic path, e.g.
374
+ * "Maintainability.Analysability" or "Reliability.Faultlessness".
375
+ */
376
+ iso_25010?: string;
377
+ /** Optional human-readable description. */
378
+ description?: string;
379
+ }
380
+ /**
381
+ * Metrics for a single file, aggregated across all metric passes.
382
+ * The `metrics` array may contain both method-level and file-level values —
383
+ * method-level entries carry a `method` field in `evidence` if needed.
384
+ */
385
+ export interface FileMetrics {
386
+ file: string;
387
+ metrics: MetricValue[];
388
+ }
242
389
  export interface Finding {
243
390
  id: string;
244
391
  type: SinkType;
@@ -361,6 +508,10 @@ export interface CircleIR {
361
508
  exports: ExportInfo[];
362
509
  unresolved: UnresolvedItem[];
363
510
  enriched: Enriched;
511
+ /** SAST findings produced by analysis passes (no LLM enrichment required). */
512
+ findings?: SastFinding[];
513
+ /** Software metrics computed by metric passes (CK suite, Halstead, etc.). */
514
+ metrics?: FileMetrics;
364
515
  }
365
516
  export interface AnalysisResponse {
366
517
  success: boolean;
package/docs/SPEC.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Circle-IR 3.0 Specification
2
2
 
3
3
  **Status**: Living Document
4
- **Last Updated**: 2025-01-25
4
+ **Last Updated**: 2026-03-25
5
5
  **Implementation**: Python (reference) → TypeScript (target)
6
6
 
7
7
  ---
@@ -23,11 +23,12 @@
23
23
  | Sanitizers | ✅ (separate) | ✅ | Done |
24
24
  | Constant Propagation | ✅ | ✅ | Done |
25
25
  | Call Resolution | ⬜ | ✅ | Done |
26
- | Unresolved | ⬜ | | Done |
27
- | Enriched | ⬜ | | Done |
28
- | DFG Chains | ⬜ | | Done |
29
- | Project-Level | ⬜ | ✅ | Done |
30
- | Findings | ⬜ | ✅ | Done |
26
+ | Unresolved | ⬜ | | Pending |
27
+ | Enriched | ⬜ | | Pending |
28
+ | DFG Chains | ⬜ | | Pending |
29
+ | Project-Level (`analyzeProject`) | ⬜ | ✅ | Done |
30
+ | SAST Findings (`SastFinding[]`) | ⬜ | ✅ | Done (v3.9.1) |
31
+ | Phase 1 passes (dead-code, missing-await, n-plus-one, missing-public-doc, todo-in-prod) | ⬜ | ✅ | Done (v3.9.1) |
31
32
 
32
33
  ---
33
34
 
@@ -45,11 +46,14 @@ Circle-IR produces JSON with this top-level structure:
45
46
  "taint": { },
46
47
  "imports": [ ],
47
48
  "exports": [ ],
49
+ "findings": [ ],
48
50
  "unresolved": [ ],
49
51
  "enriched": { }
50
52
  }
51
53
  ```
52
54
 
55
+ `findings` is a `SastFinding[]` populated by the 11-pass `AnalysisPipeline`. Each finding is SARIF 2.1.0-aligned with `rule_id`, `category` (`PassCategory`), `severity`, `level` (`SarifLevel`), `file`, `line`, `cwe?`, `fix?`, and `evidence?`. See [docs/PASSES.md](PASSES.md) for the full pass registry.
56
+
53
57
  ---
54
58
 
55
59
  ## 1. Meta
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir",
3
- "version": "3.8.4",
3
+ "version": "3.9.8",
4
4
  "description": "High-performance Static Application Security Testing (SAST) library for detecting security vulnerabilities through taint analysis",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",