pub struct Handler {
pub flags: HandlerFlags,
/* private fields */
}
Expand description
A handler deals with errors; certain errors (fatal, bug, unimpl) may cause immediate exit, others log errors for later reporting.
§Example
swc
provides a global-like variable (HANDLER) of type Handler
that can
be used to report errors.
You can refer to the lint rules for other example usages. All lint rules have code for error reporting.
§Error reporting in swc
use swc_common::errors::HANDLER;
HANDLER.with(|handler| {
// You can access the handler for the current file using HANDLER.with.
// We now report an error
// `struct_span_err` creates a builder for a diagnostic.
// The span passed to `struct_span_err` will used to point the problematic code.
//
// You may provide additional information, like a previous declaration of parameter.
handler
.struct_span_err(
span,
&format!("`{}` used as parameter more than once", js_word),
)
.span_note(
old_span,
&format!("previous definition of `{}` here", js_word),
)
.emit();
});
Fields§
§flags: HandlerFlags
Implementations§
source§impl Handler
impl Handler
pub fn with_tty_emitter( color_config: ColorConfig, can_emit_warnings: bool, treat_err_as_bug: bool, cm: Option<Lrc<SourceMapperDyn>>, ) -> Handler
tty-emitter
only.pub fn with_tty_emitter_and_flags( color_config: ColorConfig, cm: Option<Lrc<SourceMapperDyn>>, flags: HandlerFlags, ) -> Handler
tty-emitter
only.sourcepub fn with_emitter(
can_emit_warnings: bool,
treat_err_as_bug: bool,
emitter: Box<dyn Emitter>,
) -> Handler
pub fn with_emitter( can_emit_warnings: bool, treat_err_as_bug: bool, emitter: Box<dyn Emitter>, ) -> Handler
Example implementation of Emitter is EmitterWriter
sourcepub fn with_emitter_writer(
dst: Box<dyn Write + Send>,
cm: Option<Lrc<SourceMapperDyn>>,
) -> Handler
pub fn with_emitter_writer( dst: Box<dyn Write + Send>, cm: Option<Lrc<SourceMapperDyn>>, ) -> Handler
Calls Self::with_emitter with EmitterWriter.
pub fn with_emitter_and_flags( e: Box<dyn Emitter>, flags: HandlerFlags, ) -> Handler
pub fn set_continue_after_error(&self, continue_after_error: bool)
sourcepub fn reset_err_count(&self)
pub fn reset_err_count(&self)
Resets the diagnostic error count as well as the cached emitted diagnostics.
NOTE: DO NOT call this function from rustc. It is only meant to be
called from external tools that want to reuse a Parser
cleaning
the previously emitted diagnostics as well as the overall count of
emitted error diagnostics.
pub fn struct_dummy(&self) -> DiagnosticBuilder<'_>
pub fn struct_span_warn<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, ) -> DiagnosticBuilder<'a>
pub fn struct_span_warn_with_code<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, code: DiagnosticId, ) -> DiagnosticBuilder<'a>
pub fn struct_warn<'a>(&'a self, msg: &str) -> DiagnosticBuilder<'a>
pub fn struct_span_err<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, ) -> DiagnosticBuilder<'a>
pub fn struct_span_err_with_code<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, code: DiagnosticId, ) -> DiagnosticBuilder<'a>
pub fn struct_err<'a>(&'a self, msg: &str) -> DiagnosticBuilder<'a>
pub fn struct_err_with_code<'a>( &'a self, msg: &str, code: DiagnosticId, ) -> DiagnosticBuilder<'a>
pub fn struct_span_fatal<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, ) -> DiagnosticBuilder<'a>
pub fn struct_span_fatal_with_code<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, code: DiagnosticId, ) -> DiagnosticBuilder<'a>
pub fn struct_fatal<'a>(&'a self, msg: &str) -> DiagnosticBuilder<'a>
pub fn cancel(&self, err: &mut DiagnosticBuilder<'_>)
pub fn span_fatal<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> FatalError
pub fn span_fatal_with_code<S: Into<MultiSpan>>( &self, sp: S, msg: &str, code: DiagnosticId, ) -> FatalError
pub fn span_err<S: Into<MultiSpan>>(&self, sp: S, msg: &str)
pub fn mut_span_err<'a, S: Into<MultiSpan>>( &'a self, sp: S, msg: &str, ) -> DiagnosticBuilder<'a>
pub fn span_err_with_code<S: Into<MultiSpan>>( &self, sp: S, msg: &str, code: DiagnosticId, )
pub fn span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: &str)
pub fn span_warn_with_code<S: Into<MultiSpan>>( &self, sp: S, msg: &str, code: DiagnosticId, )
pub fn span_bug<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> !
pub fn delay_span_bug<S: Into<MultiSpan>>(&self, sp: S, msg: &str)
pub fn span_bug_no_panic<S: Into<MultiSpan>>(&self, sp: S, msg: &str)
pub fn span_note_without_error<S: Into<MultiSpan>>(&self, sp: S, msg: &str)
pub fn span_note_diag<'a>( &'a self, sp: Span, msg: &str, ) -> DiagnosticBuilder<'a>
pub fn span_unimpl<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> !
pub fn failure(&self, msg: &str)
pub fn fatal(&self, msg: &str) -> FatalError
pub fn err(&self, msg: &str)
pub fn warn(&self, msg: &str)
pub fn note_without_error(&self, msg: &str)
pub fn bug(&self, msg: &str) -> !
pub fn unimpl(&self, msg: &str) -> !
pub fn err_count(&self) -> usize
pub fn has_errors(&self) -> bool
pub fn print_error_count(&self)
pub fn abort_if_errors(&self)
pub fn emit(&self, msp: &MultiSpan, msg: &str, lvl: Level)
pub fn emit_with_code( &self, msp: &MultiSpan, msg: &str, code: DiagnosticId, lvl: Level, )
sourcepub fn must_teach(&self, code: &DiagnosticId) -> bool
pub fn must_teach(&self, code: &DiagnosticId) -> bool
true
if we haven’t taught a diagnostic with this code already.
The caller must then teach the user about such a diagnostic.
Used to suppress emitting the same error multiple times with extended
explanation when calling -Z teach
.
pub fn force_print_db(&self, db: DiagnosticBuilder<'_>)
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Handler
impl !RefUnwindSafe for Handler
impl Send for Handler
impl Sync for Handler
impl Unpin for Handler
impl !UnwindSafe for Handler
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.