Skip to content

Commit

Permalink
[pygrep_hooks] - add autofix for deprecated_log_warn (PGH002)
Browse files Browse the repository at this point in the history
  • Loading branch information
diceroll123 committed Jan 15, 2024
1 parent 6183b8e commit 3fa71c8
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 4 deletions.
20 changes: 20 additions & 0 deletions crates/ruff_linter/src/rules/pygrep_hooks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ mod tests {
use test_case::test_case;

use crate::registry::Rule;
use crate::settings::LinterSettings;
use crate::settings::types::PreviewMode;
use crate::test::test_path;
use crate::{assert_messages, settings};

Expand All @@ -29,4 +31,22 @@ mod tests {
assert_messages!(snapshot, diagnostics);
Ok(())
}

#[test_case(Rule::DeprecatedLogWarn, Path::new("PGH002_1.py"))]
fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> {
let snapshot = format!(
"preview__{}_{}",
rule_code.noqa_code(),
path.to_string_lossy()
);
let diagnostics = test_path(
Path::new("pygrep_hooks").join(path).as_path(),
&LinterSettings {
preview: PreviewMode::Enabled,
..LinterSettings::for_rule(rule_code)
},
)?;
assert_messages!(snapshot, diagnostics);
Ok(())
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use ast::ExprAttribute;
use ruff_python_ast::{self as ast, Expr, ExprCall};
use ruff_python_semantic::analyze::logging;

use ruff_diagnostics::{Diagnostic, Violation};
use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation};
use ruff_macros::{derive_message_formats, violation};
use ruff_python_stdlib::logging::LoggingLevel;
use ruff_text_size::Ranged;
Expand Down Expand Up @@ -38,10 +39,16 @@ use crate::checkers::ast::Checker;
pub struct DeprecatedLogWarn;

impl Violation for DeprecatedLogWarn {
const FIX_AVAILABILITY: FixAvailability = FixAvailability::Sometimes;

#[derive_message_formats]
fn message(&self) -> String {
format!("`warn` is deprecated in favor of `warning`")
}

fn fix_title(&self) -> Option<String> {
Some(format!("Replace with `warning`"))
}
}

/// PGH002
Expand Down Expand Up @@ -74,7 +81,18 @@ pub(crate) fn deprecated_log_warn(checker: &mut Checker, call: &ExprCall) {
_ => return,
}

checker
.diagnostics
.push(Diagnostic::new(DeprecatedLogWarn, call.func.range()));
let mut diagnostic = Diagnostic::new(DeprecatedLogWarn, call.func.range());

if checker.settings.preview.is_enabled() {
let Expr::Attribute(ExprAttribute { attr, .. }) = call.func.as_ref() else {
return;
};

diagnostic.set_fix(Fix::safe_edit(Edit::range_replacement(
"warning".to_string(),
attr.range(),
)));
}

checker.diagnostics.push(diagnostic);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ PGH002_1.py:4:1: PGH002 `warn` is deprecated in favor of `warning`
| ^^^^^^^^^^^^ PGH002
5 | warn("not ok")
|
= help: Replace with `warning`

PGH002_1.py:5:1: PGH002 `warn` is deprecated in favor of `warning`
|
Expand All @@ -18,12 +19,14 @@ PGH002_1.py:5:1: PGH002 `warn` is deprecated in favor of `warning`
6 |
7 | logger = logging.getLogger(__name__)
|
= help: Replace with `warning`

PGH002_1.py:8:1: PGH002 `warn` is deprecated in favor of `warning`
|
7 | logger = logging.getLogger(__name__)
8 | logger.warn("this is not ok")
| ^^^^^^^^^^^ PGH002
|
= help: Replace with `warning`


Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
source: crates/ruff_linter/src/rules/pygrep_hooks/mod.rs
---
PGH002_1.py:4:1: PGH002 [*] `warn` is deprecated in favor of `warning`
|
2 | from logging import warn
3 |
4 | logging.warn("this is not ok")
| ^^^^^^^^^^^^ PGH002
5 | warn("not ok")
|
= help: Replace with `warning`

Safe fix
1 1 | import logging
2 2 | from logging import warn
3 3 |
4 |-logging.warn("this is not ok")
4 |+logging.warning("this is not ok")
5 5 | warn("not ok")
6 6 |
7 7 | logger = logging.getLogger(__name__)

PGH002_1.py:8:1: PGH002 [*] `warn` is deprecated in favor of `warning`
|
7 | logger = logging.getLogger(__name__)
8 | logger.warn("this is not ok")
| ^^^^^^^^^^^ PGH002
|
= help: Replace with `warning`

Safe fix
5 5 | warn("not ok")
6 6 |
7 7 | logger = logging.getLogger(__name__)
8 |-logger.warn("this is not ok")
8 |+logger.warning("this is not ok")


0 comments on commit 3fa71c8

Please sign in to comment.