aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/src/lib.rs2
-rw-r--r--crates/ra_syntax/src/parsing.rs2
-rw-r--r--crates/ra_syntax/src/parsing/lexer.rs9
-rw-r--r--crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.txt39
-rw-r--r--crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.txt35
7 files changed, 89 insertions, 2 deletions
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs
index e1088e296..c56bc9f16 100644
--- a/crates/ra_syntax/src/lib.rs
+++ b/crates/ra_syntax/src/lib.rs
@@ -40,7 +40,7 @@ pub use crate::{
40 syntax_text::SyntaxText, 40 syntax_text::SyntaxText,
41 syntax_node::{Direction, SyntaxNode, WalkEvent, TreeArc, SyntaxTreeBuilder, SyntaxElement, SyntaxToken}, 41 syntax_node::{Direction, SyntaxNode, WalkEvent, TreeArc, SyntaxTreeBuilder, SyntaxElement, SyntaxToken},
42 ptr::{SyntaxNodePtr, AstPtr}, 42 ptr::{SyntaxNodePtr, AstPtr},
43 parsing::{tokenize, Token}, 43 parsing::{tokenize, classify_literal, Token},
44}; 44};
45 45
46use ra_text_edit::AtomTextEdit; 46use ra_text_edit::AtomTextEdit;
diff --git a/crates/ra_syntax/src/parsing.rs b/crates/ra_syntax/src/parsing.rs
index ad5668a65..15d69c5ab 100644
--- a/crates/ra_syntax/src/parsing.rs
+++ b/crates/ra_syntax/src/parsing.rs
@@ -11,7 +11,7 @@ use crate::{
11 syntax_node::GreenNode, 11 syntax_node::GreenNode,
12}; 12};
13 13
14pub use self::lexer::{tokenize, Token}; 14pub use self::lexer::{tokenize, classify_literal, Token};
15 15
16pub(crate) use self::reparsing::incremental_reparse; 16pub(crate) use self::reparsing::incremental_reparse;
17 17
diff --git a/crates/ra_syntax/src/parsing/lexer.rs b/crates/ra_syntax/src/parsing/lexer.rs
index 36e841609..3ae42912c 100644
--- a/crates/ra_syntax/src/parsing/lexer.rs
+++ b/crates/ra_syntax/src/parsing/lexer.rs
@@ -214,3 +214,12 @@ fn scan_literal_suffix(ptr: &mut Ptr) {
214 } 214 }
215 ptr.bump_while(is_ident_continue); 215 ptr.bump_while(is_ident_continue);
216} 216}
217
218pub fn classify_literal(text: &str) -> Option<Token> {
219 let tkn = next_token(text);
220 if !tkn.kind.is_literal() || tkn.len.to_usize() != text.len() {
221 return None;
222 }
223
224 Some(tkn)
225}
diff --git a/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.rs b/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.rs
new file mode 100644
index 000000000..16edee95d
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.rs
@@ -0,0 +1,2 @@
1async unsafe fn foo() {}
2unsafe const fn bar() {}
diff --git a/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.txt b/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.txt
new file mode 100644
index 000000000..220191ffa
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/inline/err/0010_wrong_order_fns.txt
@@ -0,0 +1,39 @@
1SOURCE_FILE@[0; 50)
2 ERROR@[0; 5)
3 ASYNC_KW@[0; 5) "async"
4 err: `expected fn, trait or impl`
5 WHITESPACE@[5; 6) " "
6 FN_DEF@[6; 24)
7 UNSAFE_KW@[6; 12) "unsafe"
8 WHITESPACE@[12; 13) " "
9 FN_KW@[13; 15) "fn"
10 WHITESPACE@[15; 16) " "
11 NAME@[16; 19)
12 IDENT@[16; 19) "foo"
13 PARAM_LIST@[19; 21)
14 L_PAREN@[19; 20) "("
15 R_PAREN@[20; 21) ")"
16 WHITESPACE@[21; 22) " "
17 BLOCK@[22; 24)
18 L_CURLY@[22; 23) "{"
19 R_CURLY@[23; 24) "}"
20 WHITESPACE@[24; 25) "\n"
21 ERROR@[25; 31)
22 UNSAFE_KW@[25; 31) "unsafe"
23 err: `expected fn, trait or impl`
24 WHITESPACE@[31; 32) " "
25 FN_DEF@[32; 49)
26 CONST_KW@[32; 37) "const"
27 WHITESPACE@[37; 38) " "
28 FN_KW@[38; 40) "fn"
29 WHITESPACE@[40; 41) " "
30 NAME@[41; 44)
31 IDENT@[41; 44) "bar"
32 PARAM_LIST@[44; 46)
33 L_PAREN@[44; 45) "("
34 R_PAREN@[45; 46) ")"
35 WHITESPACE@[46; 47) " "
36 BLOCK@[47; 49)
37 L_CURLY@[47; 48) "{"
38 R_CURLY@[48; 49) "}"
39 WHITESPACE@[49; 50) "\n"
diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.rs
new file mode 100644
index 000000000..46af91b82
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.rs
@@ -0,0 +1,2 @@
1unsafe async fn foo() {}
2const unsafe fn bar() {}
diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.txt
new file mode 100644
index 000000000..2a16aeb61
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/inline/ok/0128_combined_fns.txt
@@ -0,0 +1,35 @@
1SOURCE_FILE@[0; 50)
2 FN_DEF@[0; 24)
3 UNSAFE_KW@[0; 6) "unsafe"
4 WHITESPACE@[6; 7) " "
5 ASYNC_KW@[7; 12) "async"
6 WHITESPACE@[12; 13) " "
7 FN_KW@[13; 15) "fn"
8 WHITESPACE@[15; 16) " "
9 NAME@[16; 19)
10 IDENT@[16; 19) "foo"
11 PARAM_LIST@[19; 21)
12 L_PAREN@[19; 20) "("
13 R_PAREN@[20; 21) ")"
14 WHITESPACE@[21; 22) " "
15 BLOCK@[22; 24)
16 L_CURLY@[22; 23) "{"
17 R_CURLY@[23; 24) "}"
18 WHITESPACE@[24; 25) "\n"
19 FN_DEF@[25; 49)
20 CONST_KW@[25; 30) "const"
21 WHITESPACE@[30; 31) " "
22 UNSAFE_KW@[31; 37) "unsafe"
23 WHITESPACE@[37; 38) " "
24 FN_KW@[38; 40) "fn"
25 WHITESPACE@[40; 41) " "
26 NAME@[41; 44)
27 IDENT@[41; 44) "bar"
28 PARAM_LIST@[44; 46)
29 L_PAREN@[44; 45) "("
30 R_PAREN@[45; 46) ")"
31 WHITESPACE@[46; 47) " "
32 BLOCK@[47; 49)
33 L_CURLY@[47; 48) "{"
34 R_CURLY@[48; 49) "}"
35 WHITESPACE@[49; 50) "\n"