Skip to content

Commit

Permalink
fix(semantic): incorrect reference when MemberExpression used in TSPr…
Browse files Browse the repository at this point in the history
…opertySignature
  • Loading branch information
Dunqing committed Sep 6, 2024
1 parent 1bed5ce commit 70093d4
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 9 deletions.
9 changes: 4 additions & 5 deletions crates/oxc_semantic/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1891,9 +1891,9 @@ impl<'a> SemanticBuilder<'a> {
}
}
AstKind::MemberExpression(_) => {
if !self.current_reference_flags.is_type() {
self.current_reference_flags = ReferenceFlags::Read;
}
// A.B = 1;
// ^^^ we can't treat A as Write reference, because it's the property(B) of A that change
self.current_reference_flags -= ReferenceFlags::Write;
}
AstKind::AssignmentTarget(_) => {
self.current_reference_flags |= ReferenceFlags::Write;
Expand Down Expand Up @@ -1966,8 +1966,7 @@ impl<'a> SemanticBuilder<'a> {
self.current_reference_flags -= ReferenceFlags::Read;
}
}
AstKind::MemberExpression(_)
| AstKind::ExportNamedDeclaration(_)
AstKind::ExportNamedDeclaration(_)
| AstKind::TSTypeQuery(_)
// Clear the reference flags that are set in AstKind::PropertySignature
| AstKind::PropertyKey(_) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ input_file: crates/oxc_semantic/tests/fixtures/oxc/type-declarations/signatures/
"id": 2,
"node": "TSInterfaceDeclaration",
"symbols": []
},
{
"children": [],
"flags": "ScopeFlags(StrictMode)",
"id": 3,
"node": "TSInterfaceDeclaration",
"symbols": []
}
],
"flags": "ScopeFlags(StrictMode | Top)",
Expand All @@ -35,6 +42,12 @@ input_file: crates/oxc_semantic/tests/fixtures/oxc/type-declarations/signatures/
"id": 0,
"name": "X",
"node_id": 15
},
{
"flags": "ReferenceFlags(Type)",
"id": 2,
"name": "X",
"node_id": 27
}
]
},
Expand All @@ -49,6 +62,12 @@ input_file: crates/oxc_semantic/tests/fixtures/oxc/type-declarations/signatures/
"id": 1,
"name": "B",
"node_id": 19
},
{
"flags": "ReferenceFlags(Type)",
"id": 3,
"name": "B",
"node_id": 32
}
]
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import type X from 'mod';
import type X from "mod";

type B = number;

export interface A {
[X]: B
}
[X]: B;
}

export interface A {
[X.X]: B;
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ input_file: crates/oxc_semantic/tests/fixtures/typescript-eslint/type-declaratio
"node": "TSEnumDeclaration(Foo)",
"references": [
{
"flags": "ReferenceFlags(Read)",
"flags": "ReferenceFlags(Type)",
"id": 0,
"name": "Foo",
"node_id": 11
Expand Down

0 comments on commit 70093d4

Please sign in to comment.