Skip to content

A cli tool to fill your swift source code's types.

License

Notifications You must be signed in to change notification settings

yume190/TypeFill

Repository files navigation

TypeFill

Quality gate Swift


A little cli tool to help you fill your variables type.

And add private final attribute to @IBAction, @IBOutlet, and @objc.(Rewriting ...)

Installation


make

brew install make
make install

Swift Package Manager

swift build -c release
cp .build/release/typefill /usr/local/bin

mint

brew install mint
mint install yume190/TypeFill

Usage

typefill single    --sdk macosx         --file PATH/TO/sample.swift 

typefill spm       --module TypeFillKit --file .       
typefill project   --module YOUR_SCHEME --file PATH/TO/YOUR.xcodeproj 
typefill workspace --module YOUR_SCHEME --file PATH/TO/YOUR.xcworkspace

The Support Part & Todolist

  • typefill variables like let a = 1 or var a = "1".
  • typefill keyword like let ``default`` = 1.
  • typefill guard let and if let.
  • typefill some closure input.
    • { a, b in }
    • { (a, b) in }
  • typefill binding tuple let (aa, bb) = (1, 2)
  • typefill inout
  • typefill closure output.
  • add private final attribute to @IBAction/@IBOutlet/@objc by using --ibaction/--iboutlet/--objc.(Rewriting)
private lazy var chartHeight: [CGFloat] = {
    return self.status.sensorData?.compactMap { sensor -> CGFloat in
        guard let _chartType = sensor.chart?.type else { return 0 }
    }
}()

Support

let/var

let a = 1
var b = a
let (c, d) = (1, 2)
struct Test {
    let a, b: Int
    let c = 1, d = 2
}
let a: Int = 1
var b: Int = a
let (c, d): (Int, Int) = (1, 2)
struct Test {
    let a: Int, b: Int
    let c: Int = 1, d: Int = 2
}

Option bind(if let/guard let)

let a: Int? = nil
if let aa = a {}
guard let aa = a else {return}
let a: Int? = nil
if let aa: Int = a {}
guard let aa: Int = a else {return}

Closure

let a: (Int, Int) -> String = { a, b -> String in
    return ""
}
let b: (Int, Int) -> String = { (a, b) -> String in
    return ""
}
let a: (Int, Int) -> String = { (a: Int, b: Int) -> String in
    return ""
}
let b: (Int, Int) -> String = { (a: Int, b: Int) -> String in
    return ""
}

Not Support

Closure(inout)

let a: (inout Int) -> Int = { i in
    return i
}

Ref

License

MIT licensed.