Configure Onap Code Style for Idea IDE
Background
A consistent formatting is good regardless of specific project. There are lots of resources that explain why. Popular code style and code conventions documents often give a justification for each particular formatting decision.
ONAP
ONAP Java Code Style is based on Google Style with two modifications
Line length Indentation size
Link to onap code style: Java code style
Challenges
The challenge is to find a tool that would take care of code formatting automatically. Unfortunately, a generic tool never covers all possible cases of a particular style (e.g. Google’s).
We have tried the tools often mentioned in various forums, including the ONAP Wiki page above.
The IntelliJ formatting for Google Java Style is for an old version of IntelliJ, and affects also the formatting of other languages (Python, JavaScript, etc.), which we want to avoid. The Google Java Format plugin has the tab size and line length hard-coded, so that we had to fix and re-package it. Surprisingly, it also seems to contradict the Google Style Guide in some cases.
Solution
The home-built solution consists of two tools:
1. IntelliJ Checkstyle plugin coupled with a modified version of Checkstyle configuration for Google Style, which was made to comply with the ONAP requirements. 2. Thoroughly reviewed IntelliJ code formatting configuration for Java – aligned with the ONAP requirements as much as possible.
Setup
1. Save the attached onap_checkstyle_configuration.xml and onap_intellij_java_formatting.xml on your local disk.
2. Install https://plugins.jetbrains.com/plugin/1065-checkstyle-idea.
3. Go to File > Settings > Other Settings > Checkstyle.
4. Add a new Configuration File (green plus sign on the right).
5. Give it a name (e.g. “ONAP Checks”) and browse for the saved onap_checkstyle_configuration.xml.
6. Check the Active checkbox on the left.
7. Make sure “Only Java sources (including tests)” is selected for “Scan Scope” (top right).
8. Go to File > Settings > Editor > Code Style > Java.
9. Click the cogwheel to the right of “Scheme”, and select Import Scheme > IntelliJ IDEA code style XML.
10. Browse for the saved locally onap_intellij_java_formatting.xml; give the new configuration a new name, or leave it as is.
The base Checkstyle configuration used in the solution must merged once in a while with the original one, which may be updated: https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
Usage
You will see a new Checkstyle toolbar around the edge of the IntelliJ window.
Results of running Analyze > Inspect Code… will now include a Checkstyle section.
Checkstyle violation will be highlighted in the editor.
Running Code > Reformat Code will apply the ONAP formatting.
It can be run on a single file or an entire directory.
Keep in mind that it is impossible to configure the IntelliJ formatting to cover 100% of cases, so sometimes you’ll have to format manually. Our goal was to make IntelliJ at least accept the manual formatting – if it complies with the ONAP style (and the Checkstyle configuration). Please contact me if you have encountered a situation when IntelliJ forces formatting that is not accepted by Checkstyle.