pub fn is_auto(self, db: &dyn HirDatabase) -> bool {
db.trait_data(self.id).is_auto
}
+
+ pub fn is_unsafe(&self, db: &dyn HirDatabase) -> bool {
+ db.trait_data(self.id).is_unsafe
+ }
}
impl HasVisibility for Trait {
return h;
}
- hir::ModuleDef::Trait(_) => HlTag::Symbol(SymbolKind::Trait),
+ hir::ModuleDef::Trait(trait_) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Trait));
+
+ if trait_.is_unsafe(db) {
+ h |= HlMod::Unsafe;
+ }
+ return h;
+ }
hir::ModuleDef::TypeAlias(type_) => {
let mut h = Highlight::new(HlTag::Symbol(SymbolKind::TypeAlias));
if let Some(item) = type_.as_assoc_item(db) {
/// Used with keywords like `async` and `await`.
Async,
// Keep this last!
- /// Used for unsafe functions, mutable statics, union accesses and unsafe operations.
+ /// Used for unsafe functions, unsafe traits, mutable statics, union accesses and unsafe operations.
Unsafe,
}
<span class="keyword">let</span> <span class="variable declaration">f1</span> <span class="operator">=</span> <span class="function async">learn_and_sing</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
<span class="keyword">let</span> <span class="variable declaration">f2</span> <span class="operator">=</span> <span class="unresolved_reference">dance</span><span class="parenthesis">(</span><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></code></pre>
\ No newline at end of file
+<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></code></pre>
\ No newline at end of file
let f2 = dance();
futures::join!(f1, f2);
}
+
+unsafe trait Dangerous {}
+impl Dangerous for () {}
"#
.trim(),
expect_file!["./test_data/highlighting.html"],