fix(ast): support FormalParameter.override (#2577)

This
[code](https://oxc-project.github.io/oxc/playground/?code=3YCAAIC1gICAgICAgICxG4jI43W9aqTWr3WzyA0TqSOjtB34F78iblvTQruFcqR6BUbbiLtWhj5rEL0NnFkDs4pF3dHiw39X7YCA)
can't be represented in the current OXC AST:

```ts
class Foo {
  constructor(override bar: string) {}
}
```
This commit is contained in:
Arnaud Barré 2024-03-03 07:41:42 +01:00 committed by GitHub
parent 78f30bc2db
commit 258b9b1c14
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 13 additions and 2 deletions

View file

@ -1799,6 +1799,7 @@ pub struct FormalParameter<'a> {
pub pattern: BindingPattern<'a>, pub pattern: BindingPattern<'a>,
pub accessibility: Option<TSAccessibility>, pub accessibility: Option<TSAccessibility>,
pub readonly: bool, pub readonly: bool,
pub r#override: bool,
pub decorators: Vec<'a, Decorator<'a>>, pub decorators: Vec<'a, Decorator<'a>>,
} }

View file

@ -796,9 +796,10 @@ impl<'a> AstBuilder<'a> {
pattern: BindingPattern<'a>, pattern: BindingPattern<'a>,
accessibility: Option<TSAccessibility>, accessibility: Option<TSAccessibility>,
readonly: bool, readonly: bool,
r#override: bool,
decorators: Vec<'a, Decorator<'a>>, decorators: Vec<'a, Decorator<'a>>,
) -> FormalParameter<'a> { ) -> FormalParameter<'a> {
FormalParameter { span, pattern, accessibility, readonly, decorators } FormalParameter { span, pattern, accessibility, readonly, r#override, decorators }
} }
pub fn ts_this_parameter( pub fn ts_this_parameter(

View file

@ -227,6 +227,7 @@ impl<'a> ParserImpl<'a> {
pattern, pattern,
None, None,
false, false,
false,
AstBuilder::new_vec(&self.ast), AstBuilder::new_vec(&self.ast),
); );
let params = self.ast.formal_parameters( let params = self.ast.formal_parameters(

View file

@ -258,6 +258,7 @@ impl<'a> SeparatedList<'a> for FormalParameterList<'a> {
let modifiers = p.parse_class_element_modifiers(true); let modifiers = p.parse_class_element_modifiers(true);
let accessibility = modifiers.accessibility(); let accessibility = modifiers.accessibility();
let readonly = modifiers.readonly(); let readonly = modifiers.readonly();
let r#override = modifiers.r#override();
match p.cur_kind() { match p.cur_kind() {
Kind::This if p.ts_enabled() => { Kind::This if p.ts_enabled() => {
@ -278,6 +279,7 @@ impl<'a> SeparatedList<'a> for FormalParameterList<'a> {
pattern, pattern,
accessibility, accessibility,
readonly, readonly,
r#override,
decorators, decorators,
); );
self.elements.push(formal_parameter); self.elements.push(formal_parameter);

View file

@ -96,6 +96,7 @@ enum Version {
#[default] #[default]
Year202305, Year202305,
} }
impl Version { impl Version {
fn is_legacy(self) -> bool { fn is_legacy(self) -> bool {
matches!(self, Self::Legacy) matches!(self, Self::Legacy)
@ -479,6 +480,7 @@ impl<'a> Decorators<'a> {
), ),
None, None,
false, false,
false,
self.ast.new_vec(), self.ast.new_vec(),
)), )),
None, None,
@ -555,6 +557,7 @@ impl<'a> Decorators<'a> {
), ),
None, None,
false, false,
false,
self.ast.new_vec(), self.ast.new_vec(),
)) ))
} else { } else {
@ -909,6 +912,7 @@ impl<'a> Decorators<'a> {
), ),
None, None,
false, false,
false,
self.ast.new_vec(), self.ast.new_vec(),
)); ));
let private_field = self.ast.private_field( let private_field = self.ast.private_field(
@ -959,6 +963,7 @@ impl<'a> Decorators<'a> {
), ),
None, None,
false, false,
false,
self.ast.new_vec(), self.ast.new_vec(),
)); ));

View file

@ -487,7 +487,7 @@ impl<'a> TypeScript<'a> {
let mut params = self.ast.new_vec(); let mut params = self.ast.new_vec();
// ((Foo) => { // ((Foo) => {
params.push(self.ast.formal_parameter(SPAN, id, None, false, self.ast.new_vec())); params.push(self.ast.formal_parameter(SPAN, id, None, false, false, self.ast.new_vec()));
let params = self.ast.formal_parameters( let params = self.ast.formal_parameters(
SPAN, SPAN,
@ -680,6 +680,7 @@ impl<'a> TypeScript<'a> {
), ),
None, None,
false, false,
false,
self.ast.new_vec(), self.ast.new_vec(),
)), )),
None, None,