Skip to content

Commit

Permalink
[red-knokt] trace inference chain
Browse files Browse the repository at this point in the history
  • Loading branch information
chriskrycho committed Aug 29, 2024
1 parent 8f4073b commit 0fce45b
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions crates/red_knot_python_semantic/src/types/infer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,7 @@ impl<'db> TypeInferenceBuilder<'db> {
}

/// Infers types in the given [`InferenceRegion`].
#[tracing::instrument(skip_all)]
fn infer_region(&mut self) {
match self.region {
InferenceRegion::Scope(scope) => self.infer_region_scope(scope),
Expand All @@ -316,9 +317,8 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_region_scope(&mut self, scope: ScopeId<'db>) {
let _span = tracing::trace_span!("infer_region_scope").entered();

let node = scope.node(self.db);
match node {
NodeWithScopeKind::Module => {
Expand Down Expand Up @@ -363,6 +363,7 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_region_definition(&mut self, definition: Definition<'db>) {
match definition.node(self.db) {
DefinitionKind::Function(function) => {
Expand Down Expand Up @@ -421,6 +422,7 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_region_deferred(&mut self, definition: Definition<'db>) {
match definition.node(self.db) {
DefinitionKind::Function(function) => self.infer_function_deferred(function.node()),
Expand All @@ -432,10 +434,12 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_region_expression(&mut self, expression: Expression<'db>) {
self.infer_expression(expression.node_ref(self.db));
}

#[tracing::instrument(skip_all)]
fn infer_module(&mut self, module: &ast::ModModule) {
self.infer_body(&module.body);
}
Expand Down Expand Up @@ -517,16 +521,19 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_definition(&mut self, node: impl Into<DefinitionNodeKey>) {
let definition = self.index.definition(node);
let result = infer_definition_types(self.db, definition);
self.extend(result);
}

#[tracing::instrument(skip_all)]
fn infer_function_definition_statement(&mut self, function: &ast::StmtFunctionDef) {
self.infer_definition(function);
}

#[tracing::instrument(skip_all)]
fn infer_function_definition(
&mut self,
function: &ast::StmtFunctionDef,
Expand Down Expand Up @@ -576,6 +583,7 @@ impl<'db> TypeInferenceBuilder<'db> {
self.types.definitions.insert(definition, function_ty);
}

#[tracing::instrument(skip_all)]
fn infer_parameters(&mut self, parameters: &ast::Parameters) {
let ast::Parameters {
range: _,
Expand All @@ -597,6 +605,7 @@ impl<'db> TypeInferenceBuilder<'db> {
}
}

#[tracing::instrument(skip_all)]
fn infer_parameter_with_default(&mut self, parameter_with_default: &ast::ParameterWithDefault) {
let ast::ParameterWithDefault {
range: _,
Expand All @@ -609,6 +618,7 @@ impl<'db> TypeInferenceBuilder<'db> {
self.infer_definition(parameter_with_default);
}

#[tracing::instrument(skip_all)]
fn infer_parameter(&mut self, parameter: &ast::Parameter) {
let ast::Parameter {
range: _,
Expand All @@ -623,13 +633,19 @@ impl<'db> TypeInferenceBuilder<'db> {

fn infer_parameter_with_default_definition(
&mut self,
_parameter_with_default: &ast::ParameterWithDefault,
parameter_with_default: &ast::ParameterWithDefault,
definition: Definition<'db>,
) {
tracing::trace!(
param = ?parameter_with_default,
definition = ?definition,
"infer_parameter_with_default_definition",
);
// TODO(dhruvmanila): Infer types from annotation or default expression
self.types.definitions.insert(definition, Type::Unknown);
}

#[tracing::instrument(skip_all)]
fn infer_parameter_definition(
&mut self,
_parameter: &ast::Parameter,
Expand All @@ -640,10 +656,12 @@ impl<'db> TypeInferenceBuilder<'db> {
self.types.definitions.insert(definition, Type::Unknown);
}

#[tracing::instrument(skip_all)]
fn infer_class_definition_statement(&mut self, class: &ast::StmtClassDef) {
self.infer_definition(class);
}

#[tracing::instrument(skip_all)]
fn infer_class_definition(&mut self, class: &ast::StmtClassDef, definition: Definition<'db>) {
let ast::StmtClassDef {
range: _,
Expand Down

0 comments on commit 0fce45b

Please sign in to comment.