diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-10-01 22:49:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-01 21:49:32 +0000 |
commit | f9300004152ba4b3d091beb04d74f37b3b8ec281 (patch) | |
tree | 78ab2c9c6241a95ac7dbfce1902d258ef4623df0 /runtime | |
parent | 41a70898adfc61b9020dfdfec17d374aac70d935 (diff) |
feat: Add suggestion for packages using Node-API addons (#25975)
This commit adds a suggestion with information and hint how
to resolve situation when user tries to run an npm package
with Node-API addons using global cache (which is currently not
supported).
Closes https://github.com/denoland/deno/issues/25974
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/fmt_errors.rs | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/runtime/fmt_errors.rs b/runtime/fmt_errors.rs index b2cec2a5a..44a947732 100644 --- a/runtime/fmt_errors.rs +++ b/runtime/fmt_errors.rs @@ -27,23 +27,43 @@ enum FixSuggestionKind { } #[derive(Debug)] +enum FixSuggestionMessage<'a> { + Single(&'a str), + Multiline(&'a [&'a str]), +} + +#[derive(Debug)] pub struct FixSuggestion<'a> { kind: FixSuggestionKind, - message: &'a str, + message: FixSuggestionMessage<'a>, } impl<'a> FixSuggestion<'a> { pub fn info(message: &'a str) -> Self { Self { kind: FixSuggestionKind::Info, - message, + message: FixSuggestionMessage::Single(message), + } + } + + pub fn info_multiline(messages: &'a [&'a str]) -> Self { + Self { + kind: FixSuggestionKind::Info, + message: FixSuggestionMessage::Multiline(messages), } } pub fn hint(message: &'a str) -> Self { Self { kind: FixSuggestionKind::Hint, - message, + message: FixSuggestionMessage::Single(message), + } + } + + pub fn hint_multiline(messages: &'a [&'a str]) -> Self { + Self { + kind: FixSuggestionKind::Hint, + message: FixSuggestionMessage::Multiline(messages), } } } @@ -238,7 +258,21 @@ fn format_js_error_inner( FixSuggestionKind::Hint => write!(s, "{} ", cyan("hint:")).unwrap(), FixSuggestionKind::Info => write!(s, "{} ", yellow("info:")).unwrap(), }; - write!(s, "{}", suggestion.message).unwrap(); + match suggestion.message { + FixSuggestionMessage::Single(msg) => { + write!(s, "{}", msg).unwrap(); + } + FixSuggestionMessage::Multiline(messages) => { + for (idx, message) in messages.iter().enumerate() { + if idx != 0 { + writeln!(s).unwrap(); + write!(s, " ").unwrap(); + } + write!(s, "{}", message).unwrap(); + } + } + } + if index != (suggestions.len() - 1) { writeln!(s).unwrap(); } |