Skip to content

Commit

Permalink
Rollup merge of #120329 - nnethercote:3349-precursors, r=fee1-dead
Browse files Browse the repository at this point in the history
RFC 3349 precursors

Some cleanups I found while working on RFC 3349 that are worth landing separately.

r? `@fee1-dead`
  • Loading branch information
matthiaskrgr committed Jan 26, 2024
2 parents 176e0c0 + 277cdfa commit fdf096a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 18 deletions.
4 changes: 2 additions & 2 deletions crates/parser/src/lexed_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -379,14 +379,14 @@ fn unescape_string_error_message(text: &str, mode: Mode) -> &'static str {
let mut error_message = "";
match mode {
Mode::CStr => {
rustc_lexer::unescape::unescape_c_string(text, mode, &mut |_, res| {
rustc_lexer::unescape::unescape_mixed(text, mode, &mut |_, res| {
if let Err(e) = res {
error_message = error_to_diagnostic_message(e, mode);
}
});
}
Mode::ByteStr | Mode::Str => {
rustc_lexer::unescape::unescape_literal(text, mode, &mut |_, res| {
rustc_lexer::unescape::unescape_unicode(text, mode, &mut |_, res| {
if let Err(e) = res {
error_message = error_to_diagnostic_message(e, mode);
}
Expand Down
19 changes: 9 additions & 10 deletions crates/syntax/src/ast/token_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::{
};

use rustc_lexer::unescape::{
unescape_byte, unescape_c_string, unescape_char, unescape_literal, CStrUnit, Mode,
unescape_byte, unescape_char, unescape_mixed, unescape_unicode, MixedUnit, Mode,
};

use crate::{
Expand Down Expand Up @@ -193,7 +193,7 @@ pub trait IsString: AstToken {
let text = &self.text()[text_range_no_quotes - start];
let offset = text_range_no_quotes.start() - start;

unescape_literal(text, Self::MODE, &mut |range, unescaped_char| {
unescape_unicode(text, Self::MODE, &mut |range, unescaped_char| {
let text_range =
TextRange::new(range.start.try_into().unwrap(), range.end.try_into().unwrap());
cb(text_range + offset, unescaped_char);
Expand Down Expand Up @@ -226,7 +226,7 @@ impl ast::String {
let mut buf = String::new();
let mut prev_end = 0;
let mut has_error = false;
unescape_literal(text, Self::MODE, &mut |char_range, unescaped_char| match (
unescape_unicode(text, Self::MODE, &mut |char_range, unescaped_char| match (
unescaped_char,
buf.capacity() == 0,
) {
Expand Down Expand Up @@ -270,7 +270,7 @@ impl ast::ByteString {
let mut buf: Vec<u8> = Vec::new();
let mut prev_end = 0;
let mut has_error = false;
unescape_literal(text, Self::MODE, &mut |char_range, unescaped_char| match (
unescape_unicode(text, Self::MODE, &mut |char_range, unescaped_char| match (
unescaped_char,
buf.capacity() == 0,
) {
Expand Down Expand Up @@ -311,7 +311,7 @@ impl IsString for ast::CString {
let text = &self.text()[text_range_no_quotes - start];
let offset = text_range_no_quotes.start() - start;

unescape_c_string(text, Self::MODE, &mut |range, unescaped_char| {
unescape_mixed(text, Self::MODE, &mut |range, unescaped_char| {
let text_range =
TextRange::new(range.start.try_into().unwrap(), range.end.try_into().unwrap());
// XXX: This method should only be used for highlighting ranges. The unescaped
Expand All @@ -336,12 +336,11 @@ impl ast::CString {
let mut buf = Vec::new();
let mut prev_end = 0;
let mut has_error = false;
let mut char_buf = [0u8; 4];
let mut extend_unit = |buf: &mut Vec<u8>, unit: CStrUnit| match unit {
CStrUnit::Byte(b) => buf.push(b),
CStrUnit::Char(c) => buf.extend(c.encode_utf8(&mut char_buf).as_bytes()),
let extend_unit = |buf: &mut Vec<u8>, unit: MixedUnit| match unit {
MixedUnit::Char(c) => buf.extend(c.encode_utf8(&mut [0; 4]).as_bytes()),
MixedUnit::HighByte(b) => buf.push(b),
};
unescape_c_string(text, Self::MODE, &mut |char_range, unescaped| match (
unescape_mixed(text, Self::MODE, &mut |char_range, unescaped| match (
unescaped,
buf.capacity() == 0,
) {
Expand Down
12 changes: 6 additions & 6 deletions crates/syntax/src/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
mod block;

use rowan::Direction;
use rustc_lexer::unescape::{self, unescape_literal, Mode};
use rustc_lexer::unescape::{self, unescape_mixed, unescape_unicode, Mode};

use crate::{
algo,
Expand Down Expand Up @@ -140,7 +140,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
ast::LiteralKind::String(s) => {
if !s.is_raw() {
if let Some(without_quotes) = unquote(text, 1, '"') {
unescape_literal(without_quotes, Mode::Str, &mut |range, char| {
unescape_unicode(without_quotes, Mode::Str, &mut |range, char| {
if let Err(err) = char {
push_err(1, range.start, err);
}
Expand All @@ -151,7 +151,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
ast::LiteralKind::ByteString(s) => {
if !s.is_raw() {
if let Some(without_quotes) = unquote(text, 2, '"') {
unescape_literal(without_quotes, Mode::ByteStr, &mut |range, char| {
unescape_unicode(without_quotes, Mode::ByteStr, &mut |range, char| {
if let Err(err) = char {
push_err(1, range.start, err);
}
Expand All @@ -162,7 +162,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
ast::LiteralKind::CString(s) => {
if !s.is_raw() {
if let Some(without_quotes) = unquote(text, 2, '"') {
unescape_literal(without_quotes, Mode::ByteStr, &mut |range, char| {
unescape_mixed(without_quotes, Mode::CStr, &mut |range, char| {
if let Err(err) = char {
push_err(1, range.start, err);
}
Expand All @@ -172,7 +172,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
}
ast::LiteralKind::Char(_) => {
if let Some(without_quotes) = unquote(text, 1, '\'') {
unescape_literal(without_quotes, Mode::Char, &mut |range, char| {
unescape_unicode(without_quotes, Mode::Char, &mut |range, char| {
if let Err(err) = char {
push_err(1, range.start, err);
}
Expand All @@ -181,7 +181,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
}
ast::LiteralKind::Byte(_) => {
if let Some(without_quotes) = unquote(text, 2, '\'') {
unescape_literal(without_quotes, Mode::Byte, &mut |range, char| {
unescape_unicode(without_quotes, Mode::Byte, &mut |range, char| {
if let Err(err) = char {
push_err(2, range.start, err);
}
Expand Down

0 comments on commit fdf096a

Please sign in to comment.