refactor(parser): use function instead of trait to parse list with rest element (#4028)

closes #3887
This commit is contained in:
Boshen 2024-07-02 13:43:14 +00:00
parent 6254a4106f
commit 243c9f35b0
12 changed files with 395 additions and 396 deletions

View file

@ -1,8 +1,9 @@
//! Code related to navigating `Token`s from the lexer //! Code related to navigating `Token`s from the lexer
use oxc_allocator::Vec;
use oxc_ast::ast::{Decorator, RegExpFlags}; use oxc_ast::ast::{Decorator, RegExpFlags};
use oxc_diagnostics::Result; use oxc_diagnostics::Result;
use oxc_span::Span; use oxc_span::{GetSpan, Span};
use crate::{ use crate::{
diagnostics, diagnostics,
@ -330,7 +331,7 @@ impl<'a> ParserImpl<'a> {
result result
} }
pub(crate) fn consume_decorators(&mut self) -> oxc_allocator::Vec<'a, Decorator<'a>> { pub(crate) fn consume_decorators(&mut self) -> Vec<'a, Decorator<'a>> {
let decorators = std::mem::take(&mut self.state.decorators); let decorators = std::mem::take(&mut self.state.decorators);
self.ast.new_vec_from_iter(decorators) self.ast.new_vec_from_iter(decorators)
} }
@ -340,7 +341,7 @@ impl<'a> ParserImpl<'a> {
open: Kind, open: Kind,
close: Kind, close: Kind,
f: F, f: F,
) -> Result<oxc_allocator::Vec<'a, T>> ) -> Result<Vec<'a, T>>
where where
F: Fn(&mut Self) -> Result<Option<T>>, F: Fn(&mut Self) -> Result<Option<T>>,
{ {
@ -367,7 +368,7 @@ impl<'a> ParserImpl<'a> {
separator: Kind, separator: Kind,
trailing_separator: bool, trailing_separator: bool,
f: F, f: F,
) -> Result<oxc_allocator::Vec<'a, T>> ) -> Result<Vec<'a, T>>
where where
F: Fn(&mut Self) -> Result<T>, F: Fn(&mut Self) -> Result<T>,
{ {
@ -393,4 +394,43 @@ impl<'a> ParserImpl<'a> {
} }
Ok(list) Ok(list)
} }
pub(crate) fn parse_delimited_list_with_rest<E, R, A, B>(
&mut self,
close: Kind,
parse_element: E,
parse_rest: R,
) -> Result<(Vec<'a, A>, Option<B>)>
where
E: Fn(&mut Self) -> Result<A>,
R: Fn(&mut Self) -> Result<B>,
B: GetSpan,
{
let mut list = self.ast.new_vec();
let mut rest = None;
let mut first = true;
loop {
let kind = self.cur_kind();
if kind == close || kind == Kind::Eof {
break;
}
if first {
first = false;
} else {
self.expect(Kind::Comma)?;
if self.at(close) {
break;
}
}
if self.at(Kind::Dot3) {
if let Some(r) = rest.replace(parse_rest(self)?) {
self.error(diagnostics::binding_rest_element_last(r.span()));
}
} else {
list.push(parse_element(self)?);
}
}
Ok((list, rest))
}
} }

View file

@ -1,10 +1,8 @@
use oxc_allocator::Box;
use oxc_ast::ast::*; use oxc_ast::ast::*;
use oxc_diagnostics::Result; use oxc_diagnostics::Result;
use oxc_span::Span; use oxc_span::{GetSpan, Span};
use super::list::{ArrayPatternList, ObjectPatternProperties}; use crate::{diagnostics, lexer::Kind, Context, ParserImpl};
use crate::{diagnostics, lexer::Kind, list::SeparatedList, Context, ParserImpl};
impl<'a> ParserImpl<'a> { impl<'a> ParserImpl<'a> {
/// `BindingElement` /// `BindingElement`
@ -46,19 +44,60 @@ impl<'a> ParserImpl<'a> {
/// Section 14.3.3 Object Binding Pattern /// Section 14.3.3 Object Binding Pattern
fn parse_object_binding_pattern(&mut self) -> Result<BindingPatternKind<'a>> { fn parse_object_binding_pattern(&mut self) -> Result<BindingPatternKind<'a>> {
let span = self.start_span(); let span = self.start_span();
let props = ObjectPatternProperties::parse(self)?; self.expect(Kind::LCurly)?;
Ok(self.ast.object_pattern(self.end_span(span), props.elements, props.rest)) let (list, rest) = self.parse_delimited_list_with_rest(
Kind::RCurly,
Self::parse_binding_property,
Self::parse_rest_binding,
)?;
if let Some(rest) = &rest {
if !matches!(&rest.argument.kind, BindingPatternKind::BindingIdentifier(_)) {
return Err(diagnostics::invalid_binding_rest_element(rest.argument.span()));
}
}
self.expect(Kind::RCurly)?;
Ok(self.ast.object_pattern(self.end_span(span), list, rest.map(|r| self.ast.alloc(r))))
} }
/// Section 14.3.3 Array Binding Pattern /// Section 14.3.3 Array Binding Pattern
fn parse_array_binding_pattern(&mut self) -> Result<BindingPatternKind<'a>> { fn parse_array_binding_pattern(&mut self) -> Result<BindingPatternKind<'a>> {
let span = self.start_span(); let span = self.start_span();
let list = ArrayPatternList::parse(self)?; self.expect(Kind::LBrack)?;
Ok(self.ast.array_pattern(self.end_span(span), list.elements, list.rest)) let (list, rest) = self.parse_delimited_list_with_rest(
Kind::RBrack,
Self::parse_array_binding_element,
Self::parse_rest_binding,
)?;
self.expect(Kind::RBrack)?;
Ok(self.ast.array_pattern(self.end_span(span), list, rest.map(|r| self.ast.alloc(r))))
}
fn parse_array_binding_element(&mut self) -> Result<Option<BindingPattern<'a>>> {
if self.at(Kind::Comma) {
Ok(None)
} else {
self.parse_binding_pattern_with_initializer().map(Some)
}
}
fn parse_rest_binding(&mut self) -> Result<BindingRestElement<'a>> {
// self.eat_decorators()?;
let elem = self.parse_rest_element()?;
if self.at(Kind::Comma) {
if matches!(self.peek_kind(), Kind::RCurly | Kind::RBrack) {
let span = self.cur_token().span();
self.bump_any();
self.error(diagnostics::binding_rest_element_trailing_comma(span));
}
if !self.ctx.has_ambient() {
self.error(diagnostics::binding_rest_element_last(elem.span));
}
}
Ok(elem)
} }
/// Section 14.3.3 Binding Rest Property /// Section 14.3.3 Binding Rest Property
pub(super) fn parse_rest_element(&mut self) -> Result<Box<'a, BindingRestElement<'a>>> { pub(super) fn parse_rest_element(&mut self) -> Result<BindingRestElement<'a>> {
let span = self.start_span(); let span = self.start_span();
self.bump_any(); // advance `...` self.bump_any(); // advance `...`
let init_span = self.start_span(); let init_span = self.start_span();
@ -73,22 +112,12 @@ impl<'a> ParserImpl<'a> {
// The span is not extended to its type_annotation // The span is not extended to its type_annotation
let type_annotation = self.parse_ts_type_annotation()?; let type_annotation = self.parse_ts_type_annotation()?;
let pattern = self.ast.binding_pattern(kind, type_annotation, false); let pattern = self.ast.binding_pattern(kind, type_annotation, false);
// Rest element does not allow `= initializer`, . // Rest element does not allow `= initializer`
let argument = self let argument = self
.context(Context::In, Context::empty(), |p| p.parse_initializer(init_span, pattern))?; .context(Context::In, Context::empty(), |p| p.parse_initializer(init_span, pattern))?;
let span = self.end_span(span); let span = self.end_span(span);
if self.at(Kind::Comma) { Ok(BindingRestElement { span, argument })
if self.peek_at(Kind::RBrack) {
self.error(diagnostics::binding_rest_element_trailing_comma(
self.cur_token().span(),
));
} else if !self.ctx.has_ambient() {
self.error(diagnostics::binding_rest_element_last(span));
}
}
Ok(self.ast.rest_element(span, argument))
} }
/// `BindingProperty`[Yield, Await] : /// `BindingProperty`[Yield, Await] :

View file

@ -5,11 +5,10 @@ use oxc_ast::ast::*;
use oxc_diagnostics::Result; use oxc_diagnostics::Result;
use oxc_span::Span; use oxc_span::Span;
use super::{list::FormalParameterList, FunctionKind}; use super::FunctionKind;
use crate::{ use crate::{
diagnostics, diagnostics,
lexer::Kind, lexer::Kind,
list::SeparatedList,
modifiers::{ModifierFlags, ModifierKind, Modifiers}, modifiers::{ModifierFlags, ModifierKind, Modifiers},
Context, ParserImpl, StatementContext, Context, ParserImpl, StatementContext,
}; };
@ -49,13 +48,74 @@ impl<'a> ParserImpl<'a> {
params_kind: FormalParameterKind, params_kind: FormalParameterKind,
) -> Result<(Option<TSThisParameter<'a>>, Box<'a, FormalParameters<'a>>)> { ) -> Result<(Option<TSThisParameter<'a>>, Box<'a, FormalParameters<'a>>)> {
let span = self.start_span(); let span = self.start_span();
let list: FormalParameterList<'_> = FormalParameterList::parse(self)?; self.expect(Kind::LParen)?;
let formal_parameters = let this_param = if self.ts_enabled() && self.at(Kind::This) {
self.ast.formal_parameters(self.end_span(span), params_kind, list.elements, list.rest); let param = self.parse_ts_this_parameter()?;
let this_param = list.this_param; if !self.at(Kind::RParen) {
self.expect(Kind::Comma)?;
}
Some(param)
} else {
None
};
let (list, rest) = self.parse_delimited_list_with_rest(
Kind::RParen,
Self::parse_formal_parameter,
Self::parse_rest_parameter,
)?;
self.expect(Kind::RParen)?;
let formal_parameters = self.ast.formal_parameters(
self.end_span(span),
params_kind,
list,
rest.map(|r| self.ast.alloc(r)),
);
Ok((this_param, formal_parameters)) Ok((this_param, formal_parameters))
} }
fn parse_parameter_modifiers(&mut self) -> Modifiers<'a> {
let modifiers = self.parse_class_element_modifiers(true);
self.verify_modifiers(
&modifiers,
ModifierFlags::ACCESSIBILITY
.union(ModifierFlags::READONLY)
.union(ModifierFlags::OVERRIDE),
diagnostics::cannot_appear_on_a_parameter,
);
modifiers
}
fn parse_formal_parameter(&mut self) -> Result<FormalParameter<'a>> {
let span = self.start_span();
self.eat_decorators()?;
let modifiers = self.parse_parameter_modifiers();
let pattern = self.parse_binding_pattern_with_initializer()?;
let decorators = self.consume_decorators();
Ok(self.ast.formal_parameter(
self.end_span(span),
pattern,
modifiers.accessibility(),
modifiers.contains_readonly(),
modifiers.contains_override(),
decorators,
))
}
fn parse_rest_parameter(&mut self) -> Result<BindingRestElement<'a>> {
let element = self.parse_rest_element()?;
if self.at(Kind::Comma) {
if matches!(self.peek_kind(), Kind::RCurly | Kind::RBrack) {
let span = self.cur_token().span();
self.bump_any();
self.error(diagnostics::binding_rest_element_trailing_comma(span));
}
if !self.ctx.has_ambient() {
self.error(diagnostics::rest_parameter_last(element.span));
}
}
Ok(element)
}
pub(crate) fn parse_function( pub(crate) fn parse_function(
&mut self, &mut self,
span: Span, span: Span,

View file

@ -1,148 +0,0 @@
use oxc_allocator::Vec;
use oxc_ast::ast::*;
use oxc_diagnostics::Result;
use oxc_span::GetSpan;
use crate::{diagnostics, lexer::Kind, list::SeparatedList, modifiers::ModifierFlags, ParserImpl};
/// ObjectPattern.properties
pub struct ObjectPatternProperties<'a> {
pub elements: Vec<'a, BindingProperty<'a>>,
pub rest: Option<oxc_allocator::Box<'a, BindingRestElement<'a>>>,
}
impl<'a> SeparatedList<'a> for ObjectPatternProperties<'a> {
fn new(p: &ParserImpl<'a>) -> Self {
Self { elements: p.ast.new_vec(), rest: None }
}
fn open(&self) -> Kind {
Kind::LCurly
}
fn close(&self) -> Kind {
Kind::RCurly
}
fn parse_element(&mut self, p: &mut ParserImpl<'a>) -> Result<()> {
if p.cur_kind() == Kind::Dot3 {
let rest = p.parse_rest_element()?;
if !matches!(&rest.argument.kind, BindingPatternKind::BindingIdentifier(_)) {
p.error(diagnostics::invalid_binding_rest_element(rest.argument.span()));
}
if let Some(r) = self.rest.replace(rest) {
p.error(diagnostics::binding_rest_element_last(r.span));
}
} else {
let prop = p.parse_binding_property()?;
self.elements.push(prop);
}
Ok(())
}
}
/// ArrayPattern.elements
pub struct ArrayPatternList<'a> {
pub elements: Vec<'a, Option<BindingPattern<'a>>>,
pub rest: Option<oxc_allocator::Box<'a, BindingRestElement<'a>>>,
}
impl<'a> SeparatedList<'a> for ArrayPatternList<'a> {
fn new(p: &ParserImpl<'a>) -> Self {
Self { elements: p.ast.new_vec(), rest: None }
}
fn open(&self) -> Kind {
Kind::LBrack
}
fn close(&self) -> Kind {
Kind::RBrack
}
fn parse_element(&mut self, p: &mut ParserImpl<'a>) -> Result<()> {
match p.cur_kind() {
Kind::Comma => {
self.elements.push(None);
}
Kind::Dot3 => {
let rest = p.parse_rest_element()?;
if let Some(r) = self.rest.replace(rest) {
p.error(diagnostics::binding_rest_element_last(r.span));
}
}
_ => {
let element = p.parse_binding_pattern_with_initializer()?;
self.elements.push(Some(element));
}
}
Ok(())
}
}
/// Function Parameters
pub struct FormalParameterList<'a> {
pub elements: Vec<'a, FormalParameter<'a>>,
pub rest: Option<oxc_allocator::Box<'a, BindingRestElement<'a>>>,
pub this_param: Option<TSThisParameter<'a>>,
}
impl<'a> SeparatedList<'a> for FormalParameterList<'a> {
fn new(p: &ParserImpl<'a>) -> Self {
Self { elements: p.ast.new_vec(), rest: None, this_param: None }
}
fn open(&self) -> Kind {
Kind::LParen
}
fn close(&self) -> Kind {
Kind::RParen
}
// Section 15.1 Parameter Lists
fn parse_element(&mut self, p: &mut ParserImpl<'a>) -> Result<()> {
let span = p.start_span();
p.eat_decorators()?;
let modifiers = p.parse_class_element_modifiers(true);
let accessibility = modifiers.accessibility();
let readonly = modifiers.contains_readonly();
let r#override = modifiers.contains_override();
p.verify_modifiers(
&modifiers,
ModifierFlags::ACCESSIBILITY
.union(ModifierFlags::READONLY)
.union(ModifierFlags::OVERRIDE),
diagnostics::cannot_appear_on_a_parameter,
);
match p.cur_kind() {
Kind::This if p.ts_enabled() => {
let this_parameter = p.parse_ts_this_parameter()?;
self.this_param.replace(this_parameter);
}
Kind::Dot3 => {
let rest = p.parse_rest_element()?;
if let Some(r) = self.rest.replace(rest) {
p.error(diagnostics::rest_parameter_last(r.span));
}
}
_ => {
let pattern = p.parse_binding_pattern_with_initializer()?;
let decorators = p.consume_decorators();
let formal_parameter = p.ast.formal_parameter(
p.end_span(span),
pattern,
accessibility,
readonly,
r#override,
decorators,
);
self.elements.push(formal_parameter);
}
}
Ok(())
}
}

