TEAMMATES uses a number of static analysis tools in order to maintain code quality. This document will cover an overview of these tools and how to run them in local environment.
IDE integrations will be listed down where available, but no further information e.g. setting up will be provided.
The version number of all the tool stacks are declared in build.gradle
or package.json
.
When downloading the plugin for Eclipse/IntelliJ, find the plugin version that uses the correct version of the tool, e.g if CheckStyle 8.0 is used find an Eclipse/IntelliJ plugin that uses CheckStyle 8.0 as well. If the exact version of the plugin cannot be found, using the latest version is allowed, however there is no guarantee that there will be no backward-incompatible changes.
Conversely, when updating any tool, try to ensure that the tool version is supported by the Eclipse/IntelliJ plugin, e.g when upgrading CheckStyle to 8.0 try to ensure that there is an Eclipse/IntelliJ plugin which supports that version as well.
Tool name | Eclipse integration | IntelliJ integration | Ruleset |
---|---|---|---|
CheckStyle | Checkstyle Plug-in | CheckStyle-IDEA | teammates-checkstyle.xml |
PMD | eclipse-pmd | PMDPlugin | teammates-pmd.xml , teammates-pmdMain.xml |
SpotBugs | SpotBugs Eclipse Plugin | -1 | teammates-spotbugs.xml |
Macker | - | - | teammates-macker.xml |
TSLint | - | Built-in2 | teammates-tslint.yml |
JSONlint | - | - | - |
stylelint | - | Built-in2,3 | teammates-stylelint.yml |
lintspaces | - | - | - |
1 You may be able to use FindBugs-IDEA plugin instead.
2 Integrations are built-in and can be found under Languages & Frameworks
under File → Settings
or IntelliJ IDEA → Preferences
.
3 During setup: Copy $PROJECT_DIR$/static-analysis/teammates-stylelint.yml
to $PROJECT_DIR$/.stylelintrc.yml
.
Not all rules from all static analysis tools need to be followed 100% of the time; there are times where some rules need to be broken for various reasons. Most of the static analysis tools we use allow for such leeway through various means.
General rule of thumb when suppressing rules:
- The suppression should be as specific as possible, e.g. specific rule, specific scope (lines/methods/classes)
- The rule must be re-enabled after the suppression is no longer necessary
- The reason for violating the rule should be explained
An automated setup for some of the static analysis tools is provided for IntelliJ users.
-
Ensure the following plugins are installed:
CheckStyle-IDEA
PMDPlugin
- (Optional)
NodeJS
: You can this plugin to manage dependencies.
-
Run the command to setup the settings for the various plugins:
./gradlew setupIntellijStaticAnalysis
-
Restart IntelliJ IDEA.
- Once
CheckStyle-IDEA
is set-up, the version used will be kept in sync with the build script whenUse auto-import
is enabled. This is achieved by the Gradle tasksyncIntelliJCheckStyleVersion
which runs aftersetupIntellijStaticAnalysis
.- For
stylelint
, the installed packages innode_modules
are directly referenced in IntelliJ IDEA.
Note the following:
- Change
./gradlew
togradlew.bat
in Windows.- All the commands are assumed to be run from the root project folder, unless otherwise specified.
Tool name | Command |
---|---|
CheckStyle | ./gradlew checkstyleMain , ./gradlew checkstyleTest |
PMD | ./gradlew pmdMain , ./gradlew pmdTest |
SpotBugs | ./gradlew spotbugsMain , ./gradlew spotbugsTest |
Macker | ./gradlew macker |
TSLint | npm run lint:ts |
JSONlint | npm run lint:json |
stylelint | npm run lint:css |
lintspaces | npm run lint:spaces |
To run all static analysis tasks in one sitting, run the following two commands:
./gradlew lint --continue
npm run lint
Travis CI and AppVeyor CI will run static analysis before testing. If violations are found, the build will be terminated with an error before any testing is done in order to save time and resources.