---
-title: Developing a plugin
+title: Plugin basics
url: /extend/developing-plugin/
---
---
-title: Extending the Web App
+title: Adding pages to the webapp
url: /extend/extend-web-app/
---
SonarQube provides the ability to add a new JavaScript page. A page (or page extension) is a JavaScript application that runs in the SonarQube environment. You can find the example of page extensions in the SonarQube or [sonar-custom-plugin-example](https://github.com/SonarSource/sonar-custom-plugin-example/tree/6.x/) repositories on GitHub.
This page gives guidelines to I18n for:
-* Plugin developers who would like to apply the i18n mechanism in their own plugin, so that this plugin can be available in several languages.
+* Plugin developers who would like to apply the i18n mechanism in their own plugins, so that these plugins can be available in several languages.
* People who would like to help the community by making the platform available in a new language.
## Principles
1. Write the grammar. This is the hardest part.
1. Write a parser (a parser simply parses an input based on your grammar to yield a parse tree).
1. Test your grammar, to ensure it is able to parse real-life language files.
-1. Write a few parse tree visitors. Some visitors will compute metrics, while others will enforce [coding rules](/extend/adding-coding-rules/). A dozen or so visitors is sufficient for an initial release.
+1. Write a few parse tree visitors. Some visitors will compute metrics such as [executable lines](/extend/executable-lines/), while others will enforce [coding rules](/extend/adding-coding-rules/). A dozen or so visitors is sufficient for an initial release.
1. Write a scanner Sensor, in a SonarQube plugin, to launch the visitors.
1. Compute
1. issues
"children": [
"/extend/web-api/",
"/extend/adding-coding-rules/",
- "/extend/developing-plugin/",
- "/extend/new-languages/",
- "/extend/executable-lines/",
- "/extend/adding-scm/",
- "/extend/extend-web-app/",
+ {
+ "title": "Developing a plugin",
+ "children": [
+ "/extend/developing-plugin/",
+ "/extend/new-languages/",
+ "/extend/executable-lines/",
+ "/extend/extend-web-app/",
+ "/extend/adding-scm/"
+ ]
+ },
"/extend/i18n/",
"/extend/deploying-to-marketplace/",
"/extend/contributing/"
"children": [
"/extend/web-api/",
"/extend/adding-coding-rules/",
- "/extend/developing-plugin/",
- "/extend/new-languages/",
- "/extend/executable-lines/",
- "/extend/adding-scm/",
- "/extend/extend-web-app/",
+ {
+ "title": "Developing a plugin",
+ "children": [
+ "/extend/developing-plugin/",
+ "/extend/new-languages/",
+ "/extend/executable-lines/",
+ "/extend/extend-web-app/",
+ "/extend/adding-scm/"
+ ]
+ },
"/extend/i18n/",
"/extend/deploying-to-marketplace/",
"/extend/contributing/"