From 4e76e884bd74430223919f29d49d7ae9710b48cf Mon Sep 17 00:00:00 2001 From: Josh Mcguigan Date: Thu, 22 Oct 2020 20:43:07 -0700 Subject: correct hover for items with doc attribute with raw strings --- crates/ide/src/hover.rs | 27 +++++++++++++++++++++++++++ crates/syntax/src/ast/node_ext.rs | 14 +++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) (limited to 'crates') diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index 6466422c5..508e8af20 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs @@ -637,6 +637,33 @@ fn main() { } ); } + #[test] + fn hover_shows_fn_doc_attr_raw_string() { + check( + r##" +#[doc = r#"Raw string doc attr"#] +pub fn foo<|>(_: &Path) {} + +fn main() { } +"##, + expect![[r##" + *foo* + + ```rust + test + ``` + + ```rust + pub fn foo(_: &Path) + ``` + + --- + + Raw string doc attr + "##]], + ); + } + #[test] fn hover_shows_struct_field_info() { // Hovering over the field when instantiating diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index 50c1c157d..c5cd1c504 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -7,7 +7,7 @@ use itertools::Itertools; use parser::SyntaxKind; use crate::{ - ast::{self, support, AstNode, NameOwner, SyntaxNode}, + ast::{self, support, token_ext::HasStringValue, AstNode, AstToken, NameOwner, SyntaxNode}, SmolStr, SyntaxElement, SyntaxToken, T, }; @@ -53,8 +53,16 @@ impl ast::Attr { pub fn as_simple_key_value(&self) -> Option<(SmolStr, SmolStr)> { let lit = self.literal()?; let key = self.simple_name()?; - // FIXME: escape? raw string? - let value = lit.syntax().first_token()?.text().trim_matches('"').into(); + let value_token = lit.syntax().first_token()?; + + let value: SmolStr = if let Some(s) = ast::String::cast(value_token.clone()) { + s.value()?.into() + } else if let Some(s) = ast::RawString::cast(value_token) { + s.value()?.into() + } else { + return None; + }; + Some((key, value)) } -- cgit v1.2.3