Skip to content

Commit

Permalink
fix: Re-implement biomejs#3856 to improve correctness.
Browse files Browse the repository at this point in the history
  • Loading branch information
anthonyshew committed Sep 13, 2024
1 parent 4517d61 commit fa3c864
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 3 deletions.
6 changes: 5 additions & 1 deletion crates/biome_aria/src/roles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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", &[])],
}
Expand Down
4 changes: 4 additions & 0 deletions crates/biome_cli/src/cli_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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"
)),
Expand All @@ -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"),
}
}
}
Expand Down
30 changes: 28 additions & 2 deletions crates/biome_cli/src/execute/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -213,16 +214,21 @@ 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
/// Ref: https://github.com/testmoapp/junitxml?tab=readme-ov-file#basic-junit-xml-structure
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 {
Expand All @@ -245,6 +251,7 @@ impl From<CliReporter> for ReportMode {
CliReporter::GitHub => Self::GitHub,
CliReporter::Junit => Self::Junit,
CliReporter::GitLab => Self::GitLab {},
CliReporter::Files => Self::Files {},
}
}
}
Expand Down Expand Up @@ -552,6 +559,25 @@ pub fn execute_mode(
};
reporter.write(&mut JunitReporterVisitor::new(console))?;
}
ReportMode::Files => {
console.error(markup!{
<Warn>"The "<Emphasis>"--json"</Emphasis>" option is "<Underline>"unstable/experimental"</Underline>" and its output might change between patches/minor releases."</Warn>
});
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
Expand Down
88 changes: 88 additions & 0 deletions crates/biome_cli/src/reporter/files.rs
Original file line number Diff line number Diff line change
@@ -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<String>,
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(())
}
}
1 change: 1 addition & 0 deletions crates/biome_cli/src/reporter/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub(crate) mod files;
pub(crate) mod github;
pub(crate) mod gitlab;
pub(crate) mod json;
Expand Down

0 comments on commit fa3c864

Please sign in to comment.