Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 304f54e

Browse files
committed
Add Definition kind for asm register operand
1 parent 44e3b7d commit 304f54e

File tree

12 files changed

+59
-35
lines changed

12 files changed

+59
-35
lines changed

src/tools/rust-analyzer/crates/ide-db/src/defs.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub enum Definition {
5151
ToolModule(ToolModule),
5252
ExternCrateDecl(ExternCrateDecl),
5353
InlineAsmRegOrRegClass(()),
54+
InlineAsmRegOperand(()),
5455
}
5556

5657
impl Definition {
@@ -89,7 +90,8 @@ impl Definition {
8990
| Definition::BuiltinLifetime(_)
9091
| Definition::TupleField(_)
9192
| Definition::ToolModule(_)
92-
| Definition::InlineAsmRegOrRegClass(_) => return None,
93+
| Definition::InlineAsmRegOrRegClass(_)
94+
| Definition::InlineAsmRegOperand(_) => return None,
9395
};
9496
Some(module)
9597
}
@@ -124,7 +126,8 @@ impl Definition {
124126
| Definition::GenericParam(_)
125127
| Definition::Label(_)
126128
| Definition::DeriveHelper(_)
127-
| Definition::InlineAsmRegOrRegClass(_) => return None,
129+
| Definition::InlineAsmRegOrRegClass(_)
130+
| Definition::InlineAsmRegOperand(_) => return None,
128131
};
129132
Some(vis)
130133
}
@@ -153,7 +156,9 @@ impl Definition {
153156
Definition::ToolModule(_) => return None, // FIXME
154157
Definition::DeriveHelper(it) => it.name(db),
155158
Definition::ExternCrateDecl(it) => return it.alias_or_name(db),
156-
Definition::InlineAsmRegOrRegClass(_) => return None, // FIXME
159+
Definition::InlineAsmRegOrRegClass(_) | Definition::InlineAsmRegOperand(_) => {
160+
return None
161+
} // FIXME
157162
};
158163
Some(name)
159164
}
@@ -216,7 +221,7 @@ impl Definition {
216221
Definition::ToolModule(_) => None,
217222
Definition::DeriveHelper(_) => None,
218223
Definition::TupleField(_) => None,
219-
Definition::InlineAsmRegOrRegClass(_) => None,
224+
Definition::InlineAsmRegOrRegClass(_) | Definition::InlineAsmRegOperand(_) => None,
220225
};
221226

222227
docs.or_else(|| {
@@ -275,6 +280,7 @@ impl Definition {
275280
}
276281
// FIXME
277282
Definition::InlineAsmRegOrRegClass(_) => "inline_asm_reg_or_reg_class".to_owned(),
283+
Definition::InlineAsmRegOperand(_) => "inline_asm_reg_operand".to_owned(),
278284
}
279285
}
280286
}
@@ -706,6 +712,9 @@ impl NameRefClass {
706712
NameRefClass::ExternCrateShorthand { krate, decl: extern_crate }
707713
})
708714
},
715+
ast::AsmRegSpec(_) => {
716+
Some(NameRefClass::Definition(Definition::InlineAsmRegOrRegClass(())))
717+
},
709718
_ => None
710719
}
711720
}

src/tools/rust-analyzer/crates/ide-db/src/rename.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ impl Definition {
207207
| Definition::ToolModule(_)
208208
| Definition::TupleField(_)
209209
| Definition::InlineAsmRegOrRegClass(_) => return None,
210+
// FIXME:
211+
Definition::InlineAsmRegOperand(_) => return None,
210212
// FIXME: This should be doable in theory
211213
Definition::DeriveHelper(_) => return None,
212214
};

src/tools/rust-analyzer/crates/ide/src/doc_links.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ pub(crate) fn resolve_doc_path_for_def(
220220
| Definition::GenericParam(_)
221221
| Definition::Label(_)
222222
| Definition::DeriveHelper(_)
223-
| Definition::InlineAsmRegOrRegClass(_) => None,
223+
| Definition::InlineAsmRegOrRegClass(_)
224+
| Definition::InlineAsmRegOperand(_) => None,
224225
}
225226
.map(Definition::from)
226227
}
@@ -674,7 +675,8 @@ fn filename_and_frag_for_def(
674675
| Definition::BuiltinLifetime(_)
675676
| Definition::ToolModule(_)
676677
| Definition::DeriveHelper(_)
677-
| Definition::InlineAsmRegOrRegClass(_) => return None,
678+
| Definition::InlineAsmRegOrRegClass(_)
679+
| Definition::InlineAsmRegOperand(_) => return None,
678680
};
679681

