From f9300004152ba4b3d091beb04d74f37b3b8ec281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 1 Oct 2024 22:49:32 +0100 Subject: 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 --- runtime/fmt_errors.rs | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'runtime') 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 @@ -26,24 +26,44 @@ enum FixSuggestionKind { Hint, } +#[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(); } -- cgit v1.2.3