use rustc_ast::attr::with_session_globals; use rustc_session::parse::ParseSess; use rustc_span::edition::Edition; use rustc_span::FileName; use super::Classifier; fn highlight(src: &str) -> String { let mut out = vec![]; with_session_globals(Edition::Edition2018, || { let sess = ParseSess::with_silent_emitter(); let source_file = sess.source_map().new_source_file( FileName::Custom(String::from("rustdoc-highlighting")), src.to_owned(), ); let mut classifier = Classifier::new(&sess, source_file); classifier.write_source(&mut out).unwrap(); }); String::from_utf8(out).unwrap() } #[test] fn function() { assert_eq!( highlight("fn main() {}"), r#"fn main() {}"#, ); } #[test] fn statement() { assert_eq!( highlight("let foo = true;"), concat!( r#"let foo "#, r#"= true;"#, ), ); } #[test] fn inner_attr() { assert_eq!( highlight(r##"#![crate_type = "lib"]"##), concat!( r##"#![crate_type "##, r##"= "lib"]"##, ), ); } #[test] fn outer_attr() { assert_eq!( highlight(r##"#[cfg(target_os = "linux")]"##), concat!( r##"#[cfg("##, r##"target_os = "##, r##""linux")]"##, ), ); } #[test] fn mac() { assert_eq!( highlight("mac!(foo bar)"), concat!( r#"mac!("#, r#"foo bar)"#, ), ); } // Regression test for #72684 #[test] fn andand() { assert_eq!(highlight("&&"), r#"&&"#); }