Skip to content

[ty] Show Final source in final assignment diagnostic#24194

Merged
charliermarsh merged 3 commits intomainfrom
charlie/final-attr-range
Mar 26, 2026
Merged

[ty] Show Final source in final assignment diagnostic#24194
charliermarsh merged 3 commits intomainfrom
charlie/final-attr-range

Conversation

@charliermarsh
Copy link
Copy Markdown
Member

Summary

Addresses a TODO from #23880 to show the Final annotation in the final assignment diagnostic.

@astral-sh-bot astral-sh-bot Bot added the ty Multi-file analysis & type inference label Mar 25, 2026
@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented Mar 25, 2026

Typing conformance results

No changes detected ✅

Current numbers
The percentage of diagnostics emitted that were expected errors held steady at 86.59%. The percentage of expected errors that received a diagnostic held steady at 80.96%. The number of fully passing files held steady at 68/132.

@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented Mar 25, 2026

Memory usage report

Memory usage unchanged ✅

@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented Mar 25, 2026

ecosystem-analyzer results

Lint rule Added Removed Changed
invalid-await 0 40 0
invalid-return-type 0 1 0
Total 0 41 0

Changes in flaky projects detected. Raw diff output excludes flaky projects; see the HTML report for details.

Full report with detailed diff (timing results)

@charliermarsh charliermarsh force-pushed the charlie/final-attr-range branch 2 times, most recently from d95314a to a44b023 Compare March 25, 2026 23:31
@charliermarsh charliermarsh marked this pull request as ready for review March 25, 2026 23:37
@astral-sh-bot astral-sh-bot Bot requested a review from oconnor663 March 25, 2026 23:38
@charliermarsh charliermarsh changed the title [ty] Show Final source in final assignment diagnostic [ty] Show Final source in final assignment diagnostic Mar 25, 2026
@carljm carljm removed their request for review March 26, 2026 04:28
@charliermarsh charliermarsh force-pushed the charlie/final-attr-range branch from a44b023 to e305f42 Compare March 26, 2026 14:45
@AlexWaygood AlexWaygood added diagnostics Related to reporting of diagnostics. labels Mar 26, 2026
Copy link
Copy Markdown
Member

@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lovely, thank you!

/// Add a secondary annotation to a diagnostic pointing to the `Final` declaration site.
fn annotate_final_declaration(
&self,
diagnostic: &mut impl DerefMut<Target = Diagnostic>,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

meh, everything compiles if you just use &mut Diagnostic here

Suggested change
diagnostic: &mut impl DerefMut<Target = Diagnostic>,
diagnostic: &mut Diagnostic,

Comment on lines +51 to +66
let class_ty = object_ty
.nominal_class(db)
.or_else(|| {
let Type::TypeVar(typevar) = object_ty else {
return None;
};

let TypeVarBoundOrConstraints::UpperBound(bound) =
typevar.typevar(db).bound_or_constraints(db)?
else {
return None;
};

bound.nominal_class(db)
})
.or_else(|| object_ty.to_class_type(db))?;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we just add a Type::TypeVar branch to the Type::nominal_class() method rather than special-casing Type::TypeVars here? And also do the same for Type::NewTypeInstance?

Comment on lines +85 to +110
let place_and_quals =
place_from_declarations(db, use_def.end_of_scope_symbol_declarations(symbol_id))
.ignore_conflicting_declarations();
if !place_and_quals.qualifiers.contains(TypeQualifiers::FINAL) {
return None;
}

let mut final_declarations = use_def
.end_of_scope_symbol_declarations(symbol_id)
.filter_map(|declaration| {
let DefinitionState::Defined(definition) = declaration.declaration else {
return None;
};

declaration_type(db, definition)
.qualifiers()
.contains(TypeQualifiers::FINAL)
.then_some(definition)
});
let final_declaration = final_declarations.next()?;

if final_declarations.next().is_some() {
return None;
}

return Some(final_declaration);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can do this much more simply

Suggested change
let place_and_quals =
place_from_declarations(db, use_def.end_of_scope_symbol_declarations(symbol_id))
.ignore_conflicting_declarations();
if !place_and_quals.qualifiers.contains(TypeQualifiers::FINAL) {
return None;
}
let mut final_declarations = use_def
.end_of_scope_symbol_declarations(symbol_id)
.filter_map(|declaration| {
let DefinitionState::Defined(definition) = declaration.declaration else {
return None;
};
declaration_type(db, definition)
.qualifiers()
.contains(TypeQualifiers::FINAL)
.then_some(definition)
});
let final_declaration = final_declarations.next()?;
if final_declarations.next().is_some() {
return None;
}
return Some(final_declaration);
let place_and_quals_result =
place_from_declarations(db, use_def.end_of_scope_symbol_declarations(symbol_id));
let Some(declaration) = place_and_quals_result.first_declaration else {
continue;
};
if !place_and_quals_result
.ignore_conflicting_declarations()
.qualifiers
.contains(TypeQualifiers::FINAL)
{
continue;
}
return Some(declaration);

Base automatically changed from charlie/final-attr to main March 26, 2026 16:24
@charliermarsh charliermarsh force-pushed the charlie/final-attr-range branch from e305f42 to a187f90 Compare March 26, 2026 16:26
@charliermarsh charliermarsh merged commit eda2355 into main Mar 26, 2026
48 checks passed
@charliermarsh charliermarsh deleted the charlie/final-attr-range branch March 26, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

diagnostics Related to reporting of diagnostics. ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants