mirror of
https://github.com/colbymchenry/codegraph.git
synced 2026-10-17 05:07:37 +08:00
* fix(resolution): resolve this.#field.method() on the field's type (#1987) A call through an ES private field fell outside the `this.<field>` shape (#1496): the extractor accepted only a property_identifier, so `this.#items.add(x)` was emitted as the bare `add` and exact-matched whichever project method shared the name, often the calling method itself. The extractor and its kernel mirror now keep `this.#items.add`, and the resolver matches that shape and reads the field's type off the class declaration. The field regexes open with a lookbehind instead of `\b`, which never matches before `#`. A builtin or external field type (`new Set()`, a `Map`, an array) now yields no edge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(resolution): require receiver evidence for built-in method calls (#1987) Unknown JavaScript receivers could match unrelated methods by name or class-name similarity. Require validated receiver evidence for built-in method names while retaining typed, imported, object-literal and class resolution. Preserve private-field receivers in TypeScript and Rust extraction and keep public/private field declarations distinct. Build on PR #1990 with regression coverage across all four JS/TS variants and kernel/WASM parity. Co-authored-by: danusha2345 <ewidusoc498@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: danusha2345 <ewidusoc498@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1237,14 +1237,17 @@ impl<'t> Walker<'t> {
|
||||
|
||||
// --- extractInstantiation -----------------------------------------------------------
|
||||
|
||||
/// `this.<field>` as a member_expression receiver → Some(field) (#1496).
|
||||
/// `this.<field>` as a member_expression receiver → Some(field) (#1496, #1987).
|
||||
fn this_field_of(&self, receiver: Node<'t>) -> Option<String> {
|
||||
if receiver.kind() != "member_expression" {
|
||||
return None;
|
||||
}
|
||||
let object = receiver.child_by_field_name("object")?;
|
||||
let property = receiver.child_by_field_name("property")?;
|
||||
if object.kind() != "this" || property.kind() != "property_identifier" {
|
||||
// An ES private field (`this.#items`) keeps its `#` (#1987).
|
||||
if object.kind() != "this"
|
||||
|| !matches!(property.kind(), "property_identifier" | "private_property_identifier")
|
||||
{
|
||||
return None;
|
||||
}
|
||||
Some(self.text(property).to_string())
|
||||
|
||||
Reference in New Issue
Block a user