680682
Some((def, res, None))

src/tools/rust-analyzer/crates/ide/src/moniker.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ pub(crate) fn def_to_kind(db: &RootDatabase, def: Definition) -> SymbolInformati
223223
Variable
224224
}
225225
}
226-
Definition::Label(..) => Variable, // For lack of a better variant
226+
Definition::Label(..) | Definition::InlineAsmRegOperand(_) => Variable, // For lack of a better variant
227227
Definition::DeriveHelper(..) => Attribute,
228228
Definition::BuiltinAttr(..) => Attribute,
229229
Definition::ToolModule(..) => Module,
@@ -322,7 +322,8 @@ pub(crate) fn def_to_moniker(
322322
| Definition::BuiltinLifetime(_)
323323
| Definition::BuiltinAttr(_)
324324
| Definition::ToolModule(_)
325-
| Definition::InlineAsmRegOrRegClass(_) => return None,
325+
| Definition::InlineAsmRegOrRegClass(_)
326+
| Definition::InlineAsmRegOperand(_) => return None,
326327

327328
Definition::Local(local) => {
328329
if !local.is_param(db) {

src/tools/rust-analyzer/crates/ide/src/navigation_target.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ impl TryToNav for Definition {
244244
| Definition::ToolModule(_)
245245
| Definition::InlineAsmRegOrRegClass(_)
246246
| Definition::BuiltinAttr(_) => None,
247+
// FIXME
248+
Definition::InlineAsmRegOperand(_) => None,
247249
// FIXME: The focus range should be set to the helper declaration
248250
Definition::DeriveHelper(it) => it.derive().try_to_nav(db),
249251
}

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/highlight.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ pub(super) fn highlight_def(
537537
Definition::InlineAsmRegOrRegClass(_) => {
538538
Highlight::new(HlTag::Symbol(SymbolKind::InlineAsmRegOrRegClass))
539539
}
540+
Definition::InlineAsmRegOperand(_) => Highlight::new(HlTag::Symbol(SymbolKind::Local)),
540541
};
541542

542543
let def_crate = def.krate(db);

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/inject.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ fn module_def_to_hl_tag(def: Definition) -> HlTag {
316316
Definition::ToolModule(_) => SymbolKind::ToolModule,
317317
Definition::DeriveHelper(_) => SymbolKind::DeriveHelper,
318318
Definition::InlineAsmRegOrRegClass(_) => SymbolKind::InlineAsmRegOrRegClass,
319+
Definition::InlineAsmRegOperand(_) => SymbolKind::Local,
319320
};
320321
HlTag::Symbol(symbol)
321322
}

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/test_data/highlight_asm.html

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,17 @@
5151
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">o</span> <span class="operator">=</span> <span class="numeric_literal">0</span><span class="semicolon">;</span>
5252
<span class="module crate_root default_library library">core</span><span class="operator">::</span><span class="module default_library library">arch</span><span class="operator">::</span><span class="macro default_library library unsafe">asm</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span>
5353
<span class="string_literal macro">"%input = OpLoad _ {0}"</span><span class="comma macro">,</span>
54-
<span class="macro default_library library macro">concat</span><span class="macro_bang macro">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"%result = "</span><span class="comma macro">,</span> <span class="unresolved_reference macro">bar</span><span class="comma macro">,</span> <span class="string_literal macro">" _ %input"</span><span class="parenthesis macro">)</span><span class="comma macro">,</span>
54+
<span class="macro default_library library macro">concat</span><span class="macro_bang macro">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"%result = "</span><span class="comma macro">,</span> <span class="string_literal macro">"bar"</span><span class="comma macro">,</span> <span class="string_literal macro">" _ %input"</span><span class="parenthesis macro">)</span><span class="comma macro">,</span>
5555
<span class="string_literal macro">"OpStore {1} %result"</span><span class="comma macro">,</span>
56-
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="unresolved_reference macro">reg</span><span class="parenthesis macro">)</span> <span class="operator macro">&</span><span class="variable macro">foo</span><span class="comma macro">,</span>
57-
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="unresolved_reference macro">reg</span><span class="parenthesis macro">)</span> <span class="operator macro">&</span><span class="keyword macro">mut</span> <span class="variable macro mutable">o</span><span class="comma macro">,</span>
56+
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="reg library macro">reg</span><span class="parenthesis macro">)</span> <span class="operator macro">&</span><span class="variable macro">foo</span><span class="comma macro">,</span>
57+
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="reg library macro">reg</span><span class="parenthesis macro">)</span> <span class="operator macro">&</span><span class="keyword macro">mut</span> <span class="variable macro mutable">o</span><span class="comma macro">,</span>
5858
<span class="parenthesis macro">)</span><span class="semicolon">;</span>
59-
<span class="variable mutable">o</span>
6059

