mirror of https://github.com/astral-sh/ruff
Respect `lint.exclude` in ruff check `--add-noqa` (#13427)
## Summary Closes https://github.com/astral-sh/ruff/issues/13423.
This commit is contained in:
parent
910fac781d
commit
2823487bf8
|
|
@ -10,7 +10,9 @@ use ruff_linter::linter::add_noqa_to_path;
|
||||||
use ruff_linter::source_kind::SourceKind;
|
use ruff_linter::source_kind::SourceKind;
|
||||||
use ruff_linter::warn_user_once;
|
use ruff_linter::warn_user_once;
|
||||||
use ruff_python_ast::{PySourceType, SourceType};
|
use ruff_python_ast::{PySourceType, SourceType};
|
||||||
use ruff_workspace::resolver::{python_files_in_path, PyprojectConfig, ResolvedFile};
|
use ruff_workspace::resolver::{
|
||||||
|
match_exclusion, python_files_in_path, PyprojectConfig, ResolvedFile,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::args::ConfigArguments;
|
use crate::args::ConfigArguments;
|
||||||
|
|
||||||
|
|
@ -57,6 +59,15 @@ pub(crate) fn add_noqa(
|
||||||
.and_then(|parent| package_roots.get(parent))
|
.and_then(|parent| package_roots.get(parent))
|
||||||
.and_then(|package| *package);
|
.and_then(|package| *package);
|
||||||
let settings = resolver.resolve(path);
|
let settings = resolver.resolve(path);
|
||||||
|
if (settings.file_resolver.force_exclude || !resolved_file.is_root())
|
||||||
|
&& match_exclusion(
|
||||||
|
resolved_file.path(),
|
||||||
|
resolved_file.file_name(),
|
||||||
|
&settings.linter.exclude,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let source_kind = match SourceKind::from_path(path, source_type) {
|
let source_kind = match SourceKind::from_path(path, source_type) {
|
||||||
Ok(Some(source_kind)) => source_kind,
|
Ok(Some(source_kind)) => source_kind,
|
||||||
Ok(None) => return None,
|
Ok(None) => return None,
|
||||||
|
|
|
||||||
|
|
@ -1619,6 +1619,58 @@ print(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_noqa_exclude() -> Result<()> {
|
||||||
|
let tempdir = TempDir::new()?;
|
||||||
|
let ruff_toml = tempdir.path().join("ruff.toml");
|
||||||
|
fs::write(
|
||||||
|
&ruff_toml,
|
||||||
|
r#"
|
||||||
|
[lint]
|
||||||
|
exclude = ["excluded.py"]
|
||||||
|
select = ["RUF015"]
|
||||||
|
"#,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let test_path = tempdir.path().join("noqa.py");
|
||||||
|
|
||||||
|
fs::write(
|
||||||
|
&test_path,
|
||||||
|
r#"
|
||||||
|
def first_square():
|
||||||
|
return [x * x for x in range(20)][0]
|
||||||
|
"#,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let exclude_path = tempdir.path().join("excluded.py");
|
||||||
|
|
||||||
|
fs::write(
|
||||||
|
&exclude_path,
|
||||||
|
r#"
|
||||||
|
def first_square():
|
||||||
|
return [x * x for x in range(20)][0]
|
||||||
|
"#,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
insta::with_settings!({
|
||||||
|
filters => vec![(tempdir_filter(&tempdir).as_str(), "[TMP]/")]
|
||||||
|
}, {
|
||||||
|
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
|
||||||
|
.current_dir(tempdir.path())
|
||||||
|
.args(STDIN_BASE_OPTIONS)
|
||||||
|
.args(["--add-noqa"]), @r###"
|
||||||
|
success: true
|
||||||
|
exit_code: 0
|
||||||
|
----- stdout -----
|
||||||
|
|
||||||
|
----- stderr -----
|
||||||
|
Added 1 noqa directive.
|
||||||
|
"###);
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Infer `3.11` from `requires-python` in `pyproject.toml`.
|
/// Infer `3.11` from `requires-python` in `pyproject.toml`.
|
||||||
#[test]
|
#[test]
|
||||||
fn requires_python() -> Result<()> {
|
fn requires_python() -> Result<()> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue