fix: when formatting and add some methods to Project::Error
This commit is contained in:
		
							parent
							
								
									14724f924c
								
							
						
					
					
						commit
						9d14acbe0a
					
				|  | @ -24,7 +24,7 @@ pub fn exec( | ||||||
|     if let Err(err) = aiken_project::format::run(stdin, check, files) { |     if let Err(err) = aiken_project::format::run(stdin, check, files) { | ||||||
|         err.report(); |         err.report(); | ||||||
| 
 | 
 | ||||||
|         miette::bail!("failed: {} error(s)", err.total()); |         miette::bail!("failed: {} error(s)", err.len()); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     Ok(()) |     Ok(()) | ||||||
|  |  | ||||||
|  | @ -30,10 +30,7 @@ where | ||||||
|     if let Err(err) = build_result { |     if let Err(err) = build_result { | ||||||
|         err.report(); |         err.report(); | ||||||
| 
 | 
 | ||||||
|         miette::bail!( |         miette::bail!("failed: {} error(s), {warning_count} warning(s)", err.len(),); | ||||||
|             "failed: {} error(s), {warning_count} warning(s)", |  | ||||||
|             err.total(), |  | ||||||
|         ); |  | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     println!("finished with {warning_count} warning(s)"); |     println!("finished with {warning_count} warning(s)"); | ||||||
|  |  | ||||||
|  | @ -165,9 +165,9 @@ impl<'comments> Formatter<'comments> { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn module<'a>(&mut self, module: &'a UntypedModule) -> Document<'a> { |     fn module<'a>(&mut self, module: &'a UntypedModule) -> Document<'a> { | ||||||
|         let groups = self.definitions(&module.definitions); |         let defs = self.definitions(&module.definitions); | ||||||
| 
 | 
 | ||||||
|         // Now that `groups` has been collected, only freestanding comments (//)
 |         // Now that `defs` has been collected, only freestanding comments (//)
 | ||||||
|         // and doc comments (///) remain. Freestanding comments aren't associated
 |         // and doc comments (///) remain. Freestanding comments aren't associated
 | ||||||
|         // with any statement, and are moved to the bottom of the module.
 |         // with any statement, and are moved to the bottom of the module.
 | ||||||
|         let doc_comments = join( |         let doc_comments = join( | ||||||
|  | @ -196,7 +196,7 @@ impl<'comments> Formatter<'comments> { | ||||||
|             nil() |             nil() | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         let non_empty = vec![module_comments, groups, doc_comments, comments] |         let non_empty = vec![module_comments, defs, doc_comments, comments] | ||||||
|             .into_iter() |             .into_iter() | ||||||
|             .filter(|doc| !doc.is_empty()); |             .filter(|doc| !doc.is_empty()); | ||||||
| 
 | 
 | ||||||
|  | @ -753,10 +753,9 @@ impl<'comments> Formatter<'comments> { | ||||||
|                 subjects.iter().map(|s| self.wrap_expr(s)), |                 subjects.iter().map(|s| self.wrap_expr(s)), | ||||||
|                 break_(",", ", "), |                 break_(",", ", "), | ||||||
|             )) |             )) | ||||||
|             .append(break_(" is", " is ")) |  | ||||||
|             .nest(INDENT) |             .nest(INDENT) | ||||||
|             .append(break_("", " ")) |             .append(break_("", " ")) | ||||||
|             .append("{") |             .append("is {") | ||||||
|             .group(); |             .group(); | ||||||
| 
 | 
 | ||||||
|         let clauses_doc = concat( |         let clauses_doc = concat( | ||||||
|  |  | ||||||
|  | @ -226,6 +226,7 @@ pub fn fn_parser() -> impl Parser<Token, ast::UntypedDefinition, Error = ParseEr | ||||||
|         .then( |         .then( | ||||||
|             fn_param_parser() |             fn_param_parser() | ||||||
|                 .separated_by(just(Token::Comma)) |                 .separated_by(just(Token::Comma)) | ||||||
|  |                 .allow_trailing() | ||||||
|                 .delimited_by(just(Token::LeftParen), just(Token::RightParen)) |                 .delimited_by(just(Token::LeftParen), just(Token::RightParen)) | ||||||
|                 .map_with_span(|arguments, span| (arguments, span)), |                 .map_with_span(|arguments, span| (arguments, span)), | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  | @ -53,7 +53,7 @@ pub enum Error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Error { | impl Error { | ||||||
|     pub fn total(&self) -> usize { |     pub fn len(&self) -> usize { | ||||||
|         match self { |         match self { | ||||||
|             Error::List(errors) => errors.len(), |             Error::List(errors) => errors.len(), | ||||||
|             _ => 1, |             _ => 1, | ||||||
|  | @ -84,6 +84,33 @@ impl Error { | ||||||
| 
 | 
 | ||||||
|         Error::List(errors) |         Error::List(errors) | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     pub fn append(self, next: Self) -> Self { | ||||||
|  |         match (self, next) { | ||||||
|  |             (Error::List(mut errors), Error::List(mut next_errors)) => { | ||||||
|  |                 errors.append(&mut next_errors); | ||||||
|  | 
 | ||||||
|  |                 Error::List(errors) | ||||||
|  |             } | ||||||
|  |             (Error::List(mut errors), rest) => { | ||||||
|  |                 errors.push(rest); | ||||||
|  | 
 | ||||||
|  |                 Error::List(errors) | ||||||
|  |             } | ||||||
|  |             (rest, Error::List(mut next_errors)) => { | ||||||
|  |                 let mut errors = vec![rest]; | ||||||
|  | 
 | ||||||
|  |                 errors.append(&mut next_errors); | ||||||
|  | 
 | ||||||
|  |                 Error::List(errors) | ||||||
|  |             } | ||||||
|  |             (error, next_error) => Error::List(vec![error, next_error]), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn is_empty(&self) -> bool { | ||||||
|  |         matches!(self, Error::List(errors) if errors.is_empty()) | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Debug for Error { | impl Debug for Error { | ||||||
|  |  | ||||||
|  | @ -77,7 +77,7 @@ fn format_files(files: Vec<String>) -> Result<(), Error> { | ||||||
| 
 | 
 | ||||||
| fn unformatted_files(files: Vec<String>) -> Result<Vec<Unformatted>, Error> { | fn unformatted_files(files: Vec<String>) -> Result<Vec<Unformatted>, Error> { | ||||||
|     let mut problem_files = Vec::with_capacity(files.len()); |     let mut problem_files = Vec::with_capacity(files.len()); | ||||||
|     let mut errors = Vec::new(); |     let mut errors = Error::List(vec![]); | ||||||
| 
 | 
 | ||||||
|     for file_path in files { |     for file_path in files { | ||||||
|         let path = PathBuf::from_str(&file_path).unwrap(); |         let path = PathBuf::from_str(&file_path).unwrap(); | ||||||
|  | @ -85,19 +85,18 @@ fn unformatted_files(files: Vec<String>) -> Result<Vec<Unformatted>, Error> { | ||||||
|         if path.is_dir() { |         if path.is_dir() { | ||||||
|             for path in aiken_files_excluding_gitignore(&path) { |             for path in aiken_files_excluding_gitignore(&path) { | ||||||
|                 if let Err(err) = format_file(&mut problem_files, path) { |                 if let Err(err) = format_file(&mut problem_files, path) { | ||||||
|                     errors.push(err); |                     errors = errors.append(err); | ||||||
|                 }; |                 }; | ||||||
|             } |             } | ||||||
|         } else if let Err(err) = format_file(&mut problem_files, path) { |         } else if let Err(err) = format_file(&mut problem_files, path) { | ||||||
|             println!("{:?}", err); |             errors = errors.append(err); | ||||||
|             errors.push(err); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if errors.is_empty() { |     if errors.is_empty() { | ||||||
|         Ok(problem_files) |         Ok(problem_files) | ||||||
|     } else { |     } else { | ||||||
|         Err(Error::List(errors)) |         Err(errors) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 rvcas
						rvcas