From 19e77b0af3821f278f0b13d43ba92e89c42cd156 Mon Sep 17 00:00:00 2001 From: Boshen Date: Mon, 18 Dec 2023 17:03:42 +0800 Subject: [PATCH] fix(parser): false postive for "Missing initializer in const declaration" in declare + namespace (#1724) closes #1723 --- crates/oxc_parser/src/context.rs | 5 +++++ crates/oxc_parser/src/ts/statement.rs | 7 +------ tasks/coverage/parser_babel.snap | 11 +---------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/crates/oxc_parser/src/context.rs b/crates/oxc_parser/src/context.rs index 27562f913..1df29a1e8 100644 --- a/crates/oxc_parser/src/context.rs +++ b/crates/oxc_parser/src/context.rs @@ -89,6 +89,11 @@ impl Context { self.union_if(Self::Await, include) } + #[inline] + pub(crate) fn union_ambient_if(self, include: bool) -> Self { + self.union_if(Self::Ambient, include) + } + #[inline] pub(crate) fn union_yield_if(self, include: bool) -> Self { self.union_if(Self::Yield, include) diff --git a/crates/oxc_parser/src/ts/statement.rs b/crates/oxc_parser/src/ts/statement.rs index 414ee3e8d..01dc6f4ef 100644 --- a/crates/oxc_parser/src/ts/statement.rs +++ b/crates/oxc_parser/src/ts/statement.rs @@ -294,14 +294,9 @@ impl<'a> Parser<'a> { start_span: Span, ) -> Result> { let reserved_ctx = self.ctx; - let (flags, modifiers) = self.eat_modifiers_before_declaration(); - let declare = flags.declare(); - let r#async = flags.r#async(); - self.ctx = self.ctx.and_ambient(declare).and_await(r#async); - + self.ctx = self.ctx.union_ambient_if(flags.declare()).and_await(flags.r#async()); let result = self.parse_declaration(start_span, modifiers); - self.ctx = reserved_ctx; result.map(Statement::Declaration) } diff --git a/tasks/coverage/parser_babel.snap b/tasks/coverage/parser_babel.snap index 5b82f7f95..ce27e7888 100644 --- a/tasks/coverage/parser_babel.snap +++ b/tasks/coverage/parser_babel.snap @@ -1,6 +1,6 @@ parser_babel Summary: AST Parsed : 2090/2096 (99.71%) -Positive Passed: 2087/2096 (99.57%) +Positive Passed: 2088/2096 (99.62%) Negative Passed: 1350/1499 (90.06%) Expect Syntax Error: "annex-b/disabled/1.1-html-comments-close/input.js" Expect Syntax Error: "annex-b/disabled/3.1-sloppy-labeled-functions/input.js" @@ -197,15 +197,6 @@ Expect to Parse: "typescript/interface/get-set-properties/input.ts" 3 │ set bar: string; ╰──── -Expect to Parse: "typescript/module-namespace/body-nested-declare/input.ts" - × Missing initializer in const declaration - ╭─[typescript/module-namespace/body-nested-declare/input.ts:2:1] - 2 │ namespace B { - 3 │ const x: number; - · ─ - 4 │ } - ╰──── - Expect to Parse: "typescript/regression/nested-extends-in-arrow-type-param/input.ts" × Expected `,` but found `extends` ╭─[typescript/regression/nested-extends-in-arrow-type-param/input.ts:1:1]