From 41203ea20820635dd028fa90bf5c5fbc0bea3c26 Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Wed, 26 Jun 2024 09:40:18 +0200 Subject: [PATCH] Remove output format `text` and use format `full` by default (#12010) Resolves #7349 --- crates/ruff/src/args.rs | 28 +- crates/ruff/src/lib.rs | 4 +- crates/ruff/src/printer.rs | 6 +- crates/ruff/tests/deprecation.rs | 14 +- crates/ruff/tests/integration_test.rs | 246 ++++++++++++++++++ ...ow_settings__display_default_settings.snap | 2 +- crates/ruff_linter/src/settings/types.rs | 20 +- crates/ruff_workspace/src/configuration.rs | 27 +- crates/ruff_workspace/src/settings.rs | 2 +- ruff.schema.json | 40 +-- 10 files changed, 317 insertions(+), 72 deletions(-) diff --git a/crates/ruff/src/args.rs b/crates/ruff/src/args.rs index 13a0b5186e45d..f6fe0c8993fbe 100644 --- a/crates/ruff/src/args.rs +++ b/crates/ruff/src/args.rs @@ -5,7 +5,7 @@ use std::path::{Path, PathBuf}; use std::str::FromStr; use std::sync::Arc; -use anyhow::bail; +use anyhow::{anyhow, bail}; use clap::builder::{TypedValueParser, ValueParserFactory}; use clap::{command, Parser}; use colored::Colorize; @@ -21,7 +21,7 @@ use ruff_linter::settings::types::{ ExtensionPair, FilePattern, OutputFormat, PatternPrefixPair, PerFileIgnore, PreviewMode, PythonVersion, UnsafeFixes, }; -use ruff_linter::{warn_user, RuleParser, RuleSelector, RuleSelectorParser}; +use ruff_linter::{RuleParser, RuleSelector, RuleSelectorParser}; use ruff_source_file::{LineIndex, OneIndexed}; use ruff_text_size::TextRange; use ruff_workspace::configuration::{Configuration, RuleSelection}; @@ -691,10 +691,7 @@ impl CheckCommand { unsafe_fixes: resolve_bool_arg(self.unsafe_fixes, self.no_unsafe_fixes) .map(UnsafeFixes::from), force_exclude: resolve_bool_arg(self.force_exclude, self.no_force_exclude), - output_format: resolve_output_format( - self.output_format, - resolve_bool_arg(self.preview, self.no_preview).unwrap_or_default(), - ), + output_format: resolve_output_format(self.output_format)?, show_fixes: resolve_bool_arg(self.show_fixes, self.no_show_fixes), extension: self.extension, }; @@ -922,20 +919,15 @@ The path `{value}` does not point to a configuration file" } } +#[allow(deprecated)] fn resolve_output_format( output_format: Option, - preview: bool, -) -> Option { - Some(match output_format { - Some(o) => o, - None => return None - }).map(|format| match format { - OutputFormat::Text => { - warn_user!("`--output-format=text` is deprecated. Use `--output-format=full` or `--output-format=concise` instead. `text` will be treated as `{}`.", OutputFormat::default(preview)); - OutputFormat::default(preview) - }, - other => other - }) +) -> anyhow::Result> { + if let Some(OutputFormat::Text) = output_format { + Err(anyhow!("`--output-format=text` is no longer supported. Use `--output-format=full` or `--output-format=concise` instead.")) + } else { + Ok(output_format) + } } /// CLI settings that are distinct from configuration (commands, lists of files, diff --git a/crates/ruff/src/lib.rs b/crates/ruff/src/lib.rs index 4d3ddf4390a81..1daa634c3613c 100644 --- a/crates/ruff/src/lib.rs +++ b/crates/ruff/src/lib.rs @@ -335,10 +335,10 @@ pub fn check(args: CheckCommand, global_options: GlobalConfigArgs) -> Result { JunitEmitter.emit(writer, &diagnostics.messages, &context)?; } - OutputFormat::Concise - | OutputFormat::Full => { + OutputFormat::Concise | OutputFormat::Full => { TextEmitter::default() .with_show_fix_status(show_fix_status(self.fix_mode, fixables.as_ref())) .with_show_fix_diff(self.flags.intersects(Flags::SHOW_FIX_DIFF)) @@ -324,6 +324,7 @@ impl Printer { OutputFormat::Sarif => { SarifEmitter.emit(writer, &diagnostics.messages, &context)?; } + #[allow(deprecated)] OutputFormat::Text => unreachable!("Text is deprecated and should have been automatically converted to the default serialization format") } @@ -367,6 +368,7 @@ impl Printer { } match self.format { + #[allow(deprecated)] OutputFormat::Text | OutputFormat::Full | OutputFormat::Concise => { // Compute the maximum number of digits in the count and code, for all messages, // to enable pretty-printing. diff --git a/crates/ruff/tests/deprecation.rs b/crates/ruff/tests/deprecation.rs index b78ee9f3b1741..550dbeda1a2d2 100644 --- a/crates/ruff/tests/deprecation.rs +++ b/crates/ruff/tests/deprecation.rs @@ -9,9 +9,9 @@ const BIN_NAME: &str = "ruff"; const STDIN: &str = "l = 1"; -fn ruff_check(output_format: Option) -> Command { +fn ruff_check(output_format: OutputFormat) -> Command { let mut cmd = Command::new(get_cargo_bin(BIN_NAME)); - let output_format = output_format.unwrap_or(format!("{}", OutputFormat::default(false))); + let output_format = output_format.to_string(); cmd.arg("check") .arg("--output-format") .arg(output_format) @@ -22,15 +22,15 @@ fn ruff_check(output_format: Option) -> Command { } #[test] +#[allow(deprecated)] fn ensure_output_format_is_deprecated() { - assert_cmd_snapshot!(ruff_check(Some("text".into())).pass_stdin(STDIN), @r###" + assert_cmd_snapshot!(ruff_check(OutputFormat::Text).pass_stdin(STDIN), @r###" success: false - exit_code: 1 + exit_code: 2 ----- stdout ----- - -:1:1: E741 Ambiguous variable name: `l` - Found 1 error. ----- stderr ----- - warning: `--output-format=text` is deprecated. Use `--output-format=full` or `--output-format=concise` instead. `text` will be treated as `concise`. + ruff failed + Cause: `--output-format=text` is no longer supported. Use `--output-format=full` or `--output-format=concise` instead. "###); } diff --git a/crates/ruff/tests/integration_test.rs b/crates/ruff/tests/integration_test.rs index 8e4b724d32785..9dab25ed53156 100644 --- a/crates/ruff/tests/integration_test.rs +++ b/crates/ruff/tests/integration_test.rs @@ -116,6 +116,12 @@ fn stdin_error() { exit_code: 1 ----- stdout ----- -:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -134,6 +140,12 @@ fn stdin_filename() { exit_code: 1 ----- stdout ----- F401.py:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -163,7 +175,19 @@ import bar # unused import exit_code: 1 ----- stdout ----- bar.py:2:8: F401 [*] `bar` imported but unused + | + 2 | import bar # unused import + | ^^^ F401 + | + = help: Remove unused import: `bar` + foo.py:2:8: F401 [*] `foo` imported but unused + | + 2 | import foo # unused import + | ^^^ F401 + | + = help: Remove unused import: `foo` + Found 2 errors. [*] 2 fixable with the `--fix` option. @@ -185,6 +209,12 @@ fn check_warn_stdin_filename_with_files() { exit_code: 1 ----- stdout ----- F401.py:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -205,6 +235,12 @@ fn stdin_source_type_py() { exit_code: 1 ----- stdout ----- TCH.py:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -436,6 +472,11 @@ fn stdin_fix_jupyter() { } ----- stderr ----- Jupyter.ipynb:cell 3:1:7: F821 Undefined name `x` + | + 1 | print(x) + | ^ F821 + | + Found 3 errors (2 fixed, 1 remaining). "###); } @@ -529,7 +570,19 @@ fn stdin_override_parser_ipynb() { exit_code: 1 ----- stdout ----- Jupyter.py:cell 1:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Jupyter.py:cell 3:1:8: F401 [*] `sys` imported but unused + | + 1 | import sys + | ^^^ F401 + | + = help: Remove unused import: `sys` + Found 2 errors. [*] 2 fixable with the `--fix` option. @@ -553,6 +606,12 @@ fn stdin_override_parser_py() { exit_code: 1 ----- stdout ----- F401.ipynb:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -575,6 +634,14 @@ fn stdin_fix_when_not_fixable_should_still_print_contents() { ----- stderr ----- -:3:4: F634 If test is a tuple, which is always `True` + | + 1 | import sys + 2 | + 3 | if (1, 2): + | ^^^^^^ F634 + 4 | print(sys.version) + | + Found 2 errors (1 fixed, 1 remaining). "###); } @@ -732,6 +799,11 @@ fn stdin_parse_error() { exit_code: 1 ----- stdout ----- -:1:16: E999 SyntaxError: Expected one or more symbol names after import + | + 1 | from foo import + | ^ E999 + | + Found 1 error. ----- stderr ----- @@ -748,7 +820,19 @@ fn stdin_multiple_parse_error() { exit_code: 1 ----- stdout ----- -:1:16: E999 SyntaxError: Expected one or more symbol names after import + | + 1 | from foo import + | ^ E999 + 2 | bar = + | + -:2:6: E999 SyntaxError: Expected an expression + | + 1 | from foo import + 2 | bar = + | ^ E999 + | + Found 2 errors. ----- stderr ----- @@ -1135,6 +1219,9 @@ fn redirect_direct() { exit_code: 1 ----- stdout ----- -:1:1: RUF950 Hey this is a test rule that was redirected from another. + | + | + Found 1 error. ----- stderr ----- @@ -1167,6 +1254,9 @@ fn redirect_prefix() { exit_code: 1 ----- stdout ----- -:1:1: RUF950 Hey this is a test rule that was redirected from another. + | + | + Found 1 error. ----- stderr ----- @@ -1184,6 +1274,9 @@ fn deprecated_direct() { exit_code: 1 ----- stdout ----- -:1:1: RUF920 Hey this is a deprecated test rule. + | + | + Found 1 error. ----- stderr ----- @@ -1201,7 +1294,13 @@ fn deprecated_multiple_direct() { exit_code: 1 ----- stdout ----- -:1:1: RUF920 Hey this is a deprecated test rule. + | + | + -:1:1: RUF921 Hey this is another deprecated test rule. + | + | + Found 2 errors. ----- stderr ----- @@ -1220,7 +1319,13 @@ fn deprecated_indirect() { exit_code: 1 ----- stdout ----- -:1:1: RUF920 Hey this is a deprecated test rule. + | + | + -:1:1: RUF921 Hey this is another deprecated test rule. + | + | + Found 2 errors. ----- stderr ----- @@ -1372,6 +1477,12 @@ fn check_input_from_argfile() -> Result<()> { exit_code: 1 ----- stdout ----- /path/to/a.py:1:8: F401 [*] `os` imported but unused + | + 1 | import os + | ^^ F401 + | + = help: Remove unused import: `os` + Found 1 error. [*] 1 fixable with the `--fix` option. @@ -1393,7 +1504,13 @@ fn check_hints_hidden_unsafe_fixes() { exit_code: 1 ----- stdout ----- -:1:1: RUF901 [*] Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. [*] 1 fixable with the `--fix` option (1 hidden fix can be enabled with the `--unsafe-fixes` option). @@ -1411,6 +1528,11 @@ fn check_hints_hidden_unsafe_fixes_with_no_safe_fixes() { exit_code: 1 ----- stdout ----- -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + 1 | x = {'a': 1, 'a': 1} + | RUF902 + | + Found 1 error. No fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option). @@ -1429,7 +1551,13 @@ fn check_no_hint_for_hidden_unsafe_fixes_when_disabled() { exit_code: 1 ----- stdout ----- -:1:1: RUF901 [*] Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. [*] 1 fixable with the --fix option. @@ -1449,6 +1577,11 @@ fn check_no_hint_for_hidden_unsafe_fixes_with_no_safe_fixes_when_disabled() { exit_code: 1 ----- stdout ----- -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + 1 | x = {'a': 1, 'a': 1} + | RUF902 + | + Found 1 error. ----- stderr ----- @@ -1466,7 +1599,13 @@ fn check_shows_unsafe_fixes_with_opt_in() { exit_code: 1 ----- stdout ----- -:1:1: RUF901 [*] Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 [*] Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. [*] 2 fixable with the --fix option. @@ -1488,6 +1627,11 @@ fn fix_applies_safe_fixes_by_default() { ----- stderr ----- -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + 1 | # fix from stable-test-rule-safe-fix + | RUF902 + | + Found 2 errors (1 fixed, 1 remaining). No fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option). "###); @@ -1525,6 +1669,11 @@ fn fix_does_not_apply_display_only_fixes() { def add_to_list(item, some_list=[]): ... ----- stderr ----- -:1:1: RUF903 Hey this is a stable test rule with a display only fix. + | + 1 | def add_to_list(item, some_list=[]): ... + | RUF903 + | + Found 1 error. "###); } @@ -1543,6 +1692,11 @@ fn fix_does_not_apply_display_only_fixes_with_unsafe_fixes_enabled() { def add_to_list(item, some_list=[]): ... ----- stderr ----- -:1:1: RUF903 Hey this is a stable test rule with a display only fix. + | + 1 | def add_to_list(item, some_list=[]): ... + | RUF903 + | + Found 1 error. "###); } @@ -1560,6 +1714,9 @@ fn fix_only_unsafe_fixes_available() { ----- stderr ----- -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + | + Found 1 error. No fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option). "###); @@ -1696,7 +1853,13 @@ extend-unsafe-fixes = ["RUF901"] exit_code: 1 ----- stdout ----- -:1:1: RUF901 Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. No fixes available (2 hidden fixes can be enabled with the `--unsafe-fixes` option). @@ -1728,7 +1891,13 @@ extend-safe-fixes = ["RUF902"] exit_code: 1 ----- stdout ----- -:1:1: RUF901 [*] Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 [*] Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. [*] 2 fixable with the `--fix` option. @@ -1762,7 +1931,13 @@ extend-safe-fixes = ["RUF902"] exit_code: 1 ----- stdout ----- -:1:1: RUF901 [*] Hey this is a stable test rule with a safe fix. + | + | + -:1:1: RUF902 Hey this is a stable test rule with an unsafe fix. + | + | + Found 2 errors. [*] 1 fixable with the `--fix` option (1 hidden fix can be enabled with the `--unsafe-fixes` option). @@ -1798,12 +1973,61 @@ extend-safe-fixes = ["RUF9"] exit_code: 1 ----- stdout ----- -:1:1: RUF900 Hey this is a stable test rule. + | + 1 | x = {'a': 1, 'a': 1} + | RUF900 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF901 Hey this is a stable test rule with a safe fix. + | + 1 | x = {'a': 1, 'a': 1} + | RUF901 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF902 [*] Hey this is a stable test rule with an unsafe fix. + | + 1 | x = {'a': 1, 'a': 1} + | RUF902 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF903 Hey this is a stable test rule with a display only fix. + | + 1 | x = {'a': 1, 'a': 1} + | RUF903 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF920 Hey this is a deprecated test rule. + | + 1 | x = {'a': 1, 'a': 1} + | RUF920 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF921 Hey this is another deprecated test rule. + | + 1 | x = {'a': 1, 'a': 1} + | RUF921 + 2 | print(('foo')) + 3 | print(str('foo')) + | + -:1:1: RUF950 Hey this is a test rule that was redirected from another. + | + 1 | x = {'a': 1, 'a': 1} + | RUF950 + 2 | print(('foo')) + 3 | print(str('foo')) + | + Found 7 errors. [*] 1 fixable with the `--fix` option (1 hidden fix can be enabled with the `--unsafe-fixes` option). @@ -1865,6 +2089,12 @@ def log(x, base) -> float: exit_code: 1 ----- stdout ----- -:2:5: D417 Missing argument description in the docstring for `log`: `base` + | + 2 | def log(x, base) -> float: + | ^^^ D417 + 3 | """Calculate natural log of a value + | + Found 1 error. ----- stderr ----- @@ -1895,6 +2125,14 @@ select = ["RUF017"] exit_code: 1 ----- stdout ----- -:3:1: RUF017 Avoid quadratic list summation + | + 1 | x = [1, 2, 3] + 2 | y = [4, 5, 6] + 3 | sum([x, y], []) + | ^^^^^^^^^^^^^^^ RUF017 + | + = help: Replace with `functools.reduce` + Found 1 error. No fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option). @@ -1927,6 +2165,14 @@ unfixable = ["RUF"] exit_code: 1 ----- stdout ----- -:3:1: RUF017 Avoid quadratic list summation + | + 1 | x = [1, 2, 3] + 2 | y = [4, 5, 6] + 3 | sum([x, y], []) + | ^^^^^^^^^^^^^^^ RUF017 + | + = help: Replace with `functools.reduce` + Found 1 error. ----- stderr ----- diff --git a/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap b/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap index fd4370ae1d191..1f67300804724 100644 --- a/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap +++ b/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap @@ -17,7 +17,7 @@ Settings path: "[BASEPATH]/pyproject.toml" cache_dir = "[BASEPATH]/.ruff_cache" fix = false fix_only = false -output_format = concise +output_format = full show_fixes = false unsafe_fixes = hint diff --git a/crates/ruff_linter/src/settings/types.rs b/crates/ruff_linter/src/settings/types.rs index 39ec68142680c..a5c2dae9c452e 100644 --- a/crates/ruff_linter/src/settings/types.rs +++ b/crates/ruff_linter/src/settings/types.rs @@ -1,3 +1,5 @@ +#![allow(deprecated)] + use std::fmt::{Display, Formatter}; use std::hash::{Hash, Hasher}; use std::ops::Deref; @@ -500,13 +502,19 @@ impl FromIterator for ExtensionMapping { } } -#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Debug, Hash)] +#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Debug, Hash, Default)] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[serde(rename_all = "kebab-case")] #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum OutputFormat { + // Remove the module level `#![allow(deprecated)` when removing the text variant. + // Adding the `#[deprecated]` attribute to text creates clippy warnings about + // using a deprecated item in the derived code and there seems to be no way to suppress the clippy error + // other than disabling the warning for the entire module and/or moving `OutputFormat` to another module. + #[deprecated(note = "Use `concise` or `full` instead")] Text, Concise, + #[default] Full, Json, JsonLines, @@ -540,16 +548,6 @@ impl Display for OutputFormat { } } -impl OutputFormat { - pub fn default(preview: bool) -> Self { - if preview { - Self::Full - } else { - Self::Concise - } - } -} - #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] #[serde(try_from = "String")] pub struct RequiredVersion(VersionSpecifiers); diff --git a/crates/ruff_workspace/src/configuration.rs b/crates/ruff_workspace/src/configuration.rs index 3e497188c34c2..3589d9199e193 100644 --- a/crates/ruff_workspace/src/configuration.rs +++ b/crates/ruff_workspace/src/configuration.rs @@ -220,9 +220,7 @@ impl Configuration { fix: self.fix.unwrap_or(false), fix_only: self.fix_only.unwrap_or(false), unsafe_fixes: self.unsafe_fixes.unwrap_or_default(), - output_format: self - .output_format - .unwrap_or_else(|| OutputFormat::default(global_preview.is_enabled())), + output_format: self.output_format.unwrap_or_default(), show_fixes: self.show_fixes.unwrap_or(false), file_resolver: FileResolverSettings { @@ -429,17 +427,16 @@ impl Configuration { return Err(anyhow!("The `tab-size` option has been renamed to `indent-width` to emphasize that it configures the indentation used by the formatter as well as the tab width. Please update {config_to_update} to use `indent-width = ` instead.")); } - let output_format = { - options - .output_format - .map(|format| match format { - OutputFormat::Text => { - warn_user_once!(r#"Setting `output_format` to "text" is deprecated. Use "full" or "concise" instead. "text" will be treated as "{}"."#, OutputFormat::default(options.preview.unwrap_or_default())); - OutputFormat::default(options.preview.unwrap_or_default()) - }, - other => other - }) - }; + #[allow(deprecated)] + if options.output_format == Some(OutputFormat::Text) { + let config_to_update = path.map_or_else( + || String::from("your `--config` CLI arguments"), + |path| format!("`{}`", fs::relativize_path(path)), + ); + return Err(anyhow!( + r#"The option `output_format=text` is no longer supported. Update {config_to_update} to use `output-format="concise"` or `output-format="full"` instead."# + )); + } Ok(Self { builtins: options.builtins, @@ -505,7 +502,7 @@ impl Configuration { fix: options.fix, fix_only: options.fix_only, unsafe_fixes: options.unsafe_fixes.map(UnsafeFixes::from), - output_format, + output_format: options.output_format, force_exclude: options.force_exclude, line_length: options.line_length, indent_width: options.indent_width, diff --git a/crates/ruff_workspace/src/settings.rs b/crates/ruff_workspace/src/settings.rs index 7631c427f0632..b10a84aaacdde 100644 --- a/crates/ruff_workspace/src/settings.rs +++ b/crates/ruff_workspace/src/settings.rs @@ -44,7 +44,7 @@ impl Default for Settings { cache_dir: cache_dir(project_root), fix: false, fix_only: false, - output_format: OutputFormat::default(false), + output_format: OutputFormat::default(), show_fixes: false, unsafe_fixes: UnsafeFixes::default(), linter: LinterSettings::new(project_root), diff --git a/ruff.schema.json b/ruff.schema.json index 6a8d7e580719d..2b57c1543ad14 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -2294,21 +2294,31 @@ "additionalProperties": false }, "OutputFormat": { - "type": "string", - "enum": [ - "text", - "concise", - "full", - "json", - "json-lines", - "junit", - "grouped", - "github", - "gitlab", - "pylint", - "rdjson", - "azure", - "sarif" + "oneOf": [ + { + "type": "string", + "enum": [ + "concise", + "full", + "json", + "json-lines", + "junit", + "grouped", + "github", + "gitlab", + "pylint", + "rdjson", + "azure", + "sarif" + ] + }, + { + "deprecated": true, + "type": "string", + "enum": [ + "text" + ] + } ] }, "ParametrizeNameType": {