{"action":"created","comment":{"url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/comments/85416015","pull_request_review_id":6130017,"id":85416015,"diff_hunk":"@@ -0,0 +1,408 @@\n+import * as vscode from \"vscode\";\n+\n+import { Position } from './../motion/position';\n+import { VimState } from './../mode/modeHandler';\n+import { ModeName } from './../mode/mode';\n+import { TextEditor } from './../textEditor';\n+\n+export class EasyMotion {\n+  private _vimState: VimState;\n+\n+  /**\n+   * Refers to the accumulated keys for depth navigation\n+   */\n+  public accumulation = \"\";\n+\n+  /**\n+   * Array of all markers and decorations\n+   */\n+  private markers: EasyMotion.Marker[];\n+  private visibleMarkers: EasyMotion.Marker[]; // Array of currently showing markers\n+  private decorations: any[][] = [];\n+\n+  /**\n+   * TODO: For future motions\n+   */\n+  private static specialCharactersRegex: RegExp = /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g;\n+\n+  /**\n+   * Caches for decorations\n+   */\n+  private static decorationTypeCache: vscode.TextEditorDecorationType[] = [];\n+  private static svgCache: { [code: string] : vscode.Uri } = {};\n+\n+  /**\n+   * The key sequence for marker name generation\n+   */\n+  public static keyTable = [\n+    \"a\", \"s\", \"d\", \"g\", \"h\", \"k\", \"l\", \"q\", \"w\", \"e\",\n+    \"r\", \"t\", \"y\", \"u\", \"i\", \"o\", \"p\", \"z\", \"x\", \"c\",\n+    \"v\", \"b\", \"n\", \"m\", \"f\", \"j\"\n+  ];\n+\n+  constructor(vimState: VimState) {\n+    this._vimState = vimState;\n+\n+    this.visibleMarkers = [];\n+  }\n+\n+  /**\n+   * Generate a marker following a sequence for the name and depth levels\n+   */\n+  public static generateMarker(index: number, length: number, position: Position, markerPosition: Position): EasyMotion.Marker {\n+    let keyTable = EasyMotion.keyTable;\n+    var availableKeyTable = keyTable.slice();\n+\n+    // Depth table should always include a ;\n+    var keyDepthTable = [\";\"];\n+    var totalSteps = 0;\n+\n+    if (length >= keyTable.length) {\n+        var totalRemainder = Math.max(length - keyTable.length, 0);\n+        totalSteps = Math.floor(totalRemainder / keyTable.length);\n+\n+        for (var i = 0; i < totalSteps; i++) {\n+            keyDepthTable.push(availableKeyTable.pop());\n+        }\n+    }\n+\n+    var prefix = \"\";\n+    if (index >= availableKeyTable.length) {\n+        // Length of available keys before reset and \";\"\n+        var oldLength = availableKeyTable.length;\n+        // The index that remains after taking away the first-level depth markers\n+        var remainder = index - availableKeyTable.length;\n+\n+        // \";\" can be used as the last marker key, when inside a marker with depth. Reset to available keys and add \";\"\n+        availableKeyTable = keyTable.slice();\n+        availableKeyTable.push(\";\");\n+\n+        // Depth index counts down instead of up\n+        var inverted = (length - oldLength - 1 - remainder);\n+        var steps = Math.floor((inverted) / availableKeyTable.length);\n+\n+        // Add the key to the prefix\n+        prefix += keyDepthTable[steps];\n+\n+        // Check if we're on the last depth level\n+        if (steps >= totalSteps) {\n+            // Return the proper key for this index\n+            return new EasyMotion.Marker(prefix + availableKeyTable[remainder % availableKeyTable.length], markerPosition);\n+        }\n+\n+        // Return the proper index for depths earlier than the last one, including prefix\n+        var num = (availableKeyTable.length - 1 - inverted % availableKeyTable.length) % availableKeyTable.length;\n+        return new EasyMotion.Marker(prefix + availableKeyTable[num], markerPosition);\n+    }\n+\n+    // Return the last key in the marker, including prefix\n+    return new EasyMotion.Marker(prefix + availableKeyTable[index % availableKeyTable.length], markerPosition);\n+  }\n+\n+  /**\n+   * Create and cache decoration types for different marker lengths\n+   */\n+  public static getDecorationType(length: number): vscode.TextEditorDecorationType {\n+    var cache = this.decorationTypeCache[length];\n+    if (cache) {\n+      return cache;\n+    }\n+\n+    var width = length * 8;\n+    var type = vscode.window.createTextEditorDecorationType({\n+      after: {\n+        margin: `0 0 0 -${width}px`,\n+        height: `14px`,\n+        width: `${width}px`\n+      }\n+    });\n+\n+    this.decorationTypeCache[length] = type;\n+\n+    return type;\n+  }\n+\n+  /**\n+   * Create and cache the SVG data URI for different marker codes and colors\n+   */\n+  private static getSvgDataUri(code: string, backgroundColor: string, fontColor: string): vscode.Uri {\n+      var cache = this.svgCache[code];\n+      if (cache) {\n+        return cache;\n+      }\n+\n+      const width = code.length * 8 + 1;\n+      var uri = vscode.Uri.parse(\n+        `data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ` +\n+        `13\" height=\"14\" width=\"${width}\"><rect width=\"${width}\" height=\"14\" rx=\"2\" ry=\"2\" ` +\n+        `style=\"fill: ${backgroundColor};\"></rect><text font-family=\"Consolas\" font-size=\"14px\" ` +\n+        `fill=\"${fontColor}\" x=\"1\" y=\"10\">${code}</text></svg>`);\n+\n+      this.svgCache[code] = uri;\n+\n+      return uri;\n+  }\n+\n+  /**\n+   * Enter EasyMotion mode\n+   */\n+  public enterMode() {\n+    this.accumulation = \"\";\n+    this._vimState.currentMode = ModeName.EasyMotionMode;\n+  }\n+\n+  /**\n+   * Exit EasyMotion mode and clean up\n+   */\n+  public exitMode() {\n+    this._vimState.currentMode = ModeName.Normal;\n+\n+    this.accumulation = \"\";\n+    this.clearMarkers();\n+    this.clearDecorations();\n+  }\n+\n+  /**\n+   * Clear all decorations\n+   */\n+  public clearDecorations() {\n+    var editor = vscode.window.activeTextEditor;\n+    for (var i = 1; i <= this.decorations.length; i++) {\n+      editor.setDecorations(EasyMotion.getDecorationType(i), []);\n+    }\n+  }\n+\n+  /**\n+   * Clear all markers\n+   */\n+  public clearMarkers() {\n+    this.markers = [];\n+    this.visibleMarkers = [];\n+  }\n+\n+  public addMarker(marker: EasyMotion.Marker) {\n+    this.markers.push(marker);\n+  }\n+\n+  public getMarker(index: number): EasyMotion.Marker {\n+    return this.markers[index];\n+  }\n+\n+  /**\n+   * Find markers beginning with a string\n+   */\n+  public findMarkers(nail: string, visible = true): EasyMotion.Marker[] {\n+    var arr = visible ? this.visibleMarkers : this.markers;\n+    var markers: EasyMotion.Marker[] = [];\n+    for (var i = 0; i < arr.length; i++) {\n+      var marker = arr[i];\n+\n+      if (marker.name.startsWith(nail)) {\n+        markers.push(marker);\n+      }\n+    }\n+\n+    return markers;\n+  }\n+\n+  /**\n+   * Search and sort using the index of a match compared to the index of position (usually the cursor)\n+   */\n+  public sortedSearch(position: Position, searchString = \"\", options: EasyMotion.SearchOptions = {}): EasyMotion.Match[] {","path":"src/easymotion/easymotion.ts","position":211,"original_position":211,"commit_id":"365ddf42350940c93a7a9a1660c0ccee0a897d25","original_commit_id":"365ddf42350940c93a7a9a1660c0ccee0a897d25","user":{"login":"johnfn","id":167745,"avatar_url":"https://avatars.githubusercontent.com/u/167745?v=3","gravatar_id":"","url":"https://api.github.com/users/johnfn","html_url":"https://github.com/johnfn","followers_url":"https://api.github.com/users/johnfn/followers","following_url":"https://api.github.com/users/johnfn/following{/other_user}","gists_url":"https://api.github.com/users/johnfn/gists{/gist_id}","starred_url":"https://api.github.com/users/johnfn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnfn/subscriptions","organizations_url":"https://api.github.com/users/johnfn/orgs","repos_url":"https://api.github.com/users/johnfn/repos","events_url":"https://api.github.com/users/johnfn/events{/privacy}","received_events_url":"https://api.github.com/users/johnfn/received_events","type":"User","site_admin":false},"body":"Instead of passing in `isRegex: true`, simply make the type of searchString `string | RegExp`. Then you can do `if (typeof searchString === \"string\")` and TypeScript is intelligent enough to infer that within the curly braces of that if, `searchString` is now a string (similarly with the RegExp).","created_at":"2016-10-27T20:03:51Z","updated_at":"2016-10-27T20:11:35Z","html_url":"https://github.com/VSCodeVim/Vim/pull/993#discussion_r85416015","pull_request_url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993","_links":{"self":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/comments/85416015"},"html":{"href":"https://github.com/VSCodeVim/Vim/pull/993#discussion_r85416015"},"pull_request":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993"}}},"pull_request":{"url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993","id":91073952,"html_url":"https://github.com/VSCodeVim/Vim/pull/993","diff_url":"https://github.com/VSCodeVim/Vim/pull/993.diff","patch_url":"https://github.com/VSCodeVim/Vim/pull/993.patch","issue_url":"https://api.github.com/repos/VSCodeVim/Vim/issues/993","number":993,"state":"open","locked":false,"title":"Implemented EasyMotion plugin functionality","user":{"login":"Metamist","id":2972103,"avatar_url":"https://avatars.githubusercontent.com/u/2972103?v=3","gravatar_id":"","url":"https://api.github.com/users/Metamist","html_url":"https://github.com/Metamist","followers_url":"https://api.github.com/users/Metamist/followers","following_url":"https://api.github.com/users/Metamist/following{/other_user}","gists_url":"https://api.github.com/users/Metamist/gists{/gist_id}","starred_url":"https://api.github.com/users/Metamist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metamist/subscriptions","organizations_url":"https://api.github.com/users/Metamist/orgs","repos_url":"https://api.github.com/users/Metamist/repos","events_url":"https://api.github.com/users/Metamist/events{/privacy}","received_events_url":"https://api.github.com/users/Metamist/received_events","type":"User","site_admin":false},"body":"Yay! We love PRs! 🎊\r\n\r\nPlease include a description of your change and ensure:\r\n\r\n- [x] Commit message has a short title & issue references\r\n- [x] Each commit does a logical chunk of work.\r\n- [x] It builds and tests pass (e.g `gulp`)\r\n\r\nMore info can be found on our [contribution guide](https://github.com/VSCodeVim/Vim/blob/master/.github/CONTRIBUTING.md).\r\n\r\nThis implements the common motions found in the [EasyMotion vim plugin](https://github.com/easymotion/vim-easymotion), which is s, w, e, b. More to come later.\r\nNow also supports the motions t, T, f, F.\r\n\r\n![](https://share.metamist.xyz/S14JiqRJg.gif)\r\n\r\n","created_at":"2016-10-26T19:42:51Z","updated_at":"2016-10-27T20:11:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"947ef9b7c3c8e170a31b9959404cfa3b32af61d4","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993/commits","review_comments_url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993/comments","review_comment_url":"https://api.github.com/repos/VSCodeVim/Vim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/VSCodeVim/Vim/issues/993/comments","statuses_url":"https://api.github.com/repos/VSCodeVim/Vim/statuses/365ddf42350940c93a7a9a1660c0ccee0a897d25","head":{"label":"Metamist:easymotion","ref":"easymotion","sha":"365ddf42350940c93a7a9a1660c0ccee0a897d25","user":{"login":"Metamist","id":2972103,"avatar_url":"https://avatars.githubusercontent.com/u/2972103?v=3","gravatar_id":"","url":"https://api.github.com/users/Metamist","html_url":"https://github.com/Metamist","followers_url":"https://api.github.com/users/Metamist/followers","following_url":"https://api.github.com/users/Metamist/following{/other_user}","gists_url":"https://api.github.com/users/Metamist/gists{/gist_id}","starred_url":"https://api.github.com/users/Metamist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metamist/subscriptions","organizations_url":"https://api.github.com/users/Metamist/orgs","repos_url":"https://api.github.com/users/Metamist/repos","events_url":"https://api.github.com/users/Metamist/events{/privacy}","received_events_url":"https://api.github.com/users/Metamist/received_events","type":"User","site_admin":false},"repo":{"id":72034958,"name":"Vim","full_name":"Metamist/Vim","owner":{"login":"Metamist","id":2972103,"avatar_url":"https://avatars.githubusercontent.com/u/2972103?v=3","gravatar_id":"","url":"https://api.github.com/users/Metamist","html_url":"https://github.com/Metamist","followers_url":"https://api.github.com/users/Metamist/followers","following_url":"https://api.github.com/users/Metamist/following{/other_user}","gists_url":"https://api.github.com/users/Metamist/gists{/gist_id}","starred_url":"https://api.github.com/users/Metamist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metamist/subscriptions","organizations_url":"https://api.github.com/users/Metamist/orgs","repos_url":"https://api.github.com/users/Metamist/repos","events_url":"https://api.github.com/users/Metamist/events{/privacy}","received_events_url":"https://api.github.com/users/Metamist/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Metamist/Vim","description":"Vim for Visual Studio Code","fork":true,"url":"https://api.github.com/repos/Metamist/Vim","forks_url":"https://api.github.com/repos/Metamist/Vim/forks","keys_url":"https://api.github.com/repos/Metamist/Vim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Metamist/Vim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Metamist/Vim/teams","hooks_url":"https://api.github.com/repos/Metamist/Vim/hooks","issue_events_url":"https://api.github.com/repos/Metamist/Vim/issues/events{/number}","events_url":"https://api.github.com/repos/Metamist/Vim/events","assignees_url":"https://api.github.com/repos/Metamist/Vim/assignees{/user}","branches_url":"https://api.github.com/repos/Metamist/Vim/branches{/branch}","tags_url":"https://api.github.com/repos/Metamist/Vim/tags","blobs_url":"https://api.github.com/repos/Metamist/Vim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Metamist/Vim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Metamist/Vim/git/refs{/sha}","trees_url":"https://api.github.com/repos/Metamist/Vim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Metamist/Vim/statuses/{sha}","languages_url":"https://api.github.com/repos/Metamist/Vim/languages","stargazers_url":"https://api.github.com/repos/Metamist/Vim/stargazers","contributors_url":"https://api.github.com/repos/Metamist/Vim/contributors","subscribers_url":"https://api.github.com/repos/Metamist/Vim/subscribers","subscription_url":"https://api.github.com/repos/Metamist/Vim/subscription","commits_url":"https://api.github.com/repos/Metamist/Vim/commits{/sha}","git_commits_url":"https://api.github.com/repos/Metamist/Vim/git/commits{/sha}","comments_url":"https://api.github.com/repos/Metamist/Vim/comments{/number}","issue_comment_url":"https://api.github.com/repos/Metamist/Vim/issues/comments{/number}","contents_url":"https://api.github.com/repos/Metamist/Vim/contents/{+path}","compare_url":"https://api.github.com/repos/Metamist/Vim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Metamist/Vim/merges","archive_url":"https://api.github.com/repos/Metamist/Vim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Metamist/Vim/downloads","issues_url":"https://api.github.com/repos/Metamist/Vim/issues{/number}","pulls_url":"https://api.github.com/repos/Metamist/Vim/pulls{/number}","milestones_url":"https://api.github.com/repos/Metamist/Vim/milestones{/number}","notifications_url":"https://api.github.com/repos/Metamist/Vim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Metamist/Vim/labels{/name}","releases_url":"https://api.github.com/repos/Metamist/Vim/releases{/id}","deployments_url":"https://api.github.com/repos/Metamist/Vim/deployments","created_at":"2016-10-26T18:58:55Z","updated_at":"2016-10-26T18:58:58Z","pushed_at":"2016-10-27T17:13:15Z","git_url":"git://github.com/Metamist/Vim.git","ssh_url":"git@github.com:Metamist/Vim.git","clone_url":"https://github.com/Metamist/Vim.git","svn_url":"https://github.com/Metamist/Vim","homepage":"http://aka.ms/vscodevim","size":2137,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","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":"VSCodeVim:master","ref":"master","sha":"1300362cf87dc5a6371cf1ff992c3f3bcc9e6a5f","user":{"login":"VSCodeVim","id":15813386,"avatar_url":"https://avatars.githubusercontent.com/u/15813386?v=3","gravatar_id":"","url":"https://api.github.com/users/VSCodeVim","html_url":"https://github.com/VSCodeVim","followers_url":"https://api.github.com/users/VSCodeVim/followers","following_url":"https://api.github.com/users/VSCodeVim/following{/other_user}","gists_url":"https://api.github.com/users/VSCodeVim/gists{/gist_id}","starred_url":"https://api.github.com/users/VSCodeVim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VSCodeVim/subscriptions","organizations_url":"https://api.github.com/users/VSCodeVim/orgs","repos_url":"https://api.github.com/users/VSCodeVim/repos","events_url":"https://api.github.com/users/VSCodeVim/events{/privacy}","received_events_url":"https://api.github.com/users/VSCodeVim/received_events","type":"Organization","site_admin":false},"repo":{"id":46041284,"name":"Vim","full_name":"VSCodeVim/Vim","owner":{"login":"VSCodeVim","id":15813386,"avatar_url":"https://avatars.githubusercontent.com/u/15813386?v=3","gravatar_id":"","url":"https://api.github.com/users/VSCodeVim","html_url":"https://github.com/VSCodeVim","followers_url":"https://api.github.com/users/VSCodeVim/followers","following_url":"https://api.github.com/users/VSCodeVim/following{/other_user}","gists_url":"https://api.github.com/users/VSCodeVim/gists{/gist_id}","starred_url":"https://api.github.com/users/VSCodeVim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VSCodeVim/subscriptions","organizations_url":"https://api.github.com/users/VSCodeVim/orgs","repos_url":"https://api.github.com/users/VSCodeVim/repos","events_url":"https://api.github.com/users/VSCodeVim/events{/privacy}","received_events_url":"https://api.github.com/users/VSCodeVim/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/VSCodeVim/Vim","description":"Vim for Visual Studio Code","fork":false,"url":"https://api.github.com/repos/VSCodeVim/Vim","forks_url":"https://api.github.com/repos/VSCodeVim/Vim/forks","keys_url":"https://api.github.com/repos/VSCodeVim/Vim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/VSCodeVim/Vim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/VSCodeVim/Vim/teams","hooks_url":"https://api.github.com/repos/VSCodeVim/Vim/hooks","issue_events_url":"https://api.github.com/repos/VSCodeVim/Vim/issues/events{/number}","events_url":"https://api.github.com/repos/VSCodeVim/Vim/events","assignees_url":"https://api.github.com/repos/VSCodeVim/Vim/assignees{/user}","branches_url":"https://api.github.com/repos/VSCodeVim/Vim/branches{/branch}","tags_url":"https://api.github.com/repos/VSCodeVim/Vim/tags","blobs_url":"https://api.github.com/repos/VSCodeVim/Vim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/VSCodeVim/Vim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/VSCodeVim/Vim/git/refs{/sha}","trees_url":"https://api.github.com/repos/VSCodeVim/Vim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/VSCodeVim/Vim/statuses/{sha}","languages_url":"https://api.github.com/repos/VSCodeVim/Vim/languages","stargazers_url":"https://api.github.com/repos/VSCodeVim/Vim/stargazers","contributors_url":"https://api.github.com/repos/VSCodeVim/Vim/contributors","subscribers_url":"https://api.github.com/repos/VSCodeVim/Vim/subscribers","subscription_url":"https://api.github.com/repos/VSCodeVim/Vim/subscription","commits_url":"https://api.github.com/repos/VSCodeVim/Vim/commits{/sha}","git_commits_url":"https://api.github.com/repos/VSCodeVim/Vim/git/commits{/sha}","comments_url":"https://api.github.com/repos/VSCodeVim/Vim/comments{/number}","issue_comment_url":"https://api.github.com/repos/VSCodeVim/Vim/issues/comments{/number}","contents_url":"https://api.github.com/repos/VSCodeVim/Vim/contents/{+path}","compare_url":"https://api.github.com/repos/VSCodeVim/Vim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/VSCodeVim/Vim/merges","archive_url":"https://api.github.com/repos/VSCodeVim/Vim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/VSCodeVim/Vim/downloads","issues_url":"https://api.github.com/repos/VSCodeVim/Vim/issues{/number}","pulls_url":"https://api.github.com/repos/VSCodeVim/Vim/pulls{/number}","milestones_url":"https://api.github.com/repos/VSCodeVim/Vim/milestones{/number}","notifications_url":"https://api.github.com/repos/VSCodeVim/Vim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/VSCodeVim/Vim/labels{/name}","releases_url":"https://api.github.com/repos/VSCodeVim/Vim/releases{/id}","deployments_url":"https://api.github.com/repos/VSCodeVim/Vim/deployments","created_at":"2015-11-12T09:02:23Z","updated_at":"2016-10-26T15:59:45Z","pushed_at":"2016-10-27T17:09:41Z","git_url":"git://github.com/VSCodeVim/Vim.git","ssh_url":"git@github.com:VSCodeVim/Vim.git","clone_url":"https://github.com/VSCodeVim/Vim.git","svn_url":"https://github.com/VSCodeVim/Vim","homepage":"http://aka.ms/vscodevim","size":2692,"stargazers_count":818,"watchers_count":818,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":141,"mirror_url":null,"open_issues_count":89,"forks":141,"open_issues":89,"watchers":818,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993"},"html":{"href":"https://github.com/VSCodeVim/Vim/pull/993"},"issue":{"href":"https://api.github.com/repos/VSCodeVim/Vim/issues/993"},"comments":{"href":"https://api.github.com/repos/VSCodeVim/Vim/issues/993/comments"},"review_comments":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993/comments"},"review_comment":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/VSCodeVim/Vim/pulls/993/commits"},"statuses":{"href":"https://api.github.com/repos/VSCodeVim/Vim/statuses/365ddf42350940c93a7a9a1660c0ccee0a897d25"}}}}
{"actor":{"display_login":"johnfn"}}