diff --git a/crates/ruff/resources/test/fixtures/flake8_annotations/annotation_presence.py b/crates/ruff/resources/test/fixtures/flake8_annotations/annotation_presence.py index 200e1e24be..a13d214292 100644 --- a/crates/ruff/resources/test/fixtures/flake8_annotations/annotation_presence.py +++ b/crates/ruff/resources/test/fixtures/flake8_annotations/annotation_presence.py @@ -103,3 +103,7 @@ class Foo: @classmethod def foo(cls, a: int, b: int) -> int: pass + + # ANN101 + def foo(self, /, a: int, b: int) -> int: + pass diff --git a/crates/ruff/src/rules/flake8_annotations/rules.rs b/crates/ruff/src/rules/flake8_annotations/rules.rs index 0880727ae1..5fd5318fcf 100644 --- a/crates/ruff/src/rules/flake8_annotations/rules.rs +++ b/crates/ruff/src/rules/flake8_annotations/rules.rs @@ -475,9 +475,9 @@ pub fn definition( // ANN001, ANN401 for arg in args - .args + .posonlyargs .iter() - .chain(args.posonlyargs.iter()) + .chain(args.args.iter()) .chain(args.kwonlyargs.iter()) .skip( // If this is a non-static method, skip `cls` or `self`. @@ -581,7 +581,7 @@ pub fn definition( // ANN101, ANN102 if is_method && !visibility::is_staticmethod(checker, cast::decorator_list(stmt)) { - if let Some(arg) = args.args.first() { + if let Some(arg) = args.posonlyargs.first().or_else(|| args.args.first()) { if arg.node.annotation.is_none() { if visibility::is_classmethod(checker, cast::decorator_list(stmt)) { if checker.settings.rules.enabled(&Rule::MissingTypeCls) { diff --git a/crates/ruff/src/rules/flake8_annotations/snapshots/ruff__rules__flake8_annotations__tests__defaults.snap b/crates/ruff/src/rules/flake8_annotations/snapshots/ruff__rules__flake8_annotations__tests__defaults.snap index d53e11d647..3e5c6451bc 100644 --- a/crates/ruff/src/rules/flake8_annotations/snapshots/ruff__rules__flake8_annotations__tests__defaults.snap +++ b/crates/ruff/src/rules/flake8_annotations/snapshots/ruff__rules__flake8_annotations__tests__defaults.snap @@ -244,4 +244,15 @@ expression: diagnostics column: 15 fix: ~ parent: ~ +- kind: + MissingTypeSelf: + name: self + location: + row: 108 + column: 12 + end_location: + row: 108 + column: 16 + fix: ~ + parent: ~ diff --git a/crates/ruff_python_formatter/src/trivia.rs b/crates/ruff_python_formatter/src/trivia.rs index 2b81eba3ea..5499d70ad0 100644 --- a/crates/ruff_python_formatter/src/trivia.rs +++ b/crates/ruff_python_formatter/src/trivia.rs @@ -225,7 +225,6 @@ fn sorted_child_nodes_inner<'a>(node: &Node<'a>, result: &mut Vec>) { for decorator in decorator_list { result.push(Node::Expr(decorator)); } - // TODO(charlie): Retain order. for arg in &args.posonlyargs { if let Some(expr) = &arg.node.annotation { result.push(Node::Expr(expr));