Skip to content

Commit ae1c6c7

Browse files
Fix BaseChecker.add_message unnecessary overrides (#10899)
* Remove redundant `line` argument in `unnecessary-lambda` add_message call Lambdas never have `.position` set, so `_add_one_message` already extracts `node.fromlineno`, passing it explicitly was a no-op. * Use `assigned` node directly for `invalid-all-format` instead of module node Pass the `__all__` value node to `add_message` instead of the module node with manual line/col overrides. This also provides end_lineno/end_col_offset for a more precise diagnostic span. Existing callers that combined both location and nodes have been fixed: - Redundant overrides removed (consider-using-f-string, too-many-try-statements, consider-using-augmented-assign, consider-refactoring-into-while-condition) except useless-else-on-loop. Co-authored-by: Claude Opus 4.6 <[email protected]>
1 parent b5e9607 commit ae1c6c7

8 files changed

Lines changed: 9 additions & 25 deletions

File tree

pylint/checkers/base/basic_checker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ def visit_lambda(self, node: nodes.Lambda) -> None:
574574
if name.lookup(name.name)[0] is node:
575575
return
576576

577-
self.add_message("unnecessary-lambda", line=node.fromlineno, node=node)
577+
self.add_message("unnecessary-lambda", node=node)
578578

579579
@utils.only_required_for_messages("dangerous-default-value")
580580
def visit_functiondef(self, node: nodes.FunctionDef) -> None:

pylint/checkers/base/basic_error_checker.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,9 +544,9 @@ def _check_else_on_loop(self, node: nodes.For | nodes.While) -> None:
544544
self.add_message(
545545
"useless-else-on-loop",
546546
node=node,
547-
# This is not optimal, but the line previous
548-
# to the first statement in the else clause
549-
# will usually be the one that contains the else:.
547+
# The else keyword has no AST node; the line before
548+
# the first statement in the else clause is the best
549+
# approximation of its location.
550550
line=node.orelse[0].lineno - 1,
551551
)
552552

pylint/checkers/refactoring/recommendation_checker.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,7 @@ def _detect_replacable_format_call(self, node: nodes.Const) -> None:
415415
return
416416

417417
# If all tests pass, then raise message
418-
self.add_message(
419-
"consider-using-f-string",
420-
node=node,
421-
line=node.lineno,
422-
col_offset=node.col_offset,
423-
)
418+
self.add_message("consider-using-f-string", node=node)
424419

425420
elif isinstance(node.parent, nodes.BinOp) and node.parent.op == "%":
426421
# Backslashes can't be in f-string expressions
@@ -444,9 +439,4 @@ def _detect_replacable_format_call(self, node: nodes.Const) -> None:
444439
return
445440

446441
# If all tests pass, then raise message
447-
self.add_message(
448-
"consider-using-f-string",
449-
node=node,
450-
line=node.lineno,
451-
col_offset=node.col_offset,
452-
)
442+
self.add_message("consider-using-f-string", node=node)

pylint/checkers/variables.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,8 +3223,7 @@ def _check_all(
32233223
if isinstance(assigned, util.UninferableBase):
32243224
return
32253225
if assigned.pytype() not in {"builtins.list", "builtins.tuple"}:
3226-
line, col = assigned.tolineno, assigned.col_offset
3227-
self.add_message("invalid-all-format", line=line, col_offset=col, node=node)
3226+
self.add_message("invalid-all-format", node=assigned)
32283227
return
32293228
for elt in getattr(assigned, "elts", ()):
32303229
try:

pylint/extensions/broad_try_clause.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ def visit_try(self, node: nodes.Try) -> None:
6464
f"try clause contains {try_clause_statements} statements, expected at"
6565
f" most {self.linter.config.max_try_statements}"
6666
)
67-
self.add_message(
68-
"too-many-try-statements", node.lineno, node=node, args=msg
69-
)
67+
self.add_message("too-many-try-statements", node=node, args=msg)
7068

7169

7270
def register(linter: PyLinter) -> None:

pylint/extensions/code_style.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,6 @@ def visit_assign(self, node: nodes.Assign) -> None:
351351
"consider-using-augmented-assign",
352352
args=f"{op}=",
353353
node=node,
354-
line=node.lineno,
355-
col_offset=node.col_offset,
356354
confidence=INFERENCE,
357355
)
358356

pylint/extensions/consider_refactoring_into_while_condition.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ def _check_breaking_after_while_true(self, node: nodes.While) -> None:
8383
self.add_message(
8484
"consider-refactoring-into-while-condition",
8585
node=node,
86-
line=node.lineno,
8786
args=(msg, node.test.as_string()),
8887
confidence=HIGH,
8988
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
invalid-all-format:5:11:None:None::Invalid format for __all__, must be tuple or list:UNDEFINED
1+
invalid-all-format:5:11:5:18::Invalid format for __all__, must be tuple or list:UNDEFINED
22
superfluous-parens:5:0:None:None::Unnecessary parens after '=' keyword:UNDEFINED

0 commit comments

Comments
 (0)