File tree 3 files changed +31
-2
lines changed
src/tools/rust-analyzer/crates/ide/src/syntax_highlighting
3 files changed +31
-2
lines changed Original file line number Diff line number Diff line change @@ -703,7 +703,24 @@ fn highlight_name_ref_by_syntax(
703
703
} ;
704
704
705
705
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
+ } ,
707
724
METHOD_CALL_EXPR => ast:: MethodCallExpr :: cast ( parent)
708
725
. and_then ( |it| highlight_method_call ( sema, krate, & it, edition) )
709
726
. unwrap_or_else ( || SymbolKind :: Method . into ( ) ) ,
Original file line number Diff line number Diff line change 51
51
< span class ="comment documentation "> //! ```</ span >
52
52
53
53
< 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 >
55
61
< span class ="comment documentation "> //! ```</ span >
56
62
< span class ="keyword "> mod</ span > < span class ="module declaration "> outline_module</ span > < span class ="semicolon "> ;</ span >
57
63
Original file line number Diff line number Diff line change @@ -723,6 +723,12 @@ fn test_highlight_doc_comment() {
723
723
//! ```
724
724
725
725
//! ```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;
726
732
//! extern crate Krate;
727
733
//! ```
728
734
mod outline_module;
You can’t perform that action at this time.
0 commit comments