diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-27 12:12:14 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-27 12:12:14 +0000 |
commit | 55ab0c602e391537f5e1a84a617fdd817e6a4200 (patch) | |
tree | 3adb0077bd7d7a34376d87cbb0ae7ea5b942d532 /crates/ra_syntax/src/validation/char.rs | |
parent | dbf03b674e7e1a49d9b32ec5ed656df2aedd3ed3 (diff) | |
parent | 49b0fe20ab6aa752df3764908b7c21f4b1827e52 (diff) |
Merge #339
339: Fix assertion error for literals with suffixes r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src/validation/char.rs')
-rw-r--r-- | crates/ra_syntax/src/validation/char.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/ra_syntax/src/validation/char.rs b/crates/ra_syntax/src/validation/char.rs index 4728c85e6..19cd3830f 100644 --- a/crates/ra_syntax/src/validation/char.rs +++ b/crates/ra_syntax/src/validation/char.rs | |||
@@ -6,7 +6,7 @@ use arrayvec::ArrayString; | |||
6 | 6 | ||
7 | use crate::{ | 7 | use crate::{ |
8 | ast::{self, AstNode}, | 8 | ast::{self, AstNode}, |
9 | string_lexing::{self, CharComponentKind}, | 9 | string_lexing::{self, StringComponentKind}, |
10 | TextRange, | 10 | TextRange, |
11 | yellow::{ | 11 | yellow::{ |
12 | SyntaxError, | 12 | SyntaxError, |
@@ -30,6 +30,13 @@ pub(super) fn validate_char_node(node: ast::Char, errors: &mut Vec<SyntaxError>) | |||
30 | errors.push(SyntaxError::new(UnclosedChar, literal_range)); | 30 | errors.push(SyntaxError::new(UnclosedChar, literal_range)); |
31 | } | 31 | } |
32 | 32 | ||
33 | if let Some(range) = components.suffix { | ||
34 | errors.push(SyntaxError::new( | ||
35 | InvalidSuffix, | ||
36 | range + literal_range.start(), | ||
37 | )); | ||
38 | } | ||
39 | |||
33 | if len == 0 { | 40 | if len == 0 { |
34 | errors.push(SyntaxError::new(EmptyChar, literal_range)); | 41 | errors.push(SyntaxError::new(EmptyChar, literal_range)); |
35 | } | 42 | } |
@@ -41,12 +48,12 @@ pub(super) fn validate_char_node(node: ast::Char, errors: &mut Vec<SyntaxError>) | |||
41 | 48 | ||
42 | pub(super) fn validate_char_component( | 49 | pub(super) fn validate_char_component( |
43 | text: &str, | 50 | text: &str, |
44 | kind: CharComponentKind, | 51 | kind: StringComponentKind, |
45 | range: TextRange, | 52 | range: TextRange, |
46 | errors: &mut Vec<SyntaxError>, | 53 | errors: &mut Vec<SyntaxError>, |
47 | ) { | 54 | ) { |
48 | // Validate escapes | 55 | // Validate escapes |
49 | use self::CharComponentKind::*; | 56 | use self::StringComponentKind::*; |
50 | match kind { | 57 | match kind { |
51 | AsciiEscape => validate_ascii_escape(text, range, errors), | 58 | AsciiEscape => validate_ascii_escape(text, range, errors), |
52 | AsciiCodeEscape => validate_ascii_code_escape(text, range, errors), | 59 | AsciiCodeEscape => validate_ascii_code_escape(text, range, errors), |
@@ -57,6 +64,7 @@ pub(super) fn validate_char_component( | |||
57 | errors.push(SyntaxError::new(UnescapedCodepoint, range)); | 64 | errors.push(SyntaxError::new(UnescapedCodepoint, range)); |
58 | } | 65 | } |
59 | } | 66 | } |
67 | StringComponentKind::IgnoreNewline => { /* always valid */ } | ||
60 | } | 68 | } |
61 | } | 69 | } |
62 | 70 | ||