import SwiftOnoneSupport

func %%% (lhs: Int, rhs: Int) -> Int

postfix func =-> (lhs: Int) -> Int

postfix func => (lhs: Int) -> Int

struct BarGenericSwiftStruct1<T> {
  init(t: T)
  func bar1InstanceFunc()
}

struct BarGenericSwiftStruct2<T, U> where T : BarProtocol {
  init(t: T, u: U)
  func bar2InstanceFunc()
}

protocol BarProtocol {
  func instanceFunc()
}

/// FooSwiftStruct Aaa.
/**
 * Bbb.
 * Ccc.
 */
struct FooSwiftStruct {
  /// fooInstanceFunc Aaa.
  /**
   * Bbb
   */
  /**
   * Ccc.
   */
  func fooInstanceFunc()
  init()
}

/// rdar://18457785
enum MyQuickLookObject {
  /// A rectangle.
  ///
  /// Uses explicit coordinates to avoid coupling a particular Cocoa type.
  case Rectangle(Float64, Float64, Float64, Float64)
}

var globalVar: Int

func hiddenImport()

func overlayedFoo()

func visibleImport()

precedencegroup High {
  associativity: left
  higherThan: BitwiseShiftPrecedence
}

infix operator %%% : High

postfix operator =>

postfix operator =->

