Skip to content

Commit 126ae75

Browse files
magic-akariDunqing
andauthored
fix(semantic): distinguish class private elements (#11044)
- Fix: #11039 --------- Co-authored-by: Dunqing <dengqing0821@gmail.com>
1 parent de3035a commit 126ae75

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

crates/oxc_linter/src/rules/eslint/no_unused_private_class_members.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,19 @@ fn test() {
295295
this.#x = 1;
296296
}
297297
}",
298+
r"type Callback<T> = () => Promise<T> | T;
299+
300+
export class Issue_11039<T> {
301+
load: () => Promise<T>;
302+
303+
constructor(callback: Callback<T>) {
304+
this.load = () => this.#load(callback);
305+
}
306+
307+
async #load(callback: Callback<T>) {
308+
callback;
309+
}
310+
}",
298311
];
299312

300313
let fail = vec![

crates/oxc_semantic/src/class/builder.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ impl<'a> ClassTableBuilder<'a> {
106106
if matches!(parent_kind, AstKind::PrivateInExpression(_) | AstKind::MemberExpression(_))
107107
{
108108
if let Some(class_id) = self.current_class_id {
109-
let element_ids = self.classes.get_element_ids(class_id, &ident.name);
109+
let element_ids = self.classes.get_element_ids(
110+
class_id,
111+
&ident.name,
112+
/* is_private */ true,
113+
);
110114

111115
let reference = PrivateIdentifierReference::new(
112116
current_node_id,

crates/oxc_semantic/src/class/table.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,15 @@ impl<'a> ClassTable<'a> {
7878
self.declarations[class_id]
7979
}
8080

81-
pub fn get_element_ids(&self, class_id: ClassId, name: &str) -> Vec<ElementId> {
81+
pub fn get_element_ids(
82+
&self,
83+
class_id: ClassId,
84+
name: &str,
85+
is_private: bool,
86+
) -> Vec<ElementId> {
8287
let mut element_ids = vec![];
8388
for (element_id, element) in self.elements[class_id].iter_enumerated() {
84-
if element.name == name {
89+
if element.name == name && element.is_private == is_private {
8590
element_ids.push(element_id);
8691

8792
// Property or Accessor only has 1 element

0 commit comments

Comments
 (0)