testing/
diag_errors.rs

1use std::sync::RwLock;
2
3use swc_common::{
4    errors::{Diagnostic, DiagnosticBuilder, Emitter, Handler, HandlerFlags, SourceMapperDyn},
5    sync::Lrc,
6};
7
8/// Creates a new handler for testing.
9pub(crate) fn new_handler(
10    _: Lrc<SourceMapperDyn>,
11    treat_err_as_bug: bool,
12) -> (Handler, BufferedError) {
13    let e = BufferedError::default();
14
15    let handler = Handler::with_emitter_and_flags(
16        Box::new(e.clone()),
17        HandlerFlags {
18            treat_err_as_bug,
19            can_emit_warnings: true,
20            ..Default::default()
21        },
22    );
23
24    (handler, e)
25}
26
27#[derive(Clone, Default)]
28pub(crate) struct BufferedError(Lrc<RwLock<Vec<Diagnostic>>>);
29
30impl Emitter for BufferedError {
31    fn emit(&mut self, db: &mut DiagnosticBuilder) {
32        self.0.write().unwrap().push(db.take());
33    }
34}
35
36impl From<BufferedError> for Vec<Diagnostic> {
37    fn from(buf: BufferedError) -> Self {
38        let s = buf.0.read().unwrap();
39
40        s.clone()
41    }
42}