Commit d7b2ed5
fix(query,extract,merge): improve cross-project analysis accuracy
Four fixes addressing gaps in cross-project analysis:
1. Type queries now include member edges. `symbol context`/`impact` on a
type (Struct/Class/Enum/Protocol/Trait) now count edges targeting its
direct members as callers/read_by/implementors of the type itself, with
dedup. Previously `impact FeedList` returned 0 because edges target
`FeedList::init`/`::content`, not the parent struct.
2. Generic constructor calls now emit edges. `Mutex<Bool>(false)` parses
as `GenericSpecializationExprSyntax` in SwiftSyntax and
`constructor_expression` in tree-sitter-swift — neither was handled.
SwiftSyntax now unwraps the specialization; tree-sitter extracts the
type name from `user_type > type_identifier`.
3. Swift test targets get proper module names. `Tests/FrameBaseTests/`
now registers as module `FrameBaseTests` (was landing in unnamed `/`).
Falls back to `<Package>Tests` when `Tests/` has no subdirectories.
4. Candidate cap prevents edge explosion for common names. When a name
resolves to candidates in >3 distinct files, drop the edge rather
than emit N false-positive duplicates (e.g., `horizontal`, `top`).
Counting unique files — not raw candidates — preserves legitimate
edges to types with multiple extensions in the same file.
Verified on lama-ludo-ios + FrameUI/FrameBase externals: edges reduced
453k → 267k (41% noise drop), test files now attributed correctly,
cross-module `impact Mutex` returns 23 dependents across FrameUI and
FrameBaseTests (was 0).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent 2003d68 commit d7b2ed5
6 files changed
Lines changed: 487 additions & 0 deletions
File tree
- grapha-core/src
- grapha-swift
- src
- treesitter
- swift-bridge/Sources/GraphaSwiftBridge
- grapha/src/query
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
105 | 106 | | |
106 | 107 | | |
107 | 108 | | |
| 109 | + | |
108 | 110 | | |
109 | 111 | | |
110 | 112 | | |
| |||
449 | 451 | | |
450 | 452 | | |
451 | 453 | | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
452 | 466 | | |
453 | 467 | | |
454 | 468 | | |
| |||
469 | 483 | | |
470 | 484 | | |
471 | 485 | | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
472 | 493 | | |
473 | 494 | | |
474 | 495 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
30 | 66 | | |
31 | 67 | | |
32 | 68 | | |
| |||
70 | 106 | | |
71 | 107 | | |
72 | 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 | + | |
73 | 147 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1199 | 1199 | | |
1200 | 1200 | | |
1201 | 1201 | | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
1202 | 1228 | | |
1203 | 1229 | | |
1204 | 1230 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
230 | 236 | | |
231 | 237 | | |
232 | 238 | | |
| |||
0 commit comments