View file

@ -3,7 +3,6 @@
#![allow(clippy::missing_errors_doc)] #![allow(clippy::missing_errors_doc)]
mod grammar; mod grammar;
pub mod list;
mod arrow; mod arrow;
mod binding; mod binding;

View file

@ -63,7 +63,6 @@
mod context; mod context;
mod cursor; mod cursor;
mod list;
mod modifiers; mod modifiers;
mod state; mod state;

View file

@ -1,49 +0,0 @@
use oxc_diagnostics::Result;
use crate::{lexer::Kind, ParserImpl};
pub trait SeparatedList<'a>: Sized {
fn new(p: &ParserImpl<'a>) -> Self;
fn parse(p: &mut ParserImpl<'a>) -> Result<Self> {
let mut list = Self::new(p);
list.parse_list(p)?;
Ok(list)
}
/// Open element, e.g.. `{` `[` `(`
fn open(&self) -> Kind;
/// Close element, e.g.. `}` `]` `)`
fn close(&self) -> Kind;
/// Separator element, e.g. `,`
fn separator(&self) -> Kind {
Kind::Comma
}
fn parse_element(&mut self, p: &mut ParserImpl<'a>) -> Result<()>;
/// Main entry point, parse the list
fn parse_list(&mut self, p: &mut ParserImpl<'a>) -> Result<()> {
p.expect(self.open())?;
let mut first = true;
while !p.at(self.close()) && !p.at(Kind::Eof) {
if first {
first = false;
} else {
p.expect(self.separator())?;
if p.at(self.close()) {
break;
}
}
self.parse_element(p)?;
}
p.expect(self.close())?;
Ok(())
}
}

View file

@ -439,12 +439,12 @@ impl<'a> ParserImpl<'a> {
pub(crate) fn parse_ts_this_parameter(&mut self) -> Result<TSThisParameter<'a>> { pub(crate) fn parse_ts_this_parameter(&mut self) -> Result<TSThisParameter<'a>> {
let span = self.start_span(); let span = self.start_span();
self.parse_class_element_modifiers(true);
self.eat_decorators()?;
let this = { let this = {
let (span, name) = self.parse_identifier_kind(Kind::This); let (span, name) = self.parse_identifier_kind(Kind::This);
IdentifierName { span, name } IdentifierName { span, name }
}; };
let type_annotation = self.parse_ts_type_annotation()?; let type_annotation = self.parse_ts_type_annotation()?;
Ok(self.ast.ts_this_parameter(self.end_span(span), this, type_annotation)) Ok(self.ast.ts_this_parameter(self.end_span(span), this, type_annotation))
} }

View file

@ -1439,7 +1439,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ─ · ─
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[core/uncategorised/396/input.js:1:12] ╭─[core/uncategorised/396/input.js:1:12]
1 │ function t(...rest, b) { } 1 │ function t(...rest, b) { }
· ─────── · ───────
@ -2289,7 +2289,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ─ · ─
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[core/uncategorised/555/input.js:3:5] ╭─[core/uncategorised/555/input.js:3:5]
2 │ first, 2 │ first,
3 │ ...second, 3 │ ...second,
@ -2321,7 +2321,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ──── · ────
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[es2015/arrow-functions/comma-after-rest-param/input.js:1:2] ╭─[es2015/arrow-functions/comma-after-rest-param/input.js:1:2]
1 │ (...rest,) => {} 1 │ (...rest,) => {}
· ─────── · ───────
@ -2383,7 +2383,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
╰──── ╰────
help: Try insert a semicolon here help: Try insert a semicolon here
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[es2015/arrow-functions/invalid-rest-in-params/input.js:3:5] ╭─[es2015/arrow-functions/invalid-rest-in-params/input.js:3:5]
2 │ first, 2 │ first,
3 │ ...second, 3 │ ...second,
@ -3984,7 +3984,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ─ · ─
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[es2015/uncategorised/277/input.js:1:15] ╭─[es2015/uncategorised/277/input.js:1:15]
1 │ function f(a, ...b, c) { } 1 │ function f(a, ...b, c) { }
· ──── · ────
@ -4011,7 +4011,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ╰── `a` has already been declared here · ╰── `a` has already been declared here
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[es2015/uncategorised/283/input.js:1:2] ╭─[es2015/uncategorised/283/input.js:1:2]
1 │ (...a, b) => {} 1 │ (...a, b) => {}
· ──── · ────
@ -5191,7 +5191,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
3 │ } 3 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[es2017/async-functions/params-invalid-rest-trailing-comma/input.js:1:8] ╭─[es2017/async-functions/params-invalid-rest-trailing-comma/input.js:1:8]
1 │ async (...a,) => {}; 1 │ async (...a,) => {};
· ──── · ────
@ -5441,6 +5441,12 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ──── · ────
╰──── ╰────
× Unexpected trailing comma after rest element
╭─[es2018/object-rest-spread/8/input.js:1:17]
1 │ let { x, y, ...z, } = obj;
· ─
╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[es2018/object-rest-spread/8/input.js:1:13] ╭─[es2018/object-rest-spread/8/input.js:1:13]
1 │ let { x, y, ...z, } = obj; 1 │ let { x, y, ...z, } = obj;
@ -6971,6 +6977,12 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ─ · ─
╰──── ╰────
× A rest element must be last in a destructuring pattern
╭─[esprima/es2015-array-binding-pattern/invalid-elision-after-rest/input.js:1:5]
1 │ ([a,...b,])=>0;
· ────
╰────
× Identifier `a` has already been declared × Identifier `a` has already been declared
╭─[esprima/es2015-array-pattern/dupe-param-1/input.js:2:13] ╭─[esprima/es2015-array-pattern/dupe-param-1/input.js:2:13]
1 │ "use strict"; 1 │ "use strict";
@ -7012,13 +7024,13 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
· ╰── `,` expected · ╰── `,` expected
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[esprima/es2015-arrow-function/arrow-with-multiple-rest/input.js:1:2] ╭─[esprima/es2015-arrow-function/arrow-with-multiple-rest/input.js:1:2]
1 │ (...a, ...b) => 0 1 │ (...a, ...b) => 0
· ──── · ────
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest element must be last in a destructuring pattern
╭─[esprima/es2015-arrow-function/arrow-with-multiple-rest/input.js:1:2] ╭─[esprima/es2015-arrow-function/arrow-with-multiple-rest/input.js:1:2]
1 │ (...a, ...b) => 0 1 │ (...a, ...b) => 0
· ──── · ────
@ -9574,7 +9586,7 @@ Expect to Parse: "typescript/types/const-type-parameters-babel-7/input.ts"
╰──── ╰────
help: Try insert a semicolon here help: Try insert a semicolon here
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[esprima/invalid-syntax/migrated_0258/input.js:1:15] ╭─[esprima/invalid-syntax/migrated_0258/input.js:1:15]
1 │ function f(a, ...b, c){} 1 │ function f(a, ...b, c){}
· ──── · ────

