diff --git a/crates/oxc_linter/src/rules/eslint/no_unused_private_class_members.rs b/crates/oxc_linter/src/rules/eslint/no_unused_private_class_members.rs index c285096caee6e..1bb49d91c4b27 100644 --- a/crates/oxc_linter/src/rules/eslint/no_unused_private_class_members.rs +++ b/crates/oxc_linter/src/rules/eslint/no_unused_private_class_members.rs @@ -295,6 +295,19 @@ fn test() { this.#x = 1; } }", + r"type Callback = () => Promise | T; + + export class Issue_11039 { + load: () => Promise; + + constructor(callback: Callback) { + this.load = () => this.#load(callback); + } + + async #load(callback: Callback) { + callback; + } + }", ]; let fail = vec![ diff --git a/crates/oxc_semantic/src/class/builder.rs b/crates/oxc_semantic/src/class/builder.rs index 2fd926e9cb7b6..e8e4bb4c2e114 100644 --- a/crates/oxc_semantic/src/class/builder.rs +++ b/crates/oxc_semantic/src/class/builder.rs @@ -106,7 +106,11 @@ impl<'a> ClassTableBuilder<'a> { if matches!(parent_kind, AstKind::PrivateInExpression(_) | AstKind::MemberExpression(_)) { if let Some(class_id) = self.current_class_id { - let element_ids = self.classes.get_element_ids(class_id, &ident.name); + let element_ids = self.classes.get_element_ids( + class_id, + &ident.name, + /* is_private */ true, + ); let reference = PrivateIdentifierReference::new( current_node_id, diff --git a/crates/oxc_semantic/src/class/table.rs b/crates/oxc_semantic/src/class/table.rs index 4776579b8de49..ee96a6a45ff6d 100644 --- a/crates/oxc_semantic/src/class/table.rs +++ b/crates/oxc_semantic/src/class/table.rs @@ -78,10 +78,15 @@ impl<'a> ClassTable<'a> { self.declarations[class_id] } - pub fn get_element_ids(&self, class_id: ClassId, name: &str) -> Vec { + pub fn get_element_ids( + &self, + class_id: ClassId, + name: &str, + is_private: bool, + ) -> Vec { let mut element_ids = vec![]; for (element_id, element) in self.elements[class_id].iter_enumerated() { - if element.name == name { + if element.name == name && element.is_private == is_private { element_ids.push(element_id); // Property or Accessor only has 1 element