@@ -70,6 +70,42 @@ fn check_attr_crate_level<S: Stage>(cx: &mut AcceptContext<'_, '_, S>, span: Spa
7070 true
7171}
7272
73+ // FIXME: To be removed once merged and replace with `cx.expected_name_value(span, _name)`.
74+ fn expected_name_value < S : Stage > (
75+ cx : & mut AcceptContext < ' _ , ' _ , S > ,
76+ span : Span ,
77+ _name : Option < Symbol > ,
78+ ) {
79+ cx. emit_lint (
80+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
81+ AttributeLintKind :: ExpectedNameValue ,
82+ span,
83+ ) ;
84+ }
85+
86+ // FIXME: remove this method once merged and use `cx.expected_no_args(span)` instead.
87+ fn expected_no_args < S : Stage > ( cx : & mut AcceptContext < ' _ , ' _ , S > , span : Span ) {
88+ cx. emit_lint (
89+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
90+ AttributeLintKind :: ExpectedNoArgs ,
91+ span,
92+ ) ;
93+ }
94+
95+ // FIXME: remove this method once merged and use `cx.expected_no_args(span)` instead.
96+ // cx.expected_string_literal(span, _actual_literal);
97+ fn expected_string_literal < S : Stage > (
98+ cx : & mut AcceptContext < ' _ , ' _ , S > ,
99+ span : Span ,
100+ _actual_literal : Option < & MetaItemLit > ,
101+ ) {
102+ cx. emit_lint (
103+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
104+ AttributeLintKind :: MalformedDoc ,
105+ span,
106+ ) ;
107+ }
108+
73109fn parse_keyword_and_attribute < S : Stage > (
74110 cx : & mut AcceptContext < ' _ , ' _ , S > ,
75111 path : & OwnedPathParser ,
@@ -78,12 +114,12 @@ fn parse_keyword_and_attribute<S: Stage>(
78114 attr_name : Symbol ,
79115) {
80116 let Some ( nv) = args. name_value ( ) else {
81- cx . expected_name_value ( args. span ( ) . unwrap_or ( path. span ( ) ) , path. word_sym ( ) ) ;
117+ expected_name_value ( cx , args. span ( ) . unwrap_or ( path. span ( ) ) , path. word_sym ( ) ) ;
82118 return ;
83119 } ;
84120
85121 let Some ( value) = nv. value_as_str ( ) else {
86- cx . expected_string_literal ( nv. value_span , Some ( nv. value_as_lit ( ) ) ) ;
122+ expected_string_literal ( cx , nv. value_span , Some ( nv. value_as_lit ( ) ) ) ;
87123 return ;
88124 } ;
89125
@@ -127,12 +163,21 @@ impl DocParser {
127163 match path. word_sym ( ) {
128164 Some ( sym:: no_crate_inject) => {
129165 if let Err ( span) = args. no_args ( ) {
130- cx . expected_no_args ( span) ;
166+ expected_no_args ( cx , span) ;
131167 return ;
132168 }
133169
134- if self . attribute . no_crate_inject . is_some ( ) {
135- cx. duplicate_key ( path. span ( ) , sym:: no_crate_inject) ;
170+ if let Some ( used_span) = self . attribute . no_crate_inject {
171+ let unused_span = path. span ( ) ;
172+ cx. emit_lint (
173+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
174+ AttributeLintKind :: UnusedDuplicate {
175+ this : unused_span,
176+ other : used_span,
177+ warning : true ,
178+ } ,
179+ unused_span,
180+ ) ;
136181 return ;
137182 }
138183
@@ -144,7 +189,14 @@ impl DocParser {
144189 }
145190 Some ( sym:: attr) => {
146191 let Some ( list) = args. list ( ) else {
147- cx. expected_list ( cx. attr_span , args) ;
192+ // FIXME: remove this method once merged and uncomment the line below instead.
193+ // cx.expected_list(cx.attr_span, args);
194+ let span = cx. attr_span ;
195+ cx. emit_lint (
196+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
197+ AttributeLintKind :: MalformedDoc ,
198+ span,
199+ ) ;
148200 return ;
149201 } ;
150202
@@ -246,7 +298,7 @@ impl DocParser {
246298 inline : DocInline ,
247299 ) {
248300 if let Err ( span) = args. no_args ( ) {
249- cx . expected_no_args ( span) ;
301+ expected_no_args ( cx , span) ;
250302 return ;
251303 }
252304
@@ -328,7 +380,14 @@ impl DocParser {
328380 match sub_item. args ( ) {
329381 a @ ( ArgParser :: NoArgs | ArgParser :: NameValue ( _) ) => {
330382 let Some ( name) = sub_item. path ( ) . word_sym ( ) else {
331- cx. expected_identifier ( sub_item. path ( ) . span ( ) ) ;
383+ // FIXME: remove this method once merged and uncomment the line
384+ // below instead.
385+ // cx.expected_identifier(sub_item.path().span());
386+ cx. emit_lint (
387+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
388+ AttributeLintKind :: MalformedDoc ,
389+ sub_item. path ( ) . span ( ) ,
390+ ) ;
332391 continue ;
333392 } ;
334393 if let Ok ( CfgEntry :: NameValue { name, value, .. } ) =
@@ -391,7 +450,7 @@ impl DocParser {
391450 macro_rules! no_args {
392451 ( $ident: ident) => { {
393452 if let Err ( span) = args. no_args( ) {
394- cx . expected_no_args( span) ;
453+ expected_no_args( cx , span) ;
395454 return ;
396455 }
397456
@@ -410,7 +469,7 @@ impl DocParser {
410469 macro_rules! no_args_and_not_crate_level {
411470 ( $ident: ident) => { {
412471 if let Err ( span) = args. no_args( ) {
413- cx . expected_no_args( span) ;
472+ expected_no_args( cx , span) ;
414473 return ;
415474 }
416475 let span = path. span( ) ;
@@ -423,7 +482,7 @@ impl DocParser {
423482 macro_rules! no_args_and_crate_level {
424483 ( $ident: ident) => { {
425484 if let Err ( span) = args. no_args( ) {
426- cx . expected_no_args( span) ;
485+ expected_no_args( cx , span) ;
427486 return ;
428487 }
429488 let span = path. span( ) ;
@@ -436,12 +495,12 @@ impl DocParser {
436495 macro_rules! string_arg_and_crate_level {
437496 ( $ident: ident) => { {
438497 let Some ( nv) = args. name_value( ) else {
439- cx . expected_name_value( args. span( ) . unwrap_or( path. span( ) ) , path. word_sym( ) ) ;
498+ expected_name_value( cx , args. span( ) . unwrap_or( path. span( ) ) , path. word_sym( ) ) ;
440499 return ;
441500 } ;
442501
443502 let Some ( s) = nv. value_as_str( ) else {
444- cx . expected_string_literal( nv. value_span, Some ( nv. value_as_lit( ) ) ) ;
503+ expected_string_literal( cx , nv. value_span, Some ( nv. value_as_lit( ) ) ) ;
445504 return ;
446505 } ;
447506
@@ -512,7 +571,14 @@ impl DocParser {
512571 self . parse_single_test_doc_attr_item ( cx, mip) ;
513572 }
514573 MetaItemOrLitParser :: Lit ( lit) => {
515- cx. unexpected_literal ( lit. span ) ;
574+ // FIXME: remove this method once merged and uncomment the line
575+ // below instead.
576+ // cx.unexpected_literal(lit.span);
577+ cx. emit_lint (
578+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
579+ AttributeLintKind :: MalformedDoc ,
580+ lit. span ,
581+ ) ;
516582 }
517583 }
518584 }
@@ -582,7 +648,7 @@ impl DocParser {
582648 let suggestions = cx. suggestions ( ) ;
583649 let span = cx. attr_span ;
584650 cx. emit_lint (
585- rustc_session:: lint:: builtin:: ILL_FORMED_ATTRIBUTE_INPUT ,
651+ rustc_session:: lint:: builtin:: INVALID_DOC_ATTRIBUTES ,
586652 AttributeLintKind :: IllFormedAttributeInput { suggestions, docs : None } ,
587653 span,
588654 ) ;
@@ -595,14 +661,14 @@ impl DocParser {
595661 self . parse_single_doc_attr_item ( cx, mip) ;
596662 }
597663 MetaItemOrLitParser :: Lit ( lit) => {
598- cx . expected_name_value ( lit. span , None ) ;
664+ expected_name_value ( cx , lit. span , None ) ;
599665 }
600666 }
601667 }
602668 }
603669 ArgParser :: NameValue ( nv) => {
604670 if nv. value_as_str ( ) . is_none ( ) {
605- cx . expected_string_literal ( nv. value_span , Some ( nv. value_as_lit ( ) ) ) ;
671+ expected_string_literal ( cx , nv. value_span , Some ( nv. value_as_lit ( ) ) ) ;
606672 } else {
607673 unreachable ! (
608674 "Should have been handled at the same time as sugar-syntaxed doc comments"
0 commit comments