From 3c8d9d45fbf9acbe3f655a08c53ef4695bd4b045 Mon Sep 17 00:00:00 2001 From: konsti Date: Mon, 6 Nov 2023 15:35:32 +0100 Subject: [PATCH] Recommend `project.requires-python` over `target-version` (#8513) **Summary** Recommend the standardized, shared `project.requires-python` over ruff's custom `target-version`. See https://mastodon.social/deck/@davidism@mas.to/111347072204727710 **Test Plan** Docs only change --- crates/ruff_workspace/src/options.rs | 16 ++++++++++++---- ruff.schema.json | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/crates/ruff_workspace/src/options.rs b/crates/ruff_workspace/src/options.rs index 5884bfa0a1..031d050311 100644 --- a/crates/ruff_workspace/src/options.rs +++ b/crates/ruff_workspace/src/options.rs @@ -298,10 +298,18 @@ pub struct Options { /// For example, to represent supporting Python >=3.10 or ==3.10 /// specify `target-version = "py310"`. /// - /// If omitted, and Ruff is configured via a `pyproject.toml` file, the - /// target version will be inferred from its `project.requires-python` - /// field (e.g., `requires-python = ">=3.8"`). If Ruff is configured via - /// `ruff.toml` or `.ruff.toml`, no such inference will be performed. + /// If you're already using a `pyproject.toml` file, we recommend + /// `project.requires-python` instead, as it's based on Python packaging + /// standards, and will be respected by other tools. For example, Ruff + /// treats the following as identical to `target-version = "py38"`: + /// + /// ```toml + /// [project] + /// requires-python = ">=3.8" + /// ``` + /// + /// If both are specified, `target-version` takes precedence over + /// `requires-python`. #[option( default = r#""py38""#, value_type = r#""py37" | "py38" | "py39" | "py310" | "py311" | "py312""#, diff --git a/ruff.schema.json b/ruff.schema.json index c26a048267..c77e480c46 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -649,7 +649,7 @@ ] }, "target-version": { - "description": "The minimum Python version to target, e.g., when considering automatic code upgrades, like rewriting type annotations. Ruff will not propose changes using features that are not available in the given version.\n\nFor example, to represent supporting Python >=3.10 or ==3.10 specify `target-version = \"py310\"`.\n\nIf omitted, and Ruff is configured via a `pyproject.toml` file, the target version will be inferred from its `project.requires-python` field (e.g., `requires-python = \">=3.8\"`). If Ruff is configured via `ruff.toml` or `.ruff.toml`, no such inference will be performed.", + "description": "The minimum Python version to target, e.g., when considering automatic code upgrades, like rewriting type annotations. Ruff will not propose changes using features that are not available in the given version.\n\nFor example, to represent supporting Python >=3.10 or ==3.10 specify `target-version = \"py310\"`.\n\nIf you're already using a `pyproject.toml` file, we recommend `project.requires-python` instead, as it's based on Python packaging standards, and will be respected by other tools. For example, Ruff treats the following as identical to `target-version = \"py38\"`:\n\n```toml [project] requires-python = \">=3.8\" ```\n\nIf both are specified, `target-version` takes precedence over `requires-python`.", "anyOf": [ { "$ref": "#/definitions/PythonVersion"