Use correct start location for class/function clause header (#7802)

## Summary

This PR fixes the bug where the formatter would panic if a class/function with
decorators had a suppression comment.

The fix is to use to correct start location to find the `async`/`def`/`class`
keyword when decorators are present which is the end of the last
decorator.

## Test Plan

Add test cases for the fix and update the snapshots.
This commit is contained in:
Dhruv Manilawala 2023-10-04 13:25:01 +05:30 committed by GitHub
parent 7b4fb4fb5d
commit a1509dfc7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 2 deletions

View file

@ -23,6 +23,19 @@ class Test:
def test():
pass
# Regression test for https://github.com/astral-sh/ruff/issues/7735
@decorator1
@decorator2
class Foo: # fmt: skip
pass
# Regression test for https://github.com/astral-sh/ruff/issues/7735
@decorator1
@decorator2
def foo(): # fmt: skip
pass
```
## Output
@ -43,6 +56,20 @@ class Test:
# leading class comment
def test():
pass
# Regression test for https://github.com/astral-sh/ruff/issues/7735
@decorator1
@decorator2
class Foo: # fmt: skip
pass
# Regression test for https://github.com/astral-sh/ruff/issues/7735
@decorator1
@decorator2
def foo(): # fmt: skip
pass
```