Skip to content

Commit d72b2df

Browse files
committed
Add modifiers to highlighting for extern crate
1 parent 11c49a6 commit d72b2df

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/highlight.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,24 @@ fn highlight_name_ref_by_syntax(
703703
};
704704

705705
match parent.kind() {
706-
EXTERN_CRATE => HlTag::Symbol(SymbolKind::Module).into(),
706+
EXTERN_CRATE => {
707+
let mut h: Highlight = HlTag::Symbol(SymbolKind::Module).into();
708+
let is_crate_root = if let Some(extern_crate) = ast::ExternCrate::cast(parent.clone()) {
709+
if let Some(first_segment) = extern_crate.name_ref() {
710+
first_segment.syntax().text() == name.syntax().text()
711+
} else {
712+
false
713+
}
714+
} else {
715+
false
716+
};
717+
718+
if is_crate_root {
719+
h |= HlMod::CrateRoot;
720+
}
721+
722+
h | HlMod::Library
723+
},
707724
METHOD_CALL_EXPR => ast::MethodCallExpr::cast(parent)
708725
.and_then(|it| highlight_method_call(sema, krate, &it, edition))
709726
.unwrap_or_else(|| SymbolKind::Method.into()),

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/test_data/highlight_doctest.html

+7-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@
5151
<span class="comment documentation">//! ```</span>
5252

5353
<span class="comment documentation">//! ```rust</span>
54-
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module injected">Krate</span><span class="semicolon injected">;</span>
54+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="self_keyword crate_root injected">self</span><span class="semicolon injected">;</span>
55+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">std</span><span class="semicolon injected">;</span>
56+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">core</span><span class="semicolon injected">;</span>
57+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">alloc</span><span class="semicolon injected">;</span>
58+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">proc_macro</span><span class="semicolon injected">;</span>
59+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">test</span><span class="semicolon injected">;</span>
60+
<span class="comment documentation">//!</span><span class="comment documentation"> </span><span class="keyword injected">extern</span><span class="none injected"> </span><span class="keyword injected">crate</span><span class="none injected"> </span><span class="module crate_root injected library">Krate</span><span class="semicolon injected">;</span>
5561
<span class="comment documentation">//! ```</span>
5662
<span class="keyword">mod</span> <span class="module declaration">outline_module</span><span class="semicolon">;</span>
5763

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/tests.rs

+6
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,12 @@ fn test_highlight_doc_comment() {
723723
//! ```
724724
725725
//! ```rust
726+
//! extern crate self;
727+
//! extern crate std;
728+
//! extern crate core;
729+
//! extern crate alloc;
730+
//! extern crate proc_macro;
731+
//! extern crate test;
726732
//! extern crate Krate;
727733
//! ```
728734
mod outline_module;

0 commit comments

Comments
 (0)