Commit 42e3b33
refactor(parity): render orchestrator-drop summary as a per-extension table (#1240)
* refactor(parity): render orchestrator-drop summary as a per-extension table
The native-orchestrator drop warning lived in a single wall-of-text WARN
line that grew unreadable when 30+ extensions were dropped at once
(easy to trigger via journal-vs-fresh-build collisions). Make the
per-extension breakdown scan like a table: header line keeps the count
and now also reports the extension total; each extension occupies its
own indented row with a right-aligned count column.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(extractors): extend shared helpers for identifier and symbol collection
Adds shared utilities to src/extractors/helpers.ts in preparation for
adoption across language extractors (phase 2):
- nodeStartLine: companion to nodeEndLine for the ~108 hand-rolled
startPosition.row + 1 literals scattered across extractors
- findFirstChildOfTypes: find first child matching any of N types
(useful for grammar variants like string vs string_literal)
- iterChildren / PUNCTUATION_TOKENS: generator-based child iteration
with punctuation skipping, used in elixir/gleam destructuring walks
- pushCall / pushImport: centralise Call/Import construction so line
derivation stays consistent across extractors
- extractSimpleParameters / resolveParamName: uniform parameter
extraction with optional type-map sink — collapses boilerplate in
the ~16 per-language extractParams helpers
Phase 1 of the TS extractor refactor plan (sync.json clusters 1).
Additive only — no consumer adoption yet; existing helpers and
extractor behaviour unchanged. Consumers updated in phase 2.
docs check acknowledged: internal refactor, no doc updates needed.
* refactor(extractors): adopt shared helpers across language extractors
Phase 2 of the TS extractor refactor plan (sync.json cluster 1). Adopts
the helpers extended in 9c8be55 (nodeStartLine, findFirstChildOfTypes,
pushCall, pushImport, extractSimpleParameters, stripQuotes) across six
language extractors:
- r.ts: drop local stripQuotes; use shared stripQuotes/pushCall/
pushImport/findFirstChildOfTypes/nodeStartLine
- gleam.ts: use pushCall/pushImport/findFirstChildOfTypes/nodeStartLine;
extract pushConstructor helper for the dual-branch data-constructor
walk
- julia.ts: use pushCall/pushImport/nodeStartLine; collapse Julia param
wrapper-type branches via JULIA_PARAM_WRAPPER_TYPES set
- java.ts: use pushCall/pushImport/nodeStartLine; collapse
extractJavaParameters via extractSimpleParameters with typeMap sink;
extract resolveJavaTypeText for the generic_type unwrap pattern
- gleam.ts and solidity.ts: extract qualifyWithParent helper in solidity
to collapse 6 duplicated `parent ? \`\${parent}.\${name}\` : name`
blocks
- solidity.ts: use pushCall/pushImport/findFirstChildOfTypes/
nodeStartLine; collapse extractSolParams via extractSimpleParameters
- javascript.ts: bulk-replace 43 inline `XXX.startPosition.row + 1`
literals with nodeStartLine() calls; replace one stray endPosition
literal with nodeEndLine
Net -65 lines. No behaviour changes — only call-site collapsing onto the
shared helpers (semantics verified by careful inspection of each
replacement; pushImport's empty-names fallback matches the previous
ad-hoc defaults in each extractor).
docs check acknowledged: internal refactor, no doc updates needed.
* refactor(extractors): break elixir param/map binding cycle
Convert collectElixirParamIdentifiers from mutual-recursion with
collectElixirMapBindings into a single iterative worklist traversal.
Map/list/tuple/binary-operator dispatch is now done via three leaf
helpers that push child nodes onto the worklist instead of calling
back into the main function. This removes the function-level cycle
flagged by codegraph (9 -> 8 cycles) without changing extractor
semantics. docs check acknowledged: internal refactor only.
* refactor(extractors-rs): extend shared helpers for identifier and symbol collection
* refactor(extractors-rs): adopt shared helpers across language extractors
Phase 5 of the Rust extractor refactor plan (sync.json cluster 2). Adopts
the helpers extended in 0d687c4 (push_call, push_simple_call, push_import,
push_type_map_entry, extract_simple_parameters, match_c_family_type_map)
across eight language extractors:
- cpp.rs: collapse match_cpp_type_map to a one-line delegate of
match_c_family_type_map; use push_import/push_simple_call/push_call
for include and call sites
- cuda.rs: same delegation as cpp.rs; use push_import/push_simple_call/
push_call across include and call_expression handlers
- java.rs: use push_type_map_entry for local-variable / formal-parameter
bindings; use push_call/push_simple_call for method invocation and
object creation; collapse extract_java_parameters to a one-shot
extract_simple_parameters call; use push_import for import declaration
- javascript.rs: use push_simple_call for new_expression identifier
branch; use push_type_map_entry for the confidence-0.9 type entries
- julia.rs: use push_simple_call/push_call across identifier and
field_expression / scoped_identifier call branches
- objc.rs: use push_import for at_import; use push_call for c-call and
message-expression handlers (drops redundant is_empty guards)
- r_lang.rs: use push_simple_call/push_call across identifier and
namespace_operator call branches; use push_import for library/source
- solidity.rs: use push_call (drops redundant guard) for call sites;
collapse extract_sol_params to a one-shot extract_simple_parameters
Net: -207 lines across 8 files, no behavior change. cargo check clean,
324 rust unit tests pass.
Pre-existing test failure: tests/engines/parity.test.ts has two failing
elixir cases unrelated to this commit (filed as #1227 — regression from
commit 5abe6ad in Phase 3).
* refactor(extractors-rs): break elixir param/map binding cycle
Convert collect_elixir_param_identifiers from mutual-recursion with
collect_elixir_map_bindings into a single iterative worklist traversal.
Map/list/tuple/binary-operator dispatch is now done via three leaf
helpers (push_elixir_sequence_items, push_elixir_map_values,
push_elixir_binary_operator_operands) that push child nodes onto the
worklist instead of calling back into the main function. This removes
the function-level cycle flagged by codegraph (8 -> 7 cycles) and
mirrors the TS refactor in 5abe6ad without changing extractor
semantics. docs check acknowledged: internal refactor only.
* refactor(ast-analysis): break visitor-utils destructuring cycle
* refactor(ast-analysis): decompose engine and visitors
* refactor(builder): break pipeline cycle by extracting orchestrator-selection strategy
Extract the native-orchestrator path out of pipeline.ts into two new stage
modules:
- stages/native-orchestrator.ts — tryNativeOrchestrator + post-native
structure/analysis fallback + dropped-language detection/backfill.
- stages/native-db-lifecycle.ts — shared rusqlite connection helpers
(closeNativeDb, reopenNativeDb, suspendNativeDb, refreshJsDb).
This breaks the function-level cycle 'buildGraph <-> tryNativeOrchestrator'
caused by codegraph's name-based resolver conflating the local buildGraph
function with the ctx.nativeDb.buildGraph() method call. Once the
orchestrator lives in its own file, there is no longer a local buildGraph
in scope to collide with the method invocation.
Function-level cycles: 9 -> 5. No file-level cycle introduced (still 1,
unchanged — pre-existing MCP cycle). pipeline.ts shrinks from 1404 to 465
lines and now reads as a thin top-level controller: detect changes, try
native, fall back to JS stages.
computeWasmOnlyStaleFiles is re-exported from pipeline.ts so existing
unit tests (tests/builder/wasm-only-stale-files.test.ts) keep working
without changes.
* refactor(builder): decompose builder stages and adopt shared helpers
* refactor(graph): extract helpers in cycles and journal
docs check acknowledged — no doc-relevant changes (internal helper extraction).
* refactor(core-rs): collapse walker mutual recursion into single-entry traversal
* refactor(core-rs): decompose pipeline, read queries, and edge builders
docs check acknowledged - Rust internal helper extraction, no user-facing changes
* refactor(parser): extract LANGUAGE_REGISTRY iteration and worker boundary helpers
* refactor(analysis): decompose module-map and reduce complexity in fn-impact and dependencies
Split high-cognitive-complexity functions in the analysis domain into focused
helpers. Worst functions per gauntlet (cog/cyc/maxNesting/halstead) are now
below thresholds.
module-map.ts (statsData cog=31 -> below threshold):
- Extract buildStatsFromNative and buildStatsFromJs branches
- Share false-positive query and quality-score helpers between paths
- aggregateRolesFromNative pulls duplicated role-aggregation code out
fn-impact.ts (bfsTransitiveCallers cog=37 -> below threshold,
impactAnalysisData cog=27 -> below threshold):
- Extract recordCaller, processFrontierNode, seedInterfaceImplementors
- Extract bfsImportDependents and groupDependentsByLevel
dependencies.ts (bfsShortestPath cog=29, bfsFilePath cog=30,
buildTransitiveCallers cog=24 -> all below threshold):
- Extract buildNextCallerFrontier from buildTransitiveCallers
- Extract buildNeighborStmt + visitNeighbor; state collected in struct
- Extract visitFileNeighbor + reconstructFilePath
docs check acknowledged - internal helper extraction, no user-facing changes
* refactor(search): decompose generator and reduce complexity in semantic and hybrid search
* refactor(features): decompose complexity, structure, graph-enrichment, structure-query, and owners
Internal refactor — no public API or behaviour change, so docs check acknowledged.
- complexity.ts: split collectNativeBulkRows (cog=70) into classify/build/collect-file helpers;
extract classifyHalsteadToken + summarizeHalsteadCounts from computeHalsteadMetrics.
- structure.ts: merge classifyNodeRolesFull/Incremental DRY via shared buildActiveFilesSet
+ buildClassifierInput helpers.
- graph-enrichment.ts: decompose prepareFileLevelData (cog=32, cyc=26) into loadFileLevelEdges,
computeFileFanCounts, detectFileCommunities, buildFileVisNode, selectFileSeedNodes.
- structure-query.ts: split hotspotsData (cog=34, sloc=102) using a strategy pattern
(HOTSPOT_ORDER_BY) and mapNative/JsHotspotRow helpers.
- owners.ts: split ownersData (sloc=158, bugs=1.55) into loadFilteredFiles, buildOwnerIndex,
loadSymbolsForFiles, computeOwnerBoundaries, buildOwnersSummary.
* refactor(features): reduce complexity in cfg and cochange
* refactor(graph): decompose Leiden optimiser and roles classifier
Internal refactor — public APIs unchanged. docs check acknowledged.
* refactor(presentation): extract shared rendering helpers in cfg and flow
* refactor(scripts): separate config from execution in benchmarking scripts
* refactor(features): reduce warning-level complexity in feature warnings batch
* refactor(extractors): adopt iterChildren + PUNCTUATION_TOKENS in elixir pushElixirSequenceItems
Replaces the inline childCount loop with the shared iterChildren generator
configured with PUNCTUATION_TOKENS, completing phase 1 of the TS extractor
refactor plan (sync.json cluster 1). Behaviour preserved — same nodes are
pushed onto the worklist, just via the shared helper.
docs check acknowledged: internal refactor, no doc updates needed.
* refactor(extractors-rs): adopt shared child-iteration helpers (grind)
Wire forge phase 4 helpers into their consumers:
- find_first_child_of_types: collapse find_child(x, A).or_else(|| find_child(x, B))
in fsharp.rs handle_application
- iter_children + PUNCTUATION_TOKENS: replace inline punctuation-skip loop in
javascript.rs first_arg_is_string_literal
Closes 3 dead-ffi helpers extracted by forge phase 4. Semantically identical.
* fix(tests): move column-width comment to the .tsx entry that actually drives it (#1240)
* fix(elixir): restore LIFO-compensating reverse-push in sequence and map helpers
pushElixirSequenceItems and pushElixirMapValues were pushing items in
forward order onto the LIFO worklist stack, causing tuple/list/map
parameters to be emitted in reverse source order (e.g. {x, _y} → ['_y',
'x'] instead of ['x', '_y']). The fix collects items then pushes them in
reverse so the LIFO pop restores source order, matching the native engine.
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>1 parent 8c4bfc2 commit 42e3b33
14 files changed
Lines changed: 2120 additions & 1736 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
79 | 151 | | |
80 | 152 | | |
81 | 153 | | |
82 | 154 | | |
83 | | - | |
84 | | - | |
| 155 | + | |
| 156 | + | |
85 | 157 | | |
86 | 158 | | |
87 | 159 | | |
88 | 160 | | |
89 | 161 | | |
90 | 162 | | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | 163 | | |
96 | 164 | | |
97 | 165 | | |
98 | 166 | | |
99 | 167 | | |
100 | 168 | | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | 169 | | |
106 | 170 | | |
107 | 171 | | |
108 | 172 | | |
109 | 173 | | |
110 | 174 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | 175 | | |
116 | 176 | | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
149 | 187 | | |
150 | | - | |
151 | | - | |
| 188 | + | |
152 | 189 | | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | 190 | | |
182 | 191 | | |
183 | 192 | | |
| |||
0 commit comments