Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

Commit

Permalink
feat(rome_js_parser): Implement option-passing mechanism for parser t…
Browse files Browse the repository at this point in the history
…est #4631
  • Loading branch information
denbezrukov committed Jul 3, 2023
1 parent 0affcbf commit 7762ee2
Show file tree
Hide file tree
Showing 50 changed files with 3,188 additions and 1,541 deletions.
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions crates/rome_js_parser/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ version = "0.0.2"
bitflags = { workspace = true }
cfg-if = "1.0.0"
drop_bomb = "0.1.5"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
indexmap = { workspace = true }
rome_console = { workspace = true }
rome_diagnostics = { workspace = true }
Expand All @@ -30,6 +32,7 @@ tracing = { workspace = true }
expect-test = "1.2.2"
quickcheck = "1.0.3"
quickcheck_macros = "1.0.0"
rome_js_parser = { workspace = true, features = ["serde"] }
tests_macros = { workspace = true }

[features]
Expand Down
2 changes: 1 addition & 1 deletion crates/rome_js_parser/src/lexer/buffered_lexer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ impl<'l> BufferedLexer<'l> {

/// Rewinds the lexer to the state stored in the checkpoint.
pub fn rewind(&mut self, checkpoint: LexerCheckpoint) {
// test_err js_rewind_at_eof_token
// test_err js js_rewind_at_eof_token
// (([zAgRvz=[=(e{V{

self.inner.rewind(checkpoint);
Expand Down
2 changes: 1 addition & 1 deletion crates/rome_js_parser/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
//! Parser tests are comments that start with `test` or `test_err` followed by the test name, and then the code on its own line.
//!
//! ```rust,ignore
//! // test feature_name
//! // test js feature_name
//! // let a = { new_feature : "" }
//! // let b = { new_feature : "" }
//! fn parse_new_feature(p: &mut Parser) -> ParsedSyntax {}
Expand Down
28 changes: 14 additions & 14 deletions crates/rome_js_parser/src/syntax/assignment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use rome_js_syntax::{JsSyntaxKind::*, *};
use rome_parser::diagnostic::expected_any;
use rome_rowan::AstNode;

// test assignment_target
// test js assignment_target
// foo += bar = b ??= 3;
// a.foo -= bar;
// (foo = bar);
Expand All @@ -28,7 +28,7 @@ use rome_rowan::AstNode;
// ++count === 3
// a['b'] = c[d] = "test"

// test_err invalid_assignment_target
// test_err js invalid_assignment_target
// ++a = b;
// (++a) = b;
// (a = b;
Expand Down Expand Up @@ -94,7 +94,7 @@ pub(crate) fn expression_to_assignment_pattern(
}
}

// test array_or_object_member_assignment
// test js array_or_object_member_assignment
// [{
// get y() {
// throw new Test262Error('The property should not be accessed.');
Expand Down Expand Up @@ -126,7 +126,7 @@ pub(crate) fn expression_to_assignment(
checkpoint: JsParserCheckpoint,
) -> CompletedMarker {
try_expression_to_assignment(p, target, checkpoint).unwrap_or_else(
// test_err js_regex_assignment
// test_err js js_regex_assignment
// /=0*_:m/=/*_:|
|mut invalid_assignment_target| {
// Doesn't seem to be a valid assignment target. Recover and create an error.
Expand Down Expand Up @@ -188,13 +188,13 @@ impl ParseWithDefaultPattern for AssignmentPatternWithDefault {

struct ArrayAssignmentPattern;

// test array_assignment_target
// test js array_assignment_target
// [foo, bar] = baz;
// [,,,b,,c,] = baz;
// [a = "test", a.b, call().b] = baz;
// [((a))] = baz;
//
// test_err array_assignment_target_err
// test_err js array_assignment_target_err
// [a a, ++b, ] = test;
// [a, c, ...rest,] = test;
// [a = , = "test"] = test;
Expand All @@ -211,7 +211,7 @@ impl ParseArrayPattern<AssignmentPatternWithDefault> for ArrayAssignmentPattern
JS_ARRAY_ASSIGNMENT_PATTERN
}

// test array_assignment_target_rest
// test js array_assignment_target_rest
// ([ ...abcd ] = a);
// ([ ...(abcd) ] = a);
// ([ ...m.test ] = c);
Expand All @@ -220,7 +220,7 @@ impl ParseArrayPattern<AssignmentPatternWithDefault> for ArrayAssignmentPattern
// ([ ...[x, y] ] = b);
// ([ ...[ ...a ] ] = c);
//
// test_err array_assignment_target_rest_err
// test_err js array_assignment_target_rest_err
// ([ ... ] = a);
// ([ ...c = "default" ] = a);
// ([ ...rest, other_assignment ] = a);
Expand All @@ -246,7 +246,7 @@ impl ParseArrayPattern<AssignmentPatternWithDefault> for ArrayAssignmentPattern

struct ObjectAssignmentPattern;

// test object_assignment_target
// test js object_assignment_target
// ({} = {});
// ({ bar, baz } = {});
// ({ bar: [baz = "baz"], foo = "foo", ...rest } = {});
Expand All @@ -270,7 +270,7 @@ impl ParseObjectPattern for ObjectAssignmentPattern {
expected_any(&["assignment target", "rest property"], range).into_diagnostic(p)
}

// test property_assignment_target
// test js property_assignment_target
// ({x}= {});
// ({x: y}= {});
// ({x: y.test().z}= {});
Expand All @@ -280,7 +280,7 @@ impl ParseObjectPattern for ObjectAssignmentPattern {
// ({x: y = "default"}= {});
// ({0: y, [computed]: z} = {});
//
// test_err property_assignment_target_err
// test_err js property_assignment_target_err
// ({:y} = {});
// ({=y} = {});
// ({:="test"} = {});
Expand Down Expand Up @@ -312,15 +312,15 @@ impl ParseObjectPattern for ObjectAssignmentPattern {
Present(m.complete(p, kind))
}

// test rest_property_assignment_target
// test js rest_property_assignment_target
// ({ ...abcd } = a);
// ({ ...(abcd) } = a);
// ({ ...m.test } = c);
// ({ ...m[call()] } = c);
// ({ ...any.expression().b } = c);
// ({ b: { ...a } } = c);
//
// test_err rest_property_assignment_target_err
// test_err js rest_property_assignment_target_err
// ({ ... } = a);
// ({ ...c = "default" } = a);
// ({ ...{a} } = b);
Expand Down Expand Up @@ -466,7 +466,7 @@ impl RewriteParseEvents for ReparseAssignment {

match kind {
JS_IDENTIFIER_ASSIGNMENT => {
// test_err eval_arguments_assignment
// test_err js eval_arguments_assignment
// eval = "test";
// arguments = "test";
let name = completed.text(p);
Expand Down
8 changes: 4 additions & 4 deletions crates/rome_js_parser/src/syntax/auxiliary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ use rome_js_syntax::JsSyntaxKind::{JS_BOGUS_STATEMENT, JS_VARIABLE_DECLARATION_C
use rome_js_syntax::T;
use rome_rowan::{TextRange, TextSize};

// test export_variable_clause
// test js export_variable_clause
// export let a;
// export const b = 3;
// export var c, d, e = 3;
//
// test_err export_variable_clause_error
// test_err js export_variable_clause_error
// export let a = ;
// export const b;
// export let d, c;
Expand Down Expand Up @@ -82,7 +82,7 @@ pub(crate) fn parse_declaration_clause(p: &mut JsParser, stmt_start_pos: TextSiz

match p.cur() {
T![class] | T![abstract] if !p.state().in_ambient_context() => {
// test decorator_export_class_clause
// test js decorator_export_class_clause
// export @decorator class Bar {};
// export @first @second class Foo {
// constructor() {}
Expand All @@ -96,7 +96,7 @@ pub(crate) fn parse_declaration_clause(p: &mut JsParser, stmt_start_pos: TextSiz
parse_class_declaration(p, decorator_list, StatementContext::StatementList)
}
_ => {
// test_err decorator_export_class_clause
// test_err js decorator_export_class_clause
// @decorator
// export let a;
// @decorator1 @decorator2
Expand Down
28 changes: 14 additions & 14 deletions crates/rome_js_parser/src/syntax/binding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ pub(crate) fn parse_binding(p: &mut JsParser) -> ParsedSyntax {
parse_identifier_binding(p)
}

// test_err binding_identifier_invalid
// test_err js binding_identifier_invalid
// async () => { let await = 5; }
// function *foo() {
// let yield = 5;
Expand All @@ -49,7 +49,7 @@ pub(crate) fn parse_binding(p: &mut JsParser) -> ParsedSyntax {
// const let = 5;
// let a, a;
//
// test_err binding_identifier_invalid_script
// test_err js binding_identifier_invalid_script
// // SCRIPT
// let let = 5;
// const let = 5;
Expand Down Expand Up @@ -159,26 +159,26 @@ impl ParseWithDefaultPattern for BindingPatternWithDefault {

struct ArrayBindingPattern;

// test array_binding
// test js array_binding
// let a = "b";
// let [c, b] = [1, 2];
// let [d, ...abcd] = [1];
// let [e = "default", x] = []
// let [, f, ...rest] = []
// let [[...rest2], { g }] = []
//
// test_err array_binding_err
// test_err js array_binding_err
// let [a b] = [1, 2];
// let [="default"] = [1, 2];
// let ["default"] = [1, 2];
// let [[c ] = [];
//
// test array_binding_rest
// test js array_binding_rest
// let [ ...abcd ] = a;
// let [ ...[x, y] ] = b;
// let [ ...[ ...a ] ] = c;
//
// test_err array_binding_rest_err
// test_err js array_binding_rest_err
// let [ ... ] = a;
// let [ ...c = "default" ] = a;
// let [ ...rest, other_assignment ] = a;
Expand Down Expand Up @@ -222,7 +222,7 @@ impl ParseArrayPattern<BindingPatternWithDefault> for ArrayBindingPattern {
}
}

// test_err object_binding_pattern
// test_err js object_binding_pattern
// let { 5 } } = { eval: "foo" };
// let { eval } = { eval: "foo" };
// let { 5, 6 } = { eval: "foo" };
Expand All @@ -249,20 +249,20 @@ impl ParseObjectPattern for ObjectBindingPattern {
expected_any(&["identifier", "member name", "rest pattern"], range).into_diagnostic(p)
}

// test object_property_binding
// test js object_property_binding
// let { foo: bar } = {}
// let { foo: bar_bar = baz } = {}
//
// test_err object_property_binding_err
// test_err js object_property_binding_err
// let { foo: , bar } = {}
// let { : lorem = "test" } = {}
// let { , ipsum: bazz } = {}
//
// test object_shorthand_property
// test js object_shorthand_property
// let { a, b } = c
// let { d = "default", e = call() } = c
//
// test_err object_shorthand_property_err
// test_err js object_shorthand_property_err
// let { a b } = c
// let { = "test" } = c
// let { , d } = c
Expand All @@ -285,7 +285,7 @@ impl ParseObjectPattern for ObjectBindingPattern {
JS_OBJECT_BINDING_PATTERN_PROPERTY
};

// test destructuring_initializer_binding
// test js destructuring_initializer_binding
// const { value, f = (value) => value } = item
let parent = p.state_mut().duplicate_binding_parent.take();
parse_initializer_clause(p, ExpressionContext::default()).ok();
Expand All @@ -294,11 +294,11 @@ impl ParseObjectPattern for ObjectBindingPattern {
Present(m.complete(p, kind))
}

// test rest_property_binding
// test js rest_property_binding
// let { ...abcd } = a;
// let { b: { ...a } } = c;
//
// test_err rest_property_binding_err
// test_err js rest_property_binding_err
// let { ... } = a;
// let { ...c = "default" } = a;
// let { ...{a} } = b;
Expand Down
Loading

0 comments on commit 7762ee2

Please sign in to comment.