diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-11-06 21:54:14 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-11-06 21:54:14 +0000 |
commit | c365329911bfb33410da0363a4783f102094283f (patch) | |
tree | d912c15567800abbcaeb04798b8daf9eb1431f7f /crates/syntax/src/validation.rs | |
parent | 7f12a1f225c7d3397f27964ce039b55d680772d3 (diff) | |
parent | 5db789df9c767985a564a31cc593ce7f5964100e (diff) |
Merge #6486
6486: Cleanup API r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/syntax/src/validation.rs')
-rw-r--r-- | crates/syntax/src/validation.rs | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/crates/syntax/src/validation.rs b/crates/syntax/src/validation.rs index 62a37c50a..6f45149bf 100644 --- a/crates/syntax/src/validation.rs +++ b/crates/syntax/src/validation.rs | |||
@@ -4,7 +4,7 @@ mod block; | |||
4 | 4 | ||
5 | use crate::{ | 5 | use crate::{ |
6 | algo, ast, match_ast, AstNode, SyntaxError, | 6 | algo, ast, match_ast, AstNode, SyntaxError, |
7 | SyntaxKind::{BYTE, CHAR, CONST, FN, INT_NUMBER, TYPE_ALIAS}, | 7 | SyntaxKind::{CONST, FN, INT_NUMBER, TYPE_ALIAS}, |
8 | SyntaxNode, SyntaxToken, TextSize, T, | 8 | SyntaxNode, SyntaxToken, TextSize, T, |
9 | }; | 9 | }; |
10 | use rowan::Direction; | 10 | use rowan::Direction; |
@@ -121,41 +121,42 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) { | |||
121 | acc.push(SyntaxError::new_at_offset(rustc_unescape_error_to_string(err), off)); | 121 | acc.push(SyntaxError::new_at_offset(rustc_unescape_error_to_string(err), off)); |
122 | }; | 122 | }; |
123 | 123 | ||
124 | if let Some(s) = literal.as_string() { | 124 | match literal.kind() { |
125 | if !s.is_raw() { | 125 | ast::LiteralKind::String(s) => { |
126 | if let Some(without_quotes) = unquote(text, 1, '"') { | 126 | if !s.is_raw() { |
127 | unescape_literal(without_quotes, Mode::Str, &mut |range, char| { | 127 | if let Some(without_quotes) = unquote(text, 1, '"') { |
128 | if let Err(err) = char { | 128 | unescape_literal(without_quotes, Mode::Str, &mut |range, char| { |
129 | push_err(1, (range.start, err)); | 129 | if let Err(err) = char { |
130 | } | 130 | push_err(1, (range.start, err)); |
131 | }) | 131 | } |
132 | } | 132 | }) |
133 | } | 133 | } |
134 | } | ||
135 | if let Some(s) = literal.as_byte_string() { | ||
136 | if !s.is_raw() { | ||
137 | if let Some(without_quotes) = unquote(text, 2, '"') { | ||
138 | unescape_byte_literal(without_quotes, Mode::ByteStr, &mut |range, char| { | ||
139 | if let Err(err) = char { | ||
140 | push_err(2, (range.start, err)); | ||
141 | } | ||
142 | }) | ||
143 | } | 134 | } |
144 | } | 135 | } |
145 | } | 136 | ast::LiteralKind::ByteString(s) => { |
146 | 137 | if !s.is_raw() { | |
147 | match token.kind() { | 138 | if let Some(without_quotes) = unquote(text, 2, '"') { |
148 | BYTE => { | 139 | unescape_byte_literal(without_quotes, Mode::ByteStr, &mut |range, char| { |
149 | if let Some(Err(e)) = unquote(text, 2, '\'').map(unescape_byte) { | 140 | if let Err(err) = char { |
150 | push_err(2, e); | 141 | push_err(2, (range.start, err)); |
142 | } | ||
143 | }) | ||
144 | } | ||
151 | } | 145 | } |
152 | } | 146 | } |
153 | CHAR => { | 147 | ast::LiteralKind::Char => { |
154 | if let Some(Err(e)) = unquote(text, 1, '\'').map(unescape_char) { | 148 | if let Some(Err(e)) = unquote(text, 1, '\'').map(unescape_char) { |
155 | push_err(1, e); | 149 | push_err(1, e); |
156 | } | 150 | } |
157 | } | 151 | } |
158 | _ => (), | 152 | ast::LiteralKind::Byte => { |
153 | if let Some(Err(e)) = unquote(text, 2, '\'').map(unescape_byte) { | ||
154 | push_err(2, e); | ||
155 | } | ||
156 | } | ||
157 | ast::LiteralKind::IntNumber(_) | ||
158 | | ast::LiteralKind::FloatNumber(_) | ||
159 | | ast::LiteralKind::Bool(_) => {} | ||
159 | } | 160 | } |
160 | } | 161 | } |
161 | 162 | ||