mirror of https://github.com/zkat/miette.git
feat(wasm): add feature "fancy-no-syscall" for wasm targets (#349)
Fixes: https://github.com/zkat/miette/issues/346
This commit is contained in:
parent
6ea86a2248
commit
328bf37922
|
|
@ -49,6 +49,19 @@ jobs:
|
||||||
if: matrix.rust == '1.70.0'
|
if: matrix.rust == '1.70.0'
|
||||||
run: cargo test --all --verbose --features ${{matrix.features}} no-format-args-capture
|
run: cargo test --all --verbose --features ${{matrix.features}} no-format-args-capture
|
||||||
|
|
||||||
|
wasm:
|
||||||
|
name: Check Wasm build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
targets: wasm32-unknown-unknown
|
||||||
|
- name: Check wasm target
|
||||||
|
run: cargo check --target wasm32-unknown-unknown --features fancy-no-syscall
|
||||||
|
|
||||||
miri:
|
miri:
|
||||||
name: Miri
|
name: Miri
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ exclude = ["images/", "tests/", "miette-derive/"]
|
||||||
thiserror = "1.0.56"
|
thiserror = "1.0.56"
|
||||||
miette-derive = { path = "miette-derive", version = "=7.1.0", optional = true }
|
miette-derive = { path = "miette-derive", version = "=7.1.0", optional = true }
|
||||||
unicode-width = "0.1.11"
|
unicode-width = "0.1.11"
|
||||||
|
cfg-if = "1.0.0"
|
||||||
|
|
||||||
owo-colors = { version = "4.0.0", optional = true }
|
owo-colors = { version = "4.0.0", optional = true }
|
||||||
textwrap = { version = "0.16.0", optional = true }
|
textwrap = { version = "0.16.0", optional = true }
|
||||||
|
|
@ -47,9 +48,15 @@ strip-ansi-escapes = "0.2.0"
|
||||||
default = ["derive"]
|
default = ["derive"]
|
||||||
derive = ["miette-derive"]
|
derive = ["miette-derive"]
|
||||||
no-format-args-capture = []
|
no-format-args-capture = []
|
||||||
fancy-no-backtrace = [
|
fancy-base = [
|
||||||
"owo-colors",
|
"owo-colors",
|
||||||
"textwrap",
|
"textwrap",
|
||||||
|
]
|
||||||
|
fancy-no-syscall = [
|
||||||
|
"fancy-base",
|
||||||
|
]
|
||||||
|
fancy-no-backtrace = [
|
||||||
|
"fancy-base",
|
||||||
"terminal_size",
|
"terminal_size",
|
||||||
"supports-hyperlinks",
|
"supports-hyperlinks",
|
||||||
"supports-color",
|
"supports-color",
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,10 @@ pub use ReportHandler as EyreContext;
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
pub use WrapErr as Context;
|
pub use WrapErr as Context;
|
||||||
|
|
||||||
#[cfg(not(feature = "fancy-no-backtrace"))]
|
#[cfg(not(feature = "fancy-base"))]
|
||||||
use crate::DebugReportHandler;
|
use crate::DebugReportHandler;
|
||||||
use crate::Diagnostic;
|
use crate::Diagnostic;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
use crate::MietteHandler;
|
use crate::MietteHandler;
|
||||||
|
|
||||||
use error::ErrorImpl;
|
use error::ErrorImpl;
|
||||||
|
|
@ -102,9 +102,9 @@ fn capture_handler(error: &(dyn Diagnostic + 'static)) -> Box<dyn ReportHandler>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_default_printer(_err: &(dyn Diagnostic + 'static)) -> Box<dyn ReportHandler + 'static> {
|
fn get_default_printer(_err: &(dyn Diagnostic + 'static)) -> Box<dyn ReportHandler + 'static> {
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
return Box::new(MietteHandler::new());
|
return Box::new(MietteHandler::new());
|
||||||
#[cfg(not(feature = "fancy-no-backtrace"))]
|
#[cfg(not(feature = "fancy-base"))]
|
||||||
return Box::new(DebugReportHandler::new());
|
return Box::new(DebugReportHandler::new());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -265,17 +265,15 @@ impl MietteHandlerOpts {
|
||||||
let characters = match self.unicode {
|
let characters = match self.unicode {
|
||||||
Some(true) => ThemeCharacters::unicode(),
|
Some(true) => ThemeCharacters::unicode(),
|
||||||
Some(false) => ThemeCharacters::ascii(),
|
Some(false) => ThemeCharacters::ascii(),
|
||||||
None if supports_unicode::on(supports_unicode::Stream::Stderr) => {
|
None if syscall::supports_unicode() => ThemeCharacters::unicode(),
|
||||||
ThemeCharacters::unicode()
|
|
||||||
}
|
|
||||||
None => ThemeCharacters::ascii(),
|
None => ThemeCharacters::ascii(),
|
||||||
};
|
};
|
||||||
let styles = if self.color == Some(false) {
|
let styles = if self.color == Some(false) {
|
||||||
ThemeStyles::none()
|
ThemeStyles::none()
|
||||||
} else if let Some(color) = supports_color::on(supports_color::Stream::Stderr) {
|
} else if let Some(color_has_16m) = syscall::supports_color_has_16m() {
|
||||||
match self.rgb_colors {
|
match self.rgb_colors {
|
||||||
RgbColors::Always => ThemeStyles::rgb(),
|
RgbColors::Always => ThemeStyles::rgb(),
|
||||||
RgbColors::Preferred if color.has_16m => ThemeStyles::rgb(),
|
RgbColors::Preferred if color_has_16m => ThemeStyles::rgb(),
|
||||||
_ => ThemeStyles::ansi(),
|
_ => ThemeStyles::ansi(),
|
||||||
}
|
}
|
||||||
} else if self.color == Some(true) {
|
} else if self.color == Some(true) {
|
||||||
|
|
@ -291,9 +289,7 @@ impl MietteHandlerOpts {
|
||||||
#[cfg(feature = "syntect-highlighter")]
|
#[cfg(feature = "syntect-highlighter")]
|
||||||
let highlighter = if self.color == Some(false) {
|
let highlighter = if self.color == Some(false) {
|
||||||
MietteHighlighter::nocolor()
|
MietteHighlighter::nocolor()
|
||||||
} else if self.color == Some(true)
|
} else if self.color == Some(true) || syscall::supports_color() {
|
||||||
|| supports_color::on(supports_color::Stream::Stderr).is_some()
|
|
||||||
{
|
|
||||||
match self.highlighter {
|
match self.highlighter {
|
||||||
Some(highlighter) => highlighter,
|
Some(highlighter) => highlighter,
|
||||||
None => match self.rgb_colors {
|
None => match self.rgb_colors {
|
||||||
|
|
@ -366,26 +362,13 @@ impl MietteHandlerOpts {
|
||||||
if let Some(linkify) = self.linkify {
|
if let Some(linkify) = self.linkify {
|
||||||
linkify
|
linkify
|
||||||
} else {
|
} else {
|
||||||
supports_hyperlinks::on(supports_hyperlinks::Stream::Stderr)
|
syscall::supports_hyperlinks()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(miri))]
|
|
||||||
pub(crate) fn get_width(&self) -> usize {
|
pub(crate) fn get_width(&self) -> usize {
|
||||||
self.width.unwrap_or_else(|| {
|
self.width
|
||||||
terminal_size::terminal_size()
|
.unwrap_or_else(|| syscall::terminal_width().unwrap_or(80))
|
||||||
.unwrap_or((terminal_size::Width(80), terminal_size::Height(0)))
|
|
||||||
.0
|
|
||||||
.0 as usize
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(miri)]
|
|
||||||
// miri doesn't support a syscall (specifically ioctl)
|
|
||||||
// performed by terminal_size, which causes test execution to fail
|
|
||||||
// so when miri is running we'll just fallback to a constant
|
|
||||||
pub(crate) fn get_width(&self) -> usize {
|
|
||||||
self.width.unwrap_or(80)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -430,3 +413,63 @@ impl ReportHandler for MietteHandler {
|
||||||
self.inner.debug(diagnostic, f)
|
self.inner.debug(diagnostic, f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod syscall {
|
||||||
|
use cfg_if::cfg_if;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub(super) fn terminal_width() -> Option<usize> {
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(any(feature = "fancy-no-syscall", miri))] {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
terminal_size::terminal_size().map(|size| size.0 .0 as usize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub(super) fn supports_hyperlinks() -> bool {
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(feature = "fancy-no-syscall")] {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
supports_hyperlinks::on(supports_hyperlinks::Stream::Stderr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "syntect-highlighter")]
|
||||||
|
#[inline]
|
||||||
|
pub(super) fn supports_color() -> bool {
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(feature = "fancy-no-syscall")] {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
supports_color::on(supports_color::Stream::Stderr).is_some()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub(super) fn supports_color_has_16m() -> Option<bool> {
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(feature = "fancy-no-syscall")] {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
supports_color::on(supports_color::Stream::Stderr).map(|color| color.has_16m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub(super) fn supports_unicode() -> bool {
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(feature = "fancy-no-syscall")] {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
supports_unicode::on(supports_unicode::Stream::Stderr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,20 +5,20 @@ Reporters included with `miette`.
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
pub use debug::*;
|
pub use debug::*;
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
pub use graphical::*;
|
pub use graphical::*;
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
pub use json::*;
|
pub use json::*;
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
pub use narratable::*;
|
pub use narratable::*;
|
||||||
#[allow(unreachable_pub)]
|
#[allow(unreachable_pub)]
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
pub use theme::*;
|
pub use theme::*;
|
||||||
|
|
||||||
mod debug;
|
mod debug;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
mod graphical;
|
mod graphical;
|
||||||
mod json;
|
mod json;
|
||||||
mod narratable;
|
mod narratable;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
mod theme;
|
mod theme;
|
||||||
|
|
|
||||||
|
|
@ -760,7 +760,7 @@ pub use miette_derive::*;
|
||||||
|
|
||||||
pub use error::*;
|
pub use error::*;
|
||||||
pub use eyreish::*;
|
pub use eyreish::*;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
pub use handler::*;
|
pub use handler::*;
|
||||||
pub use handlers::*;
|
pub use handlers::*;
|
||||||
pub use miette_diagnostic::*;
|
pub use miette_diagnostic::*;
|
||||||
|
|
@ -773,10 +773,10 @@ mod chain;
|
||||||
mod diagnostic_chain;
|
mod diagnostic_chain;
|
||||||
mod error;
|
mod error;
|
||||||
mod eyreish;
|
mod eyreish;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
mod handler;
|
mod handler;
|
||||||
mod handlers;
|
mod handlers;
|
||||||
#[cfg(feature = "fancy-no-backtrace")]
|
#[cfg(feature = "fancy-base")]
|
||||||
pub mod highlighters;
|
pub mod highlighters;
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub mod macro_helpers;
|
pub mod macro_helpers;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue