From 30c71dc59a38044ae53220f10bf3bded583eba89 Mon Sep 17 00:00:00 2001 From: StefanBRas <28559054+StefanBRas@users.noreply.github.com> Date: Mon, 6 Mar 2023 03:48:39 +0100 Subject: [PATCH] Add Azure Devops as a `-format` option. (#3335) --- crates/ruff/src/settings/options.rs | 6 +++--- crates/ruff/src/settings/types.rs | 1 + crates/ruff_cli/src/printer.rs | 27 +++++++++++++++++++++++++++ docs/configuration.md | 2 +- ruff.schema.json | 5 +++-- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/crates/ruff/src/settings/options.rs b/crates/ruff/src/settings/options.rs index b109d1a328..525980db7e 100644 --- a/crates/ruff/src/settings/options.rs +++ b/crates/ruff/src/settings/options.rs @@ -194,7 +194,7 @@ pub struct Options { pub fixable: Option>, #[option( default = r#""text""#, - value_type = r#""text" | "json" | "junit" | "github" | "gitlab" | "pylint""#, + value_type = r#""text" | "json" | "junit" | "github" | "gitlab" | "pylint" | "azure""#, example = r#" # Group violations by containing file. format = "grouped" @@ -203,8 +203,8 @@ pub struct Options { /// The style in which violation messages should be formatted: `"text"` /// (default), `"grouped"` (group messages by file), `"json"` /// (machine-readable), `"junit"` (machine-readable XML), `"github"` (GitHub - /// Actions annotations), `"gitlab"` (GitLab CI code quality report), or - /// `"pylint"` (Pylint text format). + /// Actions annotations), `"gitlab"` (GitLab CI code quality report), + /// `"pylint"` (Pylint text format) or `"azure"` (Azure Pipeline logging commands). pub format: Option, #[option( default = r#"false"#, diff --git a/crates/ruff/src/settings/types.rs b/crates/ruff/src/settings/types.rs index 2c9d643919..f8b1ae2e43 100644 --- a/crates/ruff/src/settings/types.rs +++ b/crates/ruff/src/settings/types.rs @@ -216,6 +216,7 @@ pub enum SerializationFormat { Github, Gitlab, Pylint, + Azure, } impl Default for SerializationFormat { diff --git a/crates/ruff_cli/src/printer.rs b/crates/ruff_cli/src/printer.rs index ea9173ce75..00c76a6bc4 100644 --- a/crates/ruff_cli/src/printer.rs +++ b/crates/ruff_cli/src/printer.rs @@ -374,6 +374,33 @@ impl Printer { writeln!(stdout, "{label}")?; } } + SerializationFormat::Azure => { + // Generate error logging commands for Azure Pipelines format. + // See https://learn.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=azure-devops&tabs=bash#logissue-log-an-error-or-warning + for message in &diagnostics.messages { + let label = format!( + "{}{}{}{}{}{} {} {}", + relativize_path(Path::new(&message.filename)), + ":", + message.location.row(), + ":", + message.location.column(), + ":", + message.kind.rule().noqa_code(), + message.kind.body(), + ); + writeln!( + stdout, + "##vso[task.logissue type=error\ + ;sourcepath={};linenumber={};columnnumber={};code={};]{}", + message.filename, + message.location.row(), + message.location.column(), + message.kind.rule().noqa_code(), + label, + )?; + } + } } stdout.flush()?; diff --git a/docs/configuration.md b/docs/configuration.md index 5587637c91..19c562e795 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -209,7 +209,7 @@ Options: --ignore-noqa Ignore any `# noqa` comments --format - Output serialization format for violations [env: RUFF_FORMAT=] [possible values: text, json, junit, grouped, github, gitlab, pylint] + Output serialization format for violations [env: RUFF_FORMAT=] [possible values: text, json, junit, grouped, github, gitlab, pylint, azure] --target-version The minimum Python version that should be supported --config diff --git a/ruff.schema.json b/ruff.schema.json index 24240eaef9..605b7267d5 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -272,7 +272,7 @@ ] }, "format": { - "description": "The style in which violation messages should be formatted: `\"text\"` (default), `\"grouped\"` (group messages by file), `\"json\"` (machine-readable), `\"junit\"` (machine-readable XML), `\"github\"` (GitHub Actions annotations), `\"gitlab\"` (GitLab CI code quality report), or `\"pylint\"` (Pylint text format).", + "description": "The style in which violation messages should be formatted: `\"text\"` (default), `\"grouped\"` (group messages by file), `\"json\"` (machine-readable), `\"junit\"` (machine-readable XML), `\"github\"` (GitHub Actions annotations), `\"gitlab\"` (GitLab CI code quality report), `\"pylint\"` (Pylint text format) or `\"azure\"` (Azure Pipeline logging commands).", "anyOf": [ { "$ref": "#/definitions/SerializationFormat" @@ -2178,7 +2178,8 @@ "grouped", "github", "gitlab", - "pylint" + "pylint", + "azure" ] }, "Strictness": {