@@ -212,72 +212,62 @@ impl<'i> Parser<'i> {
212212 }
213213 break ;
214214 } else if is_procedure_declaration ( self . source ) {
215- let procedure_result = self
215+ match self
216216 . take_block_lines (
217217 is_procedure_declaration,
218218 |line| is_section ( line) || potential_procedure_declaration ( line) ,
219219 |inner| {
220- match inner. read_procedure ( ) {
221- Ok ( proc) => {
222- // Return both the procedure and the errors
223- Ok ( ( Some ( proc) , std:: mem:: take ( & mut inner. problems ) ) )
224- }
225- Err ( _err) => {
226- // Return None for procedure but still collect errors
227- Ok ( ( None , std:: mem:: take ( & mut inner. problems ) ) )
228- }
229- }
220+ let result = inner. read_procedure ( ) ;
221+ let errors = std:: mem:: take ( & mut inner. problems ) ;
222+ Ok ( ( result, errors) )
230223 } ,
231224 )
232- . map ( |( maybe_procedure, errors) | {
233- // Transfer errors from subparser to main parser
225+ . and_then ( |( result, errors) | {
234226 self . problems
235227 . extend ( errors) ;
236- maybe_procedure
237- } )
238- . unwrap_or_else ( |error| {
239- self . problems
240- . push ( error) ;
241- // Return None on error
242- None
243- } ) ;
244-
245- if let Some ( mut procedure) = procedure_result {
246- // Check if there are sections following this procedure
247- while !self . is_finished ( ) {
248- self . trim_whitespace ( ) ;
249- if self . is_finished ( ) {
250- break ;
251- }
228+ result
229+ } ) {
230+ Ok ( mut procedure) => {
231+ // Check if there are sections following this procedure
232+ while !self . is_finished ( ) {
233+ self . trim_whitespace ( ) ;
234+ if self . is_finished ( ) {
235+ break ;
236+ }
252237
253- if is_section ( self . source ) {
254- match self . read_section ( ) {
255- Ok ( section) => {
256- if let Some ( Element :: Steps ( ref mut steps) ) = procedure
257- . elements
258- . last_mut ( )
259- {
260- steps. push ( section) ;
261- } else {
262- // Create a new Steps element if one doesn't exist
263- procedure
238+ if is_section ( self . source ) {
239+ match self . read_section ( ) {
240+ Ok ( section) => {
241+ if let Some ( Element :: Steps ( ref mut steps) ) = procedure
264242 . elements
265- . push ( Element :: Steps ( vec ! [ section] ) ) ;
243+ . last_mut ( )
244+ {
245+ steps. push ( section) ;
246+ } else {
247+ // Create a new Steps element if one doesn't exist
248+ procedure
249+ . elements
250+ . push ( Element :: Steps ( vec ! [ section] ) ) ;
251+ }
252+ }
253+ Err ( error) => {
254+ self . problems
255+ . push ( error) ;
256+ break ;
266257 }
267258 }
268- Err ( error) => {
269- self . problems
270- . push ( error) ;
271- break ;
272- }
259+ } else {
260+ // If we hit something that's not a section, stop parsing sections
261+ break ;
273262 }
274- } else {
275- // If we hit something that's not a section, stop parsing sections
276- break ;
277263 }
278- }
279264
280- procedures. push ( procedure) ;
265+ procedures. push ( procedure) ;
266+ }
267+ Err ( error) => {
268+ self . problems
269+ . push ( error) ;
270+ }
281271 }
282272 } else if self
283273 . source
@@ -286,39 +276,28 @@ impl<'i> Parser<'i> {
286276 // It might be that we've encountered a malformed procedure
287277 // declaration, so we try parsing it anyway to get a more
288278 // specific error message.
289- let procedure_result = self
279+ match self
290280 . take_block_lines (
291281 |_| true , // Accept the line regardless
292282 |line| is_section ( line) || potential_procedure_declaration ( line) ,
293283 |inner| {
294- match inner. read_procedure ( ) {
295- Ok ( proc) => {
296- // Return both the procedure and the errors
297- Ok ( ( Some ( proc) , std:: mem:: take ( & mut inner. problems ) ) )
298- }
299- Err ( _err) => {
300- // Return None for procedure but still collect errors
301- Ok ( ( None , std:: mem:: take ( & mut inner. problems ) ) )
302- }
303- }
284+ let result = inner. read_procedure ( ) ;
285+ let errors = std:: mem:: take ( & mut inner. problems ) ;
286+ Ok ( ( result, errors) )
304287 } ,
305288 )
306- . map ( |( maybe_proc, errors) | {
307- // Transfer errors from subparser to main parser
289+ . and_then ( |( result, errors) | {
308290 self . problems
309291 . extend ( errors) ;
310- maybe_proc
311- } )
312- . unwrap_or_else ( |error| {
292+ result
293+ } ) {
294+ Ok ( procedure) => {
295+ procedures. push ( procedure) ;
296+ }
297+ Err ( error) => {
313298 self . problems
314299 . push ( error) ;
315- // Return None on error
316- None
317- } ) ;
318-
319- // Only add procedure if recovery was successful
320- if let Some ( procedure) = procedure_result {
321- procedures. push ( procedure) ;
300+ }
322301 }
323302 } else {
324303 self . problems
@@ -924,8 +903,10 @@ impl<'i> Parser<'i> {
924903 result
925904 }
926905
927-
928- fn parse_procedure_block ( & mut self , parser : & mut Parser < ' i > ) -> Result < Procedure < ' i > , ParsingError < ' i > > {
906+ fn parse_procedure_block (
907+ & mut self ,
908+ parser : & mut Parser < ' i > ,
909+ ) -> Result < Procedure < ' i > , ParsingError < ' i > > {
929910 // Extract the declaration with recovery
930911 let declaration = match self . parse_declaration ( parser) {
931912 Ok ( decl) => decl,
@@ -1061,11 +1042,14 @@ impl<'i> Parser<'i> {
10611042 fn parse_declaration (
10621043 & mut self ,
10631044 parser : & mut Parser < ' i > ,
1064- ) -> Result < (
1065- Identifier < ' i > ,
1066- Option < Vec < Identifier < ' i > > > ,
1067- Option < Signature < ' i > > ,
1068- ) , ParsingError < ' i > > {
1045+ ) -> Result <
1046+ (
1047+ Identifier < ' i > ,
1048+ Option < Vec < Identifier < ' i > > > ,
1049+ Option < Signature < ' i > > ,
1050+ ) ,
1051+ ParsingError < ' i > ,
1052+ > {
10691053 // Find declaration block boundaries
10701054 let mut i = 0 ;
10711055 let mut begun = false ;
0 commit comments