A Gradle plugin for counting lines of code in the same fashion as the Grails stats command.
The plugin is available from Bintray’s JCenter. The latest release is 0.2.2. You can use it as follows
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.kordamp.gradle:stats-gradle-plugin:0.2.2'
}
}
apply plugin: 'org.kordamp.gradle.stats'The plugin adds a new task named stats. This task is responsible for computing
lines of code. The default configuration is good enough to work with standard
Java or Groovy projects without additional setup. Invoking this task in a plain
Java project yields something like the following output
$ gradle stats
:stats
+----------------------+-------+-------+
| Name | Files | LOC |
+----------------------+-------+-------+
| Java Sources | 1 | 5 |
+----------------------+-------+-------+
| Totals | 1 | 5 |
+----------------------+-------+-------+It’s possible to generate an aggregate report when multiple projects are configured. Simply add the following to the root project
task aggregateStatsReport(type: org.kordamp.gradle.stats.AggregateStatsReportTask) {}You may define a value for the projects property (a collection of project names) if you want desire to limit the number
of projects to be queried for stats. The default setting is to query all subprojects. Note that the stats task must have
been called before the aggregate task, such as
$ gradle stats aggregateStatsReportThe following properties can be configured for the stats task
- formats
-
List of output formats. Valid values are
xml,htmlandtxt. - reportDir
-
Directory where output reports should be placed. default value is
project.file("${project.buildDir}/reports/stats") - counters
-
a Map of additional
org.kordamp.gradle.stats.Counterimplementations, keyed by extension. - paths
-
Maps of additional source paths that contain sources to be counted.
The following configuration may be used in a Griffon project for example
stats {
formats = ['xml', 'html', 'txt']
paths = [
model: [name: 'Models', path: 'griffon-app/models'],
view: [name: 'Views', path: 'griffon-app/views'],
controller: [name: 'Controllers', path: 'griffon-app/controllers'],
service: [name: 'Services', path: 'griffon-app/services'],
config: [name: 'Config', path: 'griffon-app/conf'],
lifecycle: [name: 'Lifecycle', path: 'griffon-app/lifecycle']
]
}Which may make the stats task output something similar to
+----------------------+-------+-------+
| Name | Files | LOC |
+----------------------+-------+-------+
| Groovy Sources | 4 | 28 |
| Java Sources | 1 | 2 |
| Groovy Test Sources | 1 | 16 |
| Models | 1 | 8 |
| Views | 1 | 24 |
| Controllers | 1 | 10 |
| Config | 1 | 12 |
| Lifecycle | 1 | 16 |
+----------------------+-------+-------+
| Totals | 11 | 116 |
+----------------------+-------+-------+You may restrict a path to match an specific file type, such as java or any other supported file extension, for example
stats {
formats = ['xml', 'html', 'txt']
paths = [
foo: [name: 'Foos', path: 'src/foo', extension: 'foo']
]
}-
java
-
groovy
-
scala
-
kt (Kotlin)
-
js
-
css
-
scss (SASS)
-
xml
-
html
-
fxml (JavaFX FXML)
-
properties
-
sql
-
yaml