mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 06:03:58 +00:00
fix: Fix includes not working with expr fragment inputs
This commit is contained in:
parent
d32e60467f
commit
df15b6f668
2 changed files with 18 additions and 3 deletions
|
@ -4,7 +4,7 @@ use base_db::AnchoredPath;
|
||||||
use cfg::CfgExpr;
|
use cfg::CfgExpr;
|
||||||
use either::Either;
|
use either::Either;
|
||||||
use intern::{sym, Symbol};
|
use intern::{sym, Symbol};
|
||||||
use mbe::{parse_exprs_with_sep, parse_to_token_tree};
|
use mbe::{parse_exprs_with_sep, parse_to_token_tree, DelimiterKind};
|
||||||
use span::{Edition, EditionedFileId, Span, SpanAnchor, SyntaxContextId, ROOT_ERASED_FILE_AST_ID};
|
use span::{Edition, EditionedFileId, Span, SpanAnchor, SyntaxContextId, ROOT_ERASED_FILE_AST_ID};
|
||||||
use stdx::format_to;
|
use stdx::format_to;
|
||||||
use syntax::{
|
use syntax::{
|
||||||
|
@ -34,7 +34,7 @@ macro_rules! register_builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BuiltinFnLikeExpander {
|
impl BuiltinFnLikeExpander {
|
||||||
pub fn expander(&self) -> fn (&dyn ExpandDatabase, MacroCallId, &tt::Subtree, Span) -> ExpandResult<tt::Subtree> {
|
fn expander(&self) -> fn (&dyn ExpandDatabase, MacroCallId, &tt::Subtree, Span) -> ExpandResult<tt::Subtree> {
|
||||||
match *self {
|
match *self {
|
||||||
$( BuiltinFnLikeExpander::$kind => $expand, )*
|
$( BuiltinFnLikeExpander::$kind => $expand, )*
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ macro_rules! register_builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EagerExpander {
|
impl EagerExpander {
|
||||||
pub fn expander(&self) -> fn (&dyn ExpandDatabase, MacroCallId, &tt::Subtree, Span) -> ExpandResult<tt::Subtree> {
|
fn expander(&self) -> fn (&dyn ExpandDatabase, MacroCallId, &tt::Subtree, Span) -> ExpandResult<tt::Subtree> {
|
||||||
match *self {
|
match *self {
|
||||||
$( EagerExpander::$e_kind => $e_expand, )*
|
$( EagerExpander::$e_kind => $e_expand, )*
|
||||||
}
|
}
|
||||||
|
@ -711,6 +711,20 @@ fn parse_string(tt: &tt::Subtree) -> Result<(Symbol, Span), ExpandError> {
|
||||||
kind: tt::LitKind::Str,
|
kind: tt::LitKind::Str,
|
||||||
suffix: _,
|
suffix: _,
|
||||||
})) => Some((unescape_str(text), *span)),
|
})) => Some((unescape_str(text), *span)),
|
||||||
|
// FIXME: We wrap expression fragments in parentheses which can break this expectation
|
||||||
|
// here
|
||||||
|
// Remove this once we handle none delims correctly
|
||||||
|
tt::TokenTree::Subtree(t) if t.delimiter.kind == DelimiterKind::Parenthesis => {
|
||||||
|
t.token_trees.first().and_then(|tt| match tt {
|
||||||
|
tt::TokenTree::Leaf(tt::Leaf::Literal(tt::Literal {
|
||||||
|
symbol: text,
|
||||||
|
span,
|
||||||
|
kind: tt::LitKind::Str,
|
||||||
|
suffix: _,
|
||||||
|
})) => Some((unescape_str(text), *span)),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
.ok_or(mbe::ExpandError::ConversionError.into())
|
.ok_or(mbe::ExpandError::ConversionError.into())
|
||||||
|
|
|
@ -24,6 +24,7 @@ pub mod span_map;
|
||||||
|
|
||||||
mod cfg_process;
|
mod cfg_process;
|
||||||
mod fixup;
|
mod fixup;
|
||||||
|
|
||||||
use attrs::collect_attrs;
|
use attrs::collect_attrs;
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
use triomphe::Arc;
|
use triomphe::Arc;
|
||||||
|
|
Loading…
Reference in a new issue