mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-17 23:59:46 +00:00
Show settings path in --show-settings
output (#4199)
This commit is contained in:
parent
37aae666c7
commit
59d40f9f81
9 changed files with 152 additions and 102 deletions
|
@ -7,7 +7,7 @@ use log::{debug, error};
|
|||
use rayon::prelude::*;
|
||||
|
||||
use ruff::linter::add_noqa_to_path;
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::PyprojectConfig;
|
||||
use ruff::{packaging, resolver, warn_user_once};
|
||||
|
||||
use crate::args::Overrides;
|
||||
|
@ -15,12 +15,12 @@ use crate::args::Overrides;
|
|||
/// Add `noqa` directives to a collection of files.
|
||||
pub fn add_noqa(
|
||||
files: &[PathBuf],
|
||||
pyproject_strategy: &PyprojectDiscovery,
|
||||
pyproject_config: &PyprojectConfig,
|
||||
overrides: &Overrides,
|
||||
) -> Result<usize> {
|
||||
// Collect all the files to check.
|
||||
let start = Instant::now();
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_strategy, overrides)?;
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_config, overrides)?;
|
||||
let duration = start.elapsed();
|
||||
debug!("Identified files to lint in: {:?}", duration);
|
||||
|
||||
|
@ -37,7 +37,7 @@ pub fn add_noqa(
|
|||
.map(ignore::DirEntry::path)
|
||||
.collect::<Vec<_>>(),
|
||||
&resolver,
|
||||
pyproject_strategy,
|
||||
pyproject_config,
|
||||
);
|
||||
|
||||
let start = Instant::now();
|
||||
|
@ -50,7 +50,7 @@ pub fn add_noqa(
|
|||
.parent()
|
||||
.and_then(|parent| package_roots.get(parent))
|
||||
.and_then(|package| *package);
|
||||
let settings = resolver.resolve(path, pyproject_strategy);
|
||||
let settings = resolver.resolve(path, pyproject_config);
|
||||
match add_noqa_to_path(path, package, settings) {
|
||||
Ok(count) => Some(count),
|
||||
Err(e) => {
|
||||
|
|
|
@ -12,7 +12,7 @@ use ruff_text_size::{TextRange, TextSize};
|
|||
|
||||
use ruff::message::Message;
|
||||
use ruff::registry::Rule;
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::{PyprojectConfig, PyprojectDiscoveryStrategy};
|
||||
use ruff::settings::{flags, AllSettings};
|
||||
use ruff::{fs, packaging, resolver, warn_user_once, IOError};
|
||||
use ruff_diagnostics::Diagnostic;
|
||||
|
@ -27,7 +27,7 @@ use crate::panic::catch_unwind;
|
|||
/// Run the linter over a collection of files.
|
||||
pub fn run(
|
||||
files: &[PathBuf],
|
||||
pyproject_strategy: &PyprojectDiscovery,
|
||||
pyproject_config: &PyprojectConfig,
|
||||
overrides: &Overrides,
|
||||
cache: flags::Cache,
|
||||
noqa: flags::Noqa,
|
||||
|
@ -35,7 +35,7 @@ pub fn run(
|
|||
) -> Result<Diagnostics> {
|
||||
// Collect all the Python files to check.
|
||||
let start = Instant::now();
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_strategy, overrides)?;
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_config, overrides)?;
|
||||
let duration = start.elapsed();
|
||||
debug!("Identified files to lint in: {:?}", duration);
|
||||
|
||||
|
@ -52,12 +52,12 @@ pub fn run(
|
|||
}
|
||||
}
|
||||
|
||||
match &pyproject_strategy {
|
||||
PyprojectDiscovery::Fixed(settings) => {
|
||||
init_cache(&settings.cli.cache_dir);
|
||||
match pyproject_config.strategy {
|
||||
PyprojectDiscoveryStrategy::Fixed => {
|
||||
init_cache(&pyproject_config.settings.cli.cache_dir);
|
||||
}
|
||||
PyprojectDiscovery::Hierarchical(default) => {
|
||||
for settings in std::iter::once(default).chain(resolver.iter()) {
|
||||
PyprojectDiscoveryStrategy::Hierarchical => {
|
||||
for settings in std::iter::once(&pyproject_config.settings).chain(resolver.iter()) {
|
||||
init_cache(&settings.cli.cache_dir);
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ pub fn run(
|
|||
.map(ignore::DirEntry::path)
|
||||
.collect::<Vec<_>>(),
|
||||
&resolver,
|
||||
pyproject_strategy,
|
||||
pyproject_config,
|
||||
);
|
||||
|
||||
let start = Instant::now();
|
||||
|
@ -86,7 +86,7 @@ pub fn run(
|
|||
.parent()
|
||||
.and_then(|parent| package_roots.get(parent))
|
||||
.and_then(|package| *package);
|
||||
let settings = resolver.resolve_all(path, pyproject_strategy);
|
||||
let settings = resolver.resolve_all(path, pyproject_config);
|
||||
|
||||
lint_path(path, package, settings, cache, noqa, autofix).map_err(|e| {
|
||||
(Some(path.to_owned()), {
|
||||
|
@ -116,7 +116,7 @@ pub fn run(
|
|||
fs::relativize_path(path).bold(),
|
||||
":".bold()
|
||||
);
|
||||
let settings = resolver.resolve(path, pyproject_strategy);
|
||||
let settings = resolver.resolve(path, pyproject_config);
|
||||
if settings.rules.enabled(Rule::IOError) {
|
||||
let file =
|
||||
SourceFileBuilder::new(path.to_string_lossy().as_ref(), "").finish();
|
||||
|
@ -196,7 +196,7 @@ mod test {
|
|||
use path_absolutize::Absolutize;
|
||||
|
||||
use ruff::logging::LogLevel;
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::{PyprojectConfig, PyprojectDiscoveryStrategy};
|
||||
use ruff::settings::configuration::{Configuration, RuleSelection};
|
||||
use ruff::settings::flags::FixMode;
|
||||
use ruff::settings::flags::{Cache, Noqa};
|
||||
|
@ -238,7 +238,11 @@ mod test {
|
|||
|
||||
let diagnostics = run(
|
||||
&[root_path.join("valid.ipynb")],
|
||||
&PyprojectDiscovery::Fixed(AllSettings::from_configuration(configuration, &root_path)?),
|
||||
&PyprojectConfig::new(
|
||||
PyprojectDiscoveryStrategy::Fixed,
|
||||
AllSettings::from_configuration(configuration, &root_path)?,
|
||||
None,
|
||||
),
|
||||
&overrides,
|
||||
Cache::Disabled,
|
||||
Noqa::Enabled,
|
||||
|
|
|
@ -3,7 +3,7 @@ use std::path::Path;
|
|||
|
||||
use anyhow::Result;
|
||||
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::PyprojectConfig;
|
||||
use ruff::settings::flags;
|
||||
use ruff::{packaging, resolver};
|
||||
|
||||
|
@ -20,22 +20,28 @@ fn read_from_stdin() -> Result<String> {
|
|||
/// Run the linter over a single file, read from `stdin`.
|
||||
pub fn run_stdin(
|
||||
filename: Option<&Path>,
|
||||
pyproject_strategy: &PyprojectDiscovery,
|
||||
pyproject_config: &PyprojectConfig,
|
||||
overrides: &Overrides,
|
||||
noqa: flags::Noqa,
|
||||
autofix: flags::FixMode,
|
||||
) -> Result<Diagnostics> {
|
||||
if let Some(filename) = filename {
|
||||
if !resolver::python_file_at_path(filename, pyproject_strategy, overrides)? {
|
||||
if !resolver::python_file_at_path(filename, pyproject_config, overrides)? {
|
||||
return Ok(Diagnostics::default());
|
||||
}
|
||||
}
|
||||
let settings = pyproject_strategy.top_level_settings();
|
||||
let package_root = filename
|
||||
.and_then(Path::parent)
|
||||
.and_then(|path| packaging::detect_package_root(path, &settings.lib.namespace_packages));
|
||||
let package_root = filename.and_then(Path::parent).and_then(|path| {
|
||||
packaging::detect_package_root(path, &pyproject_config.settings.lib.namespace_packages)
|
||||
});
|
||||
let stdin = read_from_stdin()?;
|
||||
let mut diagnostics = lint_stdin(filename, package_root, &stdin, &settings.lib, noqa, autofix)?;
|
||||
let mut diagnostics = lint_stdin(
|
||||
filename,
|
||||
package_root,
|
||||
&stdin,
|
||||
&pyproject_config.settings.lib,
|
||||
noqa,
|
||||
autofix,
|
||||
)?;
|
||||
diagnostics.messages.sort_unstable();
|
||||
Ok(diagnostics)
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ use std::path::PathBuf;
|
|||
use anyhow::Result;
|
||||
use itertools::Itertools;
|
||||
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::PyprojectConfig;
|
||||
use ruff::{resolver, warn_user_once};
|
||||
|
||||
use crate::args::Overrides;
|
||||
|
@ -12,11 +12,11 @@ use crate::args::Overrides;
|
|||
/// Show the list of files to be checked based on current settings.
|
||||
pub fn show_files(
|
||||
files: &[PathBuf],
|
||||
pyproject_strategy: &PyprojectDiscovery,
|
||||
pyproject_config: &PyprojectConfig,
|
||||
overrides: &Overrides,
|
||||
) -> Result<()> {
|
||||
// Collect all files in the hierarchy.
|
||||
let (paths, _resolver) = resolver::python_files_in_path(files, pyproject_strategy, overrides)?;
|
||||
let (paths, _resolver) = resolver::python_files_in_path(files, pyproject_config, overrides)?;
|
||||
|
||||
if paths.is_empty() {
|
||||
warn_user_once!("No Python files found under the given path(s)");
|
||||
|
|
|
@ -5,18 +5,18 @@ use anyhow::{bail, Result};
|
|||
use itertools::Itertools;
|
||||
|
||||
use ruff::resolver;
|
||||
use ruff::resolver::PyprojectDiscovery;
|
||||
use ruff::resolver::PyprojectConfig;
|
||||
|
||||
use crate::args::Overrides;
|
||||
|
||||
/// Print the user-facing configuration settings.
|
||||
pub fn show_settings(
|
||||
files: &[PathBuf],
|
||||
pyproject_strategy: &PyprojectDiscovery,
|
||||
pyproject_config: &PyprojectConfig,
|
||||
overrides: &Overrides,
|
||||
) -> Result<()> {
|
||||
// Collect all files in the hierarchy.
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_strategy, overrides)?;
|
||||
let (paths, resolver) = resolver::python_files_in_path(files, pyproject_config, overrides)?;
|
||||
|
||||
// Print the list of files.
|
||||
let Some(entry) = paths
|
||||
|
@ -26,10 +26,13 @@ pub fn show_settings(
|
|||
bail!("No files found under the given path");
|
||||
};
|
||||
let path = entry.path();
|
||||
let settings = resolver.resolve(path, pyproject_strategy);
|
||||
let settings = resolver.resolve(path, pyproject_config);
|
||||
|
||||
let mut stdout = BufWriter::new(io::stdout().lock());
|
||||
writeln!(stdout, "Resolved settings for: {path:?}")?;
|
||||
if let Some(settings_path) = pyproject_config.path.as_ref() {
|
||||
writeln!(stdout, "Settings path: {settings_path:?}")?;
|
||||
}
|
||||
writeln!(stdout, "{settings:#?}")?;
|
||||
|
||||
Ok(())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue