url: /extend/adding-coding-rules/
---
-There are two ways to extend coding rules:
+There are three ways to add coding rules to SonarQube:
-* Writing coding rules using Java via a SonarQube plugin
+* Writing a SonarQube plugin in Java that uses SonarQube APIs to add new rules
* Adding XPath rules directly through the SonarQube web interface
+* Importing [Generic Issue Reports](/analysis/generic-issue/) generated by an independently run tool
-If both are available, the Java API will be more fully-featured than what's available for XPath, and is generally preferable.
+The Java API will be more fully-featured than what's available for XPath, and is generally preferable. However, this comes with the overhead of maintaining a SonarQube plugin (including keeping it up-to-date as APIs change, upgrading the plugin after releasing a new version).
+
+Importing [Generic Issue Reports](/analysis/generic-issue/) is a good solution when there's a very specific need for a subset of projects on your SonarQube instance. They are the most flexible option, but lack some features (such as being able to control their execution by inclusion in a Quality Profile).
[[info]]
| Before implementing a new coding rule, you should consider whether it is specific to your own context or might benefit others. If it might benefit others, you can propose it on the [Community Forum](https://community.sonarsource.com/). If there is shared interest, then it might be implemented for you directly in the related language plugin. It means less maintenance for you, and benefit to others.
## Custom rule support by language
-Languages not listed here don't support custom rules
-
- |XPath 1.0|Java|Other
----|---|---|---
-C#| - | - | ![](/images/check.svg)[Importing Issues from Third-Party Roslyn Analyzers (C#, VB.NET)](/analysis/external-issues/)
-COBOL| - | ![](/images/check.svg) | -
-Flex|![](/images/check.svg) | - | -
-Java | - | ![](/images/check.svg) | -
-JavaScript | - | ![](/images/check.svg) | -
-PHP | - | ![](/images/check.svg)| -
-PL/SQL | ![](/images/check.svg) | - | -
-PL/I | ![](/images/check.svg) | - | -
-Python | - | ![](/images/check.svg) | -
-RPG | - | ![](/images/check.svg)| -
-VB.NET| - | - | ![](/images/check.svg)[Importing Issues from Third-Party Roslyn Analyzers (C#, VB.NET)](/analysis/external-issues/)
-XML | ![](/images/check.svg) | - | -
+
+| | XPath 1.0 | Java | Generic Issue Reports | Other |
+|-|-|-|-|-|
+| ABAP | - | - | ![](/images/check.svg) | |
+| Apex | - | - | ![](/images/check.svg) | |
+| C# | - | - | ![](/images/check.svg) | ![](/images/check.svg)[Importing Issues from Third-Party Roslyn Analyzers (C#, VB.NET)](/analysis/external-issues/) |
+| C/C++/Objective-C | - | - | ![](/images/check.svg) | |
+| COBOL | - | ![](/images/check.svg) | ![](/images/check.svg) | |
+| CSS | - | - | ![](/images/check.svg) | |
+| Flex | ![](/images/check.svg) | - | ![](/images/check.svg) | |
+| Go | - | - | ![](/images/check.svg) | |
+| HTML | - | - | ![](/images/check.svg) | |
+| Java | - | ![](/images/check.svg) | ![](/images/check.svg) | |
+| JavaScript / Typescript | - | - | ![](/images/check.svg) | |
+| PHP | - | ![](/images/check.svg) | ![](/images/check.svg) | |
+| PL/SQL | ![](/images/check.svg) | - | ![](/images/check.svg) | |
+| PL/I | ![](/images/check.svg) | - | ![](/images/check.svg) | |
+| Python | - | ![](/images/check.svg) | ![](/images/check.svg) | |
+| RPG | - | ![](/images/check.svg) | ![](/images/check.svg) | |
+| Ruby | - | - | ![](/images/check.svg) | |
+| Scala | - | - | ![](/images/check.svg) | |
+| Swift | - | - | ![](/images/check.svg) | |
+| T-SQL | - | - | ![](/images/check.svg) | |
+| VB.NET | - | - | ![](/images/check.svg) | ![](/images/check.svg)[Importing Issues from Third-Party Roslyn Analyzers (C#, VB.NET)](/analysis/external-issues/) |
+| VB6 | - | - | ![](/images/check.svg) | |
+| XML | ![](/images/check.svg) | - | ![](/images/check.svg) | |
## Adding coding rules using Java
* [for COBOL](/analysis/languages/cobol/)
* [for Java](/analysis/languages/java/)
-* [for JavaScript](/analysis/languages/javascript/)
* [for PHP](/analysis/languages/php/)
* [for Python](/analysis/languages/python/)
* [for RPG](/analysis/languages/rpg/)