View file

@ -2126,7 +2126,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
131 │ }; 131 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/arrow-function/rest-params-trailing-comma-early-error.js:54:5] ╭─[language/expressions/arrow-function/rest-params-trailing-comma-early-error.js:54:5]
53 │ 53 │
54 │ 0, (...a,) => { 54 │ 0, (...a,) => {
@ -5392,7 +5392,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
123 │ }); 123 │ });
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/async-arrow-function/rest-params-trailing-comma-early-error.js:46:9] ╭─[language/expressions/async-arrow-function/rest-params-trailing-comma-early-error.js:46:9]
45 │ 45 │
46 │ (async (...a,) => { 46 │ (async (...a,) => {
@ -5651,7 +5651,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
109 │ }); 109 │ });
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/async-function/named-rest-params-trailing-comma-early-error.js:33:19] ╭─[language/expressions/async-function/named-rest-params-trailing-comma-early-error.js:33:19]
32 │ 32 │
33 │ (async function f(...a,) { 33 │ (async function f(...a,) {
@ -5701,7 +5701,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
109 │ }); 109 │ });
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/async-function/nameless-rest-params-trailing-comma-early-error.js:33:17] ╭─[language/expressions/async-function/nameless-rest-params-trailing-comma-early-error.js:33:17]
32 │ 32 │
33 │ (async function(...a,) { 33 │ (async function(...a,) {
@ -6275,7 +6275,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
112 │ }; 112 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/async-generator/named-rest-params-trailing-comma-early-error.js:36:22] ╭─[language/expressions/async-generator/named-rest-params-trailing-comma-early-error.js:36:22]
35 │ 35 │
36 │ 0, async function* g(...a,) { 36 │ 0, async function* g(...a,) {
@ -6405,7 +6405,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
112 │ }; 112 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/async-generator/rest-params-trailing-comma-early-error.js:36:20] ╭─[language/expressions/async-generator/rest-params-trailing-comma-early-error.js:36:20]
35 │ 35 │
36 │ 0, async function*(...a,) { 36 │ 0, async function*(...a,) {
@ -6656,7 +6656,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
136 │ } 136 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/async-gen-method/rest-params-trailing-comma-early-error.js:60:17] ╭─[language/expressions/class/async-gen-method/rest-params-trailing-comma-early-error.js:60:17]
59 │ 0, class { 59 │ 0, class {
60 │ async *method(...a,) { 60 │ async *method(...a,) {
@ -6876,7 +6876,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
136 │ } 136 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/async-gen-method-static/rest-params-trailing-comma-early-error.js:60:24] ╭─[language/expressions/class/async-gen-method-static/rest-params-trailing-comma-early-error.js:60:24]
59 │ 0, class { 59 │ 0, class {
60 │ static async *method(...a,) { 60 │ static async *method(...a,) {
@ -7096,7 +7096,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
134 │ } 134 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/async-method/rest-params-trailing-comma-early-error.js:57:23] ╭─[language/expressions/class/async-method/rest-params-trailing-comma-early-error.js:57:23]
56 │ var C = class { 56 │ var C = class {
57 │ static async method(...a,) { 57 │ static async method(...a,) {
@ -7210,7 +7210,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
134 │ } 134 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/async-method-static/rest-params-trailing-comma-early-error.js:57:23] ╭─[language/expressions/class/async-method-static/rest-params-trailing-comma-early-error.js:57:23]
56 │ var C = class { 56 │ var C = class {
57 │ static async method(...a,) { 57 │ static async method(...a,) {
@ -12223,7 +12223,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
157 │ } 157 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/gen-method/rest-params-trailing-comma-early-error.js:81:11] ╭─[language/expressions/class/gen-method/rest-params-trailing-comma-early-error.js:81:11]
80 │ 0, class { 80 │ 0, class {
81 │ *method(...a,) { 81 │ *method(...a,) {
@ -12388,7 +12388,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
157 │ } 157 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/gen-method-static/rest-params-trailing-comma-early-error.js:81:18] ╭─[language/expressions/class/gen-method-static/rest-params-trailing-comma-early-error.js:81:18]
80 │ 0, class { 80 │ 0, class {
81 │ static *method(...a,) { 81 │ static *method(...a,) {
@ -12551,7 +12551,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
153 │ } 153 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/method/rest-params-trailing-comma-early-error.js:76:10] ╭─[language/expressions/class/method/rest-params-trailing-comma-early-error.js:76:10]
75 │ 0, class { 75 │ 0, class {
76 │ method(...a,) { 76 │ method(...a,) {
@ -12609,7 +12609,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
153 │ } 153 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/class/method-static/rest-params-trailing-comma-early-error.js:76:17] ╭─[language/expressions/class/method-static/rest-params-trailing-comma-early-error.js:76:17]
75 │ 0, class { 75 │ 0, class {
76 │ static method(...a,) { 76 │ static method(...a,) {
@ -14122,7 +14122,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
132 │ }; 132 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/function/rest-params-trailing-comma-early-error.js:55:13] ╭─[language/expressions/function/rest-params-trailing-comma-early-error.js:55:13]
54 │ 54 │
55 │ 0, function(...a,) { 55 │ 0, function(...a,) {
@ -14390,7 +14390,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
133 │ }; 133 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/generators/rest-params-trailing-comma-early-error.js:57:14] ╭─[language/expressions/generators/rest-params-trailing-comma-early-error.js:57:14]
56 │ 56 │
57 │ 0, function*(...a,) { 57 │ 0, function*(...a,) {
@ -15439,7 +15439,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
117 │ } 117 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/object/method-definition/async-gen-meth-rest-params-trailing-comma-early-error.js:41:17] ╭─[language/expressions/object/method-definition/async-gen-meth-rest-params-trailing-comma-early-error.js:41:17]
40 │ 0, { 40 │ 0, {
41 │ async *method(...a,) { 41 │ async *method(...a,) {
@ -15603,7 +15603,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
110 │ } 110 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/object/method-definition/async-meth-rest-params-trailing-comma-early-error.js:34:17] ╭─[language/expressions/object/method-definition/async-meth-rest-params-trailing-comma-early-error.js:34:17]
33 │ ({ 33 │ ({
34 │ async *method(...a,) { 34 │ async *method(...a,) {
@ -15811,7 +15811,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
139 │ } 139 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/object/method-definition/gen-meth-rest-params-trailing-comma-early-error.js:63:11] ╭─[language/expressions/object/method-definition/gen-meth-rest-params-trailing-comma-early-error.js:63:11]
62 │ 0, { 62 │ 0, {
63 │ *method(...a,) { 63 │ *method(...a,) {
@ -16032,7 +16032,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
135 │ } 135 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/expressions/object/method-definition/meth-rest-params-trailing-comma-early-error.js:58:10] ╭─[language/expressions/object/method-definition/meth-rest-params-trailing-comma-early-error.js:58:10]
57 │ 0, { 57 │ 0, {
58 │ method(...a,) { 58 │ method(...a,) {
@ -20955,7 +20955,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
╰──── ╰────
help: Try insert a semicolon here help: Try insert a semicolon here
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/rest-parameters/position-invalid.js:13:15] ╭─[language/rest-parameters/position-invalid.js:13:15]
12 │ $DONOTEVALUATE(); 12 │ $DONOTEVALUATE();
13 │ function f(a, ...b, c) {} 13 │ function f(a, ...b, c) {}
@ -21189,7 +21189,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
109 │ } 109 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/async-function/rest-params-trailing-comma-early-error.js:33:18] ╭─[language/statements/async-function/rest-params-trailing-comma-early-error.js:33:18]
32 │ 32 │
33 │ async function f(...a,) { 33 │ async function f(...a,) {
@ -21406,7 +21406,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
112 │ } 112 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/async-generator/rest-params-trailing-comma-early-error.js:36:19] ╭─[language/statements/async-generator/rest-params-trailing-comma-early-error.js:36:19]
35 │ 35 │
36 │ async function* f(...a,) { 36 │ async function* f(...a,) {
@ -21859,7 +21859,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
135 │ } 135 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/async-gen-method/rest-params-trailing-comma-early-error.js:59:17] ╭─[language/statements/class/async-gen-method/rest-params-trailing-comma-early-error.js:59:17]
58 │ class C { 58 │ class C {
59 │ async *method(...a,) { 59 │ async *method(...a,) {
@ -22079,7 +22079,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
136 │ } 136 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/async-gen-method-static/rest-params-trailing-comma-early-error.js:60:24] ╭─[language/statements/class/async-gen-method-static/rest-params-trailing-comma-early-error.js:60:24]
59 │ class C { 59 │ class C {
60 │ static async *method(...a,) { 60 │ static async *method(...a,) {
@ -22307,7 +22307,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
134 │ } 134 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/async-method/rest-params-trailing-comma-early-error.js:57:16] ╭─[language/statements/class/async-method/rest-params-trailing-comma-early-error.js:57:16]
56 │ class C { 56 │ class C {
57 │ async method(...a,) { 57 │ async method(...a,) {
@ -22421,7 +22421,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
133 │ } 133 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/async-method-static/rest-params-trailing-comma-early-error.js:56:23] ╭─[language/statements/class/async-method-static/rest-params-trailing-comma-early-error.js:56:23]
55 │ class C { 55 │ class C {
56 │ static async method(...a,) { 56 │ static async method(...a,) {
@ -27645,7 +27645,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
155 │ } 155 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/gen-method/rest-params-trailing-comma-early-error.js:79:11] ╭─[language/statements/class/gen-method/rest-params-trailing-comma-early-error.js:79:11]
78 │ class C { 78 │ class C {
79 │ *method(...a,) { 79 │ *method(...a,) {
@ -27810,7 +27810,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
155 │ } 155 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/gen-method-static/rest-params-trailing-comma-early-error.js:79:18] ╭─[language/statements/class/gen-method-static/rest-params-trailing-comma-early-error.js:79:18]
78 │ class C { 78 │ class C {
79 │ static *method(...a,) { 79 │ static *method(...a,) {
@ -27973,7 +27973,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
152 │ } 152 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/method/rest-params-trailing-comma-early-error.js:75:10] ╭─[language/statements/class/method/rest-params-trailing-comma-early-error.js:75:10]
74 │ class C { 74 │ class C {
75 │ method(...a,) { 75 │ method(...a,) {
@ -28031,7 +28031,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
152 │ } 152 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/class/method-static/rest-params-trailing-comma-early-error.js:75:17] ╭─[language/statements/class/method-static/rest-params-trailing-comma-early-error.js:75:17]
74 │ class C { 74 │ class C {
75 │ static method(...a,) { 75 │ static method(...a,) {
@ -31637,7 +31637,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
133 │ } 133 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/function/rest-params-trailing-comma-early-error.js:56:12] ╭─[language/statements/function/rest-params-trailing-comma-early-error.js:56:12]
55 │ 55 │
56 │ function f(...a,) { 56 │ function f(...a,) {
@ -31807,7 +31807,7 @@ Expect Syntax Error: "language/import/import-attributes/json-named-bindings.js"
133 │ } 133 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[language/statements/generators/rest-params-trailing-comma-early-error.js:57:13] ╭─[language/statements/generators/rest-params-trailing-comma-early-error.js:57:13]
56 │ 56 │
57 │ function* f(...a,) { 57 │ function* f(...a,) {

View file

@ -1,9 +1,9 @@
commit: d8086f14 commit: d8086f14
parser_typescript Summary: parser_typescript Summary:
AST Parsed : 5280/5283 (99.94%) AST Parsed : 5279/5283 (99.92%)
Positive Passed: 5273/5283 (99.81%) Positive Passed: 5272/5283 (99.79%)
Negative Passed: 1077/4875 (22.09%) Negative Passed: 1082/4875 (22.19%)
Expect Syntax Error: "compiler/ClassDeclaration10.ts" Expect Syntax Error: "compiler/ClassDeclaration10.ts"
Expect Syntax Error: "compiler/ClassDeclaration11.ts" Expect Syntax Error: "compiler/ClassDeclaration11.ts"
Expect Syntax Error: "compiler/ClassDeclaration13.ts" Expect Syntax Error: "compiler/ClassDeclaration13.ts"
@ -1510,7 +1510,6 @@ Expect Syntax Error: "compiler/reservedNameOnModuleImportWithInterface.ts"
Expect Syntax Error: "compiler/resolvingClassDeclarationWhenInBaseTypeResolution.ts" Expect Syntax Error: "compiler/resolvingClassDeclarationWhenInBaseTypeResolution.ts"
Expect Syntax Error: "compiler/restArgAssignmentCompat.ts" Expect Syntax Error: "compiler/restArgAssignmentCompat.ts"
Expect Syntax Error: "compiler/restInvalidArgumentType.ts" Expect Syntax Error: "compiler/restInvalidArgumentType.ts"
Expect Syntax Error: "compiler/restParamModifier2.ts"
Expect Syntax Error: "compiler/restParamsWithNonRestParams.ts" Expect Syntax Error: "compiler/restParamsWithNonRestParams.ts"
Expect Syntax Error: "compiler/restUnion3.ts" Expect Syntax Error: "compiler/restUnion3.ts"
Expect Syntax Error: "compiler/returnInConstructor1.ts" Expect Syntax Error: "compiler/returnInConstructor1.ts"
@ -1899,7 +1898,6 @@ Expect Syntax Error: "compiler/useBeforeDeclaration_propertyAssignment.ts"
Expect Syntax Error: "compiler/useBeforeDeclaration_superClass.ts" Expect Syntax Error: "compiler/useBeforeDeclaration_superClass.ts"
Expect Syntax Error: "compiler/useUnknownInCatchVariables01.ts" Expect Syntax Error: "compiler/useUnknownInCatchVariables01.ts"
Expect Syntax Error: "compiler/varAndFunctionShareName.ts" Expect Syntax Error: "compiler/varAndFunctionShareName.ts"
Expect Syntax Error: "compiler/varArgConstructorMemberParameter.ts"
Expect Syntax Error: "compiler/varBlock.ts" Expect Syntax Error: "compiler/varBlock.ts"
Expect Syntax Error: "compiler/varNameConflictsWithImportInDifferentPartOfModule.ts" Expect Syntax Error: "compiler/varNameConflictsWithImportInDifferentPartOfModule.ts"
Expect Syntax Error: "compiler/vararg.ts" Expect Syntax Error: "compiler/vararg.ts"
@ -2188,7 +2186,6 @@ Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethod
Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethod6.ts" Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethod6.ts"
Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethod8.ts" Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethod8.ts"
Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethodOverload1.ts" Expect Syntax Error: "conformance/decorators/class/method/decoratorOnClassMethodOverload1.ts"
Expect Syntax Error: "conformance/decorators/class/method/parameter/decoratorOnClassMethodThisParameter.ts"
Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty11.ts" Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty11.ts"
Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty6.ts" Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty6.ts"
Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty7.ts" Expect Syntax Error: "conformance/decorators/class/property/decoratorOnClassProperty7.ts"
@ -2196,7 +2193,6 @@ Expect Syntax Error: "conformance/decorators/decoratorCallGeneric.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnEnum.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnEnum.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnFunctionDeclaration.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnFunctionDeclaration.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnFunctionExpression.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnFunctionExpression.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnFunctionParameter.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnImportEquals1.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnImportEquals1.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnInterface.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnInterface.ts"
Expect Syntax Error: "conformance/decorators/invalid/decoratorOnInternalModule.ts" Expect Syntax Error: "conformance/decorators/invalid/decoratorOnInternalModule.ts"
@ -3175,7 +3171,6 @@ Expect Syntax Error: "conformance/parser/ecmascript5/Protected/Protected7.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RealWorld/parserindenter.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RealWorld/parserindenter.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509534.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509534.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509618.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509618.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509668.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509693.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509693.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509698.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser509698.ts"
Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser536727.ts" Expect Syntax Error: "conformance/parser/ecmascript5/RegressionTests/parser536727.ts"
@ -3818,6 +3813,15 @@ Expect to Parse: "compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts"
· ──── · ────
24 │ const enum H {} 24 │ const enum H {}
╰──── ╰────
Expect to Parse: "compiler/sourceMapValidationDecorators.ts"
× Unexpected token
╭─[compiler/sourceMapValidationDecorators.ts:18:7]
17 │ @ParameterDecorator2(30)
18 │ ...b: string[]) {
· ───
19 │ }
╰────
Expect to Parse: "compiler/withStatementInternalComments.ts" Expect to Parse: "compiler/withStatementInternalComments.ts"
× 'with' statements are not allowed × 'with' statements are not allowed
@ -8995,7 +8999,15 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
3 │ } 3 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × Unexpected token
╭─[compiler/restParamModifier2.ts:2:24]
1 │ class C {
2 │ constructor(public ...rest: string[]) {}
· ───
3 │ }
╰────
× A rest parameter must be last in a parameter list
╭─[compiler/restParameterNotLast.ts:1:12] ╭─[compiler/restParameterNotLast.ts:1:12]
1 │ function f(...x, y) { } 1 │ function f(...x, y) { }
· ──── · ────
@ -10530,6 +10542,14 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
help: Try insert a semicolon here help: Try insert a semicolon here
× Unexpected token
╭─[compiler/varArgConstructorMemberParameter.ts:10:25]
9 │ class Foo3 {
10 │ constructor (public ...args: string[]) { }
· ───
11 │ }
╰────
× Unexpected token × Unexpected token
╭─[compiler/varArgWithNoParamName.ts:1:16] ╭─[compiler/varArgWithNoParamName.ts:1:16]
1 │ function t1(...) {} 1 │ function t1(...) {}
@ -12553,6 +12573,14 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
6 │ } 6 │ }
╰──── ╰────
× Unexpected token
╭─[conformance/decorators/class/method/parameter/decoratorOnClassMethodThisParameter.ts:4:17]
3 │ class C {
4 │ method(@dec this: C) {}
· ────
5 │ }
╰────
× Expected a semicolon or an implicit semicolon after a statement, but found none × Expected a semicolon or an implicit semicolon after a statement, but found none
╭─[conformance/decorators/class/property/decoratorOnClassProperty3.ts:4:11] ╭─[conformance/decorators/class/property/decoratorOnClassProperty3.ts:4:11]
3 │ class C { 3 │ class C {
@ -12586,6 +12614,14 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
5 │ } 5 │ }
╰──── ╰────
× Unexpected token
╭─[conformance/decorators/invalid/decoratorOnFunctionParameter.ts:5:22]
4 │
5 │ function direct(@dec this: C) { return this.n; }
· ────
6 │ function called(@dec() this: C) { return this.n; }
╰────
× Unexpected token × Unexpected token
╭─[conformance/dynamicImport/importCallExpressionGrammarError.ts:5:8] ╭─[conformance/dynamicImport/importCallExpressionGrammarError.ts:5:8]
4 │ var a = ["./0"]; 4 │ var a = ["./0"];
@ -13004,12 +13040,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
15 │ function a4(...b = [1,2,3]) { } // Error, can't have initializer 15 │ function a4(...b = [1,2,3]) { } // Error, can't have initializer
╰──── ╰────
× A rest parameter cannot have an initializer × Unexpected token
╭─[conformance/es6/destructuring/destructuringParameterDeclaration4.ts:15:16] ╭─[conformance/es6/destructuring/destructuringParameterDeclaration4.ts:29:24]
14 │ function a3(...b?) { } // Error, can't be optional 28 │ class C {
15 │ function a4(...b = [1,2,3]) { } // Error, can't have initializer 29 │ constructor(public ...temp) { } // Error, rest parameter can't have properties
· ─────────── · ───
16 │ function a5([a, b, [[c]]]) { } 30 │ }
╰──── ╰────
× Expected `:` but found `}` × Expected `:` but found `}`
@ -15528,6 +15564,21 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
2 │ const {...b,} = {}; 2 │ const {...b,} = {};
╰──── ╰────
× A rest element must be last in a destructuring pattern
╭─[conformance/es7/trailingCommasInBindingPatterns.ts:1:8]
1 │ const [...a,] = [];
· ────
2 │ const {...b,} = {};
╰────
× Unexpected trailing comma after rest element
╭─[conformance/es7/trailingCommasInBindingPatterns.ts:2:12]
1 │ const [...a,] = [];
2 │ const {...b,} = {};
· ─
3 │ let c, d;
╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/es7/trailingCommasInBindingPatterns.ts:2:8] ╭─[conformance/es7/trailingCommasInBindingPatterns.ts:2:8]
1 │ const [...a,] = []; 1 │ const [...a,] = [];
@ -15544,7 +15595,7 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
5 │ ({...d,} = {}); 5 │ ({...d,} = {});
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[conformance/es7/trailingCommasInFunctionParametersAndArguments.ts:5:13] ╭─[conformance/es7/trailingCommasInFunctionParametersAndArguments.ts:5:13]
4 │ 4 │
5 │ function f2(...args,) {} 5 │ function f2(...args,) {}
@ -16214,7 +16265,7 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
12 │ } 12 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[conformance/functions/functionOverloadErrorsSyntax.ts:9:25] ╭─[conformance/functions/functionOverloadErrorsSyntax.ts:9:25]
8 │ //Function overload signature with rest param followed by non-optional parameter 8 │ //Function overload signature with rest param followed by non-optional parameter
9 │ function fn5(x: string, ...y: any[], z: string); 9 │ function fn5(x: string, ...y: any[], z: string);
@ -17888,7 +17939,7 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
4 │ }; 4 │ };
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest parameter must be last in a parameter list
╭─[conformance/parser/ecmascript5/ParameterLists/parserParameterList1.ts:2:6] ╭─[conformance/parser/ecmascript5/ParameterLists/parserParameterList1.ts:2:6]
1 │ class C { 1 │ class C {
2 │ F(...A, B) { } 2 │ F(...A, B) { }
@ -17995,6 +18046,14 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
5 │ 5 │
╰──── ╰────
× Unexpected token
╭─[conformance/parser/ecmascript5/RegressionTests/parser509668.ts:3:23]
2 │ // Doesn't work, but should
3 │ constructor (public ...args: string[]) { }
· ───
4 │ }
╰────
× Empty parenthesized expression × Empty parenthesized expression
╭─[conformance/parser/ecmascript5/RegressionTests/parser509669.ts:2:9] ╭─[conformance/parser/ecmascript5/RegressionTests/parser509669.ts:2:9]
1 │ function foo():any { 1 │ function foo():any {
@ -20586,14 +20645,6 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
36 │ } 36 │ }
╰──── ╰────
× A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:5:11]
4 │ var f = function foo(...x) { }
5 │ var f2 = (...x, ...y) => { }
· ────
6 │
╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:5:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:5:11]
4 │ var f = function foo(...x) { } 4 │ var f = function foo(...x) { }
@ -20603,12 +20654,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:5:11]
12 │ (...x); 4 │ var f = function foo(...x) { }
13 │ foo(...x, ...y); 5 │ var f2 = (...x, ...y) => { }
· ──── · ────
14 │ } 6 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:13:9]
@ -20619,11 +20670,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:23:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:13:9]
22 │ foo(...x) { }, 12 │ (...x);
23 │ a: function foo(...x, ...y) { }, 13 │ foo(...x, ...y);
· ──── · ────
24 │ b: (...x) => { } 14 │ }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20635,12 +20686,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:5:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParameterWithoutAnnotationIsAnyArray.ts:23:21]
4 │ var f = function foo(...x: number) { } 22 │ foo(...x) { },
5 │ var f2 = (...x: Date, ...y: boolean) => { } 23 │ a: function foo(...x, ...y) { },
· ────────── · ────
6 │ 24 │ b: (...x) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:5:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:5:11]
@ -20651,12 +20702,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:5:11]
12 │ (...x: string); 4 │ var f = function foo(...x: number) { }
13 │ foo(...x: number, ...y: number); 5 │ var f2 = (...x: Date, ...y: boolean) => { }
· ──────────── · ──────────
14 │ } 6 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:13:9]
@ -20667,11 +20718,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:23:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:13:9]
22 │ foo(...x: string) { }, 12 │ (...x: string);
23 │ a: function foo(...x: number, ...y: Date) { }, 13 │ foo(...x: number, ...y: number);
· ──────────── · ────────────
24 │ b: (...x: string) => { } 14 │ }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20683,11 +20734,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:9:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes.ts:23:21]
8 │ var f = function foo(...x: MyThing) { } 22 │ foo(...x: string) { },
9 │ var f2 = (...x: MyThing, ...y: MyThing) => { } 23 │ a: function foo(...x: number, ...y: Date) { },
· ──────────── · ────────────
10 │ 24 │ b: (...x: string) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20699,11 +20750,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:17:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:9:11]
16 │ (...x: MyThing); 8 │ var f = function foo(...x: MyThing) { }
17 │ foo(...x: MyThing, ...y: MyThing); 9 │ var f2 = (...x: MyThing, ...y: MyThing) => { }
· ───────────── · ─────────────
18 │ } 10 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20715,11 +20766,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:27:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:17:9]
26 │ foo(...x: MyThing) { }, 16 │ (...x: MyThing);
27 │ a: function foo(...x: MyThing, ...y: MyThing) { }, 17 │ foo(...x: MyThing, ...y: MyThing);
· ───────────── · ─────────────
28 │ b: (...x: MyThing) => { } 18 │ }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20731,11 +20782,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:36:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:27:21]
35 │ var f3 = function foo(...x: MyThing2<string>) { } 26 │ foo(...x: MyThing) { },
36 │ var f4 = (...x: MyThing2<string>, ...y: MyThing2<string>) => { } 27 │ a: function foo(...x: MyThing, ...y: MyThing) { },
· ────────────────────── · ─────────────
37 │ 28 │ b: (...x: MyThing) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20747,11 +20798,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:44:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:36:11]
43 │ (...x: MyThing2<string>); 35 │ var f3 = function foo(...x: MyThing2<string>) { }
44 │ foo(...x: MyThing2<string>, ...y: MyThing2<string>); 36 │ var f4 = (...x: MyThing2<string>, ...y: MyThing2<string>) => { }
· ────────────────────── · ──────────────────────
45 │ } 37 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20763,11 +20814,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:54:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:44:9]
53 │ foo(...x: MyThing2<string>) { }, 43 │ (...x: MyThing2<string>);
54 │ a: function foo(...x: MyThing2<string>, ...y: MyThing2<string>) { }, 44 │ foo(...x: MyThing2<string>, ...y: MyThing2<string>);
· ────────────────────── · ──────────────────────
55 │ b: (...x: MyThing2<string>) => { } 45 │ }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20779,12 +20830,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:5:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersOfNonArrayTypes2.ts:54:21]
4 │ var f = function foo(...x: number[]) { } 53 │ foo(...x: MyThing2<string>) { },
5 │ var f2 = (...x: number[], ...y: number[]) => { } 54 │ a: function foo(...x: MyThing2<string>, ...y: MyThing2<string>) { },
· ────────────── · ──────────────────────
6 │ 55 │ b: (...x: MyThing2<string>) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:5:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:5:11]
@ -20795,12 +20846,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:5:11]
12 │ (...x: number[]); 4 │ var f = function foo(...x: number[]) { }
13 │ foo(...x: number[], ...y: number[]); 5 │ var f2 = (...x: number[], ...y: number[]) => { }
· ────────────── · ──────────────
14 │ } 6 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:13:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:13:9]
@ -20811,11 +20862,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:23:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:13:9]
22 │ foo(...x: number[]) { }, 12 │ (...x: number[]);
23 │ a: function foo(...x: number[], ...y: number[]) { }, 13 │ foo(...x: number[], ...y: number[]);
· ────────────── · ──────────────
24 │ b: (...x: number[]) => { } 14 │ }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20827,11 +20878,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:32:11] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:23:21]
31 │ var f3 = function foo(...x: Array<string>) { } 22 │ foo(...x: number[]) { },
32 │ var f4 = (...x: Array<string>, ...y: Array<string>) => { } 23 │ a: function foo(...x: number[], ...y: number[]) { },
· ─────────────────── · ──────────────
33 │ 24 │ b: (...x: number[]) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20843,11 +20894,11 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:40:9] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:32:11]
39 │ (...x: Array<string>); 31 │ var f3 = function foo(...x: Array<string>) { }
40 │ foo(...x: Array<string>, ...y: Array<string>); 32 │ var f4 = (...x: Array<string>, ...y: Array<string>) => { }
· ─────────────────── · ───────────────────
41 │ } 33 │
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest parameter must be last in a parameter list
@ -20859,6 +20910,14 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
╰──── ╰────
× A rest element must be last in a destructuring pattern × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:40:9]
39 │ (...x: Array<string>);
40 │ foo(...x: Array<string>, ...y: Array<string>);
· ───────────────────
41 │ }
╰────
× A rest parameter must be last in a parameter list
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:50:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:50:21]
49 │ foo(...x: Array<string>) { }, 49 │ foo(...x: Array<string>) { },
50 │ a: function foo(...x: Array<string>, ...y: Array<string>) { }, 50 │ a: function foo(...x: Array<string>, ...y: Array<string>) { },
@ -20866,7 +20925,7 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
51 │ b: (...x: Array<string>) => { } 51 │ b: (...x: Array<string>) => { }
╰──── ╰────
× A rest parameter must be last in a parameter list × A rest element must be last in a destructuring pattern
╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:50:21] ╭─[conformance/types/objectTypeLiteral/callSignatures/restParametersWithArrayTypeAnnotations.ts:50:21]
49 │ foo(...x: Array<string>) { }, 49 │ foo(...x: Array<string>) { },
50 │ a: function foo(...x: Array<string>, ...y: Array<string>) { }, 50 │ a: function foo(...x: Array<string>, ...y: Array<string>) { },
@ -21020,13 +21079,12 @@ Expect to Parse: "conformance/salsa/plainJSRedeclare3.ts"
165 │ function notFirst(a: number, this: C): number { return this.n; } 165 │ function notFirst(a: number, this: C): number { return this.n; }
╰──── ╰────
× Expected `,` but found `this` × Unexpected token
╭─[conformance/types/thisType/thisTypeInFunctionsNegative.ts:168:26] ╭─[conformance/types/thisType/thisTypeInFunctionsNegative.ts:165:30]
167 │ ///// parse errors ///// 164 │ var thisConstructorType: new (this: number) => number;
168 │ function modifiers(async this: C): number { return this.n; } 165 │ function notFirst(a: number, this: C): number { return this.n; }
· ──┬─ · ────
· ╰── `,` expected 166 │
169 │ function restParam(...this: C): number { return this.n; }
╰──── ╰────
× Expected a semicolon or an implicit semicolon after a statement, but found none × Expected a semicolon or an implicit semicolon after a statement, but found none

