Skip to content

[CodeCompletion] Polish unresolved member completion #19953

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

rintaro
Copy link
Member

@rintaro rintaro commented Oct 19, 2018

  • Don't emit failable construction for member types:
    class Base {
      class Sub : Base {
        init?(arg: Int) { return nil }
      }
    }
    let _: Base = .<HERE> // This used to emit `.Sub(arg:)`
  • Don't emit member type construction for the same type:
    struct Node {
      typealias Child = Node
      init(children: [Child]) {}
    }
    let node: Node = .<HERE>
    This used to emit .init(children:) and .Child(children:). But emitting .Child(children:) is meaningless and may confuse users, especially if the type has many initializers.
    For example, String has several member types aliased to String such as UnicodeScalarLiteralType, StringLiteralType. Emitting .StringLiteralType() along with .init() doesn't make sense.
  • Tiny optimization by early return for operators.

* Early exit for operators
* Early exit for equal types
in unresolved member completion. e.g.

  struct Node {
    typealias Child = Node
    init(children: [Child]) {}
  }
  let node: Node = .#^COMPLETE^#

This used to emit `.init(children:)` and `.Child(children:)`.
@rintaro rintaro requested a review from benlangmuir October 19, 2018 11:33
@rintaro
Copy link
Member Author

rintaro commented Oct 19, 2018

@swift-ci Please smoke test

@benlangmuir
Copy link
Contributor

This used to emit .init(children:) and .Child(children:). But it's meaningless and may confuse users, especially if the type has many initializers.

Using .init() with type context is not rare. I use it sometimes when I have really long type names I don't want to duplicate.

If we could lower the priority of these would that be sufficient? That would be fine with me since I can just type out "init" to filter to them anyway.

@rintaro
Copy link
Member Author

rintaro commented Oct 20, 2018

I was a little unclear about this. I'm not removing .init().
Here is the before/after this patch at String context:

before
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init()[#String#]; name=init()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(c): Character#})[#String#]; name=init(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#from: Decoder#})[' throws'][#String#]; name=init(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#cString: UnsafePointer<CChar>#})[#String#]; name=init(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#cString: UnsafePointer<UInt8>#})[#String#]; name=init(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=init(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=init(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(scalar): Unicode.Scalar#})[#String#]; name=init(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringLiteral: String#})[#String#]; name=init(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType()[#String#]; name=StringLiteralType()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(c): Character#})[#String#]; name=StringLiteralType(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#from: Decoder#})[' throws'][#String#]; name=StringLiteralType(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#cString: UnsafePointer<CChar>#})[#String#]; name=StringLiteralType(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#cString: UnsafePointer<UInt8>#})[#String#]; name=StringLiteralType(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=StringLiteralType(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=StringLiteralType(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(scalar): Unicode.Scalar#})[#String#]; name=StringLiteralType(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringLiteral: String#})[#String#]; name=StringLiteralType(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(value): LosslessStringConvertible#})[#String#]; name=StringLiteralType(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringInterpolation: String...#})[#String#]; name=StringLiteralType(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringInterpolationSegment: T#})[#String#]; name=StringLiteralType(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=StringLiteralType(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=StringLiteralType(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=StringLiteralType(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#repeating: String#}, {#count: Int#})[#String#]; name=StringLiteralType(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(value): BinaryInteger#})[#String#]; name=StringLiteralType(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=StringLiteralType(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#repeating: Character#}, {#count: Int#})[#String#]; name=StringLiteralType(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=StringLiteralType(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(characters): Sequence#})[#String#]; name=StringLiteralType(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=StringLiteralType(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(utf16): String.UTF16View#})[#String#]; name=StringLiteralType(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(utf8): String.UTF8View#})[#String#]; name=StringLiteralType(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(substring): Substring#})[#String#]; name=StringLiteralType(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#(content): Substring.UnicodeScalarView#})[#String#]; name=StringLiteralType(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#describing: Subject#})[#String#]; name=StringLiteralType(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: StringLiteralType({#reflecting: Subject#})[#String#]; name=StringLiteralType(reflecting: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType()[#String#]; name=ExtendedGraphemeClusterLiteralType()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(c): Character#})[#String#]; name=ExtendedGraphemeClusterLiteralType(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#from: Decoder#})[' throws'][#String#]; name=ExtendedGraphemeClusterLiteralType(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#cString: UnsafePointer<CChar>#})[#String#]; name=ExtendedGraphemeClusterLiteralType(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#cString: UnsafePointer<UInt8>#})[#String#]; name=ExtendedGraphemeClusterLiteralType(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=ExtendedGraphemeClusterLiteralType(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=ExtendedGraphemeClusterLiteralType(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(scalar): Unicode.Scalar#})[#String#]; name=ExtendedGraphemeClusterLiteralType(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringLiteral: String#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(value): LosslessStringConvertible#})[#String#]; name=ExtendedGraphemeClusterLiteralType(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringInterpolation: String...#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringInterpolationSegment: T#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=ExtendedGraphemeClusterLiteralType(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#repeating: String#}, {#count: Int#})[#String#]; name=ExtendedGraphemeClusterLiteralType(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(value): BinaryInteger#})[#String#]; name=ExtendedGraphemeClusterLiteralType(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=ExtendedGraphemeClusterLiteralType(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#repeating: Character#}, {#count: Int#})[#String#]; name=ExtendedGraphemeClusterLiteralType(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=ExtendedGraphemeClusterLiteralType(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(characters): Sequence#})[#String#]; name=ExtendedGraphemeClusterLiteralType(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=ExtendedGraphemeClusterLiteralType(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(utf16): String.UTF16View#})[#String#]; name=ExtendedGraphemeClusterLiteralType(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(utf8): String.UTF8View#})[#String#]; name=ExtendedGraphemeClusterLiteralType(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(substring): Substring#})[#String#]; name=ExtendedGraphemeClusterLiteralType(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#(content): Substring.UnicodeScalarView#})[#String#]; name=ExtendedGraphemeClusterLiteralType(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#describing: Subject#})[#String#]; name=ExtendedGraphemeClusterLiteralType(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: ExtendedGraphemeClusterLiteralType({#reflecting: Subject#})[#String#]; name=ExtendedGraphemeClusterLiteralType(reflecting: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType()[#String#]; name=UnicodeScalarLiteralType()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(c): Character#})[#String#]; name=UnicodeScalarLiteralType(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#from: Decoder#})[' throws'][#String#]; name=UnicodeScalarLiteralType(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#cString: UnsafePointer<CChar>#})[#String#]; name=UnicodeScalarLiteralType(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#cString: UnsafePointer<UInt8>#})[#String#]; name=UnicodeScalarLiteralType(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=UnicodeScalarLiteralType(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=UnicodeScalarLiteralType(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(scalar): Unicode.Scalar#})[#String#]; name=UnicodeScalarLiteralType(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringLiteral: String#})[#String#]; name=UnicodeScalarLiteralType(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(value): LosslessStringConvertible#})[#String#]; name=UnicodeScalarLiteralType(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringInterpolation: String...#})[#String#]; name=UnicodeScalarLiteralType(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringInterpolationSegment: T#})[#String#]; name=UnicodeScalarLiteralType(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=UnicodeScalarLiteralType(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=UnicodeScalarLiteralType(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=UnicodeScalarLiteralType(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#repeating: String#}, {#count: Int#})[#String#]; name=UnicodeScalarLiteralType(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(value): BinaryInteger#})[#String#]; name=UnicodeScalarLiteralType(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=UnicodeScalarLiteralType(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#repeating: Character#}, {#count: Int#})[#String#]; name=UnicodeScalarLiteralType(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=UnicodeScalarLiteralType(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(characters): Sequence#})[#String#]; name=UnicodeScalarLiteralType(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=UnicodeScalarLiteralType(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(utf16): String.UTF16View#})[#String#]; name=UnicodeScalarLiteralType(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(utf8): String.UTF8View#})[#String#]; name=UnicodeScalarLiteralType(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(substring): Substring#})[#String#]; name=UnicodeScalarLiteralType(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#(content): Substring.UnicodeScalarView#})[#String#]; name=UnicodeScalarLiteralType(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#describing: Subject#})[#String#]; name=UnicodeScalarLiteralType(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: UnicodeScalarLiteralType({#reflecting: Subject#})[#String#]; name=UnicodeScalarLiteralType(reflecting: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): LosslessStringConvertible#})[#String#]; name=init(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolation: String...#})[#String#]; name=init(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: T#})[#String#]; name=init(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=init(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=init(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=init(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#repeating: String#}, {#count: Int#})[#String#]; name=init(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): BinaryInteger#})[#String#]; name=init(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=init(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#repeating: Character#}, {#count: Int#})[#String#]; name=init(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=init(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(characters): Sequence#})[#String#]; name=init(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=init(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(utf16): String.UTF16View#})[#String#]; name=init(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(utf8): String.UTF8View#})[#String#]; name=init(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(substring): Substring#})[#String#]; name=init(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(content): Substring.UnicodeScalarView#})[#String#]; name=init(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView()[#String#]; name=CharacterView()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(c): Character#})[#String#]; name=CharacterView(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#from: Decoder#})[' throws'][#String#]; name=CharacterView(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#cString: UnsafePointer<CChar>#})[#String#]; name=CharacterView(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#cString: UnsafePointer<UInt8>#})[#String#]; name=CharacterView(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=CharacterView(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=CharacterView(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(scalar): Unicode.Scalar#})[#String#]; name=CharacterView(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringLiteral: String#})[#String#]; name=CharacterView(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(value): LosslessStringConvertible#})[#String#]; name=CharacterView(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringInterpolation: String...#})[#String#]; name=CharacterView(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringInterpolationSegment: T#})[#String#]; name=CharacterView(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=CharacterView(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=CharacterView(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=CharacterView(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#repeating: String#}, {#count: Int#})[#String#]; name=CharacterView(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(value): BinaryInteger#})[#String#]; name=CharacterView(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=CharacterView(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#repeating: Character#}, {#count: Int#})[#String#]; name=CharacterView(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=CharacterView(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(characters): Sequence#})[#String#]; name=CharacterView(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=CharacterView(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(utf16): String.UTF16View#})[#String#]; name=CharacterView(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(utf8): String.UTF8View#})[#String#]; name=CharacterView(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(substring): Substring#})[#String#]; name=CharacterView(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#(content): Substring.UnicodeScalarView#})[#String#]; name=CharacterView(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#describing: Subject#})[#String#]; name=CharacterView(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: CharacterView({#reflecting: Subject#})[#String#]; name=CharacterView(reflecting: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#describing: Subject#})[#String#]; name=init(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#reflecting: Subject#})[#String#]; name=init(reflecting: Subject)
after
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init()[#String#]; name=init()
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(c): Character#})[#String#]; name=init(c: Character)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#from: Decoder#})[' throws'][#String#]; name=init(from: Decoder) throws
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#cString: UnsafePointer<CChar>#})[#String#]; name=init(cString: UnsafePointer<CChar>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#cString: UnsafePointer<UInt8>#})[#String#]; name=init(cString: UnsafePointer<UInt8>)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#decoding: Collection#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=init(decoding: Collection, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>#}, {#as: _UnicodeEncoding.Protocol#})[#String#]; name=init(decodingCString: UnsafePointer<FixedWidthInteger & UnsignedInteger>, as: _UnicodeEncoding.Protocol)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(scalar): Unicode.Scalar#})[#String#]; name=init(scalar: Unicode.Scalar)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringLiteral: String#})[#String#]; name=init(stringLiteral: String)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): LosslessStringConvertible#})[#String#]; name=init(value: LosslessStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolation: String...#})[#String#]; name=init(stringInterpolation: String...)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: T#})[#String#]; name=init(stringInterpolationSegment: T)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: TextOutputStreamable#})[#String#]; name=init(stringInterpolationSegment: TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: CustomStringConvertible#})[#String#]; name=init(stringInterpolationSegment: CustomStringConvertible)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable#})[#String#]; name=init(stringInterpolationSegment: CustomStringConvertible & TextOutputStreamable)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#repeating: String#}, {#count: Int#})[#String#]; name=init(repeating: String, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): BinaryInteger#})[#String#]; name=init(value: BinaryInteger)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(value): BinaryInteger#}, {#radix: Int#}, {#uppercase: Bool#})[#String#]; name=init(value: BinaryInteger, radix: Int, uppercase: Bool)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#repeating: Character#}, {#count: Int#})[#String#]; name=init(repeating: Character, count: Int)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(other): LosslessStringConvertible & Sequence#})[#String#]; name=init(other: LosslessStringConvertible & Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(characters): Sequence#})[#String#]; name=init(characters: Sequence)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(unicodeScalars): String.UnicodeScalarView#})[#String#]; name=init(unicodeScalars: String.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(utf16): String.UTF16View#})[#String#]; name=init(utf16: String.UTF16View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(utf8): String.UTF8View#})[#String#]; name=init(utf8: String.UTF8View)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(substring): Substring#})[#String#]; name=init(substring: Substring)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(content): Substring.UnicodeScalarView#})[#String#]; name=init(content: Substring.UnicodeScalarView)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#describing: Subject#})[#String#]; name=init(describing: Subject)
Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#reflecting: Subject#})[#String#]; name=init(reflecting: Subject)

I'm only removing member type constructions, because they are basically dupes of init()s. Also, completing member type construction is a little heavy because it lookups initializers for each aliased names.

@benlangmuir
Copy link
Contributor

I was a little unclear about this. I'm not removing .init().

I see. Could you clarify this in the PR description then? It says:

This used to emit .init(children:) and .Child(children:). But it's meaningless and may confuse users

It sounds like this only applies to the second case.

@rintaro rintaro merged commit b0c8fc5 into swiftlang:master Oct 22, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants