1. 程式人生 > >iOS- 工程配置SwiftLint

iOS- 工程配置SwiftLint

Homebrew安裝SwiftLint

brew install swiftlint

在Xcode中新增執行指令碼

在Xcode中選擇Build Phase-Add Build Phase-New Run Script Phase,新增如下指令碼

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

新增配置檔案.swiftlint.yml

1>cd到主工程目錄下,建立檔案

touch .swiftlint.yml

2>開啟檔案(Command+Shift+.可顯示隱藏檔案)並編譯,以下規則篩選過不可用規則

excluded: 
  - Carthage
disabled_rules:
    # - colon # 冒號的使用, swiftlint的這個colon屬性規則很簡單,要求“ :”緊靠所定義的常量或變數等,必須沒有空格,與所指定的型別之間必須只有一個空格,多一個或少一個都不行,如果是用在Dictionary中,則要求緊靠Key,與Value之間必須有且僅有一個空格。這個規則我覺得應該強制推薦使用
    - force_cast # 強制轉換, 強制轉換應該被避免,否則直接報 error。
    - type_name # 型別名, 型別名應該只包含字母數字字元, 並且以大寫字母開頭,長度在3-40個字元。這個屬性沒什麼好說的,強烈推薦使用。
    - function_body_length #函式體長度, 函式體不應該跨越太多行, 超過40行給warning, 超過100行直接報錯。推薦使用。
    # - control_statement #控制語句, if、for、while、do語句不應該將 條件 寫在 圓括號 中, 另外注意條件出的空格。
    - type_body_length #型別體長度。型別體長度不應該跨越太多行, 超過200行給warning,超過350行給error。一般是大括號或者括號內, 比如定義一個enum或struct。
    # - nesting
    - variable_name # 變數名應該只包含字元數字字元, 並且只能以小寫字母開頭或者應該只包含大寫字母。此外,當變數名被宣告為static(靜態)變數時或者immutable不可變的時候,這時或許可以以一個大寫字母開頭。最後,變數名不應該太長或者太短(應該在3-40個字元間,否則會觸發警告!!!)。注意:目前變數名只適用於自己寫的方法的引數和自己寫的class中的全域性常量或變數, 對於系統自帶的方法裡面和自己寫的方法裡面沒有作用
    - line_length # 行的字元長度屬性。這個強烈不推薦使用。官方的規定是超過120字元就給warning,
    - trailing_whitespace # 尾部空白行強烈不推薦使用
    # - todo # TODO 和 FIXME 應該避免使用, 使用“notaTODO 和 notaFIXME”代替。另外, 和 MARK 標記不同的是, “notaTODO 和 notaFIXME”沒有空格要求,但是我建議如果要使用這個 todo 屬性, 儘量寫成和 MARK 一樣的規範。
    # - legacy_constructor
    - valid_docs # 有效檔案 。 檔案宣告應該有效 。這個屬性和屬性62有衝突, 而且重複, 官網文件寫得有問題。另外在swift 3.0上測試並不會發生warning。暫時不舉例,這個屬性禁用!!!後期等官方完善之後再追加。
    - missing_docs # 缺失說明註釋, 官方解釋:”Public declarations should be documented.”, 公共宣告應該被註釋/標記。 在函式宣告的時候, 一般情況下, 帶public關鍵字的函式的註釋只能用 “///”和 “/* /”來註釋, 如果不帶public關鍵字的函式只能用 “//”和 “/* */” 。這個屬性應該禁用,沒必要!!!
    - file_length # 檔案行長度違規:檔案應包含400行或以下
    - cyclomatic_complexity # 函式命名的複雜度應該為10或以下,儘量簡單比如引數不要過多,修飾符不要過多不然會報錯 迴圈複雜度。函式體的複雜度應該要限制,這個屬性主要約束條件句、迴圈句中的迴圈巢狀問題, 當巢狀太多的迴圈時,則會觸發swiftlint中的warning和error,當達到10個迴圈巢狀時就會報warning,達到20個迴圈巢狀時就會報error,強烈推薦這個屬性。巢狀太多,可讀性差!
    - large_tuple # 元組衝突:元組應該最多有2個成員,多餘兩個會報錯
    - function_parameter_count # 函式引數計數違例:函式應該有5個引數,多餘會報錯 函式引數個數, 函式引數數量(init方法除外)應該少點, 不要太多,swiftlint規定函式引數數量超過5個給warning, 超過8個直接報error。這個屬性推薦使用, 由於簡單就不舉例了。注:function_parameter_count: error 這樣並不能改變它的警告或錯誤,該屬性不允許修改,但是可以禁用
    - multiple_closures_with_trailing_closure # 多個閉包與尾隨閉包衝突:在傳遞多個閉包引數時不應該使用尾隨關閉語法。
identifier_name:
    excluded: id # 允許命名為id

檔案說明:

  • disabled_rules:禁用指定的規則
  • opt_in_rules:啟動指定的規則
  • whitelist_rules:白名單規則,不能和上面兩項混用
  • included:希望Lint檢索的路徑,SwiftLint會掃描該路徑下的所有.swift字尾的檔案
  • excluded: 希望不要檢索的路徑,SwiftLint會無視掉該路徑下的檔案,一般比如Pods、Carthage或者一些三方庫

SwiftLint命令列

   autocorrect     Automatically correct warnings and errors(將已知的能夠自動修復的Error和Warning都自動修復,一般舊的專案配置SwiftLint之後會出現大量的報錯和警告,此命令可減少大部分工作量)
   generate-docs   Generates markdown documentation for all rules
   help            Display general or command-specific help
   lint            Print lint warnings and errors (default command)
   rules           Display the list of rules and their identifiers
   version         Display the current version of SwiftLint

更新SwiftLint

brew upgrade swiftlint