snippet     struct
options     word
    struct ${1:name} {
        ${0:TARGET}
    }

snippet     class
options     word
    class ${1:name} {
        ${0:TARGET}
    }

snippet     enum
options     word
    enum ${1:name} {
        ${0:TARGET}
    }

snippet     case
options     head
    case ${1:pattern}${0}

snippet     protocol
options     word
    protocol ${1:name} {
        ${0:TARGET}
    }

snippet     var
options     word
    var ${1:name}: ${2:Int}${0}

snippet     let
options     word
    let ${1:name}: ${2:Int}${0}

snippet     extension
    extension ${1:Int} {
        ${0:TARGET}
    }

snippet     func
abbr        func name(...) -> Type { ... }
options     word
    func ${1:name}(${2:#:arguments}) -> ${3:Int}${0}

snippet     void
abbr        func name(...) { ... }
options     word
    func ${1:name}(${2:#:arguments})${0}

snippet     for
options     head
    for var ${1:i = 0}; ${2:i < j}; ${3:i++} {
        ${0:TARGET}
    }

snippet     iter
options     head
    for ${1:item} in ${2:collection} {
        ${0:TARGET}
    }

snippet     while
options     head
    while ${1:false} {
        ${0:TARGET}
    }

snippet     repeat
options     head
    repeat {
        ${0:TARGET}
    } while ${1:false}

snippet     if
options     word
    if ${1:false} {
        ${0:TARGET}
    }${9}

snippet     elif
options     word
    else if ${1:false} {
        ${0:TARGET}
    }${9}

snippet     else
options     word
    else {
        ${0:TARGET}
    }${9}

snippet     optional
abbr        if let/case ... { ... }
options     head
    if ${1:let} ${2:name} = ${3:expression} else {
        ${0:TARGET}
    }${9}

snippet     guard
abbr        guard let ... else { ... }
options     head
    guard let ${1} = ${2} else {
        ${0:TARGET}
    }
    ${9}

snippet     switch
options     head
    switch ${1:expression} {
        ${0:TARGET}
    }

snippet     do
options     head
    do {
        ${0:TARGET}
    }${9}

snippet     catch
options     word
    catch${1:#:pattern} {
        ${0:TARGET}
    }${9}

snippet     defer
options     head
    defer {
        ${0:TARGET}
    }

snippet     import
    import ${1:module}
    ${0}

snippet     subscript
options     word
    subscript(${1:index: Int}) -> ${2:Int} {
        ${0:TARGET}
    }
    ${9}

snippet     init
options     word
    init${1:#:?}(${2:#:arguments}) {
        ${0:TARGET}
    }
    ${9}

snippet     deinit
options     head
    deinit {
        ${0:TARGET}
    }

snippet     closure
options     word
abbr        { (...) -> Type in ... }
    { ${1:#capture}(${2:#:arguments}) -> ${3:Void} in
        ${0:TARGET}
    }
    ${9}