Skip to content
Merged
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
11e70c8
feat(resolver): resolve prototype-based method calls (Foo.prototype.b…
carlos-alm Jun 5, 2026
a458aad
test(cha): add 3-level hierarchy fixture for transitive CHA closure (…
carlos-alm Jun 5, 2026
1f1b1c3
fix: resolve merge conflicts with main
carlos-alm Jun 5, 2026
e4fa7c2
fix: remove duplicate prototype extractor functions and fix format
carlos-alm Jun 5, 2026
832f7fc
fix: address review feedback — shorthand prototype props, inline-new …
carlos-alm Jun 5, 2026
253bd71
feat(resolver): track array spread and Array.from/concat/flat callbac…
carlos-alm Jun 6, 2026
654532c
fix(native): add prototype method extraction to Rust engine (#1327)
carlos-alm Jun 6, 2026
4fe4f71
fix: add native orchestrator post-pass for prototype method resolution
carlos-alm Jun 6, 2026
0ffb24e
style: format test fixtures and pts test call sites
carlos-alm Jun 6, 2026
0c26030
fix(native): fix parity divergence in extract_inline_new_type
carlos-alm Jun 6, 2026
1b84435
fix: scan all files for prototype call edges, not just definition fil…
carlos-alm Jun 6, 2026
d926cf3
perf: pre-filter prototype files and remove dead seenByPair DB load (…
carlos-alm Jun 6, 2026
a6c5d2d
feat(resolver): resolve this-dispatch on function-as-object property …
carlos-alm Jun 6, 2026
c484fd1
feat(resolver): resolve property calls on object destructuring rest p…
carlos-alm Jun 6, 2026
41d7811
fix(native): strip one surrounding quote pair in prototype object-lit…
carlos-alm Jun 6, 2026
a004e25
fix(extractor): remove duplicate extractPrototypeMethodsWalk calls
carlos-alm Jun 6, 2026
2fa6d7e
merge: sync with feat/prototype-resolver-1317
carlos-alm Jun 6, 2026
8dcc760
style: fix biome format violations inherited from base branch merge
carlos-alm Jun 6, 2026
5baf98c
perf(native): remove .prototype. files from WASM post-pass filter
carlos-alm Jun 6, 2026
cdc84cf
Merge remote-tracking branch 'origin/main' into feat/prototype-resolv…
carlos-alm Jun 6, 2026
4ed709e
fix(lint): apply biome auto-fixes across extractors and domain files
carlos-alm Jun 6, 2026
e720083
fix(native): compute complexity/cfg for prototype method definitions
carlos-alm Jun 6, 2026
66b899a
fix(pts): resolve module-level for-of and class-method for-of PTS keys
carlos-alm Jun 6, 2026
92b58db
test(native): cover arrow-function path and assert C.bar metrics (#1347)
carlos-alm Jun 6, 2026
667866e
fix(bench): sync JS fixture names and use super.count() in DoubleCoun…
carlos-alm Jun 6, 2026
761cd0d
Merge branch 'main' into feat/prototype-resolver-1317
carlos-alm Jun 6, 2026
cfe55c8
fix(native): add prototype method extraction to Rust engine (#1327) (…
carlos-alm Jun 6, 2026
c3e2281
fix: resolve merge conflicts with feat/prototype-resolver-1317
carlos-alm Jun 6, 2026
b62e509
fix: resolve merge conflicts with main and fix duplicate paramBinding…
carlos-alm Jun 6, 2026
896c8e2
fix: extend native post-pass pre-filter to include arrow-function pro…
carlos-alm Jun 6, 2026
fc5c074
fix: remove duplicate paramBindings from wasm-worker-protocol/entry/p…
carlos-alm Jun 6, 2026
f367c71
test(extractor): verify exported arrow function funcStack tracking in…
carlos-alm Jun 6, 2026
5a52db5
ci: retrigger CI after merge conflict resolution
carlos-alm Jun 6, 2026
161e99b
fix: resolve merge conflicts with feat/prototype-resolver-1317 (round 2)
carlos-alm Jun 6, 2026
7a30ed0
fix(wasm-worker): restore paramBindings in SerializedExtractorOutput,…
carlos-alm Jun 6, 2026
ff2c116
fix(extractor): resolve arrow-function rest-param bindings via enclos…
carlos-alm Jun 6, 2026
dd8b4a0
fix(wasm-worker): remove duplicate paramBindings serialization in was…
carlos-alm Jun 6, 2026
cadf37f
Merge remote-tracking branch 'origin/feat/prototype-resolver-1317' in…
carlos-alm Jun 7, 2026
bc7a6b3
test(extractor): verify exported arrow function funcStack tracking in…
carlos-alm Jun 6, 2026
5c5af78
fix(wasm-worker): restore paramBindings in SerializedExtractorOutput,…
carlos-alm Jun 6, 2026
13ef95d
fix(extractor): resolve arrow-function rest-param bindings via enclos…
carlos-alm Jun 6, 2026
d44e41c
fix(wasm-worker): remove duplicate paramBindings serialization in was…
carlos-alm Jun 6, 2026
a51fd14
Merge remote-tracking branch 'origin/feat/prototype-resolver-1317' in…
carlos-alm Jun 7, 2026
6d8e8ea
style: remove double blank line introduced by merge (#1347)
carlos-alm Jun 7, 2026
1c561be
fix: resolve merge conflicts with main
carlos-alm Jun 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 34 additions & 7 deletions crates/codegraph-core/src/extractors/javascript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -521,8 +521,8 @@ fn emit_js_prototype_method(class_name: &str, method_name: &str, rhs: &Node, sou
line: start_line(rhs),
end_line: Some(end_line(rhs)),
decorators: None,
complexity: None,
cfg: None,
complexity: compute_all_metrics(rhs, source, "javascript"),
cfg: build_function_cfg(rhs, "javascript", source),
children: None,
});
}
Expand Down Expand Up @@ -551,8 +551,8 @@ fn extract_js_prototype_object_literal(class_name: &str, obj_node: &Node, source
line: start_line(&child),
end_line: Some(end_line(&child)),
decorators: None,
complexity: None,
cfg: None,
complexity: compute_all_metrics(&child, source, "javascript"),
cfg: build_function_cfg(&child, "javascript", source),
children: None,
});
}
Expand Down Expand Up @@ -2601,7 +2601,24 @@ mod tests {
);
let def = s.definitions.iter().find(|d| d.name == "C.foo");
assert!(def.is_some(), "C.foo definition missing; got: {:?}", s.definitions.iter().map(|d| &d.name).collect::<Vec<_>>());
assert_eq!(def.unwrap().kind, "method");
let def = def.unwrap();
assert_eq!(def.kind, "method");
assert!(def.complexity.is_some(), "C.foo should have complexity metrics");
assert!(def.cfg.is_some(), "C.foo should have a CFG");
}

#[test]
fn prototype_arrow_function_method_emits_definition() {
let s = parse_js(
"function C() {}\n\
C.prototype.foo = () => { return 1; };",
);
let def = s.definitions.iter().find(|d| d.name == "C.foo");
assert!(def.is_some(), "C.foo definition missing; got: {:?}", s.definitions.iter().map(|d| &d.name).collect::<Vec<_>>());
let def = def.unwrap();
assert_eq!(def.kind, "method");
assert!(def.complexity.is_some(), "C.foo (arrow) should have complexity metrics");
assert!(def.cfg.is_some(), "C.foo (arrow) should have a CFG");
}

#[test]
Expand All @@ -2628,8 +2645,15 @@ mod tests {
let foo = s.definitions.iter().find(|d| d.name == "C.foo");
let bar = s.definitions.iter().find(|d| d.name == "C.bar");
assert!(foo.is_some(), "C.foo missing");
assert_eq!(foo.unwrap().kind, "method");
let foo = foo.unwrap();
assert_eq!(foo.kind, "method");
assert!(foo.complexity.is_some(), "C.foo should have complexity metrics");
assert!(foo.cfg.is_some(), "C.foo should have a CFG");
assert!(bar.is_some(), "C.bar missing");
let bar = bar.unwrap();
assert_eq!(bar.kind, "method");
assert!(bar.complexity.is_some(), "C.bar should have complexity metrics");
assert!(bar.cfg.is_some(), "C.bar should have a CFG");
}

#[test]
Expand All @@ -2642,7 +2666,10 @@ mod tests {
);
let def = s.definitions.iter().find(|d| d.name == "C.greet");
assert!(def.is_some(), "C.greet definition missing; got: {:?}", s.definitions.iter().map(|d| &d.name).collect::<Vec<_>>());
assert_eq!(def.unwrap().kind, "method");
let def = def.unwrap();
assert_eq!(def.kind, "method");
assert!(def.complexity.is_some(), "C.greet should have complexity metrics");
assert!(def.cfg.is_some(), "C.greet should have a CFG");
}

#[test]
Expand Down
Loading