diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-03-18 19:26:10 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-03-18 19:26:10 +0000 |
commit | b70bea0d7994cbe7b1e01e6b2e0f4ab3ac2c6fd5 (patch) | |
tree | aac5c28a622b6ef3c5639c3e9ab93c11ffa5f678 /crates/ide/src/syntax_highlighting/inject.rs | |
parent | f57ce6f5588fe62da6eab7a9ad3a3d06a9cd2ac0 (diff) | |
parent | d41a1690d2aa5d3287b00d100897136b6186c39c (diff) |
Merge #8083
8083: Track source file IDs in source mapping of Attrs r=jonas-schievink a=Veykril
Fixes the panics/incorrect injection highlighting of outline module declarations until we figure out a nicer source mapping strategy for attributes.
Co-authored-by: Lukas Wirth <[email protected]>
Diffstat (limited to 'crates/ide/src/syntax_highlighting/inject.rs')
-rw-r--r-- | crates/ide/src/syntax_highlighting/inject.rs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/crates/ide/src/syntax_highlighting/inject.rs b/crates/ide/src/syntax_highlighting/inject.rs index 947cc974c..e6dbd307e 100644 --- a/crates/ide/src/syntax_highlighting/inject.rs +++ b/crates/ide/src/syntax_highlighting/inject.rs | |||
@@ -3,7 +3,7 @@ | |||
3 | use std::{mem, ops::Range}; | 3 | use std::{mem, ops::Range}; |
4 | 4 | ||
5 | use either::Either; | 5 | use either::Either; |
6 | use hir::{HasAttrs, Semantics}; | 6 | use hir::{HasAttrs, InFile, Semantics}; |
7 | use ide_db::{call_info::ActiveParameter, defs::Definition}; | 7 | use ide_db::{call_info::ActiveParameter, defs::Definition}; |
8 | use syntax::{ | 8 | use syntax::{ |
9 | ast::{self, AstNode, AttrsOwner, DocCommentsOwner}, | 9 | ast::{self, AstNode, AttrsOwner, DocCommentsOwner}, |
@@ -148,8 +148,12 @@ fn doc_attributes<'node>( | |||
148 | } | 148 | } |
149 | 149 | ||
150 | /// Injection of syntax highlighting of doctests. | 150 | /// Injection of syntax highlighting of doctests. |
151 | pub(super) fn doc_comment(hl: &mut Highlights, sema: &Semantics<RootDatabase>, node: &SyntaxNode) { | 151 | pub(super) fn doc_comment( |
152 | let (owner, attributes, def) = match doc_attributes(sema, node) { | 152 | hl: &mut Highlights, |
153 | sema: &Semantics<RootDatabase>, | ||
154 | node: InFile<&SyntaxNode>, | ||
155 | ) { | ||
156 | let (owner, attributes, def) = match doc_attributes(sema, node.value) { | ||
153 | Some(it) => it, | 157 | Some(it) => it, |
154 | None => return, | 158 | None => return, |
155 | }; | 159 | }; |
@@ -157,7 +161,12 @@ pub(super) fn doc_comment(hl: &mut Highlights, sema: &Semantics<RootDatabase>, n | |||
157 | let mut inj = Injector::default(); | 161 | let mut inj = Injector::default(); |
158 | inj.add_unmapped("fn doctest() {\n"); | 162 | inj.add_unmapped("fn doctest() {\n"); |
159 | 163 | ||
160 | let attrs_source_map = attributes.source_map(&owner); | 164 | let attrs_source_map = match def { |
165 | Definition::ModuleDef(hir::ModuleDef::Module(module)) => { | ||
166 | attributes.source_map_for_module(sema.db, module.into()) | ||
167 | } | ||
168 | _ => attributes.source_map(node.with_value(&owner)), | ||
169 | }; | ||
161 | 170 | ||
162 | let mut is_codeblock = false; | 171 | let mut is_codeblock = false; |
163 | let mut is_doctest = false; | 172 | let mut is_doctest = false; |
@@ -168,7 +177,10 @@ pub(super) fn doc_comment(hl: &mut Highlights, sema: &Semantics<RootDatabase>, n | |||
168 | let mut intra_doc_links = Vec::new(); | 177 | let mut intra_doc_links = Vec::new(); |
169 | let mut string; | 178 | let mut string; |
170 | for attr in attributes.by_key("doc").attrs() { | 179 | for attr in attributes.by_key("doc").attrs() { |
171 | let src = attrs_source_map.source_of(&attr); | 180 | let InFile { file_id, value: src } = attrs_source_map.source_of(&attr); |
181 | if file_id != node.file_id { | ||
182 | continue; | ||
183 | } | ||
172 | let (line, range, prefix) = match &src { | 184 | let (line, range, prefix) = match &src { |
173 | Either::Left(it) => { | 185 | Either::Left(it) => { |
174 | string = match find_doc_string_in_attr(attr, it) { | 186 | string = match find_doc_string_in_attr(attr, it) { |