mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 04:44:57 +00:00
Shrink hir_expand::attr::AttrInput by boxing a variant
This commit is contained in:
parent
993299ee3f
commit
b6fb35f20c
2 changed files with 8 additions and 8 deletions
|
@ -1028,13 +1028,13 @@ fn attr_macro_as_call_id(
|
||||||
def: MacroDefId,
|
def: MacroDefId,
|
||||||
) -> MacroCallId {
|
) -> MacroCallId {
|
||||||
let arg = match macro_attr.input.as_deref() {
|
let arg = match macro_attr.input.as_deref() {
|
||||||
Some(AttrInput::TokenTree(tt, map)) => (
|
Some(AttrInput::TokenTree(tt)) => (
|
||||||
{
|
{
|
||||||
let mut tt = tt.clone();
|
let mut tt = tt.0.clone();
|
||||||
tt.delimiter = tt::Delimiter::UNSPECIFIED;
|
tt.delimiter = tt::Delimiter::UNSPECIFIED;
|
||||||
tt
|
tt
|
||||||
},
|
},
|
||||||
map.clone(),
|
tt.1.clone(),
|
||||||
),
|
),
|
||||||
_ => (tt::Subtree::empty(), Default::default()),
|
_ => (tt::Subtree::empty(), Default::default()),
|
||||||
};
|
};
|
||||||
|
|
|
@ -192,14 +192,14 @@ pub enum AttrInput {
|
||||||
/// `#[attr = "string"]`
|
/// `#[attr = "string"]`
|
||||||
Literal(SmolStr),
|
Literal(SmolStr),
|
||||||
/// `#[attr(subtree)]`
|
/// `#[attr(subtree)]`
|
||||||
TokenTree(tt::Subtree, mbe::TokenMap),
|
TokenTree(Box<(tt::Subtree, mbe::TokenMap)>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for AttrInput {
|
impl fmt::Display for AttrInput {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
AttrInput::Literal(lit) => write!(f, " = \"{}\"", lit.escape_debug()),
|
AttrInput::Literal(lit) => write!(f, " = \"{}\"", lit.escape_debug()),
|
||||||
AttrInput::TokenTree(subtree, _) => subtree.fmt(f),
|
AttrInput::TokenTree(tt) => tt.0.fmt(f),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,7 @@ impl Attr {
|
||||||
Some(Interned::new(AttrInput::Literal(value)))
|
Some(Interned::new(AttrInput::Literal(value)))
|
||||||
} else if let Some(tt) = ast.token_tree() {
|
} else if let Some(tt) = ast.token_tree() {
|
||||||
let (tree, map) = syntax_node_to_token_tree(tt.syntax());
|
let (tree, map) = syntax_node_to_token_tree(tt.syntax());
|
||||||
Some(Interned::new(AttrInput::TokenTree(tree, map)))
|
Some(Interned::new(AttrInput::TokenTree(Box::new((tree, map)))))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -256,7 +256,7 @@ impl Attr {
|
||||||
/// #[path(ident)]
|
/// #[path(ident)]
|
||||||
pub fn single_ident_value(&self) -> Option<&tt::Ident> {
|
pub fn single_ident_value(&self) -> Option<&tt::Ident> {
|
||||||
match self.input.as_deref()? {
|
match self.input.as_deref()? {
|
||||||
AttrInput::TokenTree(subtree, _) => match &*subtree.token_trees {
|
AttrInput::TokenTree(tt) => match &*tt.0.token_trees {
|
||||||
[tt::TokenTree::Leaf(tt::Leaf::Ident(ident))] => Some(ident),
|
[tt::TokenTree::Leaf(tt::Leaf::Ident(ident))] => Some(ident),
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
|
@ -267,7 +267,7 @@ impl Attr {
|
||||||
/// #[path TokenTree]
|
/// #[path TokenTree]
|
||||||
pub fn token_tree_value(&self) -> Option<&Subtree> {
|
pub fn token_tree_value(&self) -> Option<&Subtree> {
|
||||||
match self.input.as_deref()? {
|
match self.input.as_deref()? {
|
||||||
AttrInput::TokenTree(subtree, _) => Some(subtree),
|
AttrInput::TokenTree(tt) => Some(&tt.0),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue