// RUN: %batch-code-completion // rdar://147789214 - Make sure we insert generic parameters for underlying type. struct S {} typealias Foo = S typealias Bar = Foo typealias Baz = S typealias Invalid = (S, S) struct Q { struct S {} } typealias Invalid2 = R.S let _: S = #^COMPLETE^# // COMPLETE-DAG: Decl[TypeAlias]/CurrModule: Foo[#S#]; name=Foo // COMPLETE-DAG: Decl[TypeAlias]/CurrModule: Bar[#S#]; name=Bar // COMPLETE-DAG: Decl[TypeAlias]/CurrModule: Baz[#S#]; name=Baz // COMPLETE-DAG: Decl[TypeAlias]/CurrModule: Invalid[#Invalid#]; name=Invalid // COMPLETE-DAG: Decl[TypeAlias]/CurrModule: Invalid2[#Invalid2#]; name=Invalid2 struct R { typealias X = S typealias Y = S typealias Z = S func foo() { // TODO: Once we start comparing type relations for types with generic // parameters, ideally 'Y' and 'Z' should be convertible, but not 'X'. let _: S = #^COMPLETE_IN_TYPE^# // COMPLETE_IN_TYPE-DAG: Decl[TypeAlias]/CurrNominal: X[#S#]; name=X // COMPLETE_IN_TYPE-DAG: Decl[TypeAlias]/CurrNominal: Y[#S#]; name=Y // COMPLETE_IN_TYPE-DAG: Decl[TypeAlias]/CurrNominal: Z[#S#]; name=Z } }