Skip to content

Commit 33cdc21

Browse files
committed
Don't highlight unsafe traits as unsafe in safe impls
1 parent 64fb7be commit 33cdc21

File tree

12 files changed

+44
-56
lines changed

12 files changed

+44
-56
lines changed

crates/ide/src/syntax_highlighting/highlight.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ fn highlight_name_ref(
286286
Definition::ModuleDef(hir::ModuleDef::Trait(trait_))
287287
if trait_.is_unsafe(db) =>
288288
{
289-
if ast::Impl::for_trait_name_ref(&name_ref).is_some() {
289+
if ast::Impl::for_trait_name_ref(&name_ref)
290+
.map_or(false, |impl_| impl_.unsafe_token().is_some())
291+
{
290292
h |= HlMod::Unsafe;
291293
}
292294
}

crates/ide/src/syntax_highlighting/html.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
6969
.function.unsafe { color: #BC8383; }
7070
.trait.unsafe { color: #BC8383; }
7171
.operator.unsafe { color: #BC8383; }
72+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
73+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
7274
.parameter { color: #94BFF3; }
7375
.text { color: #DCDCCC; }
7476
.type { color: #7CB8BB; }
@@ -85,7 +87,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
8587
.mutable { text-decoration: underline; }
8688
.escape_sequence { color: #94BFF3; }
8789
.keyword { color: #F0DFAF; font-weight: bold; }
88-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
8990
.control { font-style: italic; }
9091
.reference { font-style: italic; font-weight: bold; }
9192

crates/ide/src/syntax_highlighting/test_data/highlight_assoc_functions.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

crates/ide/src/syntax_highlighting/test_data/highlight_doctest.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

crates/ide/src/syntax_highlighting/test_data/highlight_extern_crate.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

crates/ide/src/syntax_highlighting/test_data/highlight_injection.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

crates/ide/src/syntax_highlighting/test_data/highlight_strings.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

crates/ide/src/syntax_highlighting/test_data/highlight_unsafe.html

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,40 +35,35 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

4041
.unresolved_reference { color: #FC5555; text-decoration: wavy underline; }
4142
</style>
42-
<pre><code><span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function declaration unsafe">unsafe_fn</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
43+
<pre><code><span class="keyword">static</span> <span class="keyword">mut</span> <span class="static declaration mutable unsafe">MUT_GLOBAL</span><span class="colon">:</span> <span class="struct">Struct</span> <span class="operator">=</span> <span class="struct">Struct</span> <span class="brace">{</span> <span class="field">field</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span><span class="semicolon">;</span>
44+
<span class="keyword">static</span> <span class="static declaration">GLOBAL</span><span class="colon">:</span> <span class="struct">Struct</span> <span class="operator">=</span> <span class="struct">Struct</span> <span class="brace">{</span> <span class="field">field</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span><span class="semicolon">;</span>
45+
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function declaration unsafe">unsafe_fn</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
4346

4447
<span class="keyword">union</span> <span class="union declaration">Union</span> <span class="brace">{</span>
4548
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u32</span><span class="comma">,</span>
4649
<span class="field declaration">b</span><span class="colon">:</span> <span class="builtin_type">f32</span><span class="comma">,</span>
4750
<span class="brace">}</span>
4851

49-
<span class="keyword">struct</span> <span class="struct declaration">HasUnsafeFn</span><span class="semicolon">;</span>
50-
51-
<span class="keyword">impl</span> <span class="struct">HasUnsafeFn</span> <span class="brace">{</span>
52+
<span class="keyword">struct</span> <span class="struct declaration">Struct</span> <span class="brace">{</span> <span class="field declaration">field</span><span class="colon">:</span> <span class="builtin_type">i32</span> <span class="brace">}</span>
53+
<span class="keyword">impl</span> <span class="struct">Struct</span> <span class="brace">{</span>
5254
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function associated declaration reference unsafe">unsafe_method</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration reference">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
5355
<span class="brace">}</span>
5456

55-
<span class="keyword">struct</span> <span class="struct declaration">TypeForStaticMut</span> <span class="brace">{</span>
56-
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u8</span>
57-
<span class="brace">}</span>
58-
59-
<span class="keyword">static</span> <span class="keyword">mut</span> <span class="static declaration mutable unsafe">global_mut</span><span class="colon">:</span> <span class="struct">TypeForStaticMut</span> <span class="operator">=</span> <span class="struct">TypeForStaticMut</span> <span class="brace">{</span> <span class="field">a</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span><span class="semicolon">;</span>
60-
6157
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute">repr</span><span class="parenthesis attribute">(</span><span class="none attribute">packed</span><span class="parenthesis attribute">)</span><span class="attribute attribute">]</span>
6258
<span class="keyword">struct</span> <span class="struct declaration">Packed</span> <span class="brace">{</span>
6359
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u16</span><span class="comma">,</span>
6460
<span class="brace">}</span>
6561

6662
<span class="keyword unsafe">unsafe</span> <span class="keyword">trait</span> <span class="trait declaration unsafe">UnsafeTrait</span> <span class="brace">{</span><span class="brace">}</span>
6763
<span class="keyword unsafe">unsafe</span> <span class="keyword">impl</span> <span class="trait unsafe">UnsafeTrait</span> <span class="keyword">for</span> <span class="struct">Packed</span> <span class="brace">{</span><span class="brace">}</span>
64+
<span class="keyword">impl</span> <span class="punctuation">!</span><span class="trait">UnsafeTrait</span> <span class="keyword">for</span> <span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
6865

69-
<span class="keyword">fn</span> <span class="function declaration">require_unsafe_trait</span><span class="angle">&lt;</span><span class="type_param declaration">T</span><span class="colon">:</span> <span class="trait">UnsafeTrait</span><span class="angle">&gt;</span><span class="parenthesis">(</span><span class="punctuation">_</span><span class="colon">:</span> <span class="type_param">T</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
66+
<span class="keyword">fn</span> <span class="function declaration">unsafe_trait_bound</span><span class="angle">&lt;</span><span class="type_param declaration">T</span><span class="colon">:</span> <span class="trait">UnsafeTrait</span><span class="angle">&gt;</span><span class="parenthesis">(</span><span class="punctuation">_</span><span class="colon">:</span> <span class="type_param">T</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
7067

7168
<span class="keyword">trait</span> <span class="trait declaration">DoTheAutoref</span> <span class="brace">{</span>
7269
<span class="keyword">fn</span> <span class="function associated declaration reference trait">calls_autoref</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration reference">self</span><span class="parenthesis">)</span><span class="semicolon">;</span>
@@ -87,13 +84,14 @@
8784
<span class="union">Union</span> <span class="brace">{</span> <span class="field unsafe">b</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span> <span class="operator">=&gt;</span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
8885
<span class="union">Union</span> <span class="brace">{</span> <span class="field unsafe">a</span> <span class="brace">}</span> <span class="operator">=&gt;</span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
8986
<span class="brace">}</span>
90-
<span class="struct">HasUnsafeFn</span><span class="operator">.</span><span class="function associated reference unsafe">unsafe_method</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
87+
<span class="struct">Struct</span> <span class="brace">{</span> <span class="field">field</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span><span class="operator">.</span><span class="function associated reference unsafe">unsafe_method</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
9188

9289
<span class="comment">// unsafe deref</span>
93-
<span class="keyword">let</span> <span class="variable declaration">y</span> <span class="operator">=</span> <span class="operator unsafe">*</span><span class="variable">x</span><span class="semicolon">;</span>
90+
<span class="operator unsafe">*</span><span class="variable">x</span><span class="semicolon">;</span>
9491

9592
<span class="comment">// unsafe access to a static mut</span>
96-
<span class="keyword">let</span> <span class="variable declaration">a</span> <span class="operator">=</span> <span class="static mutable unsafe">global_mut</span><span class="operator">.</span><span class="field">a</span><span class="semicolon">;</span>
93+
<span class="static mutable unsafe">MUT_GLOBAL</span><span class="operator">.</span><span class="field">field</span><span class="semicolon">;</span>
94+
<span class="static">GLOBAL</span><span class="operator">.</span><span class="field">field</span><span class="semicolon">;</span>
9795

9896
<span class="comment">// unsafe ref of packed fields</span>
9997
<span class="keyword">let</span> <span class="variable declaration">packed</span> <span class="operator">=</span> <span class="struct">Packed</span> <span class="brace">{</span> <span class="field">a</span><span class="colon">:</span> <span class="numeric_literal">0</span> <span class="brace">}</span><span class="semicolon">;</span>

crates/ide/src/syntax_highlighting/test_data/highlighting.html

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
.function.unsafe { color: #BC8383; }
1818
.trait.unsafe { color: #BC8383; }
1919
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2022
.parameter { color: #94BFF3; }
2123
.text { color: #DCDCCC; }
2224
.type { color: #7CB8BB; }
@@ -33,7 +35,6 @@
3335
.mutable { text-decoration: underline; }
3436
.escape_sequence { color: #94BFF3; }
3537
.keyword { color: #F0DFAF; font-weight: bold; }
36-
.keyword.unsafe { color: #BC8383; font-weight: bold; }
3738
.control { font-style: italic; }
3839
.reference { font-style: italic; font-weight: bold; }
3940

@@ -116,8 +117,6 @@
116117
<span class="function">str</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
117118
<span class="brace">}</span>
118119

119-
<span class="keyword">static</span> <span class="keyword">mut</span> <span class="static declaration mutable unsafe">STATIC_MUT</span><span class="colon">:</span> <span class="builtin_type">i32</span> <span class="operator">=</span> <span class="numeric_literal">0</span><span class="semicolon">;</span>
120-
121120
<span class="keyword">fn</span> <span class="function declaration">foo</span><span class="angle">&lt;</span><span class="lifetime declaration">'a</span><span class="comma">,</span> <span class="type_param declaration">T</span><span class="angle">&gt;</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="type_param">T</span> <span class="brace">{</span>
122121
<span class="function">foo</span><span class="operator">::</span><span class="angle">&lt;</span><span class="lifetime">'a</span><span class="comma">,</span> <span class="builtin_type">i32</span><span class="angle">&gt;</span><span class="parenthesis">(</span><span class="parenthesis">)</span>
123122
<span class="brace">}</span>
@@ -185,10 +184,6 @@
185184
<span class="keyword">let</span> <span class="variable declaration">x</span> <span class="operator">=</span> <span class="numeric_literal">92</span><span class="semicolon">;</span>
186185
<span class="variable mutable">vec</span><span class="operator">.</span><span class="unresolved_reference">push</span><span class="parenthesis">(</span><span class="struct">Foo</span> <span class="brace">{</span> <span class="field">x</span><span class="comma">,</span> <span class="field public">y</span><span class="colon">:</span> <span class="numeric_literal">1</span> <span class="brace">}</span><span class="parenthesis">)</span><span class="semicolon">;</span>
187186
<span class="brace">}</span>
188-
<span class="keyword unsafe">unsafe</span> <span class="brace">{</span>
189-
<span class="variable mutable">vec</span><span class="operator">.</span><span class="unresolved_reference">set_len</span><span class="parenthesis">(</span><span class="numeric_literal">0</span><span class="parenthesis">)</span><span class="semicolon">;</span>
190-
<span class="static mutable unsafe">STATIC_MUT</span> <span class="operator">=</span> <span class="numeric_literal">1</span><span class="semicolon">;</span>
191-
<span class="brace">}</span>
192187

193188
<span class="keyword control">for</span> <span class="variable declaration">e</span> <span class="keyword control">in</span> <span class="variable mutable">vec</span> <span class="brace">{</span>
194189
<span class="comment">// Do nothing</span>
@@ -256,9 +251,6 @@
256251
futures::<span class="macro">join!</span><span class="parenthesis">(</span>f1<span class="comma">,</span> f2<span class="parenthesis">)</span><span class="semicolon">;</span>
257252
<span class="brace">}</span>
258253

259-
<span class="keyword unsafe">unsafe</span> <span class="keyword">trait</span> <span class="trait declaration unsafe">Dangerous</span> <span class="brace">{</span><span class="brace">}</span>
260-
<span class="keyword">impl</span> <span class="trait unsafe">Dangerous</span> <span class="keyword">for</span> <span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
261-
262254
<span class="keyword">fn</span> <span class="function declaration">use_foo_items</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
263255
<span class="keyword">let</span> <span class="variable declaration">bob</span> <span class="operator">=</span> <span class="module library">foo</span><span class="operator">::</span><span class="struct library">Person</span> <span class="brace">{</span>
264256
<span class="field library">name</span><span class="colon">:</span> <span class="string_literal">"Bob"</span><span class="comma">,</span>

0 commit comments

Comments
 (0)