mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-30 03:27:44 +00:00
Remove usage of rustc_lexer::unescape in rust-analyzer
This commit is contained in:
parent
7671097ff6
commit
f2ac210f0c
7 changed files with 21 additions and 18 deletions
8
Cargo.lock
generated
8
Cargo.lock
generated
|
|
@ -1270,6 +1270,7 @@ dependencies = [
|
||||||
"edition",
|
"edition",
|
||||||
"expect-test",
|
"expect-test",
|
||||||
"ra-ap-rustc_lexer",
|
"ra-ap-rustc_lexer",
|
||||||
|
"rustc-literal-escaper",
|
||||||
"stdx",
|
"stdx",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
@ -1743,6 +1744,12 @@ version = "2.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
|
checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc-literal-escaper"
|
||||||
|
version = "0.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cfdd0fcb1409d38cb2d940400497e2384a4a04b8685ee92a0a7a8986ccd72115"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-stable-hash"
|
name = "rustc-stable-hash"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
|
|
@ -1982,6 +1989,7 @@ dependencies = [
|
||||||
"rayon",
|
"rayon",
|
||||||
"rowan",
|
"rowan",
|
||||||
"rustc-hash 2.0.0",
|
"rustc-hash 2.0.0",
|
||||||
|
"rustc-literal-escaper",
|
||||||
"rustc_apfloat",
|
"rustc_apfloat",
|
||||||
"smol_str",
|
"smol_str",
|
||||||
"stdx",
|
"stdx",
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ rust-version.workspace = true
|
||||||
[dependencies]
|
[dependencies]
|
||||||
drop_bomb = "0.1.5"
|
drop_bomb = "0.1.5"
|
||||||
ra-ap-rustc_lexer.workspace = true
|
ra-ap-rustc_lexer.workspace = true
|
||||||
|
rustc-literal-escaper = "0.0.1"
|
||||||
tracing = { workspace = true, optional = true }
|
tracing = { workspace = true, optional = true }
|
||||||
|
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
use std::ops;
|
use std::ops;
|
||||||
|
|
||||||
use rustc_lexer::unescape::{EscapeError, Mode};
|
use rustc_literal_escaper::{EscapeError, Mode, unescape_byte, unescape_char, unescape_mixed, unescape_unicode};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
Edition,
|
Edition,
|
||||||
|
|
@ -282,7 +282,7 @@ impl<'a> Converter<'a> {
|
||||||
let text = &self.res.text[self.offset + 1..][..len - 1];
|
let text = &self.res.text[self.offset + 1..][..len - 1];
|
||||||
let i = text.rfind('\'').unwrap();
|
let i = text.rfind('\'').unwrap();
|
||||||
let text = &text[..i];
|
let text = &text[..i];
|
||||||
if let Err(e) = rustc_lexer::unescape::unescape_char(text) {
|
if let Err(e) = unescape_char(text) {
|
||||||
err = error_to_diagnostic_message(e, Mode::Char);
|
err = error_to_diagnostic_message(e, Mode::Char);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -295,7 +295,7 @@ impl<'a> Converter<'a> {
|
||||||
let text = &self.res.text[self.offset + 2..][..len - 2];
|
let text = &self.res.text[self.offset + 2..][..len - 2];
|
||||||
let i = text.rfind('\'').unwrap();
|
let i = text.rfind('\'').unwrap();
|
||||||
let text = &text[..i];
|
let text = &text[..i];
|
||||||
if let Err(e) = rustc_lexer::unescape::unescape_byte(text) {
|
if let Err(e) = unescape_byte(text) {
|
||||||
err = error_to_diagnostic_message(e, Mode::Byte);
|
err = error_to_diagnostic_message(e, Mode::Byte);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -402,14 +402,14 @@ fn unescape_string_error_message(text: &str, mode: Mode) -> &'static str {
|
||||||
let mut error_message = "";
|
let mut error_message = "";
|
||||||
match mode {
|
match mode {
|
||||||
Mode::CStr => {
|
Mode::CStr => {
|
||||||
rustc_lexer::unescape::unescape_mixed(text, mode, &mut |_, res| {
|
unescape_mixed(text, mode, &mut |_, res| {
|
||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
error_message = error_to_diagnostic_message(e, mode);
|
error_message = error_to_diagnostic_message(e, mode);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Mode::ByteStr | Mode::Str => {
|
Mode::ByteStr | Mode::Str => {
|
||||||
rustc_lexer::unescape::unescape_unicode(text, mode, &mut |_, res| {
|
unescape_unicode(text, mode, &mut |_, res| {
|
||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
error_message = error_to_diagnostic_message(e, mode);
|
error_message = error_to_diagnostic_message(e, mode);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ either.workspace = true
|
||||||
itertools.workspace = true
|
itertools.workspace = true
|
||||||
rowan = "=0.15.15"
|
rowan = "=0.15.15"
|
||||||
rustc-hash.workspace = true
|
rustc-hash.workspace = true
|
||||||
|
rustc-literal-escaper = "0.0.1"
|
||||||
indexmap.workspace = true
|
indexmap.workspace = true
|
||||||
smol_str.workspace = true
|
smol_str.workspace = true
|
||||||
triomphe.workspace = true
|
triomphe.workspace = true
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use std::{borrow::Cow, num::ParseIntError};
|
use std::{borrow::Cow, num::ParseIntError};
|
||||||
|
|
||||||
use rustc_lexer::unescape::{
|
use rustc_literal_escaper::{
|
||||||
unescape_byte, unescape_char, unescape_mixed, unescape_unicode, EscapeError, MixedUnit, Mode,
|
unescape_byte, unescape_char, unescape_mixed, unescape_unicode, EscapeError, MixedUnit, Mode,
|
||||||
};
|
};
|
||||||
use stdx::always;
|
use stdx::always;
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,6 @@
|
||||||
//! [RFC]: <https://github.com/rust-lang/rfcs/pull/2256>
|
//! [RFC]: <https://github.com/rust-lang/rfcs/pull/2256>
|
||||||
//! [Swift]: <https://github.com/apple/swift/blob/13d593df6f359d0cb2fc81cfaac273297c539455/lib/Syntax/README.md>
|
//! [Swift]: <https://github.com/apple/swift/blob/13d593df6f359d0cb2fc81cfaac273297c539455/lib/Syntax/README.md>
|
||||||
|
|
||||||
#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]
|
|
||||||
|
|
||||||
#[cfg(not(feature = "in-rust-tree"))]
|
|
||||||
extern crate ra_ap_rustc_lexer as rustc_lexer;
|
|
||||||
#[cfg(feature = "in-rust-tree")]
|
|
||||||
extern crate rustc_lexer;
|
|
||||||
|
|
||||||
mod parsing;
|
mod parsing;
|
||||||
mod ptr;
|
mod ptr;
|
||||||
mod syntax_error;
|
mod syntax_error;
|
||||||
|
|
@ -64,7 +57,7 @@ pub use rowan::{
|
||||||
api::Preorder, Direction, GreenNode, NodeOrToken, SyntaxText, TextRange, TextSize,
|
api::Preorder, Direction, GreenNode, NodeOrToken, SyntaxText, TextRange, TextSize,
|
||||||
TokenAtOffset, WalkEvent,
|
TokenAtOffset, WalkEvent,
|
||||||
};
|
};
|
||||||
pub use rustc_lexer::unescape;
|
pub use rustc_literal_escaper as unescape;
|
||||||
pub use smol_str::{format_smolstr, SmolStr, SmolStrBuilder, ToSmolStr};
|
pub use smol_str::{format_smolstr, SmolStr, SmolStrBuilder, ToSmolStr};
|
||||||
|
|
||||||
/// `Parse` is the result of the parsing: a syntax tree and a collection of
|
/// `Parse` is the result of the parsing: a syntax tree and a collection of
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
mod block;
|
mod block;
|
||||||
|
|
||||||
use rowan::Direction;
|
use rowan::Direction;
|
||||||
use rustc_lexer::unescape::{self, unescape_mixed, unescape_unicode, Mode};
|
use rustc_literal_escaper::{unescape_mixed, unescape_unicode, EscapeError, Mode};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
algo,
|
algo,
|
||||||
|
|
@ -44,8 +44,8 @@ pub(crate) fn validate(root: &SyntaxNode, errors: &mut Vec<SyntaxError>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rustc_unescape_error_to_string(err: unescape::EscapeError) -> (&'static str, bool) {
|
fn rustc_unescape_error_to_string(err: EscapeError) -> (&'static str, bool) {
|
||||||
use unescape::EscapeError as EE;
|
use rustc_literal_escaper::EscapeError as EE;
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
let err_message = match err {
|
let err_message = match err {
|
||||||
|
|
@ -127,7 +127,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
|
||||||
let text = token.text();
|
let text = token.text();
|
||||||
|
|
||||||
// FIXME: lift this lambda refactor to `fn` (https://github.com/rust-lang/rust-analyzer/pull/2834#discussion_r366199205)
|
// FIXME: lift this lambda refactor to `fn` (https://github.com/rust-lang/rust-analyzer/pull/2834#discussion_r366199205)
|
||||||
let mut push_err = |prefix_len, off, err: unescape::EscapeError| {
|
let mut push_err = |prefix_len, off, err: EscapeError| {
|
||||||
let off = token.text_range().start() + TextSize::try_from(off + prefix_len).unwrap();
|
let off = token.text_range().start() + TextSize::try_from(off + prefix_len).unwrap();
|
||||||
let (message, is_err) = rustc_unescape_error_to_string(err);
|
let (message, is_err) = rustc_unescape_error_to_string(err);
|
||||||
// FIXME: Emit lexer warnings
|
// FIXME: Emit lexer warnings
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue