From f17ddd62ad191c2c164727ec3f30e485715d6cc6 Mon Sep 17 00:00:00 2001 From: Ibraheem Ahmed Date: Fri, 24 Oct 2025 13:21:39 -0400 Subject: [PATCH] [ty] Avoid duplicate diagnostics during multi-inference of standalone expressions (#21056) ## Summary Resolves https://github.com/astral-sh/ty/issues/1428. --- .../resources/mdtest/call/union.md | 17 +++++++++++++++++ crates/ty_python_semantic/src/types/context.rs | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/ty_python_semantic/resources/mdtest/call/union.md b/crates/ty_python_semantic/resources/mdtest/call/union.md index c950f7f482..1a4079204d 100644 --- a/crates/ty_python_semantic/resources/mdtest/call/union.md +++ b/crates/ty_python_semantic/resources/mdtest/call/union.md @@ -284,6 +284,8 @@ def _(flag: bool): Diagnostics unrelated to the type-context are only reported once: +`expression.py`: + ```py def f[T](x: T) -> list[T]: return [x] @@ -307,3 +309,18 @@ def _(x: int): # error: [possibly-unresolved-reference] "Name `z` used when possibly not defined" y(f(True), [z]) ``` + +`standalone_expression.py`: + +```py +def f(_: str): ... +def g(_: str): ... +def _(a: object, b: object, flag: bool): + if flag: + x = f + else: + x = g + + # error: [unsupported-operator] "Operator `>` is not supported for types `object` and `object`" + x(f"{'a' if a > b else 'b'}") +``` diff --git a/crates/ty_python_semantic/src/types/context.rs b/crates/ty_python_semantic/src/types/context.rs index 2221ced32d..95e5ce8741 100644 --- a/crates/ty_python_semantic/src/types/context.rs +++ b/crates/ty_python_semantic/src/types/context.rs @@ -97,7 +97,9 @@ impl<'db, 'ast> InferContext<'db, 'ast> { } pub(crate) fn extend(&mut self, other: &TypeCheckDiagnostics) { - self.diagnostics.get_mut().extend(other); + if !self.is_in_multi_inference() { + self.diagnostics.get_mut().extend(other); + } } pub(super) fn is_lint_enabled(&self, lint: &'static LintMetadata) -> bool {