From 40170885e799ebdefb24ed00865cd1c7800af491 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 9 Sep 2019 14:52:31 +0300 Subject: WIP: switch to fully decomposed tokens internally --- crates/ra_syntax/src/tests.rs | 16 ++- .../parser/ok/0054_qual_path_in_type_arg.rs | 5 + .../parser/ok/0054_qual_path_in_type_arg.txt | 126 +++++++++++++++++++++ 3 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rs create mode 100644 crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.txt (limited to 'crates/ra_syntax') diff --git a/crates/ra_syntax/src/tests.rs b/crates/ra_syntax/src/tests.rs index fa5d2d5d8..458920607 100644 --- a/crates/ra_syntax/src/tests.rs +++ b/crates/ra_syntax/src/tests.rs @@ -15,6 +15,18 @@ fn lexer_tests() { }) } +#[test] +fn parse_smoke_test() { + let code = r##" +fn main() { + println!("Hello, world!") +} + "##; + + let parse = SourceFile::parse(code); + assert!(parse.ok().is_ok()); +} + #[test] fn parser_tests() { dir_tests(&test_data_dir(), &["parser/inline/ok", "parser/ok"], |text, path| { @@ -75,7 +87,9 @@ fn self_hosting_parsing() { { count += 1; let text = read_text(entry.path()); - SourceFile::parse(&text).ok().expect("There should be no errors in the file"); + if let Err(errors) = SourceFile::parse(&text).ok() { + panic!("Parsing errors:\n{:?}\n{}\n", errors, entry.path().display()); + } } assert!( count > 30, diff --git a/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rs b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rs new file mode 100644 index 000000000..0d3f5722a --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rs @@ -0,0 +1,5 @@ +fn a() -> Foo {} + +fn b(_: impl FnMut(x::Y)) {} + +fn c(_: impl FnMut(&x::Y)) {} diff --git a/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.txt b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.txt new file mode 100644 index 000000000..7e1af254c --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.txt @@ -0,0 +1,126 @@ +SOURCE_FILE@[0; 88) + FN_DEF@[0; 26) + FN_KW@[0; 2) "fn" + WHITESPACE@[2; 3) " " + NAME@[3; 4) + IDENT@[3; 4) "a" + PARAM_LIST@[4; 6) + L_PAREN@[4; 5) "(" + R_PAREN@[5; 6) ")" + WHITESPACE@[6; 7) " " + RET_TYPE@[7; 23) + THIN_ARROW@[7; 9) "->" + WHITESPACE@[9; 10) " " + PATH_TYPE@[10; 23) + PATH@[10; 23) + PATH_SEGMENT@[10; 23) + NAME_REF@[10; 13) + IDENT@[10; 13) "Foo" + TYPE_ARG_LIST@[13; 23) + L_ANGLE@[13; 14) "<" + TYPE_ARG@[14; 22) + PATH_TYPE@[14; 22) + PATH@[14; 22) + PATH@[14; 17) + PATH_SEGMENT@[14; 17) + NAME_REF@[14; 17) + IDENT@[14; 17) "bar" + COLONCOLON@[17; 19) "::" + PATH_SEGMENT@[19; 22) + NAME_REF@[19; 22) + IDENT@[19; 22) "Baz" + R_ANGLE@[22; 23) ">" + WHITESPACE@[23; 24) " " + BLOCK_EXPR@[24; 26) + BLOCK@[24; 26) + L_CURLY@[24; 25) "{" + R_CURLY@[25; 26) "}" + WHITESPACE@[26; 28) "\n\n" + FN_DEF@[28; 56) + FN_KW@[28; 30) "fn" + WHITESPACE@[30; 31) " " + NAME@[31; 32) + IDENT@[31; 32) "b" + PARAM_LIST@[32; 53) + L_PAREN@[32; 33) "(" + PARAM@[33; 52) + PLACEHOLDER_PAT@[33; 34) + UNDERSCORE@[33; 34) "_" + COLON@[34; 35) ":" + WHITESPACE@[35; 36) " " + IMPL_TRAIT_TYPE@[36; 52) + IMPL_KW@[36; 40) "impl" + WHITESPACE@[40; 41) " " + TYPE_BOUND_LIST@[41; 52) + TYPE_BOUND@[41; 52) + PATH_TYPE@[41; 52) + PATH@[41; 52) + PATH_SEGMENT@[41; 52) + NAME_REF@[41; 46) + IDENT@[41; 46) "FnMut" + PARAM_LIST@[46; 52) + L_PAREN@[46; 47) "(" + PARAM@[47; 51) + PATH_TYPE@[47; 51) + PATH@[47; 51) + PATH@[47; 48) + PATH_SEGMENT@[47; 48) + NAME_REF@[47; 48) + IDENT@[47; 48) "x" + COLONCOLON@[48; 50) "::" + PATH_SEGMENT@[50; 51) + NAME_REF@[50; 51) + IDENT@[50; 51) "Y" + R_PAREN@[51; 52) ")" + R_PAREN@[52; 53) ")" + WHITESPACE@[53; 54) " " + BLOCK_EXPR@[54; 56) + BLOCK@[54; 56) + L_CURLY@[54; 55) "{" + R_CURLY@[55; 56) "}" + WHITESPACE@[56; 58) "\n\n" + FN_DEF@[58; 87) + FN_KW@[58; 60) "fn" + WHITESPACE@[60; 61) " " + NAME@[61; 62) + IDENT@[61; 62) "c" + PARAM_LIST@[62; 84) + L_PAREN@[62; 63) "(" + PARAM@[63; 83) + PLACEHOLDER_PAT@[63; 64) + UNDERSCORE@[63; 64) "_" + COLON@[64; 65) ":" + WHITESPACE@[65; 66) " " + IMPL_TRAIT_TYPE@[66; 83) + IMPL_KW@[66; 70) "impl" + WHITESPACE@[70; 71) " " + TYPE_BOUND_LIST@[71; 83) + TYPE_BOUND@[71; 83) + PATH_TYPE@[71; 83) + PATH@[71; 83) + PATH_SEGMENT@[71; 83) + NAME_REF@[71; 76) + IDENT@[71; 76) "FnMut" + PARAM_LIST@[76; 83) + L_PAREN@[76; 77) "(" + PARAM@[77; 82) + REFERENCE_TYPE@[77; 82) + AMP@[77; 78) "&" + PATH_TYPE@[78; 82) + PATH@[78; 82) + PATH@[78; 79) + PATH_SEGMENT@[78; 79) + NAME_REF@[78; 79) + IDENT@[78; 79) "x" + COLONCOLON@[79; 81) "::" + PATH_SEGMENT@[81; 82) + NAME_REF@[81; 82) + IDENT@[81; 82) "Y" + R_PAREN@[82; 83) ")" + R_PAREN@[83; 84) ")" + WHITESPACE@[84; 85) " " + BLOCK_EXPR@[85; 87) + BLOCK@[85; 87) + L_CURLY@[85; 86) "{" + R_CURLY@[86; 87) "}" + WHITESPACE@[87; 88) "\n" -- cgit v1.2.3 From ed726081d1df2fb6a1c21101996dcae203f79021 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 10 Sep 2019 15:57:51 +0300 Subject: add a jointness parser tests cc https://github.com/rust-lang/rust/issues/64242 --- .../test_data/parser/ok/0055_dot_dot_dot.rs | 5 +++ .../test_data/parser/ok/0055_dot_dot_dot.txt | 50 ++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rs create mode 100644 crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.txt (limited to 'crates/ra_syntax') diff --git a/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rs b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rs new file mode 100644 index 000000000..cd204f65e --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rs @@ -0,0 +1,5 @@ +type X = (); + +fn main() { + let ():::X = (); +} diff --git a/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.txt b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.txt new file mode 100644 index 000000000..d656e74b1 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.txt @@ -0,0 +1,50 @@ +SOURCE_FILE@[0; 49) + TYPE_ALIAS_DEF@[0; 12) + TYPE_KW@[0; 4) "type" + WHITESPACE@[4; 5) " " + NAME@[5; 6) + IDENT@[5; 6) "X" + WHITESPACE@[6; 7) " " + EQ@[7; 8) "=" + WHITESPACE@[8; 9) " " + TUPLE_TYPE@[9; 11) + L_PAREN@[9; 10) "(" + R_PAREN@[10; 11) ")" + SEMI@[11; 12) ";" + WHITESPACE@[12; 14) "\n\n" + FN_DEF@[14; 48) + FN_KW@[14; 16) "fn" + WHITESPACE@[16; 17) " " + NAME@[17; 21) + IDENT@[17; 21) "main" + PARAM_LIST@[21; 23) + L_PAREN@[21; 22) "(" + R_PAREN@[22; 23) ")" + WHITESPACE@[23; 24) " " + BLOCK_EXPR@[24; 48) + BLOCK@[24; 48) + L_CURLY@[24; 25) "{" + WHITESPACE@[25; 30) "\n " + LET_STMT@[30; 46) + LET_KW@[30; 33) "let" + WHITESPACE@[33; 34) " " + TUPLE_PAT@[34; 36) + L_PAREN@[34; 35) "(" + R_PAREN@[35; 36) ")" + COLON@[36; 37) ":" + PATH_TYPE@[37; 40) + PATH@[37; 40) + PATH_SEGMENT@[37; 40) + COLONCOLON@[37; 39) "::" + NAME_REF@[39; 40) + IDENT@[39; 40) "X" + WHITESPACE@[40; 41) " " + EQ@[41; 42) "=" + WHITESPACE@[42; 43) " " + TUPLE_EXPR@[43; 45) + L_PAREN@[43; 44) "(" + R_PAREN@[44; 45) ")" + SEMI@[45; 46) ";" + WHITESPACE@[46; 47) "\n" + R_CURLY@[47; 48) "}" + WHITESPACE@[48; 49) "\n" -- cgit v1.2.3