Repository navigation
Conversation
2c69161 to
b14b51a
Compare
03284cb to
0455baf
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Implicit argument handling and parent-scope checks still produce incorrect or incomplete nested-type inference.
2 open issues
What changed in this PR
Extends Unified’s type inference to represent nested types and preserve their enclosing generic arguments, with Swift regression coverage.
Changes:
- Adds parent-type parameters and qualified type names.
- Updates type mentions and enum construction to propagate parent-type paths.
- Adds nested-type tests and updates inference expectations.
| File | Description |
|---|---|
unified/ql/test/library-tests/type-inference/type-inference.expected |
Updates expected inference results. |
unified/ql/test/library-tests/type-inference/nested_types.swift |
Adds nested-generic, self-type, and extension coverage. |
unified/ql/test/library-tests/type-inference/generics.swift |
Removes a resolved MISSING annotation. |
unified/ql/test/library-tests/type-inference/classes.swift |
Updates the inline expected nested-type name. |
unified/ql/lib/codeql/unified/internal/typeinference/TypeMention.qll |
Adds nested-type qualification and implicit argument handling. |
unified/ql/lib/codeql/unified/internal/typeinference/TypeInferencePluginSwift.qll |
Removes Swift-specific enum plugin hooks. |
unified/ql/lib/codeql/unified/internal/typeinference/TypeInferencePlugin.qll |
Removes enum-specific hooks and wrappers. |
unified/ql/lib/codeql/unified/internal/typeinference/TypeInference.qll |
Integrates parent paths into constructor inference. |
unified/ql/lib/codeql/unified/internal/typeinference/Type.qll |
Introduces parent-type parameters and qualified names. |
unified/ql/lib/codeql/unified/internal/AstExtra.qll |
Adds shared enum relationships and enum-field modeling. |
Review effort: Max
0455baf to
e55b569
Compare
606fac6 to
fee52f9
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Parent-type inference can recurse into itself and produce conflicting types for nested classes and aliases.
7 open issues
Prefer lexical parent over enclosing subclass fallback · New Preserve alias-expanded parent specialization · New Exclude fixed-specialization aliases from implicit arguments · New Exclude generic alias bases from parent fallback · New Avoid fallback on specialized unqualified alias uses · New Correct expected and spurious constructor targets · New Use bar(...) for zero-argument type inference · New
2 resolved since last review
Review effort: Max
fee52f9 to
a014cb6
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Alias expansion can lose enclosing generic arguments or introduce conflicting certain types.
3 open issues
7 resolved since last review
Prefer lexical parent over enclosing subclass fallback Use bar(...) for zero-argument type inference Correct expected and spurious constructor targets Avoid fallback on specialized unqualified alias uses Exclude generic alias bases from parent fallback Exclude fixed-specialization aliases from implicit arguments Preserve alias-expanded parent specialization
Review effort: Max
9fbb278 to
92bdb7b
Compare
9a2da2f to
f27b5df
Compare
5ffdc62 to
16e479a
Compare
16e479a to
d259816
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Nested alias handling still loses qualifier information in forwarded references, generic arguments, and tuple elements, causing incorrect outer-type inference for qualified alias uses.
2 open issues
1 resolved since last review
Review effort: Max
d259816 to
af6d3b3
Compare
af6d3b3 to
cd773cb
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The enum-field inference rule misses generic arguments beneath parent paths, preventing nested enum initializers from acquiring outer type arguments from their annotations.
1 open issue
2 resolved since last review
Review effort: Max
| * | ||
| * The type path `pathParents` is any valid sequence of `ParentTypeParameterType`s starting | ||
| * from the alias declaration and not escaping `parent`, while `encl` is the enclosing | ||
| * class of the last element of `path`. |
| var x7 = innerMost.getInner() // $ target=Outer.Inner.InnerMost.getInner $ MISSING: type=x7:Int (https://github.com/github/codeql-team/issues/4968) | ||
| var y7 = innerMost.getOuter() // $ target=Outer.Inner.InnerMost.getOuter $ MISSING: type=y7:String (https://github.com/github/codeql-team/issues/4968) |



No description provided.