@untangle-code/complexity 0.0.0-stage → 0.1.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.
Files changed (105) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +90 -0
  3. package/README.md +235 -2
  4. package/THIRD_PARTY_LICENSES.md +24 -0
  5. package/dist/aggregator.d.ts +28 -0
  6. package/dist/aggregator.d.ts.map +1 -0
  7. package/dist/aggregator.js +77 -0
  8. package/dist/aggregator.js.map +1 -0
  9. package/dist/assemble.d.ts +50 -0
  10. package/dist/assemble.d.ts.map +1 -0
  11. package/dist/assemble.js +43 -0
  12. package/dist/assemble.js.map +1 -0
  13. package/dist/cognitive.d.ts +62 -0
  14. package/dist/cognitive.d.ts.map +1 -0
  15. package/dist/cognitive.js +62 -0
  16. package/dist/cognitive.js.map +1 -0
  17. package/dist/cyclomatic.d.ts +29 -0
  18. package/dist/cyclomatic.d.ts.map +1 -0
  19. package/dist/cyclomatic.js +52 -0
  20. package/dist/cyclomatic.js.map +1 -0
  21. package/dist/entropy.d.ts +5 -0
  22. package/dist/entropy.d.ts.map +1 -0
  23. package/dist/entropy.js +29 -0
  24. package/dist/entropy.js.map +1 -0
  25. package/dist/explain.d.ts +22 -0
  26. package/dist/explain.d.ts.map +1 -0
  27. package/dist/explain.js +35 -0
  28. package/dist/explain.js.map +1 -0
  29. package/dist/halstead.d.ts +23 -0
  30. package/dist/halstead.d.ts.map +1 -0
  31. package/dist/halstead.js +24 -0
  32. package/dist/halstead.js.map +1 -0
  33. package/dist/index.d.ts +35 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +34 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/ir/build-ir.d.ts +105 -0
  38. package/dist/ir/build-ir.d.ts.map +1 -0
  39. package/dist/ir/build-ir.js +267 -0
  40. package/dist/ir/build-ir.js.map +1 -0
  41. package/dist/maintainability.d.ts +15 -0
  42. package/dist/maintainability.d.ts.map +1 -0
  43. package/dist/maintainability.js +10 -0
  44. package/dist/maintainability.js.map +1 -0
  45. package/dist/node-kind-heuristics.d.ts +24 -0
  46. package/dist/node-kind-heuristics.d.ts.map +1 -0
  47. package/dist/node-kind-heuristics.js +37 -0
  48. package/dist/node-kind-heuristics.js.map +1 -0
  49. package/dist/prose/metrics.d.ts +81 -0
  50. package/dist/prose/metrics.d.ts.map +1 -0
  51. package/dist/prose/metrics.js +103 -0
  52. package/dist/prose/metrics.js.map +1 -0
  53. package/dist/scope-aggregate.d.ts +229 -0
  54. package/dist/scope-aggregate.d.ts.map +1 -0
  55. package/dist/scope-aggregate.js +588 -0
  56. package/dist/scope-aggregate.js.map +1 -0
  57. package/dist/scope-identity.d.ts +85 -0
  58. package/dist/scope-identity.d.ts.map +1 -0
  59. package/dist/scope-identity.js +144 -0
  60. package/dist/scope-identity.js.map +1 -0
  61. package/dist/scope.d.ts +36 -0
  62. package/dist/scope.d.ts.map +1 -0
  63. package/dist/scope.js +60 -0
  64. package/dist/scope.js.map +1 -0
  65. package/dist/structural.d.ts +30 -0
  66. package/dist/structural.d.ts.map +1 -0
  67. package/dist/structural.js +98 -0
  68. package/dist/structural.js.map +1 -0
  69. package/dist/syntactic.d.ts +35 -0
  70. package/dist/syntactic.d.ts.map +1 -0
  71. package/dist/syntactic.js +143 -0
  72. package/dist/syntactic.js.map +1 -0
  73. package/dist/text-lines.d.ts +34 -0
  74. package/dist/text-lines.d.ts.map +1 -0
  75. package/dist/text-lines.js +60 -0
  76. package/dist/text-lines.js.map +1 -0
  77. package/dist/textual.d.ts +28 -0
  78. package/dist/textual.d.ts.map +1 -0
  79. package/dist/textual.js +75 -0
  80. package/dist/textual.js.map +1 -0
  81. package/dist/types.d.ts +112 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +2 -0
  84. package/dist/types.js.map +1 -0
  85. package/package.json +60 -3
  86. package/src/aggregator.ts +105 -0
  87. package/src/assemble.ts +109 -0
  88. package/src/cognitive.ts +127 -0
  89. package/src/cyclomatic.ts +78 -0
  90. package/src/entropy.ts +30 -0
  91. package/src/explain.ts +64 -0
  92. package/src/halstead.ts +54 -0
  93. package/src/index.ts +85 -0
  94. package/src/ir/build-ir.ts +411 -0
  95. package/src/maintainability.ts +29 -0
  96. package/src/node-kind-heuristics.ts +55 -0
  97. package/src/prose/metrics.ts +201 -0
  98. package/src/scope-aggregate.ts +775 -0
  99. package/src/scope-identity.ts +240 -0
  100. package/src/scope.ts +77 -0
  101. package/src/structural.ts +132 -0
  102. package/src/syntactic.ts +183 -0
  103. package/src/text-lines.ts +90 -0
  104. package/src/textual.ts +119 -0
  105. package/src/types.ts +121 -0
