mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 05:45:12 +00:00
Render literal escaping errors in hovers
This commit is contained in:
parent
253929f6ae
commit
a39c0493a1
10 changed files with 71 additions and 82 deletions
|
@ -123,7 +123,7 @@ fn try_lookup_include_path(
|
|||
{
|
||||
return None;
|
||||
}
|
||||
let path = token.value()?;
|
||||
let path = token.value().ok()?;
|
||||
|
||||
let file_id = sema.db.resolve_path(AnchoredPath { anchor: file_id, path: &path })?;
|
||||
let size = sema.db.file_text(file_id).len().try_into().ok()?;
|
||||
|
@ -179,11 +179,11 @@ fn try_filter_trait_item_definition(
|
|||
AssocItem::Const(..) | AssocItem::TypeAlias(..) => {
|
||||
let trait_ = assoc.implemented_trait(db)?;
|
||||
let name = def.name(db)?;
|
||||
let discri_value = discriminant(&assoc);
|
||||
let discriminant_value = discriminant(&assoc);
|
||||
trait_
|
||||
.items(db)
|
||||
.iter()
|
||||
.filter(|itm| discriminant(*itm) == discri_value)
|
||||
.filter(|itm| discriminant(*itm) == discriminant_value)
|
||||
.find_map(|itm| (itm.name(db)? == name).then(|| itm.try_to_nav(db)).flatten())
|
||||
.map(|it| it.collect())
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ use ide_db::{
|
|||
FxIndexSet, RootDatabase,
|
||||
};
|
||||
use itertools::{multizip, Itertools};
|
||||
use syntax::{ast, match_ast, AstNode, AstToken, SyntaxKind::*, SyntaxNode, T};
|
||||
use syntax::{ast, AstNode, SyntaxKind::*, SyntaxNode, T};
|
||||
|
||||
use crate::{
|
||||
doc_links::token_as_doc_comment,
|
||||
|
|
|
@ -533,11 +533,11 @@ pub(super) fn literal(sema: &Semantics<'_, RootDatabase>, token: SyntaxToken) ->
|
|||
|
||||
let value = match_ast! {
|
||||
match token {
|
||||
ast::String(string) => Ok(string.value()?.to_string()),
|
||||
ast::ByteString(string) => Ok(format_args!("{:?}", string.value()?).to_string()),
|
||||
ast::CString(string) => Ok(std::str::from_utf8(string.value()?.as_ref()).ok()?.to_owned()),
|
||||
ast::Char(char) => Ok(char.value()?.to_string()),
|
||||
ast::Byte(byte) => Ok(format!("0x{:X}", byte.value()?)),
|
||||
ast::String(string) => string.value().as_ref().map_err(|e| format!("{e:?}")).map(ToString::to_string),
|
||||
ast::ByteString(string) => string.value().as_ref().map_err(|e| format!("{e:?}")).map(|it| format!("{it:?}")),
|
||||
ast::CString(string) => string.value().as_ref().map_err(|e| format!("{e:?}")).map(|it| std::str::from_utf8(it).map_or_else(|e| format!("{e:?}"), ToOwned::to_owned)),
|
||||
ast::Char(char) => char .value().as_ref().map_err(|e| format!("{e:?}")).map(ToString::to_string),
|
||||
ast::Byte(byte) => byte .value().as_ref().map_err(|e| format!("{e:?}")).map(|it| format!("0x{it:X}")),
|
||||
ast::FloatNumber(num) => {
|
||||
let (text, _) = num.split_into_parts();
|
||||
let text = text.replace('_', "");
|
||||
|
|
|
@ -25,7 +25,7 @@ pub(super) fn highlight_escape_string<T: IsString>(
|
|||
}
|
||||
|
||||
pub(super) fn highlight_escape_char(stack: &mut Highlights, char: &Char, start: TextSize) {
|
||||
if char.value().is_none() {
|
||||
if char.value().is_err() {
|
||||
// We do not emit invalid escapes highlighting here. The lexer would likely be in a bad
|
||||
// state and this token contains junks, since `'` is not a reliable delimiter (consider
|
||||
// lifetimes). Nonetheless, parser errors should already be emitted.
|
||||
|
@ -48,7 +48,7 @@ pub(super) fn highlight_escape_char(stack: &mut Highlights, char: &Char, start:
|
|||
}
|
||||
|
||||
pub(super) fn highlight_escape_byte(stack: &mut Highlights, byte: &Byte, start: TextSize) {
|
||||
if byte.value().is_none() {
|
||||
if byte.value().is_err() {
|
||||
// See `highlight_escape_char` for why no error highlighting here.
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ pub(super) fn ra_fixture(
|
|||
if !active_parameter.ident().map_or(false, |name| name.text().starts_with("ra_fixture")) {
|
||||
return None;
|
||||
}
|
||||
let value = literal.value()?;
|
||||
let value = literal.value().ok()?;
|
||||
|
||||
if let Some(range) = literal.open_quote_text_range() {
|
||||
hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None })
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue