Skip to content

Commit 64084f8

Browse files
Avoid false positive for undefined variables in FAST001 (#23224)
Closes #20945.
1 parent 0115627 commit 64084f8

3 files changed

Lines changed: 25 additions & 15 deletions

File tree

crates/ruff_linter/resources/test/fixtures/fastapi/FAST001.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ async def create_item(item: Item) -> Dict[str, str]:
102102
return item
103103

104104

105+
@app.post("/items/", response_model=Foo)
106+
async def create_item(item: Item) -> Foo:
107+
return item
108+
109+
105110
app = None
106111

107112

crates/ruff_linter/src/rules/fastapi/rules/fastapi_redundant_response_model.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,13 @@ fn is_identical_types(
127127
if let (Expr::Name(response_mode_name_expr), Expr::Name(return_value_name_expr)) =
128128
(response_model_arg, return_value)
129129
{
130-
return semantic.resolve_name(response_mode_name_expr)
131-
== semantic.resolve_name(return_value_name_expr);
130+
return semantic
131+
.resolve_name(response_mode_name_expr)
132+
.is_some_and(|left| {
133+
semantic
134+
.resolve_name(return_value_name_expr)
135+
.is_some_and(|right| left == right)
136+
});
132137
}
133138
if let (Expr::Subscript(response_mode_subscript), Expr::Subscript(return_value_subscript)) =
134139
(response_model_arg, return_value)

crates/ruff_linter/src/rules/fastapi/snapshots/ruff_linter__rules__fastapi__tests__deferred_annotations_diff_fast-api-redundant-response-model_FAST001.py.snap

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -192,22 +192,22 @@ note: This is an unsafe fix and may change runtime behavior
192192

193193

194194
FAST001 [*] FastAPI route with redundant `response_model` argument
195-
--> FAST001.py:118:23
195+
--> FAST001.py:123:23
196196
|
197-
116 | def setup_app(app_arg: FastAPI, non_app: str) -> None:
198-
117 | # Error
199-
118 | @app_arg.get("/", response_model=str)
197+
121 | def setup_app(app_arg: FastAPI, non_app: str) -> None:
198+
122 | # Error
199+
123 | @app_arg.get("/", response_model=str)
200200
| ^^^^^^^^^^^^^^^^^^
201-
119 | async def get_root() -> str:
202-
120 | return "Hello World!"
201+
124 | async def get_root() -> str:
202+
125 | return "Hello World!"
203203
|
204204
help: Remove argument
205-
115 |
206-
116 | def setup_app(app_arg: FastAPI, non_app: str) -> None:
207-
117 | # Error
205+
120 |
206+
121 | def setup_app(app_arg: FastAPI, non_app: str) -> None:
207+
122 | # Error
208208
- @app_arg.get("/", response_model=str)
209-
118 + @app_arg.get("/")
210-
119 | async def get_root() -> str:
211-
120 | return "Hello World!"
212-
121 |
209+
123 + @app_arg.get("/")
210+
124 | async def get_root() -> str:
211+
125 | return "Hello World!"
212+
126 |
213213
note: This is an unsafe fix and may change runtime behavior

0 commit comments

Comments
 (0)