This SonarQube plugin analyzes JSON files and:
- Computes metrics: lines of code, statements, etc.
- Checks various guidelines to find out potential bugs and code smells through more than 12 checks
- Provides the ability to write your own checks
- Download ad install SonarQube
- Install the JSON plugin by a direct download. The latest version is compatible with SonarQube 6.7+
- Install your favorite scanner (SonarQube Scanner, Maven, Ant, etc.)
- Analyze your code
You're thinking of new valuable rules? Version 2.0 or greater provides an API to write your own custom checks. A sample plugin with detailed explanations is available here. If your custom rules may benefit the community, feel free to create a pull request in order to make the rule available in the JSON analyzer.
You're thinking of new rules that may benefit the community but don't have the time or the skills to write them? Feel free to create an issue for your rules to be taken under consideration.
If a JSON file is containing some heavily nested objects (more than a hundred nested levels), you may face a StackOverflowError
looking like:
Exception in thread "main" java.lang.StackOverflowError
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.convertChildren(SyntaxTreeCreator.java:128)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.visitNonTerminal(SyntaxTreeCreator.java:119)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.visit(SyntaxTreeCreator.java:72)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.visitNonTerminal(SyntaxTreeCreator.java:89)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.visit(SyntaxTreeCreator.java:72)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.convertChildren(SyntaxTreeCreator.java:129)
at com.sonar.sslr.impl.typed.SyntaxTreeCreator.visitNonTerminal(SyntaxTreeCreator.java:119)
...
Increasing the JVM stack size should fix your issue.
If you are running your analysis with:
- The SonarQube Scanner, set the
SONAR_SCANNER_OPTS
environment variable to-Xss10m
for instance - Maven, set the
MAVEN_OPTS
environment variable to-Xss10m
for instance
and rerun your analysis.
- BOM should not be used for UTF-8 files
- File names should comply with a naming convention
- Files should contain an empty new line at the end
- Regular expression on key
- Tabulation characters should not be used
- "author" should match the required value in Puppet "metadata.json" files
- "license" should be valid in Puppet "metadata.json" files
- "license" should match the required value in Puppet "metadata.json" files
- "version" should be a semantic version in Puppet "metadata.json" files
- Deprecated keys should be removed from Puppet "metadata.json" files
- Duplicated dependencies should be removed from Puppet "metadata.json" files
- Puppet "metadata.json" files should define all the required keys