aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/syntax_highlighting
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/syntax_highlighting')
-rw-r--r--crates/ra_ide/src/syntax_highlighting/html.rs2
-rw-r--r--crates/ra_ide/src/syntax_highlighting/injection.rs10
-rw-r--r--crates/ra_ide/src/syntax_highlighting/tags.rs5
-rw-r--r--crates/ra_ide/src/syntax_highlighting/tests.rs24
4 files changed, 23 insertions, 18 deletions
diff --git a/crates/ra_ide/src/syntax_highlighting/html.rs b/crates/ra_ide/src/syntax_highlighting/html.rs
index 99b6b25ab..0c74f7370 100644
--- a/crates/ra_ide/src/syntax_highlighting/html.rs
+++ b/crates/ra_ide/src/syntax_highlighting/html.rs
@@ -64,6 +64,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
64 64
65.lifetime { color: #DFAF8F; font-style: italic; } 65.lifetime { color: #DFAF8F; font-style: italic; }
66.comment { color: #7F9F7F; } 66.comment { color: #7F9F7F; }
67.documentation { color: #629755; }
68.injected { opacity: 0.65 ; }
67.struct, .enum { color: #7CB8BB; } 69.struct, .enum { color: #7CB8BB; }
68.enum_variant { color: #BDE0F3; } 70.enum_variant { color: #BDE0F3; }
69.string_literal { color: #CC9393; } 71.string_literal { color: #CC9393; }
diff --git a/crates/ra_ide/src/syntax_highlighting/injection.rs b/crates/ra_ide/src/syntax_highlighting/injection.rs
index 9d82b4009..181c21256 100644
--- a/crates/ra_ide/src/syntax_highlighting/injection.rs
+++ b/crates/ra_ide/src/syntax_highlighting/injection.rs
@@ -8,8 +8,8 @@ use ra_syntax::{ast, AstToken, SyntaxNode, SyntaxToken, TextRange, TextSize};
8use stdx::SepBy; 8use stdx::SepBy;
9 9
10use crate::{ 10use crate::{
11 call_info::ActiveParameter, Analysis, HighlightModifier, HighlightTag, HighlightedRange, 11 call_info::ActiveParameter, Analysis, Highlight, HighlightModifier, HighlightTag,
12 RootDatabase, 12 HighlightedRange, RootDatabase,
13}; 13};
14 14
15use super::HighlightedRangeStack; 15use super::HighlightedRangeStack;
@@ -172,6 +172,7 @@ pub(super) fn highlight_doc_comment(
172 h.range.end() + end_offset.unwrap_or(start_offset) - h.range.start(), 172 h.range.end() + end_offset.unwrap_or(start_offset) - h.range.start(),
173 ); 173 );
174 174
175 h.highlight |= HighlightModifier::Injected;
175 stack.add(h); 176 stack.add(h);
176 } 177 }
177 } 178 }
@@ -181,6 +182,7 @@ pub(super) fn highlight_doc_comment(
181 for comment in new_comments { 182 for comment in new_comments {
182 stack.add(comment); 183 stack.add(comment);
183 } 184 }
184 stack.pop_and_inject(false); 185 stack.pop_and_inject(None);
185 stack.pop_and_inject(true); 186 stack
187 .pop_and_inject(Some(Highlight::from(HighlightTag::Generic) | HighlightModifier::Injected));
186} 188}
diff --git a/crates/ra_ide/src/syntax_highlighting/tags.rs b/crates/ra_ide/src/syntax_highlighting/tags.rs
index 93bbb4b4d..e8e251cfc 100644
--- a/crates/ra_ide/src/syntax_highlighting/tags.rs
+++ b/crates/ra_ide/src/syntax_highlighting/tags.rs
@@ -27,6 +27,7 @@ pub enum HighlightTag {
27 Field, 27 Field,
28 FormatSpecifier, 28 FormatSpecifier,
29 Function, 29 Function,
30 Generic,
30 Keyword, 31 Keyword,
31 Lifetime, 32 Lifetime,
32 Macro, 33 Macro,
@@ -57,6 +58,7 @@ pub enum HighlightModifier {
57 /// not. 58 /// not.
58 Definition, 59 Definition,
59 Documentation, 60 Documentation,
61 Injected,
60 Mutable, 62 Mutable,
61 Unsafe, 63 Unsafe,
62} 64}
@@ -77,6 +79,7 @@ impl HighlightTag {
77 HighlightTag::Field => "field", 79 HighlightTag::Field => "field",
78 HighlightTag::FormatSpecifier => "format_specifier", 80 HighlightTag::FormatSpecifier => "format_specifier",
79 HighlightTag::Function => "function", 81 HighlightTag::Function => "function",
82 HighlightTag::Generic => "generic",
80 HighlightTag::Keyword => "keyword", 83 HighlightTag::Keyword => "keyword",
81 HighlightTag::Lifetime => "lifetime", 84 HighlightTag::Lifetime => "lifetime",
82 HighlightTag::Macro => "macro", 85 HighlightTag::Macro => "macro",
@@ -110,6 +113,7 @@ impl HighlightModifier {
110 HighlightModifier::ControlFlow, 113 HighlightModifier::ControlFlow,
111 HighlightModifier::Definition, 114 HighlightModifier::Definition,
112 HighlightModifier::Documentation, 115 HighlightModifier::Documentation,
116 HighlightModifier::Injected,
113 HighlightModifier::Mutable, 117 HighlightModifier::Mutable,
114 HighlightModifier::Unsafe, 118 HighlightModifier::Unsafe,
115 ]; 119 ];
@@ -120,6 +124,7 @@ impl HighlightModifier {
120 HighlightModifier::ControlFlow => "control", 124 HighlightModifier::ControlFlow => "control",
121 HighlightModifier::Definition => "declaration", 125 HighlightModifier::Definition => "declaration",
122 HighlightModifier::Documentation => "documentation", 126 HighlightModifier::Documentation => "documentation",
127 HighlightModifier::Injected => "injected",
123 HighlightModifier::Mutable => "mutable", 128 HighlightModifier::Mutable => "mutable",
124 HighlightModifier::Unsafe => "unsafe", 129 HighlightModifier::Unsafe => "unsafe",
125 } 130 }
diff --git a/crates/ra_ide/src/syntax_highlighting/tests.rs b/crates/ra_ide/src/syntax_highlighting/tests.rs
index b1f48f03b..b7fad9719 100644
--- a/crates/ra_ide/src/syntax_highlighting/tests.rs
+++ b/crates/ra_ide/src/syntax_highlighting/tests.rs
@@ -2,10 +2,7 @@ use std::fs;
2 2
3use test_utils::{assert_eq_text, project_dir, read_text}; 3use test_utils::{assert_eq_text, project_dir, read_text};
4 4
5use crate::{ 5use crate::{mock_analysis::single_file, FileRange, TextRange};
6 mock_analysis::{single_file, MockAnalysis},
7 FileRange, TextRange,
8};
9 6
10#[test] 7#[test]
11fn test_highlighting() { 8fn test_highlighting() {
@@ -127,12 +124,10 @@ fn accidentally_quadratic() {
127 let file = project_dir().join("crates/ra_syntax/test_data/accidentally_quadratic"); 124 let file = project_dir().join("crates/ra_syntax/test_data/accidentally_quadratic");
128 let src = fs::read_to_string(file).unwrap(); 125 let src = fs::read_to_string(file).unwrap();
129 126
130 let mut mock = MockAnalysis::new(); 127 let (analysis, file_id) = single_file(&src);
131 let file_id = mock.add_file("/main.rs", &src);
132 let host = mock.analysis_host();
133 128
134 // let t = std::time::Instant::now(); 129 // let t = std::time::Instant::now();
135 let _ = host.analysis().highlight(file_id).unwrap(); 130 let _ = analysis.highlight(file_id).unwrap();
136 // eprintln!("elapsed: {:?}", t.elapsed()); 131 // eprintln!("elapsed: {:?}", t.elapsed());
137} 132}
138 133
@@ -140,16 +135,17 @@ fn accidentally_quadratic() {
140fn test_ranges() { 135fn test_ranges() {
141 let (analysis, file_id) = single_file( 136 let (analysis, file_id) = single_file(
142 r#" 137 r#"
143 #[derive(Clone, Debug)] 138#[derive(Clone, Debug)]
144 struct Foo { 139struct Foo {
145 pub x: i32, 140 pub x: i32,
146 pub y: i32, 141 pub y: i32,
147 }"#, 142}
143"#,
148 ); 144 );
149 145
150 // The "x" 146 // The "x"
151 let highlights = &analysis 147 let highlights = &analysis
152 .highlight_range(FileRange { file_id, range: TextRange::at(82.into(), 1.into()) }) 148 .highlight_range(FileRange { file_id, range: TextRange::at(45.into(), 1.into()) })
153 .unwrap(); 149 .unwrap();
154 150
155 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration"); 151 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration");