In dit eerste deel van het artikel wil ik in de eerste plaats laten zien dat het de moeite waard is om een aangepaste code-analyseregel te schrijven om codeconventies af te dwingen. Ten tweede wil ik laten zien dat naast Checkstyle en ktlint, Android Lint ook moet worden overwogen bij het maken van een opmaak-gerelateerde code analyse regel, ondanks dat dat niet zijn basis doel is. Ik zal uitleggen wat in mijn geval het belangrijkste voordeel is ten opzichte van de andere tools, en de innerlijke werking beschrijven die dit voordeel oplevert. Ter inspiratie zal ik ook de stappen laten zien die ik heb genomen om mijn formatteer regel te laten werken met Android Lint.
Motivatie
Ik raak gefrustreerd als ik formatteer-gerelateerd commentaar krijg op mijn samenvoeg verzoeken of als ik dergelijk commentaar moet toevoegen aan die van anderen. Soms moeten we takken veranderen om een enkele formatteringsfout in onze MR op te lossen, wat behoorlijk demotiverend is. Daarom ben ik gaan nadenken over manieren om dit kleine (maar belangrijke) probleem automatisch op te lossen, zodat we ons tijdens code-reviews op complexere zaken kunnen richten.
We gebruiken verschillende lint-tools, zoals ktlint of Checkstyle, voor het afdwingen van globale opmaakconventies (volgorde van variabelen, regellengte, etc.), maar deze bevatten standaard niet bepaalde bedrijfsbrede regels. Voor die gevallen ondersteunen de hierboven genoemde tools ook het toevoegen van aangepaste regels. Ik besloot er een te schrijven voor de meest voorkomende opmaakfouten die we maken:
We vereisen altijd dubbele regeleindes voor en na “block statements”, wat if, switch (wanneer in Kotlin), for, try, of while blokken kunnen zijn, tenzij ze precies aan het begin of het einde van een methode of een ander blok staan. Wij geloven dat dit onze code leesbaarder maakt, daarom laten we tijdens de code review altijd een opmerking achter als iemand deze regel overtreedt (en als het ons toevallig opvalt).
Wat is de beste tool voor dit probleem
We kunnen zeggen dat ktlint voor Kotlin en Checkstyle voor Java de belangrijkste tools voor het analyseren van opmaakcode zijn, maar nu kies ik toch een andere tool: Android Lint (niet alleen voor Android projecten), omdat het ook ondersteunt het schrijven van aangepaste regels die kunnen worden toegepast op Kotlin en Java op hetzelfde moment. Het lijkt een logischere keuze, omdat we beide talen gebruiken in onze Android projecten, en ik wilde niet twee keer dezelfde regel schrijven of ze tegelijkertijd onderhouden. Om nog maar te zwijgen over de integratie van de regel, die ook twee keer zou moeten gebeuren.
Waarom Java überhaupt nog belangrijk is
Als Android-ontwikkelaar moet ik code schrijven in zowel Java als Kotlin. We kunnen echter zeggen dat het de tijd niet meer waard is om ons op Java te richten, want nu Kotlin in opkomst is, gebruiken we het meer en meer in plaats van Java in onze codebase. Aan de andere kant denk ik dat de overgang niet zo snel gaat in grote projecten die al in productie zijn. Dus, omdat we ook in Java netjes opgemaakte code willen zien, is het belangrijk om deze regel voor beide talen te hebben.
Hoe schrijf je aangepaste lint regels
Er zijn veel tutorials en artikelen over het schrijven van aangepaste code analyse regels, dus ik zal er in deze post niet te veel over uitweiden. Maar als je geïnteresseerd bent, zijn hier een paar links die ik je kan aanraden voor de verschillende tools: Naar Checkstyle, de officiële doc, naar ktlint en Android Lint, Niklas Baudy’s geweldige medium artikelen.