diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_assoc_functions.html b/crates/ide/src/syntax_highlighting/test_data/highlight_assoc_functions.html
index 645e6c589d..b035e786d3 100644
--- a/crates/ide/src/syntax_highlighting/test_data/highlight_assoc_functions.html
+++ b/crates/ide/src/syntax_highlighting/test_data/highlight_assoc_functions.html
@@ -58,5 +58,4 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
impl t for foo {
pub fn is_static() {}
pub fn is_not_static(&self) {}
-}
-
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_default_library.html b/crates/ide/src/syntax_highlighting/test_data/highlight_default_library.html
index 2f96a1be85..3e20b2f351 100644
--- a/crates/ide/src/syntax_highlighting/test_data/highlight_default_library.html
+++ b/crates/ide/src/syntax_highlighting/test_data/highlight_default_library.html
@@ -46,5 +46,4 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
fn main() {
let foo = Some(92);
let nums = iter::repeat(foo.unwrap());
-}
-
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/crates/ide/src/syntax_highlighting/test_data/injection.html b/crates/ide/src/syntax_highlighting/test_data/injection.html
index 2e9ad144f1..ce4e22379e 100644
--- a/crates/ide/src/syntax_highlighting/test_data/injection.html
+++ b/crates/ide/src/syntax_highlighting/test_data/injection.html
@@ -49,5 +49,4 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
92
}$0)
}");
-}
-
\ No newline at end of file
+}
\ 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 4beab9909c..2581ed10e4 100644
--- a/crates/ide/src/syntax_highlighting/tests.rs
+++ b/crates/ide/src/syntax_highlighting/tests.rs
@@ -288,161 +288,12 @@ macro_rules! die {
panic!();
};
}
-"#
- .trim(),
+"#,
expect_file!["./test_data/highlighting.html"],
false,
);
}
-#[test]
-fn test_rainbow_highlighting() {
- check_highlighting(
- r#"
-fn main() {
- let hello = "hello";
- let x = hello.to_string();
- let y = hello.to_string();
-
- let x = "other color please!";
- let y = x.to_string();
-}
-
-fn bar() {
- let mut hello = "hello";
-}
-"#
- .trim(),
- expect_file!["./test_data/rainbow_highlighting.html"],
- true,
- );
-}
-
-#[test]
-fn benchmark_syntax_highlighting_long_struct() {
- if skip_slow_tests() {
- return;
- }
-
- let fixture = bench_fixture::big_struct();
- let (analysis, file_id) = fixture::file(&fixture);
-
- let hash = {
- let _pt = bench("syntax highlighting long struct");
- analysis
- .highlight(file_id)
- .unwrap()
- .iter()
- .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Struct))
- .count()
- };
- assert_eq!(hash, 2001);
-}
-
-#[test]
-fn syntax_highlighting_not_quadratic() {
- if skip_slow_tests() {
- return;
- }
-
- let mut al = AssertLinear::default();
- while al.next_round() {
- for i in 6..=10 {
- let n = 1 << i;
-
- let fixture = bench_fixture::big_struct_n(n);
- let (analysis, file_id) = fixture::file(&fixture);
-
- let time = Instant::now();
-
- let hash = analysis
- .highlight(file_id)
- .unwrap()
- .iter()
- .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Struct))
- .count();
- assert!(hash > n as usize);
-
- let elapsed = time.elapsed();
- al.sample(n as f64, elapsed.as_millis() as f64);
- }
- }
-}
-
-#[test]
-fn benchmark_syntax_highlighting_parser() {
- if skip_slow_tests() {
- return;
- }
-
- let fixture = bench_fixture::glorious_old_parser();
- let (analysis, file_id) = fixture::file(&fixture);
-
- let hash = {
- let _pt = bench("syntax highlighting parser");
- analysis
- .highlight(file_id)
- .unwrap()
- .iter()
- .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Function))
- .count()
- };
- assert_eq!(hash, 1616);
-}
-
-#[test]
-fn test_ranges() {
- let (analysis, file_id) = fixture::file(
- r#"
-#[derive(Clone, Debug)]
-struct Foo {
- pub x: i32,
- pub y: i32,
-}
-"#,
- );
-
- // The "x"
- let highlights = &analysis
- .highlight_range(FileRange { file_id, range: TextRange::at(45.into(), 1.into()) })
- .unwrap();
-
- assert_eq!(&highlights[0].highlight.to_string(), "field.declaration.public");
-}
-
-#[test]
-fn test_flattening() {
- check_highlighting(
- r##"
-fn fixture(ra_fixture: &str) {}
-
-fn main() {
- fixture(r#"
- trait Foo {
- fn foo() {
- println!("2 + 2 = {}", 4);
- }
- }"#
- );
-}"##
- .trim(),
- expect_file!["./test_data/highlight_injection.html"],
- false,
- );
-}
-
-#[test]
-fn ranges_sorted() {
- let (analysis, file_id) = fixture::file(
- r#"
-#[foo(bar = "bar")]
-macro_rules! test {}
-}"#
- .trim(),
- );
- let _ = analysis.highlight(file_id).unwrap();
-}
-
#[test]
fn test_string_highlighting() {
// The format string detection is based on macro-expansion,
@@ -555,8 +406,7 @@ fn main() {
toho!("{}fmt", 0);
asm!("mov eax, {0}");
format_args!(concat!("{}"), "{}");
-}"#
- .trim(),
+}"#,
expect_file!["./test_data/highlight_strings.html"],
false,
);
@@ -630,8 +480,7 @@ fn main() {
packed.a.calls_autoref();
}
}
-"#
- .trim(),
+"#,
expect_file!["./test_data/highlight_unsafe.html"],
false,
);
@@ -781,8 +630,7 @@ pub fn block_comments2() {}
//! ```
//! fn test() {}
//! ```
-"#
- .trim(),
+"#,
expect_file!["./test_data/highlight_doctest.html"],
false,
);
@@ -792,14 +640,14 @@ pub fn block_comments2() {}
fn test_extern_crate() {
check_highlighting(
r#"
- //- /main.rs crate:main deps:std,alloc
- extern crate std;
- extern crate alloc as abc;
- //- /std/lib.rs crate:std
- pub struct S;
- //- /alloc/lib.rs crate:alloc
- pub struct A
- "#,
+//- /main.rs crate:main deps:std,alloc
+extern crate std;
+extern crate alloc as abc;
+//- /std/lib.rs crate:std
+pub struct S;
+//- /alloc/lib.rs crate:alloc
+pub struct A
+"#,
expect_file!["./test_data/highlight_extern_crate.html"],
false,
);
@@ -809,41 +657,41 @@ fn test_extern_crate() {
fn test_crate_root() {
check_highlighting(
r#"
- //- minicore: iterators
- //- /main.rs crate:main deps:foo
- extern crate foo;
- use core::iter;
+//- minicore: iterators
+//- /main.rs crate:main deps:foo
+extern crate foo;
+use core::iter;
- pub const NINETY_TWO: u8 = 92;
+pub const NINETY_TWO: u8 = 92;
- use foo as foooo;
+use foo as foooo;
- pub(crate) fn main() {
- let baz = iter::repeat(92);
- }
+pub(crate) fn main() {
+ let baz = iter::repeat(92);
+}
- mod bar {
- pub(in super) const FORTY_TWO: u8 = 42;
+mod bar {
+ pub(in super) const FORTY_TWO: u8 = 42;
- mod baz {
- use super::super::NINETY_TWO;
- use crate::foooo::Point;
+ mod baz {
+ use super::super::NINETY_TWO;
+ use crate::foooo::Point;
- pub(in super::super) const TWENTY_NINE: u8 = 29;
- }
- }
- //- /foo.rs crate:foo
- struct Point {
- x: u8,
- y: u8,
- }
+ pub(in super::super) const TWENTY_NINE: u8 = 29;
+ }
+}
+//- /foo.rs crate:foo
+struct Point {
+ x: u8,
+ y: u8,
+}
- mod inner {
- pub(super) fn swap(p: crate::Point) -> crate::Point {
- crate::Point { x: p.y, y: p.x }
- }
- }
- "#,
+mod inner {
+ pub(super) fn swap(p: crate::Point) -> crate::Point {
+ crate::Point { x: p.y, y: p.x }
+ }
+}
+"#,
expect_file!["./test_data/highlight_crate_root.html"],
false,
);
@@ -853,14 +701,14 @@ fn test_crate_root() {
fn test_default_library() {
check_highlighting(
r#"
- //- minicore: option, iterators
- use core::iter;
+//- minicore: option, iterators
+use core::iter;
- fn main() {
- let foo = Some(92);
- let nums = iter::repeat(foo.unwrap());
- }
- "#,
+fn main() {
+ let foo = Some(92);
+ let nums = iter::repeat(foo.unwrap());
+}
+"#,
expect_file!["./test_data/highlight_default_library.html"],
false,
);
@@ -888,7 +736,7 @@ impl t for foo {
pub fn is_static() {}
pub fn is_not_static(&self) {}
}
- "#,
+"#,
expect_file!["./test_data/highlight_assoc_functions.html"],
false,
)
@@ -907,17 +755,163 @@ fn foo() {
}\$0)
}");
}
- "##,
+"##,
expect_file!["./test_data/injection.html"],
false,
);
}
+#[test]
+fn test_rainbow_highlighting() {
+ check_highlighting(
+ r#"
+fn main() {
+ let hello = "hello";
+ let x = hello.to_string();
+ let y = hello.to_string();
+
+ let x = "other color please!";
+ let y = x.to_string();
+}
+
+fn bar() {
+ let mut hello = "hello";
+}
+"#,
+ expect_file!["./test_data/rainbow_highlighting.html"],
+ true,
+ );
+}
+
+#[test]
+fn test_ranges() {
+ let (analysis, file_id) = fixture::file(
+ r#"
+#[derive(Clone, Debug)]
+struct Foo {
+ pub x: i32,
+ pub y: i32,
+}
+"#,
+ );
+
+ // The "x"
+ let highlights = &analysis
+ .highlight_range(FileRange { file_id, range: TextRange::at(45.into(), 1.into()) })
+ .unwrap();
+
+ assert_eq!(&highlights[0].highlight.to_string(), "field.declaration.public");
+}
+
+#[test]
+fn test_flattening() {
+ check_highlighting(
+ r##"
+fn fixture(ra_fixture: &str) {}
+
+fn main() {
+ fixture(r#"
+ trait Foo {
+ fn foo() {
+ println!("2 + 2 = {}", 4);
+ }
+ }"#
+ );
+}"##,
+ expect_file!["./test_data/highlight_injection.html"],
+ false,
+ );
+}
+
+#[test]
+fn ranges_sorted() {
+ let (analysis, file_id) = fixture::file(
+ r#"
+#[foo(bar = "bar")]
+macro_rules! test {}
+}"#
+ .trim(),
+ );
+ let _ = analysis.highlight(file_id).unwrap();
+}
+
/// Highlights the code given by the `ra_fixture` argument, renders the
/// result as HTML, and compares it with the HTML file given as `snapshot`.
/// Note that the `snapshot` file is overwritten by the rendered HTML.
fn check_highlighting(ra_fixture: &str, expect: ExpectFile, rainbow: bool) {
- let (analysis, file_id) = fixture::file(ra_fixture);
+ let (analysis, file_id) = fixture::file(ra_fixture.trim());
let actual_html = &analysis.highlight_as_html(file_id, rainbow).unwrap();
expect.assert_eq(actual_html)
}
+
+#[test]
+fn benchmark_syntax_highlighting_long_struct() {
+ if skip_slow_tests() {
+ return;
+ }
+
+ let fixture = bench_fixture::big_struct();
+ let (analysis, file_id) = fixture::file(&fixture);
+
+ let hash = {
+ let _pt = bench("syntax highlighting long struct");
+ analysis
+ .highlight(file_id)
+ .unwrap()
+ .iter()
+ .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Struct))
+ .count()
+ };
+ assert_eq!(hash, 2001);
+}
+
+#[test]
+fn syntax_highlighting_not_quadratic() {
+ if skip_slow_tests() {
+ return;
+ }
+
+ let mut al = AssertLinear::default();
+ while al.next_round() {
+ for i in 6..=10 {
+ let n = 1 << i;
+
+ let fixture = bench_fixture::big_struct_n(n);
+ let (analysis, file_id) = fixture::file(&fixture);
+
+ let time = Instant::now();
+
+ let hash = analysis
+ .highlight(file_id)
+ .unwrap()
+ .iter()
+ .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Struct))
+ .count();
+ assert!(hash > n as usize);
+
+ let elapsed = time.elapsed();
+ al.sample(n as f64, elapsed.as_millis() as f64);
+ }
+ }
+}
+
+#[test]
+fn benchmark_syntax_highlighting_parser() {
+ if skip_slow_tests() {
+ return;
+ }
+
+ let fixture = bench_fixture::glorious_old_parser();
+ let (analysis, file_id) = fixture::file(&fixture);
+
+ let hash = {
+ let _pt = bench("syntax highlighting parser");
+ analysis
+ .highlight(file_id)
+ .unwrap()
+ .iter()
+ .filter(|it| it.highlight.tag == HlTag::Symbol(SymbolKind::Function))
+ .count()
+ };
+ assert_eq!(hash, 1616);
+}