Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 037cf2c

Browse files
committed
Discard every parsing error in silent_emitter
`EmitterWriter` from rustc is wasting soooo much time constructing an error message that will never be emitted, instead we just implement our own `Emitter` that just discards every error message.
1 parent b6dac24 commit 037cf2c

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/formatting.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::rc::Rc;
77
use std::time::{Duration, Instant};
88

99
use syntax::ast;
10-
use syntax::errors::emitter::{ColorConfig, EmitterWriter};
10+
use syntax::errors::emitter::{ColorConfig, Emitter};
1111
use syntax::errors::{DiagnosticBuilder, Handler};
1212
use syntax::parse::{self, ParseSess};
1313
use syntax::source_map::{FilePathMapping, SourceMap, Span, DUMMY_SP};
@@ -89,7 +89,7 @@ fn format_project<T: FormatHandler>(
8989
timer = timer.done_parsing();
9090

9191
// Suppress error output if we have to do any further parsing.
92-
let silent_emitter = silent_emitter(source_map);
92+
let silent_emitter = silent_emitter();
9393
parse_session.span_diagnostic = Handler::with_emitter(true, None, silent_emitter);
9494

9595
let mut context = FormatContext::new(&krate, report, parse_session, config, handler);
@@ -670,18 +670,20 @@ fn parse_crate(
670670
Err(ErrorKind::ParseError)
671671
}
672672

673-
fn silent_emitter(source_map: Rc<SourceMap>) -> Box<EmitterWriter> {
674-
Box::new(EmitterWriter::new(
675-
Box::new(Vec::new()),
676-
Some(source_map),
677-
false,
678-
false,
679-
))
673+
/// Emitter which discards every error.
674+
struct SilentEmitter;
675+
676+
impl Emitter for SilentEmitter {
677+
fn emit(&mut self, _db: &DiagnosticBuilder<'_>) {}
678+
}
679+
680+
fn silent_emitter() -> Box<SilentEmitter> {
681+
Box::new(SilentEmitter {})
680682
}
681683

682684
fn make_parse_sess(source_map: Rc<SourceMap>, config: &Config) -> ParseSess {
683685
let tty_handler = if config.hide_parse_errors() {
684-
let silent_emitter = silent_emitter(source_map.clone());
686+
let silent_emitter = silent_emitter();
685687
Handler::with_emitter(true, None, silent_emitter)
686688
} else {
687689
let supports_color = term::stderr().map_or(false, |term| term.supports_color());

0 commit comments

Comments
 (0)