rustfmt: Remove an unnecessary catch_unwind use.

The `Input::File` and `Input::Text` cases should be very similar.
However, currently the `Input::File` case uses `catch_unwind` because,
until recently (#125815) there was a fallible version of
`new_parser_from_source_str` but only an infallible version of
`new_parser_from_file`. This difference wasn't fundamental, just an
overlooked gap in the API of `rustc_parse`.

Both of those operations are now fallible, so the `Input::File` and
`Input::Text` cases can made more similar, with no need for
`catch_unwind`. This also lets us simplify an `Option<Vec<Diag>>` to
`Vec<Diag>`.
This commit is contained in:
Nicholas Nethercote 2024-06-03 14:32:03 +10:00
parent 5962aa96f1
commit ecb2dd151c

View File

@ -5,7 +5,7 @@
use rustc_ast::{ast, attr, ptr}; use rustc_ast::{ast, attr, ptr};
use rustc_errors::Diag; use rustc_errors::Diag;
use rustc_parse::parser::Parser as RawParser; use rustc_parse::parser::Parser as RawParser;
use rustc_parse::{new_parser_from_file, unwrap_or_emit_fatal}; use rustc_parse::{new_parser_from_file, new_parser_from_source_str, unwrap_or_emit_fatal};
use rustc_span::{sym, Span}; use rustc_span::{sym, Span};
use thin_vec::ThinVec; use thin_vec::ThinVec;
@ -51,13 +51,10 @@ pub(crate) fn build(self) -> Result<Parser<'a>, ParserError> {
let parser = match Self::parser(psess.inner(), input) { let parser = match Self::parser(psess.inner(), input) {
Ok(p) => p, Ok(p) => p,
Err(db) => { Err(diagnostics) => {
if let Some(diagnostics) = db {
psess.emit_diagnostics(diagnostics); psess.emit_diagnostics(diagnostics);
return Err(ParserError::ParserCreationError); return Err(ParserError::ParserCreationError);
} }
return Err(ParserError::ParsePanicError);
}
}; };
Ok(Parser { parser }) Ok(Parser { parser })
@ -66,18 +63,14 @@ pub(crate) fn build(self) -> Result<Parser<'a>, ParserError> {
fn parser( fn parser(
psess: &'a rustc_session::parse::ParseSess, psess: &'a rustc_session::parse::ParseSess,
input: Input, input: Input,
) -> Result<rustc_parse::parser::Parser<'a>, Option<Vec<Diag<'a>>>> { ) -> Result<RawParser<'a>, Vec<Diag<'a>>> {
match input { match input {
Input::File(ref file) => catch_unwind(AssertUnwindSafe(move || { Input::File(ref file) => new_parser_from_file(psess, file, None),
unwrap_or_emit_fatal(new_parser_from_file(psess, file, None)) Input::Text(text) => new_parser_from_source_str(
}))
.map_err(|_| None),
Input::Text(text) => rustc_parse::new_parser_from_source_str(
psess, psess,
rustc_span::FileName::Custom("stdin".to_owned()), rustc_span::FileName::Custom("stdin".to_owned()),
text, text,
) ),
.map_err(Some),
} }
} }
} }