{"action":"created","comment":{"url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/comments/180789831","pull_request_review_id":111273352,"id":180789831,"diff_hunk":"@@ -37,122 +42,135 @@\n   public ProblemDescriptor[] checkFile(@NotNull PsiFile file,\n                                        @NotNull InspectionManager manager,\n                                        boolean isOnTheFly) {\n-    List<ProblemDescriptor> descriptors = new ArrayList<>();\n-\n     String cppcheckPath = Properties.get(Configuration.CONFIGURATION_KEY_CPPCHECK_PATH);\n     String cppcheckOptions = Properties.get(Configuration.CONFIGURATION_KEY_CPPCHECK_OPTIONS);\n \n-    if (!isCFamilyFile(file)) {\n-      return descriptors.toArray(new ProblemDescriptor[descriptors.size()]);\n+    VirtualFile vFile = file.getVirtualFile();\n+    if (vFile == null || !isCFamilyFile(vFile)) {\n+      return ProblemDescriptor.EMPTY_ARRAY;\n     }\n \n     if (cppcheckPath == null || cppcheckPath.isEmpty()) {\n       StatusBar.Info.set(\"[!] Error: Please set path of cppcheck in File->Settings->Other Settings\",\n                          file.getProject());\n-      return descriptors.toArray(new ProblemDescriptor[descriptors.size()]);\n+      return ProblemDescriptor.EMPTY_ARRAY;\n     }\n \n-    Document document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile());\n+    Document document = FileDocumentManager.getInstance().getDocument(vFile);\n     if (document == null || document.getLineCount() == 0) {\n-      return descriptors.toArray(new ProblemDescriptor[descriptors.size()]);\n+      return ProblemDescriptor.EMPTY_ARRAY;\n     }\n \n+    File tempFile = null;\n     try {\n-      String cppcheckOutput = executeCommandOnFile(cppcheckPath, cppcheckOptions, file);\n+      tempFile = FileUtil.createTempFile(\"\", vFile.getName(), true);\n+      FileUtil.writeToFile(tempFile, document.getText());\n+      String cppcheckOutput = executeCommandOnFile(cppcheckPath, prependIncludeDir(cppcheckOptions, vFile), tempFile.getAbsolutePath());\n \n-      if (cppcheckOutput.isEmpty()) {\n-        return descriptors.toArray(new ProblemDescriptor[descriptors.size()]);\n-      }\n-      Scanner scanner = new Scanner(cppcheckOutput);\n-\n-      //Notifications.Bus.notify(new Notification(\"cppcheck\",\n-      //                                          \"Info\",\n-      //                                          file.getVirtualFile().getCanonicalPath() + \"\\n\" +\n-      //                                          cppcheckOutput,\n-      //                                          NotificationType.INFORMATION));\n-\n-      // Example output line:\n-      // [C:\\Users\\John Hagen\\ClionProjects\\test\\main.cpp:12]: (style) Variable 'a' is not assigned a value.\n-      // [main.cpp:12] -> [main.cpp:14]: (performance) Variable 'a' is reassigned a value before the old one has been used.\n-      Pattern pattern = Pattern.compile(\"^\\\\[(.+?):(\\\\d+)\\\\](?:\\\\s+->\\\\s+\\\\[.+\\\\])?:\\\\s+\\\\((\\\\w+)\\\\)\\\\s+(.+)\");\n-\n-      String line;\n-      while (scanner.hasNext()) {\n-        line = scanner.nextLine();\n-        Matcher matcher = pattern.matcher(line);\n-\n-        if (!matcher.matches()) {\n-          continue;\n-        }\n-\n-        final String fileName = Paths.get(matcher.group(1)).getFileName().toString();\n-        int lineNumber = Integer.parseInt(matcher.group(2), 10);\n-        final String severity = matcher.group(3);\n-        final String errorMessage = matcher.group(4);\n-\n-        // If a .c or .cpp file #include's header files, Cppcheck will also run on the header files and print\n-        // any errors. These errors don't apply to the current .cpp field and should not be drawn. They can\n-        // be distinguished by checking the file name.\n-        // Example:\n-        //   Checking Test.cpp ...\n-        //   [Test.h:2]: (style) Unused variable: x\n-        //   [Test.cpp:3]: (style) Unused variable: y\n-        if (!fileName.equals(file.getName())) {\n-          continue;\n-        }\n-\n-        // Because cppcheck runs on physical files, it's possible for the editor lines\n-        // (lines in the IDE memory) to get out of sync from the lines on disk.\n-        if (lineNumber > document.getLineCount()) {\n-          lineNumber = document.getLineCount();\n-        }\n-\n-        // Cppcheck error or parsing error.\n-        if (lineNumber <= 0) {\n-          continue;\n-        }\n-\n-        // Document counts lines starting at 0, rather than 1 like in cppcheck.\n-        lineNumber -= 1;\n-\n-        final int lineStartOffset = document.getLineStartOffset(lineNumber);\n-        final int lintEndOffset = document.getLineEndOffset(lineNumber);\n-\n-        // Do not highlight empty whitespace prepended to lines.\n-        String line_text = document.getImmutableCharSequence().subSequence(\n-          lineStartOffset, lintEndOffset).toString();\n-\n-        final int numberOfPrependedSpaces = line_text.length() -\n-                                            line_text.replaceAll(\"^\\\\s+\",\"\").length();\n-\n-        ProblemDescriptor problemDescriptor = manager.createProblemDescriptor(\n-          file,\n-          TextRange.create(lineStartOffset + numberOfPrependedSpaces, lintEndOffset),\n-          \"cppcheck: (\" + severity + \") \" + errorMessage,\n-          severityToHighlightType(severity),\n-          true);\n-        descriptors.add(problemDescriptor);\n+      if (!cppcheckOutput.isEmpty()) {\n+        List<ProblemDescriptor> descriptors = parseOutput(file, manager, document, cppcheckOutput, tempFile.getName());\n+        return descriptors.toArray(new ProblemDescriptor[0]);\n       }\n-    } catch (ExecutionException ex) {\n+    } catch (ExecutionException | IOException ex) {\n       Notifications.Bus.notify(new Notification(\"cppcheck\",\n                                                 \"Error\",\n-                                                \"ExecutionException: \" + ex.getMessage(),\n+                                                ex.getClass().getSimpleName() + \": \" + ex.getMessage(),\n                                                 NotificationType.INFORMATION));\n       ex.printStackTrace();\n+    } finally {\n+      if (tempFile != null) {\n+        FileUtil.delete(tempFile);\n+      }\n     }\n \n-    return descriptors.toArray(new ProblemDescriptor[descriptors.size()]);\n+    return ProblemDescriptor.EMPTY_ARRAY;\n+  }\n+\n+  @NotNull\n+  private static String prependIncludeDir(@NotNull String cppcheckOptions, @NotNull VirtualFile vFile) {\n+    VirtualFile dir = vFile.getParent();\n+    if (dir == null) return cppcheckOptions;\n+    String path = dir.getCanonicalPath();\n+    if (path == null) return cppcheckOptions;\n+    return String.format(\"-I\\\"%s\\\" %s\", path, cppcheckOptions);\n+  }\n+\n+  @NotNull\n+  private List<ProblemDescriptor> parseOutput(@NotNull PsiFile psiFile,\n+                                              @NotNull InspectionManager manager,\n+                                              @NotNull Document document,\n+                                              @NotNull String cppcheckOutput,\n+                                              @NotNull String sourceFileName) {\n+    List<ProblemDescriptor> descriptors = new ArrayList<>();\n+    Scanner scanner = new Scanner(cppcheckOutput);\n+\n+    //Notifications.Bus.notify(new Notification(\"cppcheck\",\n+    //                                          \"Info\",\n+    //                                          psiFile.getVirtualFile().getCanonicalPath() + \"\\n\" +\n+    //                                          cppcheckOutput,\n+    //                                          NotificationType.INFORMATION));\n+\n+    // Example output line:\n+    // [C:\\Users\\John Hagen\\ClionProjects\\test\\main.cpp:12]: (style) Variable 'a' is not assigned a value.\n+    // [main.cpp:12] -> [main.cpp:14]: (performance) Variable 'a' is reassigned a value before the old one has been used.\n+    Pattern pattern = Pattern.compile(\"^\\\\[(.+?):(\\\\d+)\\\\](?:\\\\s+->\\\\s+\\\\[.+\\\\])?:\\\\s+\\\\((\\\\w+)\\\\)\\\\s+(.+)\");\n+\n+    String line;\n+    while (scanner.hasNext()) {\n+      line = scanner.nextLine();\n+      Matcher matcher = pattern.matcher(line);\n+\n+      if (!matcher.matches()) {\n+        continue;\n+      }\n+\n+      final String fileName = Paths.get(matcher.group(1)).getFileName().toString();\n+      int lineNumber = Integer.parseInt(matcher.group(2), 10);\n+      final String severity = matcher.group(3);\n+      final String errorMessage = matcher.group(4);\n+\n+      // If a .c or .cpp file #include's header files, Cppcheck will also run on the header files and print\n+      // any errors. These errors don't apply to the current .cpp field and should not be drawn. They can\n+      // be distinguished by checking the file name.\n+      // Example:\n+      //   Checking Test.cpp ...\n+      //   [Test.h:2]: (style) Unused variable: x\n+      //   [Test.cpp:3]: (style) Unused variable: y\n+      if (!fileName.equals(sourceFileName)) {\n+        continue;\n+      }\n+\n+      // Cppcheck error or parsing error.\n+      if (lineNumber <= 0 || lineNumber > document.getLineCount()) {\n+        continue;\n+      }\n+\n+      // Document counts lines starting at 0, rather than 1 like in cppcheck.\n+      lineNumber -= 1;\n+\n+      final int lineStartOffset = DocumentUtil.getFirstNonSpaceCharOffset(document, lineNumber);\n+      final int lintEndOffset = document.getLineEndOffset(lineNumber);\n+\n+      ProblemDescriptor problemDescriptor = manager.createProblemDescriptor(\n+        psiFile,\n+        TextRange.create(lineStartOffset, lintEndOffset),\n+        \"cppcheck: (\" + severity + \") \" + errorMessage,\n+        severityToHighlightType(severity),\n+        true);\n+      descriptors.add(problemDescriptor);\n+    }\n+    return descriptors;\n   }\n \n   private static final int TIMEOUT_MS = 60 * 1000;\n \n   private static String executeCommandOnFile(final String command,","path":"src/com/github/johnthagen/cppcheck/CppcheckInspection.java","position":227,"original_position":227,"commit_id":"149b1fa9b905c66034bea87d22a7eaee679d86e3","original_commit_id":"149b1fa9b905c66034bea87d22a7eaee679d86e3","user":{"login":"fastasturtle","id":6112930,"avatar_url":"https://avatars1.githubusercontent.com/u/6112930?v=4","gravatar_id":"","url":"https://api.github.com/users/fastasturtle","html_url":"https://github.com/fastasturtle","followers_url":"https://api.github.com/users/fastasturtle/followers","following_url":"https://api.github.com/users/fastasturtle/following{/other_user}","gists_url":"https://api.github.com/users/fastasturtle/gists{/gist_id}","starred_url":"https://api.github.com/users/fastasturtle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fastasturtle/subscriptions","organizations_url":"https://api.github.com/users/fastasturtle/orgs","repos_url":"https://api.github.com/users/fastasturtle/repos","events_url":"https://api.github.com/users/fastasturtle/events{/privacy}","received_events_url":"https://api.github.com/users/fastasturtle/received_events","type":"User","site_admin":false},"body":"Yes, they should, I probably wasn't too consistent with (not) adding them","created_at":"2018-04-11T15:08:03Z","updated_at":"2018-04-11T15:08:04Z","html_url":"https://github.com/johnthagen/clion-cppcheck/pull/17#discussion_r180789831","pull_request_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/comments/180789831"},"html":{"href":"https://github.com/johnthagen/clion-cppcheck/pull/17#discussion_r180789831"},"pull_request":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17"}},"in_reply_to_id":180610550},"pull_request":{"url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17","id":180743259,"html_url":"https://github.com/johnthagen/clion-cppcheck/pull/17","diff_url":"https://github.com/johnthagen/clion-cppcheck/pull/17.diff","patch_url":"https://github.com/johnthagen/clion-cppcheck/pull/17.patch","issue_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/17","number":17,"state":"open","locked":false,"title":" Run cppcheck on a temporary file with a possibly unsaved document text","user":{"login":"fastasturtle","id":6112930,"avatar_url":"https://avatars1.githubusercontent.com/u/6112930?v=4","gravatar_id":"","url":"https://api.github.com/users/fastasturtle","html_url":"https://github.com/fastasturtle","followers_url":"https://api.github.com/users/fastasturtle/followers","following_url":"https://api.github.com/users/fastasturtle/following{/other_user}","gists_url":"https://api.github.com/users/fastasturtle/gists{/gist_id}","starred_url":"https://api.github.com/users/fastasturtle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fastasturtle/subscriptions","organizations_url":"https://api.github.com/users/fastasturtle/orgs","repos_url":"https://api.github.com/users/fastasturtle/repos","events_url":"https://api.github.com/users/fastasturtle/events{/privacy}","received_events_url":"https://api.github.com/users/fastasturtle/received_events","type":"User","site_admin":false},"body":"Here is the PR that hopefully fixes #14. Before the cppcheck is run, a temp file with the document contents is created, and the header search path with the original directory is prepended to mimic the normal behavior.\r\n\r\nUnfortunately, I've had to move some things around to do it, so the diff is rather unnecessary noisy.","created_at":"2018-04-10T22:18:56Z","updated_at":"2018-04-11T15:08:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d3c88612e2eb730b59336cfb072941cff5a1951d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17/commits","review_comments_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17/comments","review_comment_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/comments{/number}","comments_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/17/comments","statuses_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/statuses/149b1fa9b905c66034bea87d22a7eaee679d86e3","head":{"label":"fastasturtle:master","ref":"master","sha":"149b1fa9b905c66034bea87d22a7eaee679d86e3","user":{"login":"fastasturtle","id":6112930,"avatar_url":"https://avatars1.githubusercontent.com/u/6112930?v=4","gravatar_id":"","url":"https://api.github.com/users/fastasturtle","html_url":"https://github.com/fastasturtle","followers_url":"https://api.github.com/users/fastasturtle/followers","following_url":"https://api.github.com/users/fastasturtle/following{/other_user}","gists_url":"https://api.github.com/users/fastasturtle/gists{/gist_id}","starred_url":"https://api.github.com/users/fastasturtle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fastasturtle/subscriptions","organizations_url":"https://api.github.com/users/fastasturtle/orgs","repos_url":"https://api.github.com/users/fastasturtle/repos","events_url":"https://api.github.com/users/fastasturtle/events{/privacy}","received_events_url":"https://api.github.com/users/fastasturtle/received_events","type":"User","site_admin":false},"repo":{"id":127560127,"name":"clion-cppcheck","full_name":"fastasturtle/clion-cppcheck","owner":{"login":"fastasturtle","id":6112930,"avatar_url":"https://avatars1.githubusercontent.com/u/6112930?v=4","gravatar_id":"","url":"https://api.github.com/users/fastasturtle","html_url":"https://github.com/fastasturtle","followers_url":"https://api.github.com/users/fastasturtle/followers","following_url":"https://api.github.com/users/fastasturtle/following{/other_user}","gists_url":"https://api.github.com/users/fastasturtle/gists{/gist_id}","starred_url":"https://api.github.com/users/fastasturtle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fastasturtle/subscriptions","organizations_url":"https://api.github.com/users/fastasturtle/orgs","repos_url":"https://api.github.com/users/fastasturtle/repos","events_url":"https://api.github.com/users/fastasturtle/events{/privacy}","received_events_url":"https://api.github.com/users/fastasturtle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fastasturtle/clion-cppcheck","description":":ballot_box_with_check: cppcheck plugin for CLion","fork":true,"url":"https://api.github.com/repos/fastasturtle/clion-cppcheck","forks_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/forks","keys_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/teams","hooks_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/hooks","issue_events_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/issues/events{/number}","events_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/events","assignees_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/assignees{/user}","branches_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/branches{/branch}","tags_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/tags","blobs_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/git/refs{/sha}","trees_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/statuses/{sha}","languages_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/languages","stargazers_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/stargazers","contributors_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/contributors","subscribers_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/subscribers","subscription_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/subscription","commits_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/commits{/sha}","git_commits_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/git/commits{/sha}","comments_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/comments{/number}","issue_comment_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/issues/comments{/number}","contents_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/contents/{+path}","compare_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/merges","archive_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/downloads","issues_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/issues{/number}","pulls_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/pulls{/number}","milestones_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/milestones{/number}","notifications_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/labels{/name}","releases_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/releases{/id}","deployments_url":"https://api.github.com/repos/fastasturtle/clion-cppcheck/deployments","created_at":"2018-03-31T18:33:05Z","updated_at":"2018-04-10T22:21:52Z","pushed_at":"2018-04-10T22:21:51Z","git_url":"git://github.com/fastasturtle/clion-cppcheck.git","ssh_url":"git@github.com:fastasturtle/clion-cppcheck.git","clone_url":"https://github.com/fastasturtle/clion-cppcheck.git","svn_url":"https://github.com/fastasturtle/clion-cppcheck","homepage":"","size":36,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"johnthagen:master","ref":"master","sha":"f6628097e94f1b95ac680473afd416c53731952e","user":{"login":"johnthagen","id":10340167,"avatar_url":"https://avatars1.githubusercontent.com/u/10340167?v=4","gravatar_id":"","url":"https://api.github.com/users/johnthagen","html_url":"https://github.com/johnthagen","followers_url":"https://api.github.com/users/johnthagen/followers","following_url":"https://api.github.com/users/johnthagen/following{/other_user}","gists_url":"https://api.github.com/users/johnthagen/gists{/gist_id}","starred_url":"https://api.github.com/users/johnthagen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnthagen/subscriptions","organizations_url":"https://api.github.com/users/johnthagen/orgs","repos_url":"https://api.github.com/users/johnthagen/repos","events_url":"https://api.github.com/users/johnthagen/events{/privacy}","received_events_url":"https://api.github.com/users/johnthagen/received_events","type":"User","site_admin":false},"repo":{"id":49236949,"name":"clion-cppcheck","full_name":"johnthagen/clion-cppcheck","owner":{"login":"johnthagen","id":10340167,"avatar_url":"https://avatars1.githubusercontent.com/u/10340167?v=4","gravatar_id":"","url":"https://api.github.com/users/johnthagen","html_url":"https://github.com/johnthagen","followers_url":"https://api.github.com/users/johnthagen/followers","following_url":"https://api.github.com/users/johnthagen/following{/other_user}","gists_url":"https://api.github.com/users/johnthagen/gists{/gist_id}","starred_url":"https://api.github.com/users/johnthagen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnthagen/subscriptions","organizations_url":"https://api.github.com/users/johnthagen/orgs","repos_url":"https://api.github.com/users/johnthagen/repos","events_url":"https://api.github.com/users/johnthagen/events{/privacy}","received_events_url":"https://api.github.com/users/johnthagen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/johnthagen/clion-cppcheck","description":":ballot_box_with_check: cppcheck plugin for CLion","fork":false,"url":"https://api.github.com/repos/johnthagen/clion-cppcheck","forks_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/forks","keys_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/teams","hooks_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/hooks","issue_events_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/events{/number}","events_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/events","assignees_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/assignees{/user}","branches_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/branches{/branch}","tags_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/tags","blobs_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/git/refs{/sha}","trees_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/statuses/{sha}","languages_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/languages","stargazers_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/stargazers","contributors_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/contributors","subscribers_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/subscribers","subscription_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/subscription","commits_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/commits{/sha}","git_commits_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/git/commits{/sha}","comments_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/comments{/number}","issue_comment_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/comments{/number}","contents_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/contents/{+path}","compare_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/merges","archive_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/downloads","issues_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues{/number}","pulls_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls{/number}","milestones_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/milestones{/number}","notifications_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/labels{/name}","releases_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/releases{/id}","deployments_url":"https://api.github.com/repos/johnthagen/clion-cppcheck/deployments","created_at":"2016-01-07T23:24:33Z","updated_at":"2018-04-11T10:27:16Z","pushed_at":"2018-04-11T10:27:13Z","git_url":"git://github.com/johnthagen/clion-cppcheck.git","ssh_url":"git@github.com:johnthagen/clion-cppcheck.git","clone_url":"https://github.com/johnthagen/clion-cppcheck.git","svn_url":"https://github.com/johnthagen/clion-cppcheck","homepage":"","size":32,"stargazers_count":12,"watchers_count":12,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":6,"license":null,"forks":3,"open_issues":6,"watchers":12,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17"},"html":{"href":"https://github.com/johnthagen/clion-cppcheck/pull/17"},"issue":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/17"},"comments":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/issues/17/comments"},"review_comments":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17/comments"},"review_comment":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/pulls/17/commits"},"statuses":{"href":"https://api.github.com/repos/johnthagen/clion-cppcheck/statuses/149b1fa9b905c66034bea87d22a7eaee679d86e3"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"fastasturtle"}}