@@ -8,10 +8,11 @@ use rustc_ast::entry::EntryPointType;
88use rustc_ast:: mut_visit:: * ;
99use rustc_ast:: visit:: Visitor ;
1010use rustc_ast:: { ModKind , attr} ;
11- use rustc_errors :: DiagCtxtHandle ;
11+ use rustc_attr_parsing :: AttributeParser ;
1212use rustc_expand:: base:: { ExtCtxt , ResolverExpand } ;
1313use rustc_expand:: expand:: { AstFragment , ExpansionConfig } ;
1414use rustc_feature:: Features ;
15+ use rustc_hir:: attrs:: AttributeKind ;
1516use rustc_session:: Session ;
1617use rustc_session:: lint:: builtin:: UNNAMEABLE_TEST_ITEMS ;
1718use rustc_span:: hygiene:: { AstPass , SyntaxContext , Transparency } ;
@@ -60,7 +61,7 @@ pub fn inject(
6061
6162 // Do this here so that the test_runner crate attribute gets marked as used
6263 // even in non-test builds
63- let test_runner = get_test_runner ( dcx , krate) ;
64+ let test_runner = get_test_runner ( sess , features , krate) ;
6465
6566 if sess. is_test_crate ( ) {
6667 let panic_strategy = match ( panic_strategy, sess. opts . unstable_opts . panic_abort_tests ) {
@@ -386,20 +387,16 @@ fn get_test_name(i: &ast::Item) -> Option<Symbol> {
386387 attr:: first_attr_value_str_by_name ( & i. attrs , sym:: rustc_test_marker)
387388}
388389
389- fn get_test_runner ( dcx : DiagCtxtHandle < ' _ > , krate : & ast:: Crate ) -> Option < ast:: Path > {
390- let test_attr = attr:: find_by_name ( & krate. attrs , sym:: test_runner) ?;
391- let meta_list = test_attr. meta_item_list ( ) ?;
392- let span = test_attr. span ;
393- match & * meta_list {
394- [ single] => match single. meta_item ( ) {
395- Some ( meta_item) if meta_item. is_word ( ) => return Some ( meta_item. path . clone ( ) ) ,
396- _ => {
397- dcx. emit_err ( errors:: TestRunnerInvalid { span } ) ;
398- }
399- } ,
400- _ => {
401- dcx. emit_err ( errors:: TestRunnerNargs { span } ) ;
402- }
390+ fn get_test_runner ( sess : & Session , features : & Features , krate : & ast:: Crate ) -> Option < ast:: Path > {
391+ match AttributeParser :: parse_limited (
392+ sess,
393+ & krate. attrs ,
394+ sym:: test_runner,
395+ krate. spans . inner_span ,
396+ krate. id ,
397+ Some ( features) ,
398+ ) {
399+ Some ( rustc_hir:: Attribute :: Parsed ( AttributeKind :: TestRunner ( path) ) ) => Some ( path) ,
400+ _ => None ,
403401 }
404- None
405402}
0 commit comments