From 28b7460db18d965d80e14637e62981892a05721e Mon Sep 17 00:00:00 2001 From: gftea Date: Mon, 30 Jan 2023 17:57:27 +0100 Subject: [PATCH] fix negative trait bound in outline view (#14044) --- crates/ide/src/file_structure.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/ide/src/file_structure.rs b/crates/ide/src/file_structure.rs index 68fd0952b4..ab1365e317 100644 --- a/crates/ide/src/file_structure.rs +++ b/crates/ide/src/file_structure.rs @@ -160,7 +160,10 @@ fn structure_node(node: &SyntaxNode) -> Option { let label = match target_trait { None => format!("impl {}", target_type.syntax().text()), Some(t) => { - format!("impl {} for {}", t.syntax().text(), target_type.syntax().text(),) + format!("impl {}{} for {}", + it.excl_token().map(|x| x.to_string()).unwrap_or_default(), + t.syntax().text(), + target_type.syntax().text(),) } }; @@ -213,6 +216,26 @@ mod tests { expect.assert_debug_eq(&structure) } + #[test] + fn test_nagative_trait_bound() { + let txt = r#"impl !Unpin for Test {}"#; + check(txt, expect![[r#" + [ + StructureNode { + parent: None, + label: "impl !Unpin for Test", + navigation_range: 16..20, + node_range: 0..23, + kind: SymbolKind( + Impl, + ), + detail: None, + deprecated: false, + }, + ] + "#]]); + } + #[test] fn test_file_structure() { check(