mirror of https://github.com/astral-sh/ruff
[ty_test] Simplify infer_type_at_position using as_expr_ref()
Replace the large match statement over all AnyNodeRef expression variants with a simple call to as_expr_ref(). This helper method handles all expression-related variants automatically, reducing the function from ~60 lines to just 6 lines. Also removes statement-related variants (StmtFunctionDef, StmtClassDef, StmtExpr) to focus only on expression nodes, which is the primary use case for hover assertions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
5c75e91abe
commit
9d8e35b165
|
|
@ -54,53 +54,9 @@ fn infer_type_at_position(db: &Db, file: File, offset: TextSize) -> Option<Strin
|
||||||
|
|
||||||
let model = SemanticModel::new(db, file);
|
let model = SemanticModel::new(db, file);
|
||||||
|
|
||||||
// Try to get the type from the node - HasType is mainly implemented for ast types
|
// Get the expression at this position and infer its type
|
||||||
let ty = match node {
|
let expr = node.as_expr_ref()?;
|
||||||
AnyNodeRef::StmtFunctionDef(s) => s.inferred_type(&model),
|
let ty = expr.inferred_type(&model);
|
||||||
AnyNodeRef::StmtClassDef(s) => s.inferred_type(&model),
|
|
||||||
AnyNodeRef::StmtExpr(s) => s.value.as_ref().inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprBoolOp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprNamed(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprBinOp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprUnaryOp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprLambda(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprIf(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprDict(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprSet(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprListComp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprSetComp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprDictComp(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprGenerator(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprAwait(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprYield(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprYieldFrom(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprCompare(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprCall(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprFString(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprStringLiteral(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprBytesLiteral(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprNumberLiteral(e) => {
|
|
||||||
ruff_python_ast::ExprRef::from(e).inferred_type(&model)
|
|
||||||
}
|
|
||||||
AnyNodeRef::ExprBooleanLiteral(e) => {
|
|
||||||
ruff_python_ast::ExprRef::from(e).inferred_type(&model)
|
|
||||||
}
|
|
||||||
AnyNodeRef::ExprNoneLiteral(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprEllipsisLiteral(e) => {
|
|
||||||
ruff_python_ast::ExprRef::from(e).inferred_type(&model)
|
|
||||||
}
|
|
||||||
AnyNodeRef::ExprAttribute(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprSubscript(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprStarred(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprName(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprList(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprTuple(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprSlice(e) => ruff_python_ast::ExprRef::from(e).inferred_type(&model),
|
|
||||||
AnyNodeRef::ExprIpyEscapeCommand(e) => {
|
|
||||||
ruff_python_ast::ExprRef::from(e).inferred_type(&model)
|
|
||||||
}
|
|
||||||
_ => return None,
|
|
||||||
};
|
|
||||||
|
|
||||||
Some(ty.display(db).to_string())
|
Some(ty.display(db).to_string())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue