From fa3c86431db857d8ca4cc6caa28d34437310e6ee Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 12 Sep 2024 23:16:55 -0600 Subject: [PATCH] fix: Re-implement #3856 to improve correctness. --- crates/biome_aria/src/roles.rs | 6 +- crates/biome_cli/src/cli_options.rs | 4 ++ crates/biome_cli/src/execute/mod.rs | 30 ++++++++- crates/biome_cli/src/reporter/files.rs | 88 ++++++++++++++++++++++++++ crates/biome_cli/src/reporter/mod.rs | 1 + 5 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 crates/biome_cli/src/reporter/files.rs diff --git a/crates/biome_aria/src/roles.rs b/crates/biome_aria/src/roles.rs index eb3fac5eb288..1d537b701cf9 100644 --- a/crates/biome_aria/src/roles.rs +++ b/crates/biome_aria/src/roles.rs @@ -152,7 +152,11 @@ define_role! { define_role! { /// https://www.w3.org/TR/wai-aria-1.1/#separator SeparatorRole { - PROPS: [], + PROPS: [ + ("aria-valuemax", false), + ("aria-valuemin", false), + ("aria-valuenow", false), + ], ROLES: ["structure", "widget"], CONCEPTS: &[("hr", &[])], } diff --git a/crates/biome_cli/src/cli_options.rs b/crates/biome_cli/src/cli_options.rs index 9be29855b256..f13f29628cc3 100644 --- a/crates/biome_cli/src/cli_options.rs +++ b/crates/biome_cli/src/cli_options.rs @@ -133,6 +133,8 @@ pub enum CliReporter { Summary, /// Reports linter diagnostics using the [GitLab Code Quality report](https://docs.gitlab.com/ee/ci/testing/code_quality.html#implement-a-custom-tool). GitLab, + /// Reports linter diagnostics as a list of files + Files, } impl CliReporter { @@ -152,6 +154,7 @@ impl FromStr for CliReporter { "github" => Ok(Self::GitHub), "junit" => Ok(Self::Junit), "gitlab" => Ok(Self::GitLab), + "files" => Ok(Self::Files), _ => Err(format!( "value {s:?} is not valid for the --reporter argument" )), @@ -169,6 +172,7 @@ impl Display for CliReporter { CliReporter::GitHub => f.write_str("github"), CliReporter::Junit => f.write_str("junit"), CliReporter::GitLab => f.write_str("gitlab"), + CliReporter::Files => f.write_str("files"), } } } diff --git a/crates/biome_cli/src/execute/mod.rs b/crates/biome_cli/src/execute/mod.rs index 61b22930d1ed..63168dd8343a 100644 --- a/crates/biome_cli/src/execute/mod.rs +++ b/crates/biome_cli/src/execute/mod.rs @@ -9,6 +9,7 @@ use crate::commands::MigrateSubCommand; use crate::diagnostics::ReportDiagnostic; use crate::execute::migrate::MigratePayload; use crate::execute::traverse::{traverse, TraverseResult}; +use crate::reporter::files::FilesReporter; use crate::reporter::github::{GithubReporter, GithubReporterVisitor}; use crate::reporter::gitlab::{GitLabReporter, GitLabReporterVisitor}; use crate::reporter::json::{JsonReporter, JsonReporterVisitor}; @@ -213,9 +214,13 @@ impl Display for TraversalMode { #[derive(Copy, Clone, Debug)] pub enum ReportMode { /// Reports information straight to the console, it's the default mode - Terminal { with_summary: bool }, + Terminal { + with_summary: bool, + }, /// Reports information in JSON format - Json { pretty: bool }, + Json { + pretty: bool, + }, /// Reports information for GitHub GitHub, /// JUnit output @@ -223,6 +228,7 @@ pub enum ReportMode { Junit, /// Reports information in the [GitLab Code Quality](https://docs.gitlab.com/ee/ci/testing/code_quality.html#implement-a-custom-tool) format. GitLab, + Files, } impl Default for ReportMode { @@ -245,6 +251,7 @@ impl From for ReportMode { CliReporter::GitHub => Self::GitHub, CliReporter::Junit => Self::Junit, CliReporter::GitLab => Self::GitLab {}, + CliReporter::Files => Self::Files {}, } } } @@ -552,6 +559,25 @@ pub fn execute_mode( }; reporter.write(&mut JunitReporterVisitor::new(console))?; } + ReportMode::Files => { + console.error(markup!{ + "The ""--json"" option is ""unstable/experimental"" and its output might change between patches/minor releases." + }); + let reporter = FilesReporter { + summary, + diagnostics: DiagnosticsPayload { + verbose: cli_options.verbose, + diagnostic_level: cli_options.diagnostic_level, + diagnostics, + }, + execution: execution.clone(), + }; + let mut buffer = JsonReporterVisitor::new(summary); + reporter.write(&mut buffer)?; + console.log(markup! { + {buffer} + }); + } } // Processing emitted error diagnostics, exit with a non-zero code diff --git a/crates/biome_cli/src/reporter/files.rs b/crates/biome_cli/src/reporter/files.rs new file mode 100644 index 000000000000..2be6c115e73b --- /dev/null +++ b/crates/biome_cli/src/reporter/files.rs @@ -0,0 +1,88 @@ +use crate::{DiagnosticsPayload, Execution, Reporter, ReporterVisitor, TraversalSummary}; +use biome_console::fmt::Formatter; +use biome_diagnostics::{Diagnostic, DiagnosticExt}; +use serde::Serialize; + +#[derive(Debug, Default, Serialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct FilesReporterVisitor { + summary: TraversalSummary, + files: Vec, + command: String, +} + +impl FilesReporterVisitor { + pub(crate) fn new(summary: TraversalSummary) -> Self { + Self { + summary, + files: vec![], + command: String::new(), + } + } +} + +impl biome_console::fmt::Display for FilesReporterVisitor { + fn fmt(&self, fmt: &mut Formatter) -> std::io::Result<()> { + let content = serde_json::to_string(&self)?; + fmt.write_str(content.as_str()) + } +} + +pub struct FilesReporter { + pub execution: Execution, + pub diagnostics: DiagnosticsPayload, + pub summary: TraversalSummary, +} + +impl Reporter for FilesReporter { + fn write(self, visitor: &mut dyn ReporterVisitor) -> std::io::Result<()> { + visitor.report_summary(&self.execution, self.summary)?; + visitor.report_diagnostics(&self.execution, self.diagnostics)?; + + Ok(()) + } +} + +impl ReporterVisitor for FilesReporterVisitor { + fn report_summary( + &mut self, + execution: &Execution, + summary: TraversalSummary, + ) -> std::io::Result<()> { + self.summary = summary; + self.command = format!("{}", execution.traversal_mode()); + + Ok(()) + } + + fn report_diagnostics( + &mut self, + _execution: &Execution, + payload: DiagnosticsPayload, + ) -> std::io::Result<()> { + for diagnostic in payload.diagnostics { + if diagnostic.severity() >= payload.diagnostic_level { + if diagnostic.tags().is_verbose() { + if payload.verbose { + // let location = + // biome_diagnostics::serde::Diagnostic::new(diagnostic).location(); + + println!( + "{:#?}", + biome_diagnostics::serde::Diagnostic::new(diagnostic).location() + ) + // self.files.push(location.resource) + } + } else { + println!( + "{:#?}", + biome_diagnostics::serde::Diagnostic::new(diagnostic).location() + ) + // self.diagnostics + // .push(biome_diagnostics::serde::Diagnostic::new(diagnostic)) + } + } + } + Ok(()) + } +} diff --git a/crates/biome_cli/src/reporter/mod.rs b/crates/biome_cli/src/reporter/mod.rs index 491fa535c787..bceb5bb8422d 100644 --- a/crates/biome_cli/src/reporter/mod.rs +++ b/crates/biome_cli/src/reporter/mod.rs @@ -1,3 +1,4 @@ +pub(crate) mod files; pub(crate) mod github; pub(crate) mod gitlab; pub(crate) mod json;