mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
fix(isolated-declarations): false positive for class private method that has arguments without type annotations (#5964)
close: #5874
This commit is contained in:
parent
6a9e71da46
commit
6df82eee28
3 changed files with 58 additions and 23 deletions
|
|
@ -364,7 +364,6 @@ impl<'a> IsolatedDeclarations<'a> {
|
|||
if self.has_internal_annotation(method.span) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if !(method.r#type.is_abstract() || method.optional)
|
||||
&& method.value.body.is_none()
|
||||
{
|
||||
|
|
@ -384,37 +383,43 @@ impl<'a> IsolatedDeclarations<'a> {
|
|||
|
||||
let inferred_accessor_types = self.collect_inferred_accessor_types(decl);
|
||||
let function = &method.value;
|
||||
let params = if method.kind.is_set() {
|
||||
method.key.static_name().map_or_else(
|
||||
let params = match method.kind {
|
||||
MethodDefinitionKind::Set => method.key.static_name().map_or_else(
|
||||
|| self.transform_formal_parameters(&function.params),
|
||||
|n| {
|
||||
self.transform_set_accessor_params(
|
||||
&function.params,
|
||||
inferred_accessor_types.get(&self.ast.atom(&n)).map(|t| {
|
||||
inferred_accessor_types.get(&self.ast.atom(&n)).map(|t|
|
||||
// SAFETY: `ast.copy` is unsound! We need to fix.
|
||||
unsafe { self.ast.copy(t) }
|
||||
}),
|
||||
unsafe { self.ast.copy(t) }),
|
||||
)
|
||||
},
|
||||
)
|
||||
} else {
|
||||
self.transform_formal_parameters(&function.params)
|
||||
),
|
||||
MethodDefinitionKind::Constructor => {
|
||||
let params = self.transform_formal_parameters(&function.params);
|
||||
elements.splice(
|
||||
0..0,
|
||||
self.transform_constructor_params_to_class_properties(
|
||||
function, ¶ms,
|
||||
),
|
||||
);
|
||||
|
||||
if method.accessibility.is_some_and(TSAccessibility::is_private) {
|
||||
elements.push(self.transform_private_modifier_method(method));
|
||||
continue;
|
||||
}
|
||||
|
||||
params
|
||||
}
|
||||
_ => {
|
||||
if method.accessibility.is_some_and(TSAccessibility::is_private) {
|
||||
elements.push(self.transform_private_modifier_method(method));
|
||||
continue;
|
||||
}
|
||||
self.transform_formal_parameters(&function.params)
|
||||
}
|
||||
};
|
||||
|
||||
if let MethodDefinitionKind::Constructor = method.kind {
|
||||
elements.splice(
|
||||
0..0,
|
||||
self.transform_constructor_params_to_class_properties(
|
||||
function, ¶ms,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if method.accessibility.is_some_and(TSAccessibility::is_private) {
|
||||
elements.push(self.transform_private_modifier_method(method));
|
||||
continue;
|
||||
}
|
||||
|
||||
let return_type = match method.kind {
|
||||
MethodDefinitionKind::Method => {
|
||||
let rt = self.infer_function_return_type(function);
|
||||
|
|
|
|||
|
|
@ -53,4 +53,13 @@ export class Bux {
|
|||
export class PrivateFieldsWithConstructorAssignments {
|
||||
private second = 0;
|
||||
constructor(public first: number) {}
|
||||
}
|
||||
|
||||
|
||||
export class PrivateMethodClass {
|
||||
private good(a): void {}
|
||||
}
|
||||
|
||||
export class PublicMethodClass {
|
||||
public bad(a): void {}
|
||||
}
|
||||
|
|
@ -51,3 +51,24 @@ export declare class PrivateFieldsWithConstructorAssignments {
|
|||
private second;
|
||||
constructor(first: number);
|
||||
}
|
||||
export declare class PrivateMethodClass {
|
||||
private good;
|
||||
}
|
||||
export declare class PublicMethodClass {
|
||||
bad(a): void;
|
||||
}
|
||||
|
||||
|
||||
==================== Errors ====================
|
||||
|
||||
x TS9011: Parameter must have an explicit type annotation with
|
||||
| --isolatedDeclarations.
|
||||
,-[64:14]
|
||||
63 | export class PublicMethodClass {
|
||||
64 | public bad(a): void {}
|
||||
: ^
|
||||
65 | }
|
||||
`----
|
||||
|
||||
|
||||
```
|
||||
|
|
|
|||
Loading…
Reference in a new issue