You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude/skills/agent-eval/corpus.json
+19Lines changed: 19 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -74,5 +74,24 @@
74
74
{ "name": "Masonry", "repo": "https://github.com/SnapKit/Masonry", "size": "Small", "files": "~50", "question": "How does Masonry build and activate Auto Layout constraints from its block DSL?" },
75
75
{ "name": "FMDB", "repo": "https://github.com/ccgus/fmdb", "size": "Medium", "files": "~80", "question": "How does FMDB execute a prepared SQL statement and bind parameters?" },
76
76
{ "name": "SDWebImage", "repo": "https://github.com/SDWebImage/SDWebImage", "size": "Large", "files": "~400", "question": "How does SDWebImage download, cache, and decode an image for a UIImageView?" }
77
+
],
78
+
"Mixed iOS (Swift+ObjC)": [
79
+
{ "name": "Charts", "repo": "https://github.com/danielgindi/Charts", "size": "Small", "files": "~270", "question": "How does the ChartsDemo ObjC demo controller drive the Swift Charts library to animate and notify a data update?" },
80
+
{ "name": "realm-swift", "repo": "https://github.com/realm/realm-swift", "size": "Medium", "files": "~370", "question": "How does a Swift `Realm.write { realm.add(obj) }` reach the Objective-C persistence layer?" },
81
+
{ "name": "wikipedia-ios", "repo": "https://github.com/wikimedia/wikipedia-ios", "size": "Large", "files": "~1700", "question": "How does tapping a search result reach the article-fetch network call across the Swift / ObjC boundary?" }
82
+
],
83
+
"React Native (legacy bridge + TurboModule)": [
84
+
{ "name": "@react-native-async-storage", "repo": "https://github.com/react-native-async-storage/async-storage", "size": "Small", "files": "~60", "question": "How does `setItem` in JS reach the native `legacy_multiSet` implementation?" },
85
+
{ "name": "react-native-svg", "repo": "https://github.com/software-mansion/react-native-svg", "size": "Medium", "files": "~700", "question": "How does a JS `Svg.getTotalLength(...)` reach the iOS / Android native implementation via TurboModule?" },
86
+
{ "name": "react-native-firebase", "repo": "https://github.com/invertase/react-native-firebase", "size": "Large", "files": "~1100", "question": "How does a native iOS push notification reach the JS `messaging().onMessage(...)` listener?" }
87
+
],
88
+
"Expo Modules": [
89
+
{ "name": "expo-haptics", "repo": "https://github.com/expo/expo/tree/main/packages/expo-haptics", "size": "Small", "files": "~15", "question": "How does `Haptics.notificationAsync(...)` in JS reach `UINotificationFeedbackGenerator` in the Swift Module?" },
90
+
{ "name": "expo-camera", "repo": "https://github.com/expo/expo/tree/main/packages/expo-camera", "size": "Medium", "files": "~70", "question": "How does a JS `CameraView.takePictureAsync(options)` reach the native AVCaptureSession / CameraDevice call?" }
91
+
],
92
+
"React Native Fabric (view components)": [
93
+
{ "name": "react-native-segmented-control", "repo": "https://github.com/react-native-segmented-control/segmented-control", "size": "Small", "files": "~25", "question": "How does JSX `<SegmentedControl onChange={cb}/>` reach the native onChange handler on iOS/Android?" },
94
+
{ "name": "react-native-screens", "repo": "https://github.com/software-mansion/react-native-screens", "size": "Medium", "files": "~1200", "question": "How does JSX `<ScreenStack>` reach the native RNSScreenStackView component?" },
95
+
{ "name": "react-native-skia", "repo": "https://github.com/Shopify/react-native-skia", "size": "Large", "files": "~1000", "question": "How does a `<SkiaPictureView/>` JSX usage reach the iOS / Android native renderer?" }
Copy file name to clipboardExpand all lines: README.md
+30Lines changed: 30 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -137,6 +137,7 @@ The gains scale with codebase size: on large repos the agent answers from the in
137
137
|**Always Fresh**| File watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config |
|**100% Local**| No data leaves your machine. No API keys. No external services. SQLite database only |
141
142
142
143
---
@@ -164,6 +165,35 @@ CodeGraph detects web-framework routing files and emits `route` nodes linked by
164
165
165
166
---
166
167
168
+
## Mixed iOS / React Native / Expo bridging
169
+
170
+
Real iOS and React Native codebases live across multiple languages — a Swift caller invokes an Objective-C selector that's been auto-bridged, a JS file calls into a native module via the React Native bridge, a JSX component delegates to a native view manager. Static tree-sitter extraction stops at each language boundary. CodeGraph bridges them so `trace`, `callers`, `callees`, and `impact` connect end-to-end across the gap.
171
+
172
+
| Boundary | JS / Swift side | Native side | How |
|**React Native TurboModules**| JS `import M from './NativeM'; M.fn(...)`| Native impl matching the Codegen spec | Treats the `Native<X>.ts` spec interface as ground truth |
|**Legacy Paper view managers**| JSX `<MyView prop={v}/>`| ObjC `RCT_EXPORT_VIEW_PROPERTY` · Java/Kotlin `@ReactProp`| Same as Fabric — Paper-era declarations also produce `component` + `property` nodes |
182
+
183
+
**Validated on real codebases** (small + medium + large for each bridge):
184
+
185
+
| Bridge | Small | Medium | Large |
186
+
|---|---|---|---|
187
+
| Swift ↔ ObjC |[Charts](https://github.com/danielgindi/Charts)|[realm-swift](https://github.com/realm/realm-swift)|[Wikipedia-iOS](https://github.com/wikimedia/wikipedia-ios)|
| Fabric / Paper views |[react-native-segmented-control](https://github.com/react-native-segmented-control/segmented-control)|[react-native-screens](https://github.com/software-mansion/react-native-screens)|[react-native-skia](https://github.com/Shopify/react-native-skia)|
192
+
193
+
Each bridge emits edges tagged `provenance:'heuristic'` with `metadata.synthesizedBy:` set to a stable channel name (e.g. `swift-objc-bridge`, `rn-event-channel`, `fabric-native-impl`, `expo-module-extract`), so the agent can tell at a glance how a hop got into the graph.
0 commit comments