読者です 読者をやめる 読者になる 読者になる

Swift2 スタイルガイドライン はどれが良いの?

Swift

Swift2のスタイルガイドラインについて調べている時に、 Swift用の静的解析ツール Tailor というものを見つけた。 まずは、Tailor のチェックルールを自分用スタイルガイドラインにしたいと思う。

sleekbyte/tailor · GitHub

README.md によると以下のスタイルガイドラインに対応しているとのこと。

また、チェックルールを理解するため、以下に簡単にまとめた。(訳は適当。詳細は Tailor のチェックルール を参照。)

  1. Naming

    1. [upper-camel-case] UpperCamelCase naming

      class, enum, enum の値, structおよびprotocolの名前はUpperCamelCase(パスカルケース)命名規則に従うべき。

    2. [lower-camel-case] lowerCamelCase naming

      メソッドとミュータブルな変数(var)の名前はlowerCamelCaseの命名規則に従うべき。

    3. [constant-naming] Constant naming

      グローバル定数はUpperCamelCaseかlowerCamelCaseのいずれかの命名規則に従うべき。 ローカル定数はlowerCamelCaseの命名規則に従うべき。

    4. [constant-k-prefix] Flag "k-prefixed" constants

      定数名にプレフィックスkは付与しない。

  2. Whitespace

    1. [arrow-whitespace] Flag arrows that are not space delimited

      "->" の前後をスペース1文字で囲む。

    2. [angle-bracket-whitespace] Check whitespace in and around angular brackets

      "<"の前後と、">"の前にはスペースを入れない。

    3. [colon-whitespace] Flag incorrect whitespace around colons

      ":"を以下で使用する場合には、":"の前にスペースは入れずに、":"の後にスペース1文字を入れる。

      • var, class, struct, protocol, extension, funcおよびtuple宣言
      • DictionaryのリテラルとDictionaryの型宣言
      • case文

      ただし、三項演算子の場合は、":"の前後をスペース1文字で囲む。

    4. [comma-whitespace] Flag commas that are not left associated

      ジェネリックおよび型継承時の場合、","の前にはスペースは入れずに ","の後にスペース1文字を入れる。

    5. [operator-whitespace] Flag operators that are not space delimited (only in operator declarations)

      演算子宣言の場合、演算子の前後をスペース1文字で囲む。

    6. [leading-whitespace] Flag leading whitespace in a file

      Verify that source files begin with a non-whitespace character. ソースファイルの先頭は非空白文字で開始するべき。

    7. [terminating-newline] Single newline at end of source file

      ソースファイルは1個の"\n"で終了すべき。0個や1個以上で終了してはいけない。

    8. [parentheses-whitespace] Check whitespace in and around parenthesis

      "("の前後と、")"の前にはスペースを入れない。

    9. [trailing-whitespace] Flag trailing whitespace

      行末にスペースを入れない。

    10. [comment-whitespace] Comment whitespace checks

      コメント開始シンボル(/, //, * および /**)の後にはスペースを1文字以上入れる。 コメント終了シンボル(*)の前には、スペースを1文字以上入れる。

    11. [function-whitespace] Blank lines around functions

      全ての関数およびメソッド宣言の前後には空行を入れる。 ただし、ファイルの先頭での宣言やファイルの最後での宣言の場合は、それぞれ宣言後、宣言前に空行を入れる。 関数およびメソッド宣言直前のコメントは宣言の一部とみなす。(コメントと宣言の間には空行を入れない。)

  3. Length

    1. ファイルおよび型定義の行数制限

      1. [max-class-length]

        クラス定義の行数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      2. [max-closure-length]

        クロージャー定義の行数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      3. [max-file-length]

        ファイル内の行数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      4. [max-function-length]

        関数定義の行数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      5. [max-struct-length]

        構造体定義の行数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

    2. 行や型名の文字数の制限

      1. [max-line-length]

        行の文字数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      2. [max-name-length]

        classes, enums, enumcases, structs, protocols, elements, functions, labels, setters, typealiases, types, variables および constants 名の文字数の上限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

      3. [min-name-length]

        classes, enums, enumcases, structs, protocols, elements, functions, labels, setters, typealiases, types, variables および constants 名の文字数の下限を制限する。(tailorのコマンドラインオプションで明示的に指定した場合のみ有効になる。)

  4. Others

    1. [redundant-parentheses] Flag redundant parentheses

      制御構文(if, else if, switch, for, while, repeat-whileおよびguard文)、例外補足(throwおよびdo/catch文)、および初期化子(array, dictionary, initializer patterns???)の場合、 括弧で囲むべきではない。 さらに、パラメータがなく末尾がクロージャーであるメソッドを呼び出す場合、メソッド名の後に空の括弧を付けるべきでない。

    2. [brace-style] One true brace style

      中括弧は、"the one true brace style"に従う。

    3. [forced-type-cast] Flag force casts

      コンパイル時にキャストできるか確定できないため、"as!"の使用を避ける。 キャスト失敗した場合はランタイムエラーが発行される。 より安全な"as?"でキャストするべき。

    4. [multiple-imports] One import per line

      1行で複数のimport文は書かない。

    5. [terminating-semicolon] Flag semicolon terminated statements

      Swift does not require a semicolon after each statement in your code unless you wish to combine multiple statements on a single line. 複数文を1行にまとめる場合を除き、Swiftは文の末尾にセミコロンを必要としない。 複数文をセミコロンを使って1行に書いてはいけない。

    6. [todo-syntax] Verify TODO syntax

      TODOコメントは、ネストのない1行コメントに単独で定義されるべき。 TODOコメントは、<TODO: description> および <TODO(developer-name): description> 形式で記載するべき。 descriptionのない空のTODOコメントもダメ。 ("/"ではじまるドキュメンテーション用コメントにはTODOは記載するべきではない。)