aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-02-03 22:51:17 +0000
committerGitHub <[email protected]>2020-02-03 22:51:17 +0000
commit918547dbe9a2907401102eba491ac25cebe1404d (patch)
treee0aa3bdcec597e81f022ac1ce388d42724a92f51 /crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt
parentb090ee5a65f9630146c2842bc51fcfcc8da08da1 (diff)
parenta3e5663ae0206270156fbeb926a174a40abbddb0 (diff)
Merge #2911
2911: Implement collecting errors while tokenizing r=matklad a=Veetaha Now we are collecting errors from `rustc_lexer` and returning them in `ParsedToken { token, error }` and `ParsedTokens { tokens, errors }` structures **([UPD]: this is now simplified, see updates bellow)**. The main changes are introduced in `ra_syntax/parsing/lexer.rs`. It now exposes the following functions and types: ```rust pub fn tokenize(text: &str) -> ParsedTokens; pub fn tokenize_append(text: &str, parsed_tokens_to_append_to: &mut ParsedTokens); pub fn first_token(text: &str) -> Option<ParsedToken>; // allows any number of tokens in text pub fn single_token(text: &str) -> Option<ParsedToken>; // allows only a single token in text pub struct ParsedToken { pub token: Token, pub error: Option<SyntaxError> } pub struct ParsedTokens { pub tokens: Vec<Token>, pub errors: Vec<SyntaxError> } pub enum TokenizeError { /* Simple enum which reflects rustc_lexer tokenization errors */ } ``` In the first commit I implemented it with iterators, but then decided that since this crate is ad hoc for `rust-analyzer` and we clearly see the places of its usage it would be better to simplify it to vectors. This is currently WIP, because I want to add tests for error messages generated by the lexer. I'd like to listen to you thoughts how to define these tests in `ra_syntax/test-data` dir. Related issues: #223 **[UPD]** After the PR review the API was simplified: ```rust pub fn tokenize(text: &str) -> (Vec<Token>, Vec<SyntaxError>); // Both lex functions do not check for unescape errors pub fn lex_single_syntax_kind(text: &str) -> Option<(SyntaxKind, Option<SyntaxError>)>; pub fn lex_single_valid_syntax_kind(text: &str) -> Option<SyntaxKind>; // This will be removed in the next PR in favour of simlifying `SyntaxError` to `(String, TextRange)` pub enum TokenizeError { /* Simple enum which reflects rustc_lexer tokenization errors */ } // this is private, but may be made public if such demand would exist in future (least privilege principle) fn lex_first_token(text: &str) -> Option<(Token, Option<SyntaxError>)>; ``` Co-authored-by: Veetaha <[email protected]>
Diffstat (limited to 'crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt')
-rw-r--r--crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt57
1 files changed, 57 insertions, 0 deletions
diff --git a/crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt b/crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt
new file mode 100644
index 000000000..e19fc5789
--- /dev/null
+++ b/crates/ra_syntax/test_data/lexer/ok/0004_numbers.txt
@@ -0,0 +1,57 @@
1INT_NUMBER 1 "0"
2WHITESPACE 1 " "
3INT_NUMBER 2 "00"
4WHITESPACE 1 " "
5INT_NUMBER 2 "0_"
6WHITESPACE 1 " "
7FLOAT_NUMBER 2 "0."
8WHITESPACE 1 " "
9INT_NUMBER 2 "0z"
10WHITESPACE 1 "\n"
11INT_NUMBER 5 "01790"
12WHITESPACE 1 " "
13INT_NUMBER 6 "0b1790"
14WHITESPACE 1 " "
15INT_NUMBER 6 "0o1790"
16WHITESPACE 1 " "
17INT_NUMBER 18 "0x1790aAbBcCdDeEfF"
18WHITESPACE 1 " "
19INT_NUMBER 6 "001279"
20WHITESPACE 1 " "
21INT_NUMBER 6 "0_1279"
22WHITESPACE 1 " "
23FLOAT_NUMBER 6 "0.1279"
24WHITESPACE 1 " "
25FLOAT_NUMBER 6 "0e1279"
26WHITESPACE 1 " "
27FLOAT_NUMBER 6 "0E1279"
28WHITESPACE 1 "\n"
29INT_NUMBER 1 "0"
30DOT 1 "."
31DOT 1 "."
32INT_NUMBER 1 "2"
33WHITESPACE 1 "\n"
34INT_NUMBER 1 "0"
35DOT 1 "."
36IDENT 3 "foo"
37L_PAREN 1 "("
38R_PAREN 1 ")"
39WHITESPACE 1 "\n"
40FLOAT_NUMBER 4 "0e+1"
41WHITESPACE 1 "\n"
42INT_NUMBER 1 "0"
43DOT 1 "."
44IDENT 1 "e"
45PLUS 1 "+"
46INT_NUMBER 1 "1"
47WHITESPACE 1 "\n"
48FLOAT_NUMBER 6 "0.0E-2"
49WHITESPACE 1 "\n"
50FLOAT_NUMBER 26 "0___0.10000____0000e+111__"
51WHITESPACE 1 "\n"
52INT_NUMBER 4 "1i64"
53WHITESPACE 1 " "
54FLOAT_NUMBER 7 "92.0f32"
55WHITESPACE 1 " "
56INT_NUMBER 5 "11__s"
57WHITESPACE 1 "\n"