mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Cleanup
This commit is contained in:
parent
6bfdd38c69
commit
4135696ea7
4 changed files with 11 additions and 6 deletions
|
@ -3,7 +3,7 @@
|
||||||
use base_db::{salsa, CrateId, FileId, SourceDatabase};
|
use base_db::{salsa, CrateId, FileId, SourceDatabase};
|
||||||
use either::Either;
|
use either::Either;
|
||||||
use limit::Limit;
|
use limit::Limit;
|
||||||
use mbe::syntax_node_to_token_tree;
|
use mbe::{syntax_node_to_token_tree, MatchedArmIndex};
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
use span::{AstIdMap, Span, SyntaxContextData, SyntaxContextId};
|
use span::{AstIdMap, Span, SyntaxContextData, SyntaxContextId};
|
||||||
use syntax::{ast, AstNode, Parse, SyntaxElement, SyntaxError, SyntaxNode, SyntaxToken, T};
|
use syntax::{ast, AstNode, Parse, SyntaxElement, SyntaxError, SyntaxNode, SyntaxToken, T};
|
||||||
|
@ -546,7 +546,7 @@ fn macro_expand(
|
||||||
db: &dyn ExpandDatabase,
|
db: &dyn ExpandDatabase,
|
||||||
macro_call_id: MacroCallId,
|
macro_call_id: MacroCallId,
|
||||||
loc: MacroCallLoc,
|
loc: MacroCallLoc,
|
||||||
) -> ExpandResult<(CowArc<tt::Subtree>, Option<u32>)> {
|
) -> ExpandResult<(CowArc<tt::Subtree>, MatchedArmIndex)> {
|
||||||
let _p = tracing::span!(tracing::Level::INFO, "macro_expand").entered();
|
let _p = tracing::span!(tracing::Level::INFO, "macro_expand").entered();
|
||||||
|
|
||||||
let (ExpandResult { value: (tt, matched_arm), err }, span) = match loc.def.kind {
|
let (ExpandResult { value: (tt, matched_arm), err }, span) = match loc.def.kind {
|
||||||
|
|
|
@ -9,7 +9,7 @@ use rustc_hash::FxHashMap;
|
||||||
use span::{Edition, Span};
|
use span::{Edition, Span};
|
||||||
use syntax::SmolStr;
|
use syntax::SmolStr;
|
||||||
|
|
||||||
use crate::{parser::MetaVarKind, ExpandError, ExpandResult};
|
use crate::{parser::MetaVarKind, ExpandError, ExpandResult, MatchedArmIndex};
|
||||||
|
|
||||||
pub(crate) fn expand_rules(
|
pub(crate) fn expand_rules(
|
||||||
rules: &[crate::Rule],
|
rules: &[crate::Rule],
|
||||||
|
@ -18,7 +18,7 @@ pub(crate) fn expand_rules(
|
||||||
new_meta_vars: bool,
|
new_meta_vars: bool,
|
||||||
call_site: Span,
|
call_site: Span,
|
||||||
def_site_edition: Edition,
|
def_site_edition: Edition,
|
||||||
) -> ExpandResult<(tt::Subtree<Span>, Option<u32>)> {
|
) -> ExpandResult<(tt::Subtree<Span>, MatchedArmIndex)> {
|
||||||
let mut match_: Option<(matcher::Match, &crate::Rule, usize)> = None;
|
let mut match_: Option<(matcher::Match, &crate::Rule, usize)> = None;
|
||||||
for (idx, rule) in rules.iter().enumerate() {
|
for (idx, rule) in rules.iter().enumerate() {
|
||||||
let new_match = matcher::match_(&rule.lhs, input, def_site_edition);
|
let new_match = matcher::match_(&rule.lhs, input, def_site_edition);
|
||||||
|
@ -53,7 +53,7 @@ pub(crate) fn expand_rules(
|
||||||
// if we got here, there was no match without errors
|
// if we got here, there was no match without errors
|
||||||
let ExpandResult { value, err: transcribe_err } =
|
let ExpandResult { value, err: transcribe_err } =
|
||||||
transcriber::transcribe(&rule.rhs, &match_.bindings, marker, new_meta_vars, call_site);
|
transcriber::transcribe(&rule.rhs, &match_.bindings, marker, new_meta_vars, call_site);
|
||||||
ExpandResult { value: (value, Some(idx as u32)), err: match_.err.or(transcribe_err) }
|
ExpandResult { value: (value, idx.try_into().ok()), err: match_.err.or(transcribe_err) }
|
||||||
} else {
|
} else {
|
||||||
ExpandResult::new(
|
ExpandResult::new(
|
||||||
(
|
(
|
||||||
|
|
|
@ -122,6 +122,9 @@ impl fmt::Display for CountError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Index of the matched macro arm on successful expansion.
|
||||||
|
pub type MatchedArmIndex = Option<u32>;
|
||||||
|
|
||||||
/// This struct contains AST for a single `macro_rules` definition. What might
|
/// This struct contains AST for a single `macro_rules` definition. What might
|
||||||
/// be very confusing is that AST has almost exactly the same shape as
|
/// be very confusing is that AST has almost exactly the same shape as
|
||||||
/// `tt::TokenTree`, but there's a crucial difference: in macro rules, `$ident`
|
/// `tt::TokenTree`, but there's a crucial difference: in macro rules, `$ident`
|
||||||
|
@ -251,7 +254,7 @@ impl DeclarativeMacro {
|
||||||
new_meta_vars: bool,
|
new_meta_vars: bool,
|
||||||
call_site: Span,
|
call_site: Span,
|
||||||
def_site_edition: Edition,
|
def_site_edition: Edition,
|
||||||
) -> ExpandResult<(tt::Subtree<Span>, Option<u32>)> {
|
) -> ExpandResult<(tt::Subtree<Span>, MatchedArmIndex)> {
|
||||||
expander::expand_rules(&self.rules, tt, marker, new_meta_vars, call_site, def_site_edition)
|
expander::expand_rules(&self.rules, tt, marker, new_meta_vars, call_site, def_site_edition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ use crate::{
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
|
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
|
||||||
pub struct SpanMap<S> {
|
pub struct SpanMap<S> {
|
||||||
spans: Vec<(TextSize, SpanData<S>)>,
|
spans: Vec<(TextSize, SpanData<S>)>,
|
||||||
|
/// Index of the matched macro arm on successful expansion for declarative macros.
|
||||||
|
// FIXME: Does it make sense to have this here?
|
||||||
pub matched_arm: Option<u32>,
|
pub matched_arm: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue