diff --git a/src/context.rs b/src/context.rs index c3a13ab8..c7f4fea1 100644 --- a/src/context.rs +++ b/src/context.rs @@ -2,7 +2,8 @@ use crate::control_flow::ControlFlow; use crate::diagnostic::{ - LintDiagnostic, LintDiagnosticDetails, LintDiagnosticRange, LintFix, + LintDiagnostic, LintDiagnosticDetails, LintDiagnosticRange, LintDocsUrl, + LintFix, }; use crate::ignore_directives::{ parse_line_ignore_directives, CodeStatus, FileIgnoreDirective, @@ -484,7 +485,7 @@ impl<'a> Context<'a> { code: code.to_string(), hint: maybe_hint, fixes, - custom_docs_url: None, + custom_docs_url: LintDocsUrl::Default, info: vec![], } } diff --git a/src/diagnostic.rs b/src/diagnostic.rs index 501025d3..9c0a23f4 100644 --- a/src/diagnostic.rs +++ b/src/diagnostic.rs @@ -34,6 +34,14 @@ pub struct LintDiagnosticRange { pub description: Option, } +#[derive(Clone, Default)] +pub enum LintDocsUrl { + #[default] + Default, + None, + Custom(String), +} + #[derive(Clone)] pub struct LintDiagnosticDetails { pub message: String, @@ -48,7 +56,7 @@ pub struct LintDiagnosticDetails { pub fixes: Vec, /// URL to the lint rule documentation. By default, the url uses the /// code to link to lint.deno.land - pub custom_docs_url: Option, + pub custom_docs_url: LintDocsUrl, /// Displays additional information at the end of a diagnostic. pub info: Vec>, } @@ -122,13 +130,13 @@ impl Diagnostic for LintDiagnostic { } fn docs_url(&self) -> Option> { - if let Some(custom_docs_url) = &self.details.custom_docs_url { - Some(Cow::Borrowed(custom_docs_url)) - } else { - Some(Cow::Owned(format!( + match &self.details.custom_docs_url { + LintDocsUrl::Default => Some(Cow::Owned(format!( "https://docs.deno.com/lint/rules/{}", &self.details.code - ))) + ))), + LintDocsUrl::Custom(url) => Some(Cow::Borrowed(url)), + LintDocsUrl::None => None, } } }