From 9d8e35b165b3e33eae6013edc2c3d10f0102447a Mon Sep 17 00:00:00 2001 From: Douglas Creager Date: Wed, 8 Oct 2025 12:50:28 -0400 Subject: [PATCH] [ty_test] Simplify infer_type_at_position using as_expr_ref() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- crates/ty_test/src/hover.rs | 50 +++---------------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/crates/ty_test/src/hover.rs b/crates/ty_test/src/hover.rs index e868b3beae..c1b5dcc6bc 100644 --- a/crates/ty_test/src/hover.rs +++ b/crates/ty_test/src/hover.rs @@ -54,53 +54,9 @@ fn infer_type_at_position(db: &Db, file: File, offset: TextSize) -> Option s.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, - }; + // Get the expression at this position and infer its type + let expr = node.as_expr_ref()?; + let ty = expr.inferred_type(&model); Some(ty.display(db).to_string()) }