Unnamed repository; edit this file 'description' to name the repository.
feat: add inlay hint support for block expr with lifetime label
Young-Flash 2024-07-20
parent b333f85 · commit 0416dec
-rw-r--r--crates/ide/src/inlay_hints/closing_brace.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/crates/ide/src/inlay_hints/closing_brace.rs b/crates/ide/src/inlay_hints/closing_brace.rs
index d8aa4ba4e1..de11ca4f69 100644
--- a/crates/ide/src/inlay_hints/closing_brace.rs
+++ b/crates/ide/src/inlay_hints/closing_brace.rs
@@ -18,7 +18,7 @@ pub(super) fn hints(
sema: &Semantics<'_, RootDatabase>,
config: &InlayHintsConfig,
file_id: EditionedFileId,
- node: SyntaxNode,
+ mut node: SyntaxNode,
) -> Option<()> {
let min_lines = config.closing_brace_hints_min_lines?;
@@ -52,6 +52,13 @@ pub(super) fn hints(
let module = ast::Module::cast(list.syntax().parent()?)?;
(format!("mod {}", module.name()?), module.name().map(name))
+ } else if let Some(label) = ast::Label::cast(node.clone()) {
+ // in this case, `ast::Label` could be seen as a part of `ast::BlockExpr`, to respect the `min_lines` config
+ node = node.parent()?;
+ let block = label.syntax().parent().and_then(ast::BlockExpr::cast)?;
+ closing_token = block.stmt_list()?.r_curly_token()?;
+ let lifetime = label.lifetime().map_or_else(String::new, |it| it.to_string());
+ (lifetime, Some(label.syntax().text_range()))
} else if let Some(block) = ast::BlockExpr::cast(node.clone()) {
closing_token = block.stmt_list()?.r_curly_token()?;