diff options
Diffstat (limited to 'server/sonar-docs/src/pages/analysis/languages/php.md')
-rw-r--r-- | server/sonar-docs/src/pages/analysis/languages/php.md | 87 |
1 files changed, 1 insertions, 86 deletions
diff --git a/server/sonar-docs/src/pages/analysis/languages/php.md b/server/sonar-docs/src/pages/analysis/languages/php.md index 277f7427eee..3b16adac96d 100644 --- a/server/sonar-docs/src/pages/analysis/languages/php.md +++ b/server/sonar-docs/src/pages/analysis/languages/php.md @@ -3,89 +3,4 @@ title: PHP url: /analysis/languages/php/ --- - - -## Language-Specific Properties - -Discover and update the PHP-specific [properties](/analysis/analysis-parameters/) in: <!-- sonarcloud -->Project <!-- /sonarcloud -->**[Administration > General Settings > PHP](/#sonarqube-admin#/admin/settings?category=php)** - -## Analyze php.ini Files - -The PHP analyzer can analyze `php.ini` files with some specific rules (if these rules are activated in your Quality Profile). `php.ini` files must be part of the project you are analyzing, meaning the `php.ini` files have to be inside the directories listed in `sonar.sources`. -Rules targeting `php.ini` files can be quickly identified through the ["php-ini"](https://rules.sonarsource.com/php/tag/php-ini) tag set on them. - -<!-- sonarqube --> - -## Custom Rules - -### Overview - -The PHP analyzer parses the source code, creates an Abstract Syntax Tree (AST) and then walks through the entire tree. A coding rule is a visitor that is able to visit nodes from this AST. - -As soon as the coding rule visits a node, it can navigate its children and log issues if necessary. - -### Example Plugin - -To get started a sample plugin can be found here: [php-custom-rules](https://github.com/SonarSource/sonar-custom-rules-examples/tree/master/php-custom-rules). - -### Writing a Plugin - -Custom rules for PHP can be added by writing a SonarQube Plugin and using PHP analyzer APIs. -Here are the step to follow: - -#### Create SonarQube Plugin - -* create a standard SonarQube plugin project -* attach this plugin to the SonarQube PHP analyzer through the `pom.xml`: - * add the dependency to the PHP analyzer. - * add the following line in the sonar-packaging-maven-plugin configuration. - ``` - <basePlugin>php</basePlugin> - ``` -* implement the following extension points: - * [Plugin](http://javadocs.sonarsource.org/latest/apidocs/index.html?org/sonar/api/Plugin.html) - * [RulesDefinition](http://javadocs.sonarsource.org/latest/apidocs/index.html?org/sonar/api/server/rule/RulesDefinition.html) and [PHPCustomRuleRepository](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/visitors/PHPCustomRuleRepository.java), which can be implemented by a single class, to declare your custom rules -* declare the RulesDefinition as an extension in the Plugin extension point. - -#### Implement a Rule - -* create a class that will hold the implementation of the rule, it should: - * extend `PHPVisitorCheck` or `PHPSubscriptionCheck` - * define the rule name, key, tags, etc. with Java annotations. -* declare this class in the `RulesDefinition`. - -#### Implementation Details - -**Using `PHPVisitorCheck`** - -To explore a part of the AST, override a method from the PHPVisitorCheck. For example, if you want to explore "if statement" nodes, override [PHPVisitorCheck#visitIfStatement](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/visitors/PHPVisitorCheck.java#L265) method that will be called each time an [ifStatementTree](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/tree/statement/IfStatementTree.java) node is encountered in the AST. - -[[warning]] -| When overriding a visit method, you must call the super method in order to allow the visitor to visit the children the node. - -**Using `PHPSubscriptionCheck`** - -To explore a part of the AST, override [`PHPSubscriptionCheck#nodesToVisit`](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/visitors/PHPSubscriptionCheck.java#L33) by returning the list of the [`Tree#Kind`](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/tree/Tree.java#L124) of node you want to visit. For example, if you want to explore "if statement" nodes the method will return a list containing the element [`Tree#Kind#IF_STATEMENT`](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/tree/Tree.java#L761). - -**Create Issues** - -From the check, issue can be created by calling [`CheckContext#newIssue`](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/visitors/CheckContext.java#L90) method. - -**Testing Checks** - -To test custom checks you can use method [`PHPCheckVerifier#verify`](https://github.com/SonarSource/sonar-php/blob/master/php-frontend/src/main/java/org/sonar/plugins/php/api/tests/PHPCheckVerifier.java#L55). You should end each line with an issue with a comment in the following form: - -``` -// Noncompliant {{Message}} -``` - -Comment syntax is described [here](https://github.com/SonarSource/sonar-analyzer-commons/blob/master/test-commons/README.md). - -<!-- /sonarqube --> - -## Related Pages - -* [Test Coverage & Execution](/analysis/coverage/) -<!-- sonarqube --> -* [Adding Coding Rules](/extend/adding-coding-rules/) -<!-- /sonarqube --> +This is a placeholder file. It is required for Gatsby, but its content will be dynamically replaced. |