• Stars
    star
    343
  • Rank 123,371 (Top 3 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created almost 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Gradle plugin that generates ErrorProne, Findbugs, Checkstyle, PMD, CPD, Lint, Detekt & Ktlint Tasks for every subproject.

gradle-code-quality-tools-plugin

Gradle plugin that configures Checkstyle, PMD, CPD, Lint, Detekt & Ktlint. All of these tools are also automatically hooked into the check gradle task. Below, I'll go more into depth how each of those plugins are configured.

This plugin requires Gradle 5.0 or later.

Set up

root/build.gradle

buildscript {
  repositories {
    mavenCentral()
    google()
  }
  dependencies {
    classpath "com.vanniktech:gradle-code-quality-tools-plugin:0.23.0"
  }
}

apply plugin: "com.vanniktech.code.quality.tools"

Snapshot

buildscript {
  repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
  }
  dependencies {
    classpath "com.vanniktech:gradle-code-quality-tools-plugin:0.24.0-SNAPSHOT"
  }
}

apply plugin: "com.vanniktech.code.quality.tools"

Configuration

The philosophy of this plugin is to fail early. This means having zero warnings / errors reported from any tools. If you're just getting started with this in a large code base you might not be able to achieve this right away in which case you might want to set failEarly to false and then apply at a finer more granular scope how each tool should behave e.g. checkstyle { ignoreFailures = false }.

Those are all the available configurations - shown with default values and their types. More information can be found in the Kotlin Documentation of the Extension and the respective extensions for designated integrations.

codeQualityTools {
  boolean failEarly = true
  boolean xmlReports = true
  boolean htmlReports = false
  boolean textReports = false
  String[] ignoreProjects = []

  checkstyle {
    boolean enabled = true
    String toolVersion = '8.6'
    String configFile = 'code_quality_tools/checkstyle.xml'
    Boolean ignoreFailures = null
    Boolean showViolations = null
    String source = 'src'
    List<String> include = ['**/*.java']
    List<String> exclude = ['**/gen/**']
  }
  pmd {
    boolean enabled = true
    String toolVersion = '6.0.0'
    String ruleSetFile = 'code_quality_tools/pmd.xml'
    Boolean ignoreFailures = null
    String source = 'src'
    List<String> include = ['**/*.java']
    List<String> exclude = ['**/gen/**']
  }
  lint {
    boolean enabled = true
    Boolean textReport = true
    String textOutput = 'stdout'
    Boolean abortOnError = null
    Boolean warningsAsErrors = null
    Boolean checkAllWarnings = null
    String baselineFileName = null
    Boolean absolutePaths = null
    File lintConfig = null
    Boolean checkReleaseBuilds = false
    Boolean checkTestSources = null
    Boolean checkDependencies = null
  }
  ktlint {
    boolean enabled = true
    String toolVersion = '0.32.0'
    boolean experimental = false
  }
  detekt {
    boolean enabled = true
    String toolVersion = '1.0.0'
    String config = 'code_quality_tools/detekt.yml'
    String baselineFileName = null
    boolean failFast = true
  }
  cpd {
    boolean enabled = true
    String source = 'src'
    String language = 'java'
    Boolean ignoreFailures = null
    int minimumTokenCount = 50
  }
  kotlin {
    boolean allWarningsAsErrors = true
  }
}

Tools

Here I'll give a bit more information about how each of the tools will be applied. If there's a Gradle task that this plugin will generate it will also be hooked up into the check Gradle task. This means that when you execute check all of the rools will be running for you.

Checkstyle

It'll apply the Checkstyle Plugin and generate the checkstyle task that will execute checkstyle. The configuration properties of codeQualityTools -> checkstyle mirror the properties from the plugin.

PMD

It'll apply the PMD Plugin and generate the pmd task that will execute pmd. The configuration properties of codeQualityTools -> pmd mirror the properties from the plugin.

CPD

It'll apply the CPD Plugin and generate the cpdCheck task that will execute cpd. The configuration properties of codeQualityTools -> cpd mirror the properties from the plugin.

Lint

This will only work when one of the Android Plugins (com.android.application, com.android.library, etc.) are applied. The configuration properties of codeQualityTools -> lint mirror the properties from the lintOptions.

Detekt

It'll use the specified detekt version and generate the detektCheck task which will run detekt on your code base.

Ktlint

It'll use the specified ktlint version and then generate two tasks. ktlint which will run ktlint over your code and flag issues. ktlintFormat will reformat your code.

Note: There might be some configuration properties that are not mirrored in which case feel free to open a PR. Personally, I don't have the need for all of them.

License

Copyright (C) 2016 Vanniktech - Niklas Baudy

Licensed under the Apache License, Version 2.0

More Repositories

1

Emoji

A library to add Emoji support to your Android / iOS / JVM Application
Kotlin
1,523
star
2

gradle-dependency-graph-generator-plugin

Gradle plugin that generates dependency graphs from your project.
Kotlin
1,343
star
3

gradle-maven-publish-plugin

A Gradle plugin that publishes your Android and Kotlin libraries, including sources and javadoc, to Maven Central or any other Nexus instance.
Kotlin
1,252
star
4

OnActivityResult

OnActivityResult annotation compiler for Android
Java
461
star
5

RxRiddles

Riddling your way to master RxJava
Kotlin
455
star
6

gradle-android-junit-jacoco-plugin

Gradle plugin that generates JaCoCo reports from an Android Gradle Project
Groovy
397
star
7

lint-rules

A set of very opinionated lint rules.
Kotlin
353
star
8

RxPermission

Reactive permissions for Android
Java
189
star
9

VNTNumberPickerPreference

NumberPicker Preference for Android
Java
174
star
10

gradle-android-apk-size-plugin

Gradle plugin that generates CSV files with apk size per output and variant of an apk
Groovy
84
star
11

gradle-android-javadoc-plugin

Gradle plugin that generates Java Documentation from an Android Gradle project.
Shell
80
star
12

VNTFontListPreference

ListPreference for Android which displays fonts
Java
77
star
13

kotlin-on-code-quality-tools

Demonstration of Code Quality Tools that are applicable with Kotlin
Kotlin
45
star
14

espresso-utils

Provides helper methods for asserting a few things that Espresso does not support out of the box.
Java
27
star
15

blurhash

BlurHash support for iOS, Android and JVM via Kotlin Multiplatform
Kotlin
19
star
16

TextBuilder

Provides a Class with a builder pattern for building beautiful text super easily. Internally it uses the Spannable API.
Java
17
star
17

SpeedReader

Cross-platform SpeedReader developed with Qt
C++
16
star
18

junit-rules

A set of handy junit rules.
Kotlin
15
star
19

RxBilling

Reactive wrapper around the Android Billing API
Kotlin
13
star
20

config-home

My home directory
Shell
12
star
21

multiplatform-locale

Type Safe Kotlin Multiplatform Locale implementation
Kotlin
10
star
22

SparseBuilders

Builders for SparseIntArray, SparseBooleanArray and SparseArray
Java
7
star
23

ui

Kotlin Multiplatform UI goodies
Kotlin
3
star
24

config-sublime

My Sublime 3 configuration
Python
1
star
25

playground

Empty project with basic dependencies for testing a few things out.
Ruby
1
star