@@ -3,67 +3,55 @@ use std::collections::HashSet;
33use crate :: changelog:: parsed;
44use crate :: linter:: Check ;
55use crate :: rule:: Rule ;
6- use crate :: span:: Span ;
6+
7+ use super :: preamble:: * ;
78
89invalid_span ! ( InvalidTitle ) ;
910
1011invalid_span ! ( InvalidSectionHeading ) ;
1112
1213#[ derive( Default ) ]
13- pub struct EmptySection {
14- spans : Vec < Span > ,
15- }
14+ pub struct EmptySection ;
1615
1716// TODO: Store better spans for these headings.
1817impl Check for EmptySection {
1918 fn rule ( & self ) -> Rule {
2019 Rule :: EmptySection
2120 }
2221
23- fn spans ( & self ) -> & [ Span ] {
24- self . spans . as_slice ( )
25- }
26-
27- fn visit_release ( & mut self , release : & parsed:: ParsedRelease ) {
22+ fn visit_release ( & mut self , context : & mut Context , release : & parsed:: ParsedRelease ) {
2823 if release. changes . is_empty ( ) {
29- self . spans . push ( release. heading_span ) ;
24+ context . report ( self . rule ( ) , Some ( release. heading_span ) ) ;
3025 }
3126 }
3227
33- fn visit_changes ( & mut self , changes : & parsed:: ParsedChanges ) {
28+ fn visit_changes ( & mut self , context : & mut Context , changes : & parsed:: ParsedChanges ) {
3429 if changes. items . is_empty ( ) {
35- self . spans . push ( changes. heading_span )
30+ context . report ( self . rule ( ) , Some ( changes. heading_span ) ) ;
3631 }
3732 }
3833}
3934
4035#[ derive( Default ) ]
41- pub struct UnknownChangeType {
42- spans : Vec < Span > ,
43- }
36+ pub struct UnknownChangeType ;
4437
4538impl Check for UnknownChangeType {
4639 fn rule ( & self ) -> Rule {
4740 Rule :: UnknownChangeType
4841 }
4942
50- fn spans ( & self ) -> & [ Span ] {
51- self . spans . as_slice ( )
52- }
53-
54- fn visit_changes ( & mut self , changes : & parsed:: ParsedChanges ) {
43+ fn visit_changes ( & mut self , context : & mut Context , changes : & parsed:: ParsedChanges ) {
5544 if !matches ! (
5645 changes. kind. value,
5746 "Added" | "Changed" | "Deprecated" | "Fixed" | "Removed" | "Security"
5847 ) {
59- self . spans . push ( changes. kind . span ) ;
48+ context . report ( self . rule ( ) , Some ( changes. kind . span ) ) ;
6049 }
6150 }
6251}
6352
6453#[ derive( Default ) ]
6554pub struct DuplicateChangeType {
66- spans : Vec < Span > ,
6755 seen : HashSet < String > ,
6856}
6957
@@ -72,21 +60,17 @@ impl Check for DuplicateChangeType {
7260 Rule :: DuplicateChangeType
7361 }
7462
75- fn spans ( & self ) -> & [ Span ] {
76- self . spans . as_slice ( )
77- }
78-
79- fn visit_unreleased ( & mut self , _unreleased : & parsed:: ParsedUnreleased ) {
63+ fn visit_unreleased ( & mut self , _context : & mut Context , _unreleased : & parsed:: ParsedUnreleased ) {
8064 self . seen . clear ( ) ;
8165 }
8266
83- fn visit_release ( & mut self , _unreleased : & parsed:: ParsedRelease ) {
67+ fn visit_release ( & mut self , _context : & mut Context , _unreleased : & parsed:: ParsedRelease ) {
8468 self . seen . clear ( ) ;
8569 }
8670
87- fn visit_changes ( & mut self , changes : & parsed:: ParsedChanges ) {
71+ fn visit_changes ( & mut self , context : & mut Context , changes : & parsed:: ParsedChanges ) {
8872 if !self . seen . insert ( changes. kind . value . to_string ( ) ) {
89- self . spans . push ( changes. kind . span ) ;
73+ context . report ( self . rule ( ) , Some ( changes. kind . span ) ) ;
9074 }
9175 }
9276}
0 commit comments