mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:25:17 +00:00
Accept a PEP 440 version specifier for required-version (#10216)
## Summary Allows `required-version` to be set with a version specifier, like `>=0.3.1`. If a single version is provided, falls back to assuming `==0.3.1`, for backwards compatibility. Closes https://github.com/astral-sh/ruff/issues/10192.
This commit is contained in:
parent
db25a563f7
commit
84bf333031
8 changed files with 217 additions and 39 deletions
|
@ -6,12 +6,12 @@ use std::borrow::Cow;
|
|||
use std::env::VarError;
|
||||
use std::num::{NonZeroU16, NonZeroU8};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::str::FromStr;
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
use glob::{glob, GlobError, Paths, PatternError};
|
||||
use itertools::Itertools;
|
||||
use regex::Regex;
|
||||
use ruff_linter::settings::fix_safety_table::FixSafetyTable;
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use shellexpand;
|
||||
use shellexpand::LookupError;
|
||||
|
@ -24,10 +24,11 @@ use ruff_linter::registry::RuleNamespace;
|
|||
use ruff_linter::registry::{Rule, RuleSet, INCOMPATIBLE_CODES};
|
||||
use ruff_linter::rule_selector::{PreviewOptions, Specificity};
|
||||
use ruff_linter::rules::pycodestyle;
|
||||
use ruff_linter::settings::fix_safety_table::FixSafetyTable;
|
||||
use ruff_linter::settings::rule_table::RuleTable;
|
||||
use ruff_linter::settings::types::{
|
||||
ExtensionMapping, FilePattern, FilePatternSet, PerFileIgnore, PerFileIgnores, PreviewMode,
|
||||
PythonVersion, SerializationFormat, UnsafeFixes, Version,
|
||||
PythonVersion, RequiredVersion, SerializationFormat, UnsafeFixes,
|
||||
};
|
||||
use ruff_linter::settings::{LinterSettings, DEFAULT_SELECTORS, DUMMY_VARIABLE_RGX, TASK_TAGS};
|
||||
use ruff_linter::{
|
||||
|
@ -116,7 +117,7 @@ pub struct Configuration {
|
|||
pub unsafe_fixes: Option<UnsafeFixes>,
|
||||
pub output_format: Option<SerializationFormat>,
|
||||
pub preview: Option<PreviewMode>,
|
||||
pub required_version: Option<Version>,
|
||||
pub required_version: Option<RequiredVersion>,
|
||||
pub extension: Option<ExtensionMapping>,
|
||||
pub show_fixes: Option<bool>,
|
||||
|
||||
|
@ -145,10 +146,12 @@ pub struct Configuration {
|
|||
impl Configuration {
|
||||
pub fn into_settings(self, project_root: &Path) -> Result<Settings> {
|
||||
if let Some(required_version) = &self.required_version {
|
||||
if &**required_version != RUFF_PKG_VERSION {
|
||||
let ruff_pkg_version = pep440_rs::Version::from_str(RUFF_PKG_VERSION)
|
||||
.expect("RUFF_PKG_VERSION is not a valid PEP 440 version specifier");
|
||||
if !required_version.contains(&ruff_pkg_version) {
|
||||
return Err(anyhow!(
|
||||
"Required version `{}` does not match the running version `{}`",
|
||||
&**required_version,
|
||||
required_version,
|
||||
RUFF_PKG_VERSION
|
||||
));
|
||||
}
|
||||
|
@ -1467,15 +1470,18 @@ fn warn_about_deprecated_top_level_lint_options(
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::configuration::{LintConfiguration, RuleSelection};
|
||||
use crate::options::PydocstyleOptions;
|
||||
use std::str::FromStr;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use ruff_linter::codes::{Flake8Copyright, Pycodestyle, Refurb};
|
||||
use ruff_linter::registry::{Linter, Rule, RuleSet};
|
||||
use ruff_linter::rule_selector::PreviewOptions;
|
||||
use ruff_linter::settings::types::PreviewMode;
|
||||
use ruff_linter::RuleSelector;
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::configuration::{LintConfiguration, RuleSelection};
|
||||
use crate::options::PydocstyleOptions;
|
||||
|
||||
const PREVIEW_RULES: &[Rule] = &[
|
||||
Rule::IsinstanceTypeNone,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue