mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 20:09:19 +00:00
Don't highlight unsafe traits as unsafe in safe impls
This commit is contained in:
parent
64fb7be247
commit
33cdc21832
12 changed files with 44 additions and 56 deletions
|
@ -286,7 +286,9 @@ fn highlight_name_ref(
|
||||||
Definition::ModuleDef(hir::ModuleDef::Trait(trait_))
|
Definition::ModuleDef(hir::ModuleDef::Trait(trait_))
|
||||||
if trait_.is_unsafe(db) =>
|
if trait_.is_unsafe(db) =>
|
||||||
{
|
{
|
||||||
if ast::Impl::for_trait_name_ref(&name_ref).is_some() {
|
if ast::Impl::for_trait_name_ref(&name_ref)
|
||||||
|
.map_or(false, |impl_| impl_.unsafe_token().is_some())
|
||||||
|
{
|
||||||
h |= HlMod::Unsafe;
|
h |= HlMod::Unsafe;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -85,7 +87,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,31 +35,25 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
.unresolved_reference { color: #FC5555; text-decoration: wavy underline; }
|
.unresolved_reference { color: #FC5555; text-decoration: wavy underline; }
|
||||||
</style>
|
</style>
|
||||||
<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>
|
<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>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
|
||||||
<span class="keyword">union</span> <span class="union declaration">Union</span> <span class="brace">{</span>
|
<span class="keyword">union</span> <span class="union declaration">Union</span> <span class="brace">{</span>
|
||||||
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u32</span><span class="comma">,</span>
|
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u32</span><span class="comma">,</span>
|
||||||
<span class="field declaration">b</span><span class="colon">:</span> <span class="builtin_type">f32</span><span class="comma">,</span>
|
<span class="field declaration">b</span><span class="colon">:</span> <span class="builtin_type">f32</span><span class="comma">,</span>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
|
|
||||||
<span class="keyword">struct</span> <span class="struct declaration">HasUnsafeFn</span><span class="semicolon">;</span>
|
<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>
|
||||||
|
<span class="keyword">impl</span> <span class="struct">Struct</span> <span class="brace">{</span>
|
||||||
<span class="keyword">impl</span> <span class="struct">HasUnsafeFn</span> <span class="brace">{</span>
|
|
||||||
<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>
|
<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>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
|
|
||||||
<span class="keyword">struct</span> <span class="struct declaration">TypeForStaticMut</span> <span class="brace">{</span>
|
|
||||||
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u8</span>
|
|
||||||
<span class="brace">}</span>
|
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<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>
|
<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>
|
||||||
<span class="keyword">struct</span> <span class="struct declaration">Packed</span> <span class="brace">{</span>
|
<span class="keyword">struct</span> <span class="struct declaration">Packed</span> <span class="brace">{</span>
|
||||||
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u16</span><span class="comma">,</span>
|
<span class="field declaration">a</span><span class="colon">:</span> <span class="builtin_type">u16</span><span class="comma">,</span>
|
||||||
|
@ -65,8 +61,9 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
|
|
||||||
<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>
|
<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>
|
||||||
<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>
|
<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>
|
||||||
|
<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>
|
||||||
|
|
||||||
<span class="keyword">fn</span> <span class="function declaration">require_unsafe_trait</span><span class="angle"><</span><span class="type_param declaration">T</span><span class="colon">:</span> <span class="trait">UnsafeTrait</span><span class="angle">></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>
|
<span class="keyword">fn</span> <span class="function declaration">unsafe_trait_bound</span><span class="angle"><</span><span class="type_param declaration">T</span><span class="colon">:</span> <span class="trait">UnsafeTrait</span><span class="angle">></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>
|
||||||
|
|
||||||
<span class="keyword">trait</span> <span class="trait declaration">DoTheAutoref</span> <span class="brace">{</span>
|
<span class="keyword">trait</span> <span class="trait declaration">DoTheAutoref</span> <span class="brace">{</span>
|
||||||
<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>
|
<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 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
<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">=></span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
|
<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">=></span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
|
||||||
<span class="union">Union</span> <span class="brace">{</span> <span class="field unsafe">a</span> <span class="brace">}</span> <span class="operator">=></span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
|
<span class="union">Union</span> <span class="brace">{</span> <span class="field unsafe">a</span> <span class="brace">}</span> <span class="operator">=></span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
<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>
|
<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>
|
||||||
|
|
||||||
<span class="comment">// unsafe deref</span>
|
<span class="comment">// unsafe deref</span>
|
||||||
<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>
|
<span class="operator unsafe">*</span><span class="variable">x</span><span class="semicolon">;</span>
|
||||||
|
|
||||||
<span class="comment">// unsafe access to a static mut</span>
|
<span class="comment">// unsafe access to a static mut</span>
|
||||||
<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>
|
<span class="static mutable unsafe">MUT_GLOBAL</span><span class="operator">.</span><span class="field">field</span><span class="semicolon">;</span>
|
||||||
|
<span class="static">GLOBAL</span><span class="operator">.</span><span class="field">field</span><span class="semicolon">;</span>
|
||||||
|
|
||||||
<span class="comment">// unsafe ref of packed fields</span>
|
<span class="comment">// unsafe ref of packed fields</span>
|
||||||
<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>
|
<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>
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
@ -116,8 +117,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
<span class="function">str</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
|
<span class="function">str</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<span class="keyword">fn</span> <span class="function declaration">foo</span><span class="angle"><</span><span class="lifetime declaration">'a</span><span class="comma">,</span> <span class="type_param declaration">T</span><span class="angle">></span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-></span> <span class="type_param">T</span> <span class="brace">{</span>
|
<span class="keyword">fn</span> <span class="function declaration">foo</span><span class="angle"><</span><span class="lifetime declaration">'a</span><span class="comma">,</span> <span class="type_param declaration">T</span><span class="angle">></span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-></span> <span class="type_param">T</span> <span class="brace">{</span>
|
||||||
<span class="function">foo</span><span class="operator">::</span><span class="angle"><</span><span class="lifetime">'a</span><span class="comma">,</span> <span class="builtin_type">i32</span><span class="angle">></span><span class="parenthesis">(</span><span class="parenthesis">)</span>
|
<span class="function">foo</span><span class="operator">::</span><span class="angle"><</span><span class="lifetime">'a</span><span class="comma">,</span> <span class="builtin_type">i32</span><span class="angle">></span><span class="parenthesis">(</span><span class="parenthesis">)</span>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
|
@ -185,10 +184,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
<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>
|
<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>
|
||||||
<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>
|
<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>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
<span class="keyword unsafe">unsafe</span> <span class="brace">{</span>
|
|
||||||
<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>
|
|
||||||
<span class="static mutable unsafe">STATIC_MUT</span> <span class="operator">=</span> <span class="numeric_literal">1</span><span class="semicolon">;</span>
|
|
||||||
<span class="brace">}</span>
|
|
||||||
|
|
||||||
<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>
|
<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>
|
||||||
<span class="comment">// Do nothing</span>
|
<span class="comment">// Do nothing</span>
|
||||||
|
@ -256,9 +251,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
futures::<span class="macro">join!</span><span class="parenthesis">(</span>f1<span class="comma">,</span> f2<span class="parenthesis">)</span><span class="semicolon">;</span>
|
futures::<span class="macro">join!</span><span class="parenthesis">(</span>f1<span class="comma">,</span> f2<span class="parenthesis">)</span><span class="semicolon">;</span>
|
||||||
<span class="brace">}</span>
|
<span class="brace">}</span>
|
||||||
|
|
||||||
<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>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<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>
|
<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>
|
||||||
<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>
|
<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>
|
||||||
<span class="field library">name</span><span class="colon">:</span> <span class="string_literal">"Bob"</span><span class="comma">,</span>
|
<span class="field library">name</span><span class="colon">:</span> <span class="string_literal">"Bob"</span><span class="comma">,</span>
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.function.unsafe { color: #BC8383; }
|
.function.unsafe { color: #BC8383; }
|
||||||
.trait.unsafe { color: #BC8383; }
|
.trait.unsafe { color: #BC8383; }
|
||||||
.operator.unsafe { color: #BC8383; }
|
.operator.unsafe { color: #BC8383; }
|
||||||
|
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
|
||||||
|
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
||||||
.parameter { color: #94BFF3; }
|
.parameter { color: #94BFF3; }
|
||||||
.text { color: #DCDCCC; }
|
.text { color: #DCDCCC; }
|
||||||
.type { color: #7CB8BB; }
|
.type { color: #7CB8BB; }
|
||||||
|
@ -33,7 +35,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
.mutable { text-decoration: underline; }
|
.mutable { text-decoration: underline; }
|
||||||
.escape_sequence { color: #94BFF3; }
|
.escape_sequence { color: #94BFF3; }
|
||||||
.keyword { color: #F0DFAF; font-weight: bold; }
|
.keyword { color: #F0DFAF; font-weight: bold; }
|
||||||
.keyword.unsafe { color: #BC8383; font-weight: bold; }
|
|
||||||
.control { font-style: italic; }
|
.control { font-style: italic; }
|
||||||
.reference { font-style: italic; font-weight: bold; }
|
.reference { font-style: italic; font-weight: bold; }
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,6 @@ fn str() {
|
||||||
str();
|
str();
|
||||||
}
|
}
|
||||||
|
|
||||||
static mut STATIC_MUT: i32 = 0;
|
|
||||||
|
|
||||||
fn foo<'a, T>() -> T {
|
fn foo<'a, T>() -> T {
|
||||||
foo::<'a, i32>()
|
foo::<'a, i32>()
|
||||||
}
|
}
|
||||||
|
@ -158,10 +156,6 @@ fn main() {
|
||||||
let x = 92;
|
let x = 92;
|
||||||
vec.push(Foo { x, y: 1 });
|
vec.push(Foo { x, y: 1 });
|
||||||
}
|
}
|
||||||
unsafe {
|
|
||||||
vec.set_len(0);
|
|
||||||
STATIC_MUT = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for e in vec {
|
for e in vec {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
|
@ -229,9 +223,6 @@ async fn async_main() {
|
||||||
futures::join!(f1, f2);
|
futures::join!(f1, f2);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe trait Dangerous {}
|
|
||||||
impl Dangerous for () {}
|
|
||||||
|
|
||||||
fn use_foo_items() {
|
fn use_foo_items() {
|
||||||
let bob = foo::Person {
|
let bob = foo::Person {
|
||||||
name: "Bob",
|
name: "Bob",
|
||||||
|
@ -514,6 +505,8 @@ fn main() {
|
||||||
fn test_unsafe_highlighting() {
|
fn test_unsafe_highlighting() {
|
||||||
check_highlighting(
|
check_highlighting(
|
||||||
r#"
|
r#"
|
||||||
|
static mut MUT_GLOBAL: Struct = Struct { field: 0 };
|
||||||
|
static GLOBAL: Struct = Struct { field: 0 };
|
||||||
unsafe fn unsafe_fn() {}
|
unsafe fn unsafe_fn() {}
|
||||||
|
|
||||||
union Union {
|
union Union {
|
||||||
|
@ -521,18 +514,11 @@ union Union {
|
||||||
b: f32,
|
b: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HasUnsafeFn;
|
struct Struct { field: i32 }
|
||||||
|
impl Struct {
|
||||||
impl HasUnsafeFn {
|
|
||||||
unsafe fn unsafe_method(&self) {}
|
unsafe fn unsafe_method(&self) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TypeForStaticMut {
|
|
||||||
a: u8
|
|
||||||
}
|
|
||||||
|
|
||||||
static mut global_mut: TypeForStaticMut = TypeForStaticMut { a: 0 };
|
|
||||||
|
|
||||||
#[repr(packed)]
|
#[repr(packed)]
|
||||||
struct Packed {
|
struct Packed {
|
||||||
a: u16,
|
a: u16,
|
||||||
|
@ -540,8 +526,9 @@ struct Packed {
|
||||||
|
|
||||||
unsafe trait UnsafeTrait {}
|
unsafe trait UnsafeTrait {}
|
||||||
unsafe impl UnsafeTrait for Packed {}
|
unsafe impl UnsafeTrait for Packed {}
|
||||||
|
impl !UnsafeTrait for () {}
|
||||||
|
|
||||||
fn require_unsafe_trait<T: UnsafeTrait>(_: T) {}
|
fn unsafe_trait_bound<T: UnsafeTrait>(_: T) {}
|
||||||
|
|
||||||
trait DoTheAutoref {
|
trait DoTheAutoref {
|
||||||
fn calls_autoref(&self);
|
fn calls_autoref(&self);
|
||||||
|
@ -562,13 +549,14 @@ fn main() {
|
||||||
Union { b: 0 } => (),
|
Union { b: 0 } => (),
|
||||||
Union { a } => (),
|
Union { a } => (),
|
||||||
}
|
}
|
||||||
HasUnsafeFn.unsafe_method();
|
Struct { field: 0 }.unsafe_method();
|
||||||
|
|
||||||
// unsafe deref
|
// unsafe deref
|
||||||
let y = *x;
|
*x;
|
||||||
|
|
||||||
// unsafe access to a static mut
|
// unsafe access to a static mut
|
||||||
let a = global_mut.a;
|
MUT_GLOBAL.field;
|
||||||
|
GLOBAL.field;
|
||||||
|
|
||||||
// unsafe ref of packed fields
|
// unsafe ref of packed fields
|
||||||
let packed = Packed { a: 0 };
|
let packed = Packed { a: 0 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue