Unnamed repository; edit this file 'description' to name the repository.
remove make from prettify_macro_expansion and add factory to dollar_crate_replacement closure
bit-aloo 7 days ago
parent 1283098 · commit a022fc5
-rw-r--r--crates/hir-expand/src/prettify_macro_expansion_.rs18
-rw-r--r--crates/mbe/src/tests.rs2
-rw-r--r--crates/syntax-bridge/src/prettify_macro_expansion.rs7
3 files changed, 11 insertions, 16 deletions
diff --git a/crates/hir-expand/src/prettify_macro_expansion_.rs b/crates/hir-expand/src/prettify_macro_expansion_.rs
index 79e6f0f5b7..687bd1a714 100644
--- a/crates/hir-expand/src/prettify_macro_expansion_.rs
+++ b/crates/hir-expand/src/prettify_macro_expansion_.rs
@@ -2,8 +2,7 @@
use base_db::Crate;
use rustc_hash::FxHashMap;
-use syntax::NodeOrToken;
-use syntax::{SyntaxNode, ast::make};
+use syntax::SyntaxNode;
use crate::{db::ExpandDatabase, span_map::ExpansionSpanMap};
@@ -22,7 +21,7 @@ pub fn prettify_macro_expansion(
let mut syntax_ctx_id_to_dollar_crate_replacement = FxHashMap::default();
syntax_bridge::prettify_macro_expansion::prettify_macro_expansion(
syn,
- &mut |dollar_crate| {
+ &mut |dollar_crate, make| {
let ctx = span_map.span_at(dollar_crate.text_range().start() + span_offset).ctx;
let replacement =
syntax_ctx_id_to_dollar_crate_replacement.entry(ctx).or_insert_with(|| {
@@ -38,13 +37,13 @@ pub fn prettify_macro_expansion(
// is inserted, and also understandable to the user.
// Lastly, if nothing else found, resort to leaving `$crate`.
if target_crate_id == macro_def_crate {
- make::tokens::crate_kw()
+ make.token(syntax::SyntaxKind::CRATE_KW)
} else if let Some(dep) =
target_crate.dependencies.iter().find(|dep| dep.crate_id == macro_def_crate)
{
- make::tokens::ident(dep.name.as_str())
+ make.ident(dep.name.as_str())
} else if let Some(crate_name) = &macro_def_crate.extra_data(db).display_name {
- make::tokens::ident(crate_name.crate_name().as_str())
+ make.ident(crate_name.crate_name().as_str())
} else {
dollar_crate.clone()
}
@@ -53,12 +52,7 @@ pub fn prettify_macro_expansion(
// The parent may have many children, and looking for the token may yield incorrect results.
return None;
}
- // We need to `clone_subtree()` but rowan doesn't provide such operation for tokens.
- let parent = replacement.parent().unwrap().clone_subtree().clone_for_update();
- parent
- .children_with_tokens()
- .filter_map(NodeOrToken::into_token)
- .find(|it| it.kind() == replacement.kind())
+ Some(replacement.clone())
},
|_| (),
)
diff --git a/crates/mbe/src/tests.rs b/crates/mbe/src/tests.rs
index 271dfc877b..f3ebb663d9 100644
--- a/crates/mbe/src/tests.rs
+++ b/crates/mbe/src/tests.rs
@@ -74,7 +74,7 @@ fn check_(
"{}",
syntax_bridge::prettify_macro_expansion::prettify_macro_expansion(
node.syntax_node(),
- &mut |_| None,
+ &mut |_, _| None,
|_| ()
)
);
diff --git a/crates/syntax-bridge/src/prettify_macro_expansion.rs b/crates/syntax-bridge/src/prettify_macro_expansion.rs
index 648119ed70..001c920c9b 100644
--- a/crates/syntax-bridge/src/prettify_macro_expansion.rs
+++ b/crates/syntax-bridge/src/prettify_macro_expansion.rs
@@ -3,6 +3,7 @@ use syntax::{
NodeOrToken,
SyntaxKind::{self, *},
SyntaxNode, SyntaxToken, T, WalkEvent,
+ ast::syntax_factory::SyntaxFactory,
syntax_editor::{Position, SyntaxEditor},
};
@@ -21,7 +22,7 @@ pub enum PrettifyWsKind {
#[deprecated = "use `hir_expand::prettify_macro_expansion()` instead"]
pub fn prettify_macro_expansion(
syn: SyntaxNode,
- dollar_crate_replacement: &mut dyn FnMut(&SyntaxToken) -> Option<SyntaxToken>,
+ dollar_crate_replacement: &mut dyn FnMut(&SyntaxToken, &SyntaxFactory) -> Option<SyntaxToken>,
inspect_mods: impl FnOnce(&[(Position, PrettifyWsKind)]),
) -> SyntaxNode {
let mut indent = 0;
@@ -66,7 +67,7 @@ pub fn prettify_macro_expansion(
};
if token.kind() == SyntaxKind::IDENT
&& token.text() == "$crate"
- && let Some(replacement) = dollar_crate_replacement(&token)
+ && let Some(replacement) = dollar_crate_replacement(&token, editor.make())
{
dollar_crate_replacements.push((token.clone(), replacement));
}
@@ -191,7 +192,7 @@ mod tests {
let source_file = syntax::ast::SourceFile::parse(&ra_fixture, span::Edition::CURRENT);
let syn = remove_whitespaces(&source_file.syntax_node());
- let pretty = prettify_macro_expansion(syn, &mut |_| None, |_| ());
+ let pretty = prettify_macro_expansion(syn, &mut |_, _| None, |_| ());
let mut pretty = pretty.to_string();
if pretty.contains('\n') {
pretty.push('\n');