LINTによるチームルールの強化👩‍🔧


数ヶ月前、私のチームは、私たちのコードのどこかにTODOを残すとき、常にいくつかのものを提供する必要があるという合意に達しました.
  • 藤堂に演説する人
  • 東海道が残った日付
  • 何をすべきかについてのコメントまたは説明
  • しかし、記憶は色あせます、そして、時々人々は忘れます.だから私はそれが簡単に誰もがルールを遵守するためにライブテンプレートを作った.単純なAlt + EnterとTaada、入力するToDoテンプレートがあります.
    カスタムテンプレート
    あなたがこれがどうしたかについてより知りたいならば、私.
    すべては細くてダンディに見えました、しかし、2、3ヵ月後に、私は我々がテンプレートを持っているとしても、時々人々に気がつきました✨ 忘れる✨ を埋める.
    私たちは人々にテンプレートを使用するように思い出させることができます、しかし、私は何度も何度も何かを言っているその迷惑な人でありたくありません.我々が開発者ワークフローにこのチーム規則を組み込むならば、それはよりよくありませんか?それで、それは私が考えて、なぜ人間の介入を削除し、ツールをその仕事をさせるカスタムリントルールを書くか?

    すばらしい考え


    リントは静的な分析者であり、組み込みのルールは素晴らしいです!彼らは一般的な問題を特定するのを助けるcall super() ), バグconstrain a view ), または潜在的な最適化overdraw ) 私たちのコードでは、すぐにそれらを修正するチャンスを与えます.
    これらの規則は柔軟です.我々は選択することができますし、選択したいものexclude from running , 我々は選択することができますfail the build if something goes wrong , 私たちもidentify a specific issue to be ignored .
    そこに多くの偉大な話がそこにリントの歴史、哲学、および機能の概要を与えるthis one by Tor Norbye from KotlinConf 2017 .
    リントはしばらくの間、私たち自身のリントチェックを書くためのサポートもしばらくの間、されているので、確かにそこに正しい参照がありますか?ジョンロドリゲスによるこの良い概要が、ありますfrom Droidcon NYC 2017 そして、アランViveretteとRahl Ravikumarによるこの非常に情報の話.
    彼らはそれが十分に簡単に見えるようにします.確かに私はこれを行うことができます.💃

    最悪の考え


    あなたが何をしているかを知っているならば.そして、oooohママは、私が何をしていたかについて、わかりません.
    The Android tools site 見捨てられる🙈. サンプル規則はbit basic しかし、私がものをセットアップする方法を理解するのを除いて、それは本当に何も私に話しません.
    しかし、Zarahは、なぜプラットフォーム内のものをコピーしないのですか?私はしたHUNDREDS of them . どちらを見ても圧倒的です.
    私は、誰かが私にこの3ヵ月で再びこれをするよう頼んでいるならば、私は私が何をしたか、または私がどのようにそれを働かせたかを完全に忘れていたでしょう🤷‍♀️). 公正な警告:私は常に私が理解していないか、またはちょうど推測していたものを呼び出すことになります.
    それを始めましょう.🙇‍♀️

    気になる


    コードに潜る前に理解する必要があるいくつかの重要な概念があります.リントは、問題と検出器によって支えられます.
    問題は、我々がバグの不適切であるか潜在的な源としてハイライトしたい実現を特定します.レポートからこの抜粋をとって、この展望から問題の解剖を見ましょう:

    問題があります.
    ref
    ノート
    1
    簡単な説明
    間違ったことの要約
    2
    解説
    これがなぜ問題と考えられるかの詳細を提供します.また、可能な修正を示唆するか、関連文書へのリンクを提供することができます.
    3
    ID
    問題のユニークな識別子.これは開発者がこの問題の報告を抑制するために使うものです@Supress4
    カテゴリ
    この問題がバケツされる領域を特定します.多種多様なavailable categories , からのカバー地域A11Y へのアクセスINTEROPERABILITY_JAVA ( JavaからKollinを呼び出すときの問題)TYPOGRAPHY .
    5
    重大度
    これは、この問題がどのように扱われるかに影響を及ぼしますseveral options , with FATAL 最も深刻な(ビルドが中断され、nopesアウト)です.ユーザは、ERRORlintOptions.isAbortOnError = true 彼らのbuild.gradle ファイル.
    6
    優先度
    1から10までの数、10が最も高い優先度を示す
    検出器は重い持ち上げをして、問題がどこにあるかについてわかります.彼らはほぼすべての種類のファイルを見ることができます-マニフェスト?✅, リソースファイル?✅ Gradleファイル?✅
    単一の検出器は、関連する問題の任意の数を識別することができますし、それぞれの問題を個別に報告することができます.
    lintはすべての既存の検出器をpre-defined order . これは、LINTルールでは、コルトファイルとXMLファイルの両方で何かをチェックする必要がある場合(リソースの使用状況など)、チェックが実行される順序が問題となります.

    設定


    私たちのカスタムルールは家が必要ですそして、彼らの家は新しいモジュールです.プロジェクトを右クリックして選択New > Module 次に選択Java or Kotlin Library
    新しくつくられたbuild.gradle LINTの依存性を追加します.(注:私はKotlin DSL )
    // The Lint version is strongly tied to the Android Gradle Plugin (AGP) version
    // Add 23 to the major version number of AGP (x in x.y.z)
    // The project is currently dependent on AGP v4.1.1
    val lintVersion = "27.1.1"
    
    // Lint
    compileOnly("com.android.tools.lint:lint-api:${lintVersion}")
    compileOnly("com.android.tools.lint:lint-checks:${lintVersion}")
    
    // Lint testing
    testImplementation("com.android.tools.lint:lint:${lintVersion}")
    testImplementation("com.android.tools.lint:lint-tests:${lintVersion}")
    testImplementation("junit:junit:4.13.1")
    
    
    我々のリント旅行の次の部分は、長くて、危険です.だからここで迅速な休憩を取るし、上記の交渉を見て確認してください⏸️ 滞在は、我々は最終的に我々の非常に自身の検出器を書くために取得するこのシリーズの次のポストのためにチューニング!