Skip to content

Commit a653290

Browse files
committed
Add test for unsafe union field access highlighting
1 parent f1d5072 commit a653290

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

crates/ra_ide/src/syntax_highlighting/tests.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,11 @@ fn test_unsafe_highlighting() {
275275
r#"
276276
unsafe fn unsafe_fn() {}
277277
278+
union Union {
279+
a: u32,
280+
b: f32,
281+
}
282+
278283
struct HasUnsafeFn;
279284
280285
impl HasUnsafeFn {
@@ -283,8 +288,14 @@ impl HasUnsafeFn {
283288
284289
fn main() {
285290
let x = &5 as *const usize;
291+
let u = Union { b: 0 };
286292
unsafe {
287293
unsafe_fn();
294+
let b = u.b;
295+
match u {
296+
Union { b: 0 } => (),
297+
Union { a } => (),
298+
}
288299
HasUnsafeFn.unsafe_method();
289300
let y = *(x);
290301
let z = -x;

crates/ra_ide/test_data/highlight_unsafe.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
</style>
3838
<pre><code><span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function declaration unsafe">unsafe_fn</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
3939

40+
<span class="keyword">union</span> <span class="union declaration">Union</span> <span class="punctuation">{</span>
41+
<span class="field declaration">a</span><span class="punctuation">:</span> <span class="builtin_type">u32</span><span class="punctuation">,</span>
42+
<span class="field declaration">b</span><span class="punctuation">:</span> <span class="builtin_type">f32</span><span class="punctuation">,</span>
43+
<span class="punctuation">}</span>
44+
4045
<span class="keyword">struct</span> <span class="struct declaration">HasUnsafeFn</span><span class="punctuation">;</span>
4146

4247
<span class="keyword">impl</span> <span class="struct">HasUnsafeFn</span> <span class="punctuation">{</span>
@@ -45,8 +50,14 @@
4550

4651
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span>
4752
<span class="keyword">let</span> <span class="variable declaration">x</span> <span class="operator">=</span> <span class="operator">&</span><span class="numeric_literal">5</span> <span class="keyword">as</span> <span class="keyword">*</span><span class="keyword">const</span> <span class="builtin_type">usize</span><span class="punctuation">;</span>
53+
<span class="keyword">let</span> <span class="variable declaration">u</span> <span class="operator">=</span> <span class="union">Union</span> <span class="punctuation">{</span> <span class="unresolved_reference">b</span><span class="punctuation">:</span> <span class="numeric_literal">0</span> <span class="punctuation">}</span><span class="punctuation">;</span>
4854
<span class="keyword unsafe">unsafe</span> <span class="punctuation">{</span>
4955
<span class="function unsafe">unsafe_fn</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
56+
<span class="keyword">let</span> <span class="variable declaration">b</span> <span class="operator">=</span> <span class="variable">u</span><span class="punctuation">.</span><span class="unresolved_reference">b</span><span class="punctuation">;</span>
57+
<span class="keyword control">match</span> <span class="variable">u</span> <span class="punctuation">{</span>
58+
<span class="union">Union</span> <span class="punctuation">{</span> <span class="unresolved_reference">b</span><span class="punctuation">:</span> <span class="numeric_literal">0</span> <span class="punctuation">}</span> <span class="operator">=&gt;</span> <span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span>
59+
<span class="union">Union</span> <span class="punctuation">{</span> <span class="variable declaration">a</span> <span class="punctuation">}</span> <span class="operator">=&gt;</span> <span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span>
60+
<span class="punctuation">}</span>
5061
<span class="struct">HasUnsafeFn</span><span class="punctuation">.</span><span class="function unsafe">unsafe_method</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
5162
<span class="keyword">let</span> <span class="variable declaration">y</span> <span class="operator">=</span> <span class="operator unsafe">*</span><span class="punctuation">(</span><span class="variable">x</span><span class="punctuation">)</span><span class="punctuation">;</span>
5263
<span class="keyword">let</span> <span class="variable declaration">z</span> <span class="operator">=</span> <span class="numeric_literal">-</span><span class="variable">x</span><span class="punctuation">;</span>

0 commit comments

Comments
 (0)