diff --git a/crates/red_knot_python_semantic/src/semantic_index/definition.rs b/crates/red_knot_python_semantic/src/semantic_index/definition.rs index d73064636d..a7b80a225d 100644 --- a/crates/red_knot_python_semantic/src/semantic_index/definition.rs +++ b/crates/red_knot_python_semantic/src/semantic_index/definition.rs @@ -1,6 +1,7 @@ use ruff_db::files::File; use ruff_db::parsed::ParsedModule; use ruff_python_ast as ast; +use ruff_text_size::{Ranged, TextRange}; use crate::ast_node_ref::AstNodeRef; use crate::module_resolver::file_to_module; @@ -465,6 +466,33 @@ pub enum DefinitionKind<'db> { TypeVarTuple(AstNodeRef), } +impl Ranged for DefinitionKind<'_> { + fn range(&self) -> TextRange { + match self { + DefinitionKind::Import(alias) => alias.range(), + DefinitionKind::ImportFrom(import) => import.alias().range(), + DefinitionKind::Function(function) => function.name.range(), + DefinitionKind::Class(class) => class.name.range(), + DefinitionKind::TypeAlias(type_alias) => type_alias.name.range(), + DefinitionKind::NamedExpression(named) => named.target.range(), + DefinitionKind::Assignment(assignment) => assignment.name().range(), + DefinitionKind::AnnotatedAssignment(assign) => assign.target.range(), + DefinitionKind::AugmentedAssignment(aug_assign) => aug_assign.target.range(), + DefinitionKind::For(for_stmt) => for_stmt.target().range(), + DefinitionKind::Comprehension(comp) => comp.target().range(), + DefinitionKind::VariadicPositionalParameter(parameter) => parameter.name.range(), + DefinitionKind::VariadicKeywordParameter(parameter) => parameter.name.range(), + DefinitionKind::Parameter(parameter) => parameter.parameter.name.range(), + DefinitionKind::WithItem(with_item) => with_item.target().range(), + DefinitionKind::MatchPattern(match_pattern) => match_pattern.identifier.range(), + DefinitionKind::ExceptHandler(handler) => handler.node().range(), + DefinitionKind::TypeVar(type_var) => type_var.name.range(), + DefinitionKind::ParamSpec(param_spec) => param_spec.name.range(), + DefinitionKind::TypeVarTuple(type_var_tuple) => type_var_tuple.name.range(), + } + } +} + impl DefinitionKind<'_> { pub(crate) fn category(&self) -> DefinitionCategory { match self { diff --git a/crates/red_knot_python_semantic/src/types/infer.rs b/crates/red_knot_python_semantic/src/types/infer.rs index cccef4ece4..c764cad802 100644 --- a/crates/red_knot_python_semantic/src/types/infer.rs +++ b/crates/red_knot_python_semantic/src/types/infer.rs @@ -32,6 +32,7 @@ use itertools::Itertools; use ruff_db::files::File; use ruff_db::parsed::parsed_module; use ruff_python_ast::{self as ast, AnyNodeRef, ExprContext, UnaryOp}; +use ruff_text_size::Ranged; use rustc_hash::{FxHashMap, FxHashSet}; use salsa; use salsa::plumbing::AsId; @@ -125,6 +126,7 @@ pub(crate) fn infer_definition_types<'db>( let _span = tracing::trace_span!( "infer_definition_types", definition = ?definition.as_id(), + range = ?definition.kind(db).range(), file = %file.path(db) ) .entered(); @@ -147,6 +149,7 @@ pub(crate) fn infer_deferred_types<'db>( let _span = tracing::trace_span!( "infer_deferred_types", definition = ?definition.as_id(), + range = ?definition.kind(db).range(), file = %file.path(db) ) .entered(); @@ -167,9 +170,13 @@ pub(crate) fn infer_expression_types<'db>( expression: Expression<'db>, ) -> TypeInference<'db> { let file = expression.file(db); - let _span = - tracing::trace_span!("infer_expression_types", expression=?expression.as_id(), file=%file.path(db)) - .entered(); + let _span = tracing::trace_span!( + "infer_expression_types", + expression = ?expression.as_id(), + range = ?expression.node_ref(db).range(), + file = %file.path(db) + ) + .entered(); let index = semantic_index(db, file);