Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/tests.rs')
-rw-r--r--crates/ide/src/syntax_highlighting/tests.rs134
1 files changed, 126 insertions, 8 deletions
diff --git a/crates/ide/src/syntax_highlighting/tests.rs b/crates/ide/src/syntax_highlighting/tests.rs
index 2070022d41..94cee4ef43 100644
--- a/crates/ide/src/syntax_highlighting/tests.rs
+++ b/crates/ide/src/syntax_highlighting/tests.rs
@@ -2,6 +2,7 @@ use std::time::Instant;
use expect_test::{expect_file, ExpectFile};
use ide_db::SymbolKind;
+use span::Edition;
use test_utils::{bench, bench_fixture, skip_slow_tests, AssertLinear};
use crate::{fixture, FileRange, HighlightConfig, HlTag, TextRange};
@@ -383,8 +384,10 @@ where
#[test]
fn test_keyword_highlighting() {
- check_highlighting(
- r#"
+ for edition in Edition::iter() {
+ check_highlighting(
+ &(format!("//- /main.rs crate:main edition:{edition}")
+ + r#"
extern crate self;
use crate;
@@ -396,13 +399,27 @@ mod __ {
macro_rules! void {
($($tt:tt)*) => {}
}
-void!(Self);
+
struct __ where Self:;
fn __(_: Self) {}
-"#,
- expect_file!["./test_data/highlight_keywords.html"],
- false,
- );
+void!(Self);
+
+// edition dependent
+void!(try async await gen);
+// edition and context dependent
+void!(dyn);
+// builtin custom syntax
+void!(builtin offset_of format_args asm);
+// contextual
+void!(macro_rules, union, default, raw, auto, yeet);
+// reserved
+void!(abstract become box do final macro override priv typeof unsized virtual yield);
+void!('static 'self 'unsafe)
+"#),
+ expect_file![format!("./test_data/highlight_keywords_{edition}.html")],
+ false,
+ );
+ }
}
#[test]
@@ -532,7 +549,7 @@ fn main() {
toho!("{}fmt", 0);
let i: u64 = 3;
let o: u64;
- asm!(
+ core::arch::asm!(
"mov {0}, {1}",
"add {0}, 5",
out(reg) o,
@@ -554,6 +571,7 @@ fn main() {
fn test_unsafe_highlighting() {
check_highlighting(
r#"
+//- minicore: sized
macro_rules! id {
($($tt:tt)*) => {
$($tt)*
@@ -1257,3 +1275,103 @@ fn f<'de, T: Deserialize<'de>>() {
);
let _ = analysis.highlight(HL_CONFIG, file_id).unwrap();
}
+
+#[test]
+fn test_asm_highlighting() {
+ check_highlighting(
+ r#"
+//- minicore: asm, concat
+fn main() {
+ unsafe {
+ let foo = 1;
+ let mut o = 0;
+ core::arch::asm!(
+ "%input = OpLoad _ {0}",
+ concat!("%result = ", "bar", " _ %input"),
+ "OpStore {1} %result",
+ in(reg) &foo,
+ in(reg) &mut o,
+ );
+
+ let thread_id: usize;
+ core::arch::asm!("
+ mov {0}, gs:[0x30]
+ mov {0}, [{0}+0x48]
+ ", out(reg) thread_id, options(pure, readonly, nostack));
+
+ static UNMAP_BASE: usize;
+ const MEM_RELEASE: usize;
+ static VirtualFree: usize;
+ const OffPtr: usize;
+ const OffFn: usize;
+ core::arch::asm!("
+ push {free_type}
+ push {free_size}
+ push {base}
+
+ mov eax, fs:[30h]
+ mov eax, [eax+8h]
+ add eax, {off_fn}
+ mov [eax-{off_fn}+{off_ptr}], eax
+
+ push eax
+
+ jmp {virtual_free}
+ ",
+ off_ptr = const OffPtr,
+ off_fn = const OffFn,
+
+ free_size = const 0,
+ free_type = const MEM_RELEASE,
+
+ virtual_free = sym VirtualFree,
+
+ base = sym UNMAP_BASE,
+ options(noreturn),
+ );
+ }
+}
+// taken from https://github.com/rust-embedded/cortex-m/blob/47921b51f8b960344fcfa1255a50a0d19efcde6d/cortex-m/src/asm.rs#L254-L274
+#[inline]
+pub unsafe fn bootstrap(msp: *const u32, rv: *const u32) -> ! {
+ // Ensure thumb mode is set.
+ let rv = (rv as u32) | 1;
+ let msp = msp as u32;
+ core::arch::asm!(
+ "mrs {tmp}, CONTROL",
+ "bics {tmp}, {spsel}",
+ "msr CONTROL, {tmp}",
+ "isb",
+ "msr MSP, {msp}",
+ "bx {rv}",
+ // `out(reg) _` is not permitted in a `noreturn` asm! call,
+ // so instead use `in(reg) 0` and don't restore it afterwards.
+ tmp = in(reg) 0,
+ spsel = in(reg) 2,
+ msp = in(reg) msp,
+ rv = in(reg) rv,
+ options(noreturn, nomem, nostack),
+ );
+}
+"#,
+ expect_file!["./test_data/highlight_asm.html"],
+ false,
+ );
+}
+
+#[test]
+fn issue_18089() {
+ check_highlighting(
+ r#"
+//- proc_macros: issue_18089
+fn main() {
+ template!(template);
+}
+
+#[proc_macros::issue_18089]
+fn template() {}
+"#,
+ expect_file!["./test_data/highlight_issue_18089.html"],
+ false,
+ );
+}