diff --git a/.gitignore b/.gitignore index 8b2d15fc71b9b..929b9ea5e25e9 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ target/ /editors/vscode/out/ /editors/vscode/*.vsix +# Jetbrains +/.idea/ + # Cloned conformance repos tasks/coverage/babel/ tasks/coverage/test262/ diff --git a/crates/oxc_parser/src/js/binding.rs b/crates/oxc_parser/src/js/binding.rs index a627bc9196995..74bbe2f31cbc4 100644 --- a/crates/oxc_parser/src/js/binding.rs +++ b/crates/oxc_parser/src/js/binding.rs @@ -19,12 +19,19 @@ impl<'a> ParserImpl<'a> { allow_question: bool, ) -> Result> { let mut kind = self.parse_binding_pattern_kind()?; - let optional = if allow_question && self.is_ts { self.eat(Kind::Question) } else { false }; + let optional = if allow_question && self.is_ts { + let span = self.start_span(); + if self.eat(Kind::Question) { Some(self.end_span(span)) } else { None } + } else { + None + }; let type_annotation = self.parse_ts_type_annotation()?; if let Some(type_annotation) = &type_annotation { Self::extend_binding_pattern_span_end(type_annotation.span, &mut kind); + } else if let Some(span) = optional { + Self::extend_binding_pattern_span_end(span, &mut kind); } - Ok(self.ast.binding_pattern(kind, type_annotation, optional)) + Ok(self.ast.binding_pattern(kind, type_annotation, optional.is_some())) } pub(crate) fn parse_binding_pattern_kind(&mut self) -> Result> {