@@ -69,14 +69,15 @@ impl ChangeLog {
69
69
70
70
impl Section {
71
71
fn from_headline_and_body ( Headline { level, version, date } : Headline , body : String ) -> Self {
72
- let mut events = pulldown_cmark:: Parser :: new ( & body) . into_offset_iter ( ) ;
72
+ let mut events = pulldown_cmark:: Parser :: new_ext ( & body, pulldown_cmark :: Options :: all ( ) ) . into_offset_iter ( ) ;
73
73
let mut unknown = String :: new ( ) ;
74
74
let mut thanks_clippy_count = 0 ;
75
75
let mut segments = Vec :: new ( ) ;
76
76
77
77
// let mut user_authored = String::new();
78
78
let mut unknown_range = None ;
79
79
while let Some ( ( e, range) ) = events. next ( ) {
80
+ // dbg!(&e, &range);
80
81
match e {
81
82
Event :: Html ( text) if text. starts_with ( Section :: UNKNOWN_TAG_START ) => {
82
83
consume_unknown_range ( & mut segments, unknown_range. take ( ) , & body) ;
@@ -96,11 +97,22 @@ impl Section {
96
97
Some ( ( Event :: Text ( title) , _range) ) if title. starts_with ( Section :: THANKS_CLIPPY_TITLE ) => {
97
98
State :: ParseClippy
98
99
}
99
- _ => State :: ConsiderUserAuthored ,
100
+ Some ( ( _event, next_range) ) => {
101
+ update_unknown_range ( & mut unknown_range, range) ;
102
+ update_unknown_range ( & mut unknown_range, next_range) ;
103
+ State :: ConsiderUserAuthored
104
+ }
105
+ None => State :: ConsiderUserAuthored ,
100
106
} ;
107
+
101
108
events
102
109
. by_ref ( )
103
- . take_while ( |( e, _range) | !matches ! ( e, Event :: End ( Tag :: Heading ( _) ) ) )
110
+ . take_while ( |( e, range) | {
111
+ if matches ! ( state, State :: ConsiderUserAuthored ) {
112
+ update_unknown_range ( & mut unknown_range, range. clone ( ) ) ;
113
+ }
114
+ !matches ! ( e, Event :: End ( Tag :: Heading ( _) ) )
115
+ } )
104
116
. count ( ) ;
105
117
match state {
106
118
State :: ParseClippy => {
@@ -115,14 +127,7 @@ impl Section {
115
127
State :: ConsiderUserAuthored => { }
116
128
}
117
129
}
118
- _unknown_event => match & mut unknown_range {
119
- Some ( range_thus_far) => {
120
- if range. end > range_thus_far. end {
121
- range_thus_far. end = range. end ;
122
- }
123
- }
124
- None => unknown_range = range. into ( ) ,
125
- } ,
130
+ _unknown_event => update_unknown_range ( & mut unknown_range, range) ,
126
131
} ;
127
132
}
128
133
consume_unknown_range ( & mut segments, unknown_range. take ( ) , & body) ;
@@ -140,6 +145,17 @@ impl Section {
140
145
}
141
146
}
142
147
148
+ fn update_unknown_range ( target : & mut Option < Range < usize > > , source : Range < usize > ) {
149
+ match target {
150
+ Some ( range_thus_far) => {
151
+ if source. end > range_thus_far. end {
152
+ range_thus_far. end = source. end ;
153
+ }
154
+ }
155
+ None => * target = source. into ( ) ,
156
+ }
157
+ }
158
+
143
159
fn consume_unknown_range ( out : & mut Vec < section:: Segment > , range : Option < Range < usize > > , markdown : & str ) {
144
160
if let Some ( range) = range {
145
161
out. push ( section:: Segment :: Unknown {
0 commit comments