{"action":"created","comment":{"url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/comments/42016173","id":42016173,"diff_hunk":"@@ -19,85 +19,130 @@\n  */\n package org.sonar.php.checks.formatting;\n \n-import com.sonar.sslr.api.AstNode;\n-import com.sonar.sslr.api.Token;\n-import org.sonar.php.api.PHPKeyword;\n-import org.sonar.php.api.PHPPunctuator;\n import org.sonar.php.checks.FormattingStandardCheck;\n-import org.sonar.php.parser.PHPGrammar;\n+import org.sonar.php.checks.utils.TokenVisitor;\n+import org.sonar.php.tree.impl.PHPTree;\n+import org.sonar.plugins.php.api.tree.ScriptTree;\n+import org.sonar.plugins.php.api.tree.Tree;\n+import org.sonar.plugins.php.api.tree.declaration.FunctionDeclarationTree;\n+import org.sonar.plugins.php.api.tree.declaration.MethodDeclarationTree;\n+import org.sonar.plugins.php.api.tree.declaration.ParameterListTree;\n+import org.sonar.plugins.php.api.tree.expression.FunctionCallTree;\n+import org.sonar.plugins.php.api.tree.expression.FunctionExpressionTree;\n+import org.sonar.plugins.php.api.tree.expression.LexicalVariablesTree;\n+import org.sonar.plugins.php.api.tree.lexical.SyntaxToken;\n+import org.sonar.plugins.php.api.visitors.PHPVisitorCheck;\n \n-public class FunctionSpacingCheck extends SpacingCheck {\n+import javax.annotation.Nullable;\n+import java.util.List;\n \n-  public void visitNode(FormattingStandardCheck formattingCheck, AstNode node) {\n-    if (formattingCheck.isOneSpaceAfterComma && node.is(PHPGrammar.PARAMETER_LIST, PHPGrammar.FUNCTION_CALL_PARAMETER_LIST)) {\n-      checkSpaceForComma(formattingCheck, node);\n-    }\n-    if (formattingCheck.isNoSpaceAfterMethodName && node.is(PHPGrammar.FUNCTION_DECLARATION, PHPGrammar.METHOD_DECLARATION, PHPGrammar.FUNCTION_CALL_PARAMETER_LIST)) {\n-      checkSpaceAfterFunctionName(formattingCheck, node);\n-    }\n-    if (formattingCheck.isClosureSpacing && node.is(PHPGrammar.FUNCTION_EXPRESSION)) {\n-      checkClosureSpacing(formattingCheck, node);\n-    }\n+public class FunctionSpacingCheck extends PHPVisitorCheck implements FormatingCheck {\n+\n+  private static final String METHOD_NAME_SPACES_MESSAGE = \"Remove all space between the method name \\\"%s\\\" and the opening parenthesis.\";\n+  private static final String CLOSURE_SPACES_MESSAGE = \"Put exactly one space between the \\\"function\\\" keyword and the opening parenthesis.\";\n+  private static final String CLOSURE_LEXICAL_VARS_SPACES_MESSAGE = \"Put exactly one space before and after the \\\"use\\\" keyword.\";\n+  private static final String[] COMMA_SPACES_MESSAGE = {\n+    \"Remove any space before comma separated arguments.\",\n+    \"Put exactly one space after comma separated arguments.\",\n+    \"Remove any space before comma separated arguments and put exactly one space after comma separated arguments.\"\n+  };\n+\n+  private FormattingStandardCheck check;\n+\n+  @Override\n+  public void visitScript(FormattingStandardCheck formattingCheck, ScriptTree scriptTree) {\n+    this.check = formattingCheck;\n+    super.visitScript(scriptTree);\n   }\n \n-  private void checkClosureSpacing(FormattingStandardCheck formattingCheck, AstNode node) {\n-    Token lParenToken = node.getFirstChild(PHPPunctuator.LPARENTHESIS).getToken();\n-    Token functionKeyword = node.getFirstChild(PHPKeyword.FUNCTION).getToken();\n+  @Override\n+  public void visitParameterList(ParameterListTree tree) {\n+    checkSpaceForComma(new TokenVisitor(tree), tree.parameters().getSeparators(), tree);\n+    super.visitParameterList(tree);\n+  }\n \n-    if (getNbSpaceBetween(functionKeyword, lParenToken) != 1) {\n-      formattingCheck.reportIssue(\"Put exactly one space between the \\\"function\\\" keyword and the opening parenthesis.\", node);\n-    }\n+  @Override\n+  public void visitFunctionCall(FunctionCallTree tree) {\n+    checkSpaceForComma(new TokenVisitor(tree), tree.arguments().getSeparators(), tree);\n+    checkSpaceAfterFunctionName(((PHPTree) tree.callee()).getLastToken(), tree.openParenthesisToken());\n+    super.visitFunctionCall(tree);\n+  }\n+\n+  @Override\n+  public void visitMethodDeclaration(MethodDeclarationTree tree) {\n+    checkSpaceAfterFunctionName(tree.name().token(), tree.parameters().openParenthesisToken());\n+    super.visitMethodDeclaration(tree);\n+  }\n+\n+  @Override\n+  public void visitFunctionDeclaration(FunctionDeclarationTree tree) {\n+    checkSpaceAfterFunctionName(tree.name().token(), tree.parameters().openParenthesisToken());\n+    super.visitFunctionDeclaration(tree);\n+  }\n+\n+  @Override\n+  public void visitFunctionExpression(FunctionExpressionTree tree) {\n+    checkClosureSpacing(tree.functionToken(), tree.parameters(),tree.lexicalVars());\n+    super.visitFunctionExpression(tree);\n+  }\n \n-    AstNode lexicalVars = node.getFirstChild(PHPGrammar.LEXICAL_VARS);\n-    if (lexicalVars != null && !isSpaceAround(lexicalVars.getFirstChild(PHPKeyword.USE), 1 /* space before */, 1 /* space after */)) {\n-      formattingCheck.reportIssue(\"Put exactly one space before and after the \\\"use\\\" keyword.\", lexicalVars);\n+  private void checkClosureSpacing(SyntaxToken functionKeyword, ParameterListTree parameters, @Nullable LexicalVariablesTree lexicalVars) {\n+    if (check.isClosureSpacing) {\n+\n+      if (TokenUtils.getNbSpaceBetween(functionKeyword, parameters.openParenthesisToken()) != 1) {\n+        check.reportIssue(CLOSURE_SPACES_MESSAGE, functionKeyword);\n+      }\n+\n+      if (lexicalVars != null) {\n+        int spaceBeforeUse = TokenUtils.getNbSpaceBetween(parameters.closeParenthesisToken(), lexicalVars.useToken());\n+        int spaceAfterUse = TokenUtils.getNbSpaceBetween(lexicalVars.useToken(), lexicalVars.openParenthesisToken());\n+\n+        if (spaceBeforeUse != 1 || spaceAfterUse != 1) {\n+          check.reportIssue(CLOSURE_LEXICAL_VARS_SPACES_MESSAGE, lexicalVars);\n+        }\n+      }\n     }\n   }\n \n   /**\n    * Check there is not space between a function's name and the opening parenthesis.\n    */\n-  private void checkSpaceAfterFunctionName(FormattingStandardCheck formattingCheck, AstNode node) {\n-    Token lParenToken = node.getFirstChild(PHPPunctuator.LPARENTHESIS).getToken();\n-    Token funcNameToken = node.is(PHPGrammar.FUNCTION_CALL_PARAMETER_LIST) ?\n-      node.getPreviousAstNode().getLastToken() : node.getFirstChild(PHPGrammar.IDENTIFIER).getToken();\n-\n-    if (getNbSpaceBetween(funcNameToken, lParenToken) != 0) {\n-      formattingCheck.reportIssue(\"Remove all space between the method name \\\"\" + funcNameToken.getOriginalValue() + \"\\\" and the opening parenthesis.\", node);\n+  private void checkSpaceAfterFunctionName(SyntaxToken functionName, SyntaxToken openParenthesis) {\n+    if (check.isNoSpaceAfterMethodName && TokenUtils.getNbSpaceBetween(functionName, openParenthesis) != 0) {\n+      check.reportIssue(String.format(METHOD_NAME_SPACES_MESSAGE, functionName.text()), functionName);\n     }\n   }\n \n   /**\n    * Check space around the arguments' comma.\n    */\n-  private void checkSpaceForComma(FormattingStandardCheck formattingCheck, AstNode node) {\n+  private void checkSpaceForComma(TokenVisitor tokenVisitor, List<SyntaxToken> commas, Tree tree) {\n+    if (check.isOneSpaceAfterComma) {\n+\n     int msgIndex = -1;","path":"php-checks/src/main/java/org/sonar/php/checks/formatting/FunctionSpacingCheck.java","position":137,"original_position":137,"commit_id":"f75ef31ebd9d25d4bace88d414c3b6c91b12aff7","original_commit_id":"f75ef31ebd9d25d4bace88d414c3b6c91b12aff7","user":{"login":"SonarTech","id":1842438,"avatar_url":"https://avatars.githubusercontent.com/u/1842438?v=3","gravatar_id":"","url":"https://api.github.com/users/SonarTech","html_url":"https://github.com/SonarTech","followers_url":"https://api.github.com/users/SonarTech/followers","following_url":"https://api.github.com/users/SonarTech/following{/other_user}","gists_url":"https://api.github.com/users/SonarTech/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarTech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarTech/subscriptions","organizations_url":"https://api.github.com/users/SonarTech/orgs","repos_url":"https://api.github.com/users/SonarTech/repos","events_url":"https://api.github.com/users/SonarTech/events{/privacy}","received_events_url":"https://api.github.com/users/SonarTech/received_events","type":"User","site_admin":false},"body":"![MAJOR](https://raw.githubusercontent.com/SonarCommunity/sonar-github/master/images/severity-major.png) Make this line start at column 7. [![rule](https://raw.githubusercontent.com/SonarCommunity/sonar-github/master/images/rule.png)](http://nemo.sonarqube.org/coding_rules#rule_key=squid%3AIndentationCheck)\n","created_at":"2015-10-14T16:22:26Z","updated_at":"2015-10-14T16:22:26Z","html_url":"https://github.com/SonarCommunity/sonar-php/pull/54#discussion_r42016173","pull_request_url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54","_links":{"self":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/comments/42016173"},"html":{"href":"https://github.com/SonarCommunity/sonar-php/pull/54#discussion_r42016173"},"pull_request":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54"}}},"pull_request":{"url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54","id":47672048,"html_url":"https://github.com/SonarCommunity/sonar-php/pull/54","diff_url":"https://github.com/SonarCommunity/sonar-php/pull/54.diff","patch_url":"https://github.com/SonarCommunity/sonar-php/pull/54.patch","issue_url":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/54","number":54,"state":"open","locked":false,"title":"SONARPHP-508 Migrate \"Source code should comply with formatting standards\"","user":{"login":"lindamartin","id":5627510,"avatar_url":"https://avatars.githubusercontent.com/u/5627510?v=3","gravatar_id":"","url":"https://api.github.com/users/lindamartin","html_url":"https://github.com/lindamartin","followers_url":"https://api.github.com/users/lindamartin/followers","following_url":"https://api.github.com/users/lindamartin/following{/other_user}","gists_url":"https://api.github.com/users/lindamartin/gists{/gist_id}","starred_url":"https://api.github.com/users/lindamartin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lindamartin/subscriptions","organizations_url":"https://api.github.com/users/lindamartin/orgs","repos_url":"https://api.github.com/users/lindamartin/repos","events_url":"https://api.github.com/users/lindamartin/events{/privacy}","received_events_url":"https://api.github.com/users/lindamartin/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-14T15:09:40Z","updated_at":"2015-10-14T16:22:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f52d899e0352323a9b01416757151ec00d198265","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54/commits","review_comments_url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54/comments","review_comment_url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/54/comments","statuses_url":"https://api.github.com/repos/SonarCommunity/sonar-php/statuses/f75ef31ebd9d25d4bace88d414c3b6c91b12aff7","head":{"label":"lindamartin:SONARPHP-508","ref":"SONARPHP-508","sha":"f75ef31ebd9d25d4bace88d414c3b6c91b12aff7","user":{"login":"lindamartin","id":5627510,"avatar_url":"https://avatars.githubusercontent.com/u/5627510?v=3","gravatar_id":"","url":"https://api.github.com/users/lindamartin","html_url":"https://github.com/lindamartin","followers_url":"https://api.github.com/users/lindamartin/followers","following_url":"https://api.github.com/users/lindamartin/following{/other_user}","gists_url":"https://api.github.com/users/lindamartin/gists{/gist_id}","starred_url":"https://api.github.com/users/lindamartin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lindamartin/subscriptions","organizations_url":"https://api.github.com/users/lindamartin/orgs","repos_url":"https://api.github.com/users/lindamartin/repos","events_url":"https://api.github.com/users/lindamartin/events{/privacy}","received_events_url":"https://api.github.com/users/lindamartin/received_events","type":"User","site_admin":false},"repo":{"id":42060908,"name":"sonar-php","full_name":"lindamartin/sonar-php","owner":{"login":"lindamartin","id":5627510,"avatar_url":"https://avatars.githubusercontent.com/u/5627510?v=3","gravatar_id":"","url":"https://api.github.com/users/lindamartin","html_url":"https://github.com/lindamartin","followers_url":"https://api.github.com/users/lindamartin/followers","following_url":"https://api.github.com/users/lindamartin/following{/other_user}","gists_url":"https://api.github.com/users/lindamartin/gists{/gist_id}","starred_url":"https://api.github.com/users/lindamartin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lindamartin/subscriptions","organizations_url":"https://api.github.com/users/lindamartin/orgs","repos_url":"https://api.github.com/users/lindamartin/repos","events_url":"https://api.github.com/users/lindamartin/events{/privacy}","received_events_url":"https://api.github.com/users/lindamartin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lindamartin/sonar-php","description":"","fork":true,"url":"https://api.github.com/repos/lindamartin/sonar-php","forks_url":"https://api.github.com/repos/lindamartin/sonar-php/forks","keys_url":"https://api.github.com/repos/lindamartin/sonar-php/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lindamartin/sonar-php/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lindamartin/sonar-php/teams","hooks_url":"https://api.github.com/repos/lindamartin/sonar-php/hooks","issue_events_url":"https://api.github.com/repos/lindamartin/sonar-php/issues/events{/number}","events_url":"https://api.github.com/repos/lindamartin/sonar-php/events","assignees_url":"https://api.github.com/repos/lindamartin/sonar-php/assignees{/user}","branches_url":"https://api.github.com/repos/lindamartin/sonar-php/branches{/branch}","tags_url":"https://api.github.com/repos/lindamartin/sonar-php/tags","blobs_url":"https://api.github.com/repos/lindamartin/sonar-php/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lindamartin/sonar-php/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lindamartin/sonar-php/git/refs{/sha}","trees_url":"https://api.github.com/repos/lindamartin/sonar-php/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lindamartin/sonar-php/statuses/{sha}","languages_url":"https://api.github.com/repos/lindamartin/sonar-php/languages","stargazers_url":"https://api.github.com/repos/lindamartin/sonar-php/stargazers","contributors_url":"https://api.github.com/repos/lindamartin/sonar-php/contributors","subscribers_url":"https://api.github.com/repos/lindamartin/sonar-php/subscribers","subscription_url":"https://api.github.com/repos/lindamartin/sonar-php/subscription","commits_url":"https://api.github.com/repos/lindamartin/sonar-php/commits{/sha}","git_commits_url":"https://api.github.com/repos/lindamartin/sonar-php/git/commits{/sha}","comments_url":"https://api.github.com/repos/lindamartin/sonar-php/comments{/number}","issue_comment_url":"https://api.github.com/repos/lindamartin/sonar-php/issues/comments{/number}","contents_url":"https://api.github.com/repos/lindamartin/sonar-php/contents/{+path}","compare_url":"https://api.github.com/repos/lindamartin/sonar-php/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lindamartin/sonar-php/merges","archive_url":"https://api.github.com/repos/lindamartin/sonar-php/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lindamartin/sonar-php/downloads","issues_url":"https://api.github.com/repos/lindamartin/sonar-php/issues{/number}","pulls_url":"https://api.github.com/repos/lindamartin/sonar-php/pulls{/number}","milestones_url":"https://api.github.com/repos/lindamartin/sonar-php/milestones{/number}","notifications_url":"https://api.github.com/repos/lindamartin/sonar-php/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lindamartin/sonar-php/labels{/name}","releases_url":"https://api.github.com/repos/lindamartin/sonar-php/releases{/id}","created_at":"2015-09-07T15:35:18Z","updated_at":"2015-09-07T15:35:19Z","pushed_at":"2015-10-14T16:11:56Z","git_url":"git://github.com/lindamartin/sonar-php.git","ssh_url":"git@github.com:lindamartin/sonar-php.git","clone_url":"https://github.com/lindamartin/sonar-php.git","svn_url":"https://github.com/lindamartin/sonar-php","homepage":"http://docs.codehaus.org/display/SONAR/PHP+Plugin","size":10403,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SonarCommunity:master","ref":"master","sha":"911c0c1429aed09bd67f29114969f9890412be54","user":{"login":"SonarCommunity","id":1303819,"avatar_url":"https://avatars.githubusercontent.com/u/1303819?v=3","gravatar_id":"","url":"https://api.github.com/users/SonarCommunity","html_url":"https://github.com/SonarCommunity","followers_url":"https://api.github.com/users/SonarCommunity/followers","following_url":"https://api.github.com/users/SonarCommunity/following{/other_user}","gists_url":"https://api.github.com/users/SonarCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarCommunity/subscriptions","organizations_url":"https://api.github.com/users/SonarCommunity/orgs","repos_url":"https://api.github.com/users/SonarCommunity/repos","events_url":"https://api.github.com/users/SonarCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/SonarCommunity/received_events","type":"Organization","site_admin":false},"repo":{"id":4544982,"name":"sonar-php","full_name":"SonarCommunity/sonar-php","owner":{"login":"SonarCommunity","id":1303819,"avatar_url":"https://avatars.githubusercontent.com/u/1303819?v=3","gravatar_id":"","url":"https://api.github.com/users/SonarCommunity","html_url":"https://github.com/SonarCommunity","followers_url":"https://api.github.com/users/SonarCommunity/followers","following_url":"https://api.github.com/users/SonarCommunity/following{/other_user}","gists_url":"https://api.github.com/users/SonarCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarCommunity/subscriptions","organizations_url":"https://api.github.com/users/SonarCommunity/orgs","repos_url":"https://api.github.com/users/SonarCommunity/repos","events_url":"https://api.github.com/users/SonarCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/SonarCommunity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SonarCommunity/sonar-php","description":"","fork":false,"url":"https://api.github.com/repos/SonarCommunity/sonar-php","forks_url":"https://api.github.com/repos/SonarCommunity/sonar-php/forks","keys_url":"https://api.github.com/repos/SonarCommunity/sonar-php/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SonarCommunity/sonar-php/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SonarCommunity/sonar-php/teams","hooks_url":"https://api.github.com/repos/SonarCommunity/sonar-php/hooks","issue_events_url":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/events{/number}","events_url":"https://api.github.com/repos/SonarCommunity/sonar-php/events","assignees_url":"https://api.github.com/repos/SonarCommunity/sonar-php/assignees{/user}","branches_url":"https://api.github.com/repos/SonarCommunity/sonar-php/branches{/branch}","tags_url":"https://api.github.com/repos/SonarCommunity/sonar-php/tags","blobs_url":"https://api.github.com/repos/SonarCommunity/sonar-php/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SonarCommunity/sonar-php/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SonarCommunity/sonar-php/git/refs{/sha}","trees_url":"https://api.github.com/repos/SonarCommunity/sonar-php/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SonarCommunity/sonar-php/statuses/{sha}","languages_url":"https://api.github.com/repos/SonarCommunity/sonar-php/languages","stargazers_url":"https://api.github.com/repos/SonarCommunity/sonar-php/stargazers","contributors_url":"https://api.github.com/repos/SonarCommunity/sonar-php/contributors","subscribers_url":"https://api.github.com/repos/SonarCommunity/sonar-php/subscribers","subscription_url":"https://api.github.com/repos/SonarCommunity/sonar-php/subscription","commits_url":"https://api.github.com/repos/SonarCommunity/sonar-php/commits{/sha}","git_commits_url":"https://api.github.com/repos/SonarCommunity/sonar-php/git/commits{/sha}","comments_url":"https://api.github.com/repos/SonarCommunity/sonar-php/comments{/number}","issue_comment_url":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/comments{/number}","contents_url":"https://api.github.com/repos/SonarCommunity/sonar-php/contents/{+path}","compare_url":"https://api.github.com/repos/SonarCommunity/sonar-php/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SonarCommunity/sonar-php/merges","archive_url":"https://api.github.com/repos/SonarCommunity/sonar-php/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SonarCommunity/sonar-php/downloads","issues_url":"https://api.github.com/repos/SonarCommunity/sonar-php/issues{/number}","pulls_url":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls{/number}","milestones_url":"https://api.github.com/repos/SonarCommunity/sonar-php/milestones{/number}","notifications_url":"https://api.github.com/repos/SonarCommunity/sonar-php/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SonarCommunity/sonar-php/labels{/name}","releases_url":"https://api.github.com/repos/SonarCommunity/sonar-php/releases{/id}","created_at":"2012-06-04T08:36:12Z","updated_at":"2015-09-24T13:22:53Z","pushed_at":"2015-10-14T16:21:47Z","git_url":"git://github.com/SonarCommunity/sonar-php.git","ssh_url":"git@github.com:SonarCommunity/sonar-php.git","clone_url":"https://github.com/SonarCommunity/sonar-php.git","svn_url":"https://github.com/SonarCommunity/sonar-php","homepage":"http://docs.codehaus.org/display/SONAR/PHP+Plugin","size":14867,"stargazers_count":41,"watchers_count":41,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":31,"mirror_url":null,"open_issues_count":17,"forks":31,"open_issues":17,"watchers":41,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54"},"html":{"href":"https://github.com/SonarCommunity/sonar-php/pull/54"},"issue":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/54"},"comments":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/issues/54/comments"},"review_comments":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54/comments"},"review_comment":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/pulls/54/commits"},"statuses":{"href":"https://api.github.com/repos/SonarCommunity/sonar-php/statuses/f75ef31ebd9d25d4bace88d414c3b6c91b12aff7"}}}}