6160
<span class="keyword">let</span> <span class="variable declaration">thread_id</span><span class="colon">:</span> <span class="builtin_type">usize</span><span class="semicolon">;</span>
6261
<span class="module crate_root default_library library">core</span><span class="operator">::</span><span class="module default_library library">arch</span><span class="operator">::</span><span class="macro default_library library unsafe">asm</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"
6362
mov {0}, gs:[0x30]
6463
mov {0}, [{0}+0x48]
65-
"</span><span class="comma macro">,</span> <span class="keyword macro">out</span><span class="parenthesis macro">(</span><span class="unresolved_reference macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">thread_id</span><span class="comma macro">,</span> <span class="keyword macro">options</span><span class="parenthesis macro">(</span><span class="keyword macro">pure</span><span class="comma macro">,</span> <span class="keyword macro">readonly</span><span class="comma macro">,</span> <span class="keyword macro">nostack</span><span class="parenthesis macro">)</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
64+
"</span><span class="comma macro">,</span> <span class="keyword macro">out</span><span class="parenthesis macro">(</span><span class="reg library macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">thread_id</span><span class="comma macro">,</span> <span class="keyword macro">options</span><span class="parenthesis macro">(</span><span class="keyword macro">pure</span><span class="comma macro">,</span> <span class="keyword macro">readonly</span><span class="comma macro">,</span> <span class="keyword macro">nostack</span><span class="parenthesis macro">)</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
6665

6766
<span class="keyword">static</span> <span class="static declaration">UNMAP_BASE</span><span class="colon">:</span> <span class="builtin_type">usize</span><span class="semicolon">;</span>
6867
<span class="keyword const">const</span> <span class="constant const declaration">MEM_RELEASE</span><span class="colon">:</span> <span class="builtin_type">usize</span><span class="semicolon">;</span>

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/test_data/highlight_strings.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@
168168
<span class="module crate_root default_library library">core</span><span class="operator">::</span><span class="module default_library library">arch</span><span class="operator">::</span><span class="macro default_library library unsafe">asm</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span>
169169
<span class="string_literal macro">"mov {0}, {1}"</span><span class="comma macro">,</span>
170170
<span class="string_literal macro">"add {0}, 5"</span><span class="comma macro">,</span>
171-
<span class="keyword macro">out</span><span class="parenthesis macro">(</span><span class="unresolved_reference macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">o</span><span class="comma macro">,</span>
172-
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="unresolved_reference macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">i</span><span class="comma macro">,</span>
171+
<span class="keyword macro">out</span><span class="parenthesis macro">(</span><span class="reg library macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">o</span><span class="comma macro">,</span>
172+
<span class="keyword control macro">in</span><span class="parenthesis macro">(</span><span class="reg library macro">reg</span><span class="parenthesis macro">)</span> <span class="variable macro">i</span><span class="comma macro">,</span>
173173
<span class="parenthesis macro">)</span><span class="semicolon">;</span>
174174

175175
<span class="keyword const">const</span> <span class="constant const declaration">CONSTANT</span><span class="colon">:</span> <span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">=</span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="colon">:</span>

src/tools/rust-analyzer/crates/ide/src/syntax_highlighting/tests.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,12 +1287,11 @@ fn main() {
12871287
let mut o = 0;
12881288
core::arch::asm!(
12891289
"%input = OpLoad _ {0}",
1290-
concat!("%result = ", bar, " _ %input"),
1290+
concat!("%result = ", "bar", " _ %input"),
12911291
"OpStore {1} %result",
12921292
in(reg) &foo,
12931293
in(reg) &mut o,
12941294
);
1295-
o
12961295
12971296
let thread_id: usize;
12981297
core::arch::asm!("

0 commit comments

Comments
 (0)