diff options
author | Paul Daniel Faria <[email protected]> | 2020-06-18 14:37:22 +0100 |
---|---|---|
committer | Paul Daniel Faria <[email protected]> | 2020-06-23 17:08:04 +0100 |
commit | 351bba9bee136d856f987037b6ecffd0642d606f (patch) | |
tree | 50ef4af147ef3f539086aec02e274655552ee6ef /crates/ra_ide | |
parent | 0c12c4f9609ee72487af9b55a558b01af73ffe3e (diff) |
Add support for marking doctest items as distinct from normal code, add default tag to all doctest elements
Diffstat (limited to 'crates/ra_ide')
-rw-r--r-- | crates/ra_ide/src/lib.rs | 4 | ||||
-rw-r--r-- | crates/ra_ide/src/prime_caches.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide/src/snapshots/highlight_doctest.html | 44 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting.rs | 18 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting/html.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting/injection.rs | 6 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting/tags.rs | 3 |
7 files changed, 45 insertions, 34 deletions
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index ecac5134e..22203b4a3 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs | |||
@@ -443,13 +443,13 @@ impl Analysis { | |||
443 | 443 | ||
444 | /// Computes syntax highlighting for the given file | 444 | /// Computes syntax highlighting for the given file |
445 | pub fn highlight(&self, file_id: FileId) -> Cancelable<Vec<HighlightedRange>> { | 445 | pub fn highlight(&self, file_id: FileId) -> Cancelable<Vec<HighlightedRange>> { |
446 | self.with_db(|db| syntax_highlighting::highlight(db, file_id, None, false)) | 446 | self.with_db(|db| syntax_highlighting::highlight(db, file_id, None, false, None)) |
447 | } | 447 | } |
448 | 448 | ||
449 | /// Computes syntax highlighting for the given file range. | 449 | /// Computes syntax highlighting for the given file range. |
450 | pub fn highlight_range(&self, frange: FileRange) -> Cancelable<Vec<HighlightedRange>> { | 450 | pub fn highlight_range(&self, frange: FileRange) -> Cancelable<Vec<HighlightedRange>> { |
451 | self.with_db(|db| { | 451 | self.with_db(|db| { |
452 | syntax_highlighting::highlight(db, frange.file_id, Some(frange.range), false) | 452 | syntax_highlighting::highlight(db, frange.file_id, Some(frange.range), false, None) |
453 | }) | 453 | }) |
454 | } | 454 | } |
455 | 455 | ||
diff --git a/crates/ra_ide/src/prime_caches.rs b/crates/ra_ide/src/prime_caches.rs index c5ab5a1d8..dbed8a506 100644 --- a/crates/ra_ide/src/prime_caches.rs +++ b/crates/ra_ide/src/prime_caches.rs | |||
@@ -7,6 +7,6 @@ use crate::{FileId, RootDatabase}; | |||
7 | 7 | ||
8 | pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) { | 8 | pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) { |
9 | for file in files { | 9 | for file in files { |
10 | let _ = crate::syntax_highlighting::highlight(db, file, None, false); | 10 | let _ = crate::syntax_highlighting::highlight(db, file, None, false, None); |
11 | } | 11 | } |
12 | } | 12 | } |
diff --git a/crates/ra_ide/src/snapshots/highlight_doctest.html b/crates/ra_ide/src/snapshots/highlight_doctest.html index ac546806e..6b3932aff 100644 --- a/crates/ra_ide/src/snapshots/highlight_doctest.html +++ b/crates/ra_ide/src/snapshots/highlight_doctest.html | |||
@@ -47,9 +47,9 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd | |||
47 | <span class="comment documentation">/// # Examples</span> | 47 | <span class="comment documentation">/// # Examples</span> |
48 | <span class="comment documentation">///</span> | 48 | <span class="comment documentation">///</span> |
49 | <span class="comment documentation">/// ```</span> | 49 | <span class="comment documentation">/// ```</span> |
50 | <span class="comment documentation">/// #</span> <span class="attribute">#![</span><span class="function attribute">allow</span><span class="attribute">(unused_mut)]</span> | 50 | <span class="comment documentation">/// #</span> <span class="operator injected">#</span><span class="operator injected">!</span><span class="operator injected">[</span><span class="operator injected">allow</span><span class="operator injected">(</span><span class="operator injected">unused_mut</span><span class="operator injected">)</span><span class="operator injected">]</span><span class="operator injected"> |
51 | <span class="comment documentation">/// </span><span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">foo</span>: <span class="struct">Foo</span> = <span class="struct">Foo</span>::<span class="function">new</span>(); | 51 | </span> <span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="operator injected"> </span><span class="keyword injected">mut</span><span class="operator injected"> </span><span class="operator injected">foo</span><span class="operator injected">:</span><span class="operator injected"> </span><span class="operator injected">Foo</span><span class="operator injected"> </span><span class="operator injected">=</span><span class="operator injected"> </span><span class="operator injected">Foo</span><span class="operator injected">::</span><span class="operator injected">new</span><span class="operator injected">(</span><span class="operator injected">)</span><span class="operator injected">;</span><span class="operator injected"> |
52 | <span class="comment documentation">/// ```</span> | 52 | </span><span class="operator injected"> </span> <span class="comment documentation">/// ```</span> |
53 | <span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function declaration">new</span>() -> <span class="struct">Foo</span> { | 53 | <span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function declaration">new</span>() -> <span class="struct">Foo</span> { |
54 | <span class="struct">Foo</span> { <span class="field">bar</span>: <span class="bool_literal">true</span> } | 54 | <span class="struct">Foo</span> { <span class="field">bar</span>: <span class="bool_literal">true</span> } |
55 | } | 55 | } |
@@ -59,27 +59,27 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd | |||
59 | <span class="comment documentation">/// # Examples</span> | 59 | <span class="comment documentation">/// # Examples</span> |
60 | <span class="comment documentation">///</span> | 60 | <span class="comment documentation">///</span> |
61 | <span class="comment documentation">/// ```</span> | 61 | <span class="comment documentation">/// ```</span> |
62 | <span class="comment documentation">/// </span><span class="keyword">use</span> <span class="module">x</span>::<span class="module">y</span>; | 62 | <span class="comment documentation">/// </span><span class="keyword injected">use</span><span class="operator injected"> </span><span class="operator injected">x</span><span class="operator injected">::</span><span class="operator injected">y</span><span class="operator injected">;</span><span class="operator injected"> |
63 | <span class="comment documentation">///</span> | 63 | </span><span class="comment documentation">///</span><span class="operator injected"> |
64 | <span class="comment documentation">/// </span><span class="keyword">let</span> <span class="variable declaration">foo</span> = <span class="struct">Foo</span>::<span class="function">new</span>(); | 64 | </span> <span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="operator injected"> </span><span class="operator injected">foo</span><span class="operator injected"> </span><span class="operator injected">=</span><span class="operator injected"> </span><span class="operator injected">Foo</span><span class="operator injected">::</span><span class="operator injected">new</span><span class="operator injected">(</span><span class="operator injected">)</span><span class="operator injected">;</span><span class="operator injected"> |
65 | <span class="comment documentation">///</span> | 65 | </span><span class="comment documentation">///</span><span class="operator injected"> |
66 | <span class="comment documentation">/// </span><span class="comment">// calls bar on foo</span> | 66 | </span> <span class="comment documentation">/// </span><span class="comment injected">// calls bar on foo</span><span class="operator injected"> |
67 | <span class="comment documentation">/// </span><span class="macro">assert!</span>(foo.bar()); | 67 | </span> <span class="comment documentation">/// </span><span class="macro injected">assert!</span><span class="operator injected">(</span><span class="operator injected">foo</span><span class="operator injected">.</span><span class="operator injected">bar</span><span class="operator injected">(</span><span class="operator injected">)</span><span class="operator injected">)</span><span class="operator injected">;</span><span class="operator injected"> |
68 | <span class="comment documentation">///</span> | 68 | </span><span class="comment documentation">///</span><span class="operator injected"> |
69 | <span class="comment documentation">/// </span><span class="keyword">let</span> <span class="variable declaration">bar</span> = <span class="variable">foo</span>.<span class="field">bar</span> || <span class="struct">Foo</span>::<span class="constant">bar</span>; | 69 | </span> <span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="operator injected"> </span><span class="operator injected">bar</span><span class="operator injected"> </span><span class="operator injected">=</span><span class="operator injected"> </span><span class="operator injected">foo</span><span class="operator injected">.</span><span class="operator injected">bar</span><span class="operator injected"> </span><span class="operator injected">||</span><span class="operator injected"> </span><span class="operator injected">Foo</span><span class="operator injected">::</span><span class="operator injected">bar</span><span class="operator injected">;</span><span class="operator injected"> |
70 | <span class="comment documentation">///</span> | 70 | </span><span class="comment documentation">///</span><span class="operator injected"> |
71 | <span class="comment documentation">/// </span><span class="comment">/* multi-line | 71 | </span> <span class="comment documentation">/// </span><span class="comment injected">/* multi-line |
72 | </span><span class="comment documentation">/// </span><span class="comment"> comment */</span> | 72 | </span><span class="comment documentation">/// </span><span class="comment injected"> comment */</span><span class="operator injected"> |
73 | <span class="comment documentation">///</span> | 73 | </span><span class="comment documentation">///</span><span class="operator injected"> |
74 | <span class="comment documentation">/// </span><span class="keyword">let</span> <span class="variable declaration">multi_line_string</span> = <span class="string_literal">"Foo | 74 | </span> <span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="operator injected"> </span><span class="operator injected">multi_line_string</span><span class="operator injected"> </span><span class="operator injected">=</span><span class="operator injected"> </span><span class="string_literal injected">"Foo |
75 | </span><span class="comment documentation">/// </span><span class="string_literal"> bar | 75 | </span><span class="comment documentation">/// </span><span class="string_literal injected"> bar |
76 | </span><span class="comment documentation">/// </span><span class="string_literal"> "</span>; | 76 | </span><span class="comment documentation">/// </span><span class="string_literal injected"> "</span><span class="operator injected">;</span><span class="operator injected"> |
77 | <span class="comment documentation">///</span> | 77 | </span><span class="comment documentation">///</span><span class="operator injected"> |
78 | <span class="comment documentation">/// ```</span> | 78 | </span> <span class="comment documentation">/// ```</span> |
79 | <span class="comment documentation">///</span> | 79 | <span class="comment documentation">///</span> |
80 | <span class="comment documentation">/// ```rust,no_run</span> | 80 | <span class="comment documentation">/// ```rust,no_run</span> |
81 | <span class="comment documentation">/// </span><span class="keyword">let</span> <span class="variable declaration">foobar</span> = <span class="struct">Foo</span>::<span class="function">new</span>().<span class="function">bar</span>(); | 81 | <span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="operator injected"> </span><span class="operator injected">foobar</span><span class="operator injected"> </span><span class="operator injected">=</span><span class="operator injected"> </span><span class="operator injected">Foo</span><span class="operator injected">::</span><span class="operator injected">new</span><span class="operator injected">(</span><span class="operator injected">)</span><span class="operator injected">.</span><span class="operator injected">bar</span><span class="operator injected">(</span><span class="operator injected">)</span><span class="operator injected">;</span><span class="operator injected"> |
82 | <span class="comment documentation">/// ```</span> | 82 | </span><span class="operator injected"> </span> <span class="comment documentation">/// ```</span> |
83 | <span class="comment documentation">///</span> | 83 | <span class="comment documentation">///</span> |
84 | <span class="comment documentation">/// ```sh</span> | 84 | <span class="comment documentation">/// ```sh</span> |
85 | <span class="comment documentation">/// echo 1</span> | 85 | <span class="comment documentation">/// echo 1</span> |
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs index 448645bdc..b4dcdba39 100644 --- a/crates/ra_ide/src/syntax_highlighting.rs +++ b/crates/ra_ide/src/syntax_highlighting.rs | |||
@@ -45,6 +45,7 @@ pub(crate) fn highlight( | |||
45 | file_id: FileId, | 45 | file_id: FileId, |
46 | range_to_highlight: Option<TextRange>, | 46 | range_to_highlight: Option<TextRange>, |
47 | syntactic_name_ref_highlighting: bool, | 47 | syntactic_name_ref_highlighting: bool, |
48 | default_tag: Option<HighlightTag>, | ||
48 | ) -> Vec<HighlightedRange> { | 49 | ) -> Vec<HighlightedRange> { |
49 | let _p = profile("highlight"); | 50 | let _p = profile("highlight"); |
50 | let sema = Semantics::new(db); | 51 | let sema = Semantics::new(db); |
@@ -107,6 +108,7 @@ pub(crate) fn highlight( | |||
107 | &mut bindings_shadow_count, | 108 | &mut bindings_shadow_count, |
108 | syntactic_name_ref_highlighting, | 109 | syntactic_name_ref_highlighting, |
109 | name.syntax().clone().into(), | 110 | name.syntax().clone().into(), |
111 | default_tag, | ||
110 | ) { | 112 | ) { |
111 | stack.add(HighlightedRange { | 113 | stack.add(HighlightedRange { |
112 | range: name.syntax().text_range(), | 114 | range: name.syntax().text_range(), |
@@ -206,6 +208,7 @@ pub(crate) fn highlight( | |||
206 | &mut bindings_shadow_count, | 208 | &mut bindings_shadow_count, |
207 | syntactic_name_ref_highlighting, | 209 | syntactic_name_ref_highlighting, |
208 | element_to_highlight.clone(), | 210 | element_to_highlight.clone(), |
211 | default_tag, | ||
209 | ) { | 212 | ) { |
210 | stack.add(HighlightedRange { range, highlight, binding_hash }); | 213 | stack.add(HighlightedRange { range, highlight, binding_hash }); |
211 | if let Some(string) = | 214 | if let Some(string) = |
@@ -430,13 +433,14 @@ fn highlight_element( | |||
430 | bindings_shadow_count: &mut FxHashMap<Name, u32>, | 433 | bindings_shadow_count: &mut FxHashMap<Name, u32>, |
431 | syntactic_name_ref_highlighting: bool, | 434 | syntactic_name_ref_highlighting: bool, |
432 | element: SyntaxElement, | 435 | element: SyntaxElement, |
436 | default_tag: Option<HighlightTag>, | ||
433 | ) -> Option<(Highlight, Option<u64>)> { | 437 | ) -> Option<(Highlight, Option<u64>)> { |
434 | let db = sema.db; | 438 | let db = sema.db; |
435 | let mut binding_hash = None; | 439 | let mut binding_hash = None; |
436 | let highlight: Highlight = match element.kind() { | 440 | let highlight: Highlight = match element.kind() { |
437 | FN_DEF => { | 441 | FN_DEF => { |
438 | bindings_shadow_count.clear(); | 442 | bindings_shadow_count.clear(); |
439 | return None; | 443 | default_tag?.into() |
440 | } | 444 | } |
441 | 445 | ||
442 | // Highlight definitions depending on the "type" of the definition. | 446 | // Highlight definitions depending on the "type" of the definition. |
@@ -515,12 +519,12 @@ fn highlight_element( | |||
515 | let expr = prefix_expr.expr()?; | 519 | let expr = prefix_expr.expr()?; |
516 | let ty = sema.type_of_expr(&expr)?; | 520 | let ty = sema.type_of_expr(&expr)?; |
517 | if !ty.is_raw_ptr() { | 521 | if !ty.is_raw_ptr() { |
518 | return None; | 522 | default_tag?.into() |
523 | } else { | ||
524 | let mut h = Highlight::new(HighlightTag::Operator); | ||
525 | h |= HighlightModifier::Unsafe; | ||
526 | h | ||
519 | } | 527 | } |
520 | |||
521 | let mut h = Highlight::new(HighlightTag::Operator); | ||
522 | h |= HighlightModifier::Unsafe; | ||
523 | h | ||
524 | } | 528 | } |
525 | T![!] if element.parent().and_then(ast::MacroCall::cast).is_some() => { | 529 | T![!] if element.parent().and_then(ast::MacroCall::cast).is_some() => { |
526 | Highlight::new(HighlightTag::Macro) | 530 | Highlight::new(HighlightTag::Macro) |
@@ -546,7 +550,7 @@ fn highlight_element( | |||
546 | } | 550 | } |
547 | } | 551 | } |
548 | 552 | ||
549 | _ => return None, | 553 | _ => default_tag?.into(), |
550 | }; | 554 | }; |
551 | 555 | ||
552 | return Some((highlight, binding_hash)); | 556 | return Some((highlight, binding_hash)); |
diff --git a/crates/ra_ide/src/syntax_highlighting/html.rs b/crates/ra_ide/src/syntax_highlighting/html.rs index 99b6b25ab..9043024df 100644 --- a/crates/ra_ide/src/syntax_highlighting/html.rs +++ b/crates/ra_ide/src/syntax_highlighting/html.rs | |||
@@ -19,7 +19,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo | |||
19 | ) | 19 | ) |
20 | } | 20 | } |
21 | 21 | ||
22 | let ranges = highlight(db, file_id, None, false); | 22 | let ranges = highlight(db, file_id, None, false, None); |
23 | let text = parse.tree().syntax().to_string(); | 23 | let text = parse.tree().syntax().to_string(); |
24 | let mut prev_pos = TextSize::from(0); | 24 | let mut prev_pos = TextSize::from(0); |
25 | let mut buf = String::new(); | 25 | let mut buf = String::new(); |
diff --git a/crates/ra_ide/src/syntax_highlighting/injection.rs b/crates/ra_ide/src/syntax_highlighting/injection.rs index 9d82b4009..bd38cdb6f 100644 --- a/crates/ra_ide/src/syntax_highlighting/injection.rs +++ b/crates/ra_ide/src/syntax_highlighting/injection.rs | |||
@@ -150,7 +150,10 @@ pub(super) fn highlight_doc_comment( | |||
150 | let (analysis, tmp_file_id) = Analysis::from_single_file(text); | 150 | let (analysis, tmp_file_id) = Analysis::from_single_file(text); |
151 | 151 | ||
152 | stack.push(); | 152 | stack.push(); |
153 | for mut h in analysis.with_db(|db| super::highlight(db, tmp_file_id, None, true)).unwrap() { | 153 | for mut h in analysis |
154 | .with_db(|db| super::highlight(db, tmp_file_id, None, true, Some(HighlightTag::Operator))) | ||
155 | .unwrap() | ||
156 | { | ||
154 | // Determine start offset and end offset in case of multi-line ranges | 157 | // Determine start offset and end offset in case of multi-line ranges |
155 | let mut start_offset = None; | 158 | let mut start_offset = None; |
156 | let mut end_offset = None; | 159 | let mut end_offset = None; |
@@ -172,6 +175,7 @@ pub(super) fn highlight_doc_comment( | |||
172 | h.range.end() + end_offset.unwrap_or(start_offset) - h.range.start(), | 175 | h.range.end() + end_offset.unwrap_or(start_offset) - h.range.start(), |
173 | ); | 176 | ); |
174 | 177 | ||
178 | h.highlight |= HighlightModifier::Injected; | ||
175 | stack.add(h); | 179 | stack.add(h); |
176 | } | 180 | } |
177 | } | 181 | } |
diff --git a/crates/ra_ide/src/syntax_highlighting/tags.rs b/crates/ra_ide/src/syntax_highlighting/tags.rs index 93bbb4b4d..f5ab73865 100644 --- a/crates/ra_ide/src/syntax_highlighting/tags.rs +++ b/crates/ra_ide/src/syntax_highlighting/tags.rs | |||
@@ -57,6 +57,7 @@ pub enum HighlightModifier { | |||
57 | /// not. | 57 | /// not. |
58 | Definition, | 58 | Definition, |
59 | Documentation, | 59 | Documentation, |
60 | Injected, | ||
60 | Mutable, | 61 | Mutable, |
61 | Unsafe, | 62 | Unsafe, |
62 | } | 63 | } |
@@ -110,6 +111,7 @@ impl HighlightModifier { | |||
110 | HighlightModifier::ControlFlow, | 111 | HighlightModifier::ControlFlow, |
111 | HighlightModifier::Definition, | 112 | HighlightModifier::Definition, |
112 | HighlightModifier::Documentation, | 113 | HighlightModifier::Documentation, |
114 | HighlightModifier::Injected, | ||
113 | HighlightModifier::Mutable, | 115 | HighlightModifier::Mutable, |
114 | HighlightModifier::Unsafe, | 116 | HighlightModifier::Unsafe, |
115 | ]; | 117 | ]; |
@@ -120,6 +122,7 @@ impl HighlightModifier { | |||
120 | HighlightModifier::ControlFlow => "control", | 122 | HighlightModifier::ControlFlow => "control", |
121 | HighlightModifier::Definition => "declaration", | 123 | HighlightModifier::Definition => "declaration", |
122 | HighlightModifier::Documentation => "documentation", | 124 | HighlightModifier::Documentation => "documentation", |
125 | HighlightModifier::Injected => "injected", | ||
123 | HighlightModifier::Mutable => "mutable", | 126 | HighlightModifier::Mutable => "mutable", |
124 | HighlightModifier::Unsafe => "unsafe", | 127 | HighlightModifier::Unsafe => "unsafe", |
125 | } | 128 | } |