Skip to content

Commit

Permalink
Include inline instantiations when detecting loggers (#11154)
Browse files Browse the repository at this point in the history
## Summary

Closes #11031.
  • Loading branch information
charliermarsh authored Apr 26, 2024
1 parent 22d4f11 commit b15e9e6
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
_LOGGER = logging.getLogger()
_LOGGER.info(f"{__name__}")

logging.getLogger().info(f"{name}")

from logging import info

info(f"{name}")
info(f"{__name__}")
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,31 @@ G004.py:8:14: G004 Logging statement uses f-string
8 | _LOGGER.info(f"{__name__}")
| ^^^^^^^^^^^^^ G004
9 |
10 | from logging import info
10 | logging.getLogger().info(f"{name}")
|

G004.py:11:6: G004 Logging statement uses f-string
G004.py:10:26: G004 Logging statement uses f-string
|
10 | from logging import info
11 | info(f"{name}")
8 | _LOGGER.info(f"{__name__}")
9 |
10 | logging.getLogger().info(f"{name}")
| ^^^^^^^^^ G004
11 |
12 | from logging import info
|

G004.py:14:6: G004 Logging statement uses f-string
|
12 | from logging import info
13 |
14 | info(f"{name}")
| ^^^^^^^^^ G004
12 | info(f"{__name__}")
15 | info(f"{__name__}")
|

G004.py:12:6: G004 Logging statement uses f-string
G004.py:15:6: G004 Logging statement uses f-string
|
10 | from logging import info
11 | info(f"{name}")
12 | info(f"{__name__}")
14 | info(f"{name}")
15 | info(f"{__name__}")
| ^^^^^^^^^^^^^ G004
|


12 changes: 12 additions & 0 deletions crates/ruff_python_semantic/src/analyze/logging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ pub fn is_logger_candidate(
return false;
};

// If the attribute is an inline instantiation, match against known constructors.
if let Expr::Call(ast::ExprCall { func, .. }) = &**value {
return semantic
.resolve_qualified_name(func)
.is_some_and(|qualified_name| {
matches!(
qualified_name.segments(),
["logging", "getLogger" | "Logger"]
)
});
}

// If the symbol was imported from another module, ensure that it's either a user-specified
// logger object, the `logging` module itself, or `flask.current_app.logger`.
if let Some(qualified_name) = semantic.resolve_qualified_name(value) {
Expand Down

0 comments on commit b15e9e6

Please sign in to comment.