@@ -0,0 +1,229 @@
1
+ import type { AggregationEntry } from "./types.js";
2
+ /**
3
+ * Ein Scope mit beiden Lesarten desselben Metrikwerts.
4
+ *
5
+ * Der Aufrufer erzeugt die Werte mit demselben Calculator, nur mit
6
+ * unterschiedlich zugeschnittenen Facts:
7
+ * - `inclusiveValue`: Calculator auf `buildSymbolIR(facts, id)` — die
8
+ * ungefilterten Datei-Facts, der Builder zieht alle Nachfahren-Scopes mit
9
+ * hinein.
10
+ * - `selfValue`: Calculator auf
11
+ * `buildSymbolIR(selectSymbolFacts(facts, id), id)` — nur die eigenen
12
+ * Facts des Scopes, ohne Nachfahren.
13
+ */
14
+ export interface ScopeMetricNodeV1 {
15
+ /** `metrics_scope_id` nach spec.md §16.10; hier die `symbolScopeId`. */
16
+ metricsScopeId: string;
17
+ /** Eltern-Scope; fehlt genau bei einem Wurzel-Scope (typisch: der Datei-Scope). */
18
+ parentScopeId?: string;
19
+ /** Wert EINSCHLIESSLICH aller Nachfahren-Scopes. */
20
+ inclusiveValue: number;
21
+ /** Wert allein aus den eigenen Facts des Scopes, OHNE Nachfahren. */
22
+ selfValue: number;
23
+ /**
24
+ * True, wenn der Scope eine eigene Ausfuehrungseinheit ist (Funktion,
25
+ * Methode, Konstruktor, Lambda) — false bei Datei, Klasse, Interface,
26
+ * Namespace, Typ, Property-Gruppe. Steuert ausschliesslich die Lesart
27
+ * `"execution_unit"`; die Zuordnung trifft der Aufrufer, weil
28
+ * `SymbolScopeFact.kind` ein adapterspezifischer String ist und dieses
29
+ * Paket keine Sprach-Taxonomie kennt.
30
+ */
31
+ executionUnit: boolean;
32
+ /** SLOC des Scopes, fuer den SLOC-gewichteten Mittelwert in `aggregate()`. */
33
+ sloc?: number;
34
+ }
35
+ /** Die drei definierten Lesarten einer Scope-Summe. */
36
+ export declare const SCOPE_SUM_READINGS: readonly ["top_level", "execution_unit", "self"];
37
+ export type ScopeSumReading = (typeof SCOPE_SUM_READINGS)[number];
38
+ /** Geschlossene Menge der Invariantenverstoesse. Ein Verstoss ist ein Fehler, kein Hinweis. */
39
+ export declare const SCOPE_INVARIANT_CODES: readonly ["duplicate_scope_id", "unknown_parent", "parent_cycle", "negative_value", "self_exceeds_inclusive", "children_exceed_parent", "leaf_self_differs_from_inclusive", "scope_counted_twice", "scope_uncounted"];
40
+ export type ScopeInvariantCode = (typeof SCOPE_INVARIANT_CODES)[number];
41
+ /** Ein Invariantenverstoss mit Pflicht-Detailtext (E4). */
42
+ export interface ScopeInvariantViolationV1 {
43
+ code: ScopeInvariantCode;
44
+ metricsScopeId: string;
45
+ /** Beobachteter Wert (Bedeutung je nach `code`). */
46
+ observed: number;
47
+ /** Obergrenze/Erwartungswert, gegen den `observed` geprueft wurde. */
48
+ limit: number;
49
+ /** Menschenlesbare Begruendung; nie leer. */
50
+ detail: string;
51
+ }
52
+ export interface ScopeTreeOptions {
53
+ /**
54
+ * Konstanter Sockel, den JEDER gemessene Scope traegt, unabhaengig von
55
+ * seinem Inhalt. Cognitive: `0` (Default). Cyclomatic classic/extended:
56
+ * `1`, weil `computeCyclomatic` immer den `M = 1 + decision_points`-Sockel
57
+ * anlegt — ohne diese Angabe meldet die Eltern/Kind-Pruefung fuer
58
+ * Cyclomatic Scheinverstoesse, sobald ein Scope mehr als ein Kind hat.
59
+ * Die Pruefung rechnet mit `wert - perScopeBase`; die ausgewiesenen Summen
60
+ * bleiben unveraendert.
61
+ */
62
+ perScopeBase?: number;
63
+ /** Toleranz fuer Fliesskomma-Vergleiche. Default 1e-9. */
64
+ epsilon?: number;
65
+ }
66
+ /** Ergebnis von `aggregateScopeTree`. */
67
+ export interface ScopeTreeAggregateV1 {
68
+ /** Scopes nach Dedupe ueber `metricsScopeId`. */
69
+ scopeCount: number;
70
+ /** Wegen wiederholter `metricsScopeId` verworfene Eingaben (spec.md §16.10). */
71
+ duplicatesDropped: number;
72
+ rootCount: number;
73
+ /** Anzahl der aeussersten Ausfuehrungseinheiten (Basis der Funktions-Lesart). */
74
+ executionUnitRootCount: number;
75
+ leafCount: number;
76
+ /** Lesart `"top_level"`. */
77
+ topLevelSum: number;
78
+ /** Lesart `"execution_unit"` — die Vorgabezahl. */
79
+ executionUnitSum: number;
80
+ /** Lesart `"self"`. */
81
+ selfSum: number;
82
+ /**
83
+ * NUR DIAGNOSE: Summe der `inclusiveValue` ueber alle Scopes — die naiv
84
+ * doppelt zaehlende Zahl. Nie als Kennzahl ausgeben.
85
+ */
86
+ naiveSum: number;
87
+ /** `naiveSum - topLevelSum`: der Betrag, den eine naive Summe doppelt zaehlt. */
88
+ doubleCountedAmount: number;
89
+ /** NUR DIAGNOSE: Summe ueber die Blatt-Scopes (siehe Modul-Doku). */
90
+ leafOnlySum: number;
91
+ /** `selfSum - leafOnlySum`: der Betrag, den eine Blatt-Lesart verschlucken wuerde. */
92
+ leafOnlyDroppedAmount: number;
93
+ }
94
+ /**
95
+ * Prueft alle Invarianten des Scope-Baums und liefert JEDEN Verstoss mit
96
+ * Begruendung. Leere Liste heisst: der Baum traegt eine sinnvolle Summe.
97
+ *
98
+ * Geprueft wird:
99
+ * 1. `duplicate_scope_id` — dieselbe Id mit abweichenden Werten.
100
+ * 2. `unknown_parent` — `parentScopeId` zeigt auf einen Scope, der nicht in
101
+ * der Menge ist. Ihn stillschweigend als Wurzel zu behandeln waere ein
102
+ * E4-Verstoss: der Elternwert, gegen den geprueft werden muesste, fehlt.
103
+ * 3. `parent_cycle` — die Elternkette schliesst sich.
104
+ * 4. `negative_value` — negative Metrikwerte.
105
+ * 5. `self_exceeds_inclusive` — der Eigenanteil ist groesser als der Wert
106
+ * mit Nachfahren. Der Eigenanteil ist per Definition ein Teil davon.
107
+ * 6. `children_exceed_parent` — der Eigenanteil eines Scopes plus die Summe
108
+ * seiner direkten Kinder darf seinen eigenen Wert nicht ueberschreiten.
109
+ *
110
+ * WAS DIESE PRUEFUNG LEISTET UND WAS NICHT — sie ist eine EINSEITIGE
111
+ * Schranke (`self + Summe Kinder <= inclusive`) und darf deshalb nicht als
112
+ * Doppelzaehlungspruefung gelesen werden:
113
+ * - Sie schlaegt an, wenn der Elternwert ZU KLEIN ist, dem Elternwert
114
+ * also Inhalt seiner Kinder FEHLT (oder ein Kindwert zu gross ist).
115
+ * Ein Verstoss heisst: der Baum verliert Inhalt, nicht: er zaehlt
116
+ * doppelt.
117
+ * - Sie schlaegt NICHT an, wenn der Elternwert ZU GROSS ist — genau der
118
+ * Fall, in dem ein Kindbeitrag zweimal im Elternwert steckt. Ein
119
+ * aufgeblaehter `inclusiveValue` ist aus Werten allein nicht von einem
120
+ * Scope zu unterscheiden, der im eigenen Koerper viel Kontrollfluss
121
+ * traegt.
122
+ *
123
+ * Die Zusicherung "jeder Beitrag zaehlt genau einmal" leistet
124
+ * `checkScopeCoverage` auf der Struktur der jeweiligen Lesart, nicht
125
+ * diese Wertschranke.
126
+ * 7. `leaf_self_differs_from_inclusive` — ein Scope ohne Kinder hat keine
127
+ * Nachfahren, sein Eigenanteil MUSS also sein Gesamtwert sein. Weicht er
128
+ * ab, hat der Aufrufer die beiden Werte nicht aus demselben Scope
129
+ * berechnet.
130
+ *
131
+ * NICHT geprueft (und mit Absicht hier benannt statt verschwiegen): ein zu
132
+ * grosser `inclusiveValue` eines Scopes MIT Kindern. Siehe Punkt 6 und die
133
+ * Modul-Doku, Abschnitt "Woraus die Doppelzaehlungsfreiheit tatsaechlich
134
+ * folgt".
135
+ *
136
+ * Alle Wertvergleiche laufen auf `wert - perScopeBase` (siehe
137
+ * `ScopeTreeOptions.perScopeBase`).
138
+ */
139
+ export declare function checkScopeTreeInvariants(nodes: readonly ScopeMetricNodeV1[], options?: ScopeTreeOptions): ScopeInvariantViolationV1[];
140
+ /**
141
+ * Wirft bei jedem Invariantenverstoss. Die Meldung nennt Anzahl und die
142
+ * ersten Verstoesse im Klartext; `context.violations` traegt die volle Liste.
143
+ *
144
+ * Geprueft wird in ZWEI Stufen: erst die Wert- und Bauminvarianten
145
+ * (`checkScopeTreeInvariants`), danach — nur wenn der Baum ueberhaupt
146
+ * wohlgeformt ist — die strukturelle Zaehlpruefung ueber alle drei Lesarten
147
+ * (`checkAllScopeCoverage`). Erst beide zusammen tragen die Aussage, dass die
148
+ * ausgegebenen Summen jeden Scope genau einmal enthalten; die Wertschranke
149
+ * allein taete es nicht (siehe Punkt 6 oben).
150
+ */
151
+ export declare function assertScopeTreeInvariants(nodes: readonly ScopeMetricNodeV1[], options?: ScopeTreeOptions): void;
152
+ /**
153
+ * Liefert genau die Eintraege, die eine Lesart zaehlt — jeder Scope hoechstens
154
+ * einmal, jeweils mit dem fuer die Lesart richtigen Wert. Das Ergebnis geht
155
+ * unveraendert in `aggregate()`; damit gelten count/mean/median/p90/p95/max/
156
+ * Schwellenzaehlung (spec.md §16.10) auf einer doppelzaehlungsfreien Basis.
157
+ *
158
+ * Prueft KEINE Invarianten — dafuer ist `checkScopeTreeInvariants` da. Ein
159
+ * `unknown_parent` wird hier zwangslaeufig wie eine Wurzel behandelt; genau
160
+ * deshalb meldet die Pruefung ihn als Fehler, statt ihn zu tolerieren.
161
+ */
162
+ export declare function selectScopeEntries(nodes: readonly ScopeMetricNodeV1[], reading: ScopeSumReading): AggregationEntry[];
163
+ /**
164
+ * Mit welchem Wert ein ausgewaehlter Scope in seine Lesart eingeht — und
165
+ * damit auch, WIE WEIT sein Summand reicht: `"inclusive"` deckt den Scope
166
+ * und alle seine Nachfahren ab, `"self"` nur ihn selbst.
167
+ */
168
+ export type ScopeSelectionKind = "inclusive" | "self";
169
+ /**
170
+ * Welche Scopes eine Lesart als Summanden zaehlt und mit welcher Reichweite.
171
+ * Was nicht in der Abbildung steht, ist kein eigener Summand.
172
+ */
173
+ export type ScopeSelectionV1 = ReadonlyMap<string, ScopeSelectionKind>;
174
+ /**
175
+ * Die Auswahl einer Lesart. Einzige Quelle der Wahrheit fuer
176
+ * `selectScopeEntries` UND `checkScopeCoverage`: die Pruefung soll dieselbe
177
+ * Auswahl sehen, die auch summiert wird, sonst prueft sie etwas anderes als
178
+ * das, was ausgegeben wird.
179
+ */
180
+ export declare function selectionForReading(nodes: readonly ScopeMetricNodeV1[], reading: ScopeSumReading): ScopeSelectionV1;
181
+ /**
182
+ * Prueft STRUKTURELL, dass eine Lesart jeden Scope genau einmal zaehlt — die
183
+ * Zusicherung, die `children_exceed_parent` NICHT leisten kann (siehe die
184
+ * Modul-Doku, Abschnitt "Woraus die Doppelzaehlungsfreiheit tatsaechlich
185
+ * folgt", und Punkt 6 von `checkScopeTreeInvariants`).
186
+ *
187
+ * Fuer jeden Scope wird gezaehlt, wie viele Summanden der Lesart seinen
188
+ * Beitrag tragen: er selbst, falls er ausgewaehlt ist, plus jeder echte
189
+ * Vorfahre, der mit `inclusiveValue` ausgewaehlt ist (dessen Summand deckt
190
+ * den ganzen Teilbaum ab). Genau EINER muss es sein.
191
+ *
192
+ * Was die Pruefung NICHT leisten kann: sie sieht die Struktur, nicht die
193
+ * Werte. Ein `inclusiveValue`, der den Beitrag eines Kindes intern doppelt
194
+ * enthaelt, ist aus Zahlen allein nicht erkennbar — dafuer haftet der
195
+ * Aufrufer, der die Werte berechnet hat.
196
+ */
197
+ export declare function checkScopeCoverage(nodes: readonly ScopeMetricNodeV1[], reading: ScopeSumReading): ScopeInvariantViolationV1[];
198
+ /**
199
+ * Dieselbe Zaehlpruefung wie `checkScopeCoverage`, aber gegen eine BELIEBIGE
200
+ * Auswahl. Sie ist der eigentliche Kern; `checkScopeCoverage` ist nur die
201
+ * Anwendung auf die Auswahl, die eine der drei Lesarten trifft.
202
+ *
203
+ * Getrennt exportiert, weil die Zusicherung sonst nicht vorfuehrbar waere:
204
+ * die Auswahlen der drei Lesarten koennen `scope_counted_twice` per
205
+ * Konstruktion nicht ausloesen (dort ist ein Scope ausgewaehlt GENAU DANN,
206
+ * wenn er keinen ausgewaehlten `inclusive`-Vorfahren hat). Eine Pruefung,
207
+ * deren Alarmfall ueber die oeffentliche Schnittstelle nicht erreichbar ist,
208
+ * waere eine Behauptung statt einer Pruefung — mit dieser Funktion laesst er
209
+ * sich zeigen, und der Waechter greift, sobald jemand `selectionFor` aendert.
210
+ *
211
+ * @param label Erscheint im Detailtext an der Stelle der Lesart.
212
+ */
213
+ export declare function checkSelectionCoverage(nodes: readonly ScopeMetricNodeV1[], selection: ScopeSelectionV1, label: string): ScopeInvariantViolationV1[];
214
+ /**
215
+ * `checkScopeCoverage` fuer ALLE drei Lesarten, Verstoesse deterministisch
216
+ * nach Lesart und Scope sortiert.
217
+ */
218
+ export declare function checkAllScopeCoverage(nodes: readonly ScopeMetricNodeV1[]): ScopeInvariantViolationV1[];
219
+ /**
220
+ * Summiert einen Scope-Baum in allen drei Lesarten, ohne Doppelzaehlung.
221
+ *
222
+ * WIRFT bei jedem Invariantenverstoss (`UntangleError`, Code
223
+ * `ANALYSIS_INCOMPLETE`): eine Summe ueber einen widerspruechlichen Baum ist
224
+ * keine Zahl mit Bedeutung, und ein Hinweis waere hier zu wenig. Wer die
225
+ * Verstoesse anzeigen statt abbrechen will, ruft vorher
226
+ * `checkScopeTreeInvariants` auf.
227
+ */
228
+ export declare function aggregateScopeTree(nodes: readonly ScopeMetricNodeV1[], options?: ScopeTreeOptions): ScopeTreeAggregateV1;
229
+ //# sourceMappingURL=scope-aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-aggregate.d.ts","sourceRoot":"","sources":["../src/scope-aggregate.ts"],"names":[],"mappings":"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"}