Fix go-to-def for #[doc = include_str!("path")]
This commit is contained in:
parent
a415fb4c4e
commit
1c0ec9f0c8
@ -232,8 +232,13 @@ pub(crate) fn token_as_doc_comment(doc_token: &SyntaxToken) -> Option<DocComment
|
|||||||
(match_ast! {
|
(match_ast! {
|
||||||
match doc_token {
|
match doc_token {
|
||||||
ast::Comment(comment) => TextSize::try_from(comment.prefix().len()).ok(),
|
ast::Comment(comment) => TextSize::try_from(comment.prefix().len()).ok(),
|
||||||
ast::String(string) => doc_token.parent_ancestors().find_map(ast::Attr::cast)
|
ast::String(string) => {
|
||||||
.filter(|attr| attr.simple_name().as_deref() == Some("doc")).and_then(|_| string.open_quote_text_range().map(|it| it.len())),
|
doc_token.parent_ancestors().find_map(ast::Attr::cast).filter(|attr| attr.simple_name().as_deref() == Some("doc"))?;
|
||||||
|
if doc_token.parent_ancestors().find_map(ast::MacroCall::cast).filter(|mac| mac.path().and_then(|p| p.segment()?.name_ref()).as_ref().map(|n| n.text()).as_deref() == Some("include_str")).is_some() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
string.open_quote_text_range().map(|it| it.len())
|
||||||
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}).map(|prefix_len| DocCommentToken { prefix_len, doc_token: doc_token.clone() })
|
}).map(|prefix_len| DocCommentToken { prefix_len, doc_token: doc_token.clone() })
|
||||||
|
@ -1367,6 +1367,24 @@ fn main() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn goto_doc_include_str() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
macro_rules! include_str {}
|
||||||
|
|
||||||
|
#[doc = include_str!("docs.md$0")]
|
||||||
|
struct Item;
|
||||||
|
|
||||||
|
//- /docs.md
|
||||||
|
// docs
|
||||||
|
//^file
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn goto_shadow_include() {
|
fn goto_shadow_include() {
|
||||||
check(
|
check(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user