diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2015.html b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2015.html new file mode 100644 index 0000000000..a790b38578 --- /dev/null +++ b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2015.html @@ -0,0 +1,74 @@ + + +
extern crate self;
+
+use crate;
+use self;
+mod __ {
+ use super::*;
+}
+
+macro_rules! void {
+ ($($tt:tt)*) => {}
+}
+
+struct __ where Self:;
+fn __(_: Self) {}
+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)
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2018.html b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2018.html
new file mode 100644
index 0000000000..6dac066bfa
--- /dev/null
+++ b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2018.html
@@ -0,0 +1,74 @@
+
+
+extern crate self;
+
+use crate;
+use self;
+mod __ {
+ use super::*;
+}
+
+macro_rules! void {
+ ($($tt:tt)*) => {}
+}
+
+struct __ where Self:;
+fn __(_: Self) {}
+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)
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2021.html b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2021.html
new file mode 100644
index 0000000000..6dac066bfa
--- /dev/null
+++ b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2021.html
@@ -0,0 +1,74 @@
+
+
+extern crate self;
+
+use crate;
+use self;
+mod __ {
+ use super::*;
+}
+
+macro_rules! void {
+ ($($tt:tt)*) => {}
+}
+
+struct __ where Self:;
+fn __(_: Self) {}
+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)
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2024.html b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2024.html
new file mode 100644
index 0000000000..4ccc407990
--- /dev/null
+++ b/crates/ide/src/syntax_highlighting/test_data/highlight_keywords_2024.html
@@ -0,0 +1,74 @@
+
+
+extern crate self;
+
+use crate;
+use self;
+mod __ {
+ use super::*;
+}
+
+macro_rules! void {
+ ($($tt:tt)*) => {}
+}
+
+struct __ where Self:;
+fn __(_: Self) {}
+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)
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/tests.rs b/crates/ide/src/syntax_highlighting/tests.rs
index ad7fbb00e5..c06ea155fb 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]
diff --git a/crates/parser/src/edition.rs b/crates/parser/src/edition.rs
index be0a2c794e..702b16252d 100644
--- a/crates/parser/src/edition.rs
+++ b/crates/parser/src/edition.rs
@@ -30,6 +30,12 @@ impl Edition {
pub fn at_least_2018(self) -> bool {
self >= Edition::Edition2018
}
+
+ pub fn iter() -> impl Iterator