View file

@ -2,7 +2,7 @@ commit: d8086f14
prettier_typescript Summary: prettier_typescript Summary:
AST Parsed : 5283/5283 (100.00%) AST Parsed : 5283/5283 (100.00%)
Positive Passed: 2447/5283 (46.32%) Positive Passed: 2448/5283 (46.34%)
Expect to Parse: "compiler/DeclarationErrorsNoEmitOnError.ts" Expect to Parse: "compiler/DeclarationErrorsNoEmitOnError.ts"
Expect to Parse: "compiler/abstractInterfaceIdentifierName.ts" Expect to Parse: "compiler/abstractInterfaceIdentifierName.ts"
Expect to Parse: "compiler/abstractPropertyBasics.ts" Expect to Parse: "compiler/abstractPropertyBasics.ts"
@ -1408,7 +1408,6 @@ Expect to Parse: "compiler/sourceMap-FileWithComments.ts"
Expect to Parse: "compiler/sourceMap-StringLiteralWithNewLine.ts" Expect to Parse: "compiler/sourceMap-StringLiteralWithNewLine.ts"
Expect to Parse: "compiler/sourceMapForFunctionInInternalModuleWithCommentPrecedingStatement01.ts" Expect to Parse: "compiler/sourceMapForFunctionInInternalModuleWithCommentPrecedingStatement01.ts"
Expect to Parse: "compiler/sourceMapValidationClasses.ts" Expect to Parse: "compiler/sourceMapValidationClasses.ts"
Expect to Parse: "compiler/sourceMapValidationDecorators.ts"
Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPattern.ts" Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPattern.ts"
Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPattern2.ts" Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPattern2.ts"
Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPatternDefaultValues.ts" Expect to Parse: "compiler/sourceMapValidationDestructuringForArrayBindingPatternDefaultValues.ts"