Handle Def types in object constraint duck typing#994
Handle Def types in object constraint duck typing#994MillhioreBT wants to merge 2 commits intoEmmyLuaLs:mainfrom
Conversation
`check_object_type_compact` only matched `LuaType::Ref` when checking
if a class satisfies a structural object constraint (e.g. `{ x: number,
y: number, z: number }`). When the type was inferred as `LuaType::Def`
(e.g. from `return self` without an explicit `@return`), it fell through
to the wildcard arm and incorrectly reported a generic-constraint-mismatch.
Add `LuaType::Def` alongside `LuaType::Ref` in the match arm so both
representations are checked structurally against the object constraint.
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses a bug in the type checking logic where LuaType::Def instances, particularly those inferred from 'return self' in class methods, were not correctly evaluated against structural object constraints. Previously, these types would incorrectly trigger a GenericConstraintMismatch diagnostic. The fix extends the structural duck typing mechanism to properly recognize and validate LuaType::Def types, ensuring accurate type inference and constraint satisfaction. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request extends the object type checking logic to include LuaType::Def alongside LuaType::Ref, enabling @class definitions to satisfy object constraints through structural duck typing. A new test case was added to validate this behavior. The reviewer suggested renaming the new test for improved clarity, as its current name might be misleading regarding the type it primarily validates.
What was happening?
check_object_type_compactonly matchedLuaType::Refwhen checking if a classsatisfies a structural object constraint (e.g.
{ x: number, y: number, z: number }).So when the type was inferred as
LuaType::Def(like fromreturn selfwithout anexplicit
@return), it fell through to the wildcard arm and incorrectly reported ageneric constraint mismatch — oops!
What does this fix do?
Adds
LuaType::DefalongsideLuaType::Refin the match arm, so both representationsare checked structurally against the object constraint.