{"action":"created","comment":{"url":"https://api.github.com/repos/scalameta/paradise/pulls/comments/84230214","pull_request_review_id":5016191,"id":84230214,"diff_hunk":"@@ -0,0 +1,98 @@\n+package org.scalameta.tests\n+\n+import java.io.File\n+\n+import geny.Generator\n+\n+case class ScalaFile(filename: String, projectUrl: String, commit: String) {\n+\n+  def rawUrl = {\n+    val raw = projectUrl.replace(\"github.com\", \"raw.githubusercontent.com\")\n+    s\"$raw/$commit$filename\"\n+  }\n+\n+  def read: String = {\n+    val toRead = new File(FileOps.getFile(\"target\", \"repos\", repo), filename)\n+    FileOps.readFile(toRead)\n+  }\n+  def githubUrlAtLine(line: Int): String = s\"$githubUrl#L$line\"\n+\n+  def githubUrl = s\"$projectUrl/blob/$commit$filename\"\n+  def userRepo  = projectUrl.stripPrefix(\"https://github.com/\")\n+  def repo      = userRepo.split(\"/\")(1)\n+  def user      = userRepo.split(\"/\")(0)\n+\n+  override def toString: String = s\"\"\"ScalaFile(\n+                                     |    project: $user\n+                                     |    github: $githubUrl\n+                                     |    raw: $rawUrl\n+                                     |)\"\"\".stripMargin\n+}\n+\n+object ScalaFile {\n+  def includeFile(filename: String): Boolean = {\n+    !Seq(\n+         // Computer generated\n+         \"library/src/main/scala/scala/scalajs/js/Tuple.scala\",\n+         // This fella seems to make the scalac parser hang (???)\n+         \"target/repos/scala/test/files/neg/t5510.scala\",\n+         // Unicode escapes in weird places\n+         \"target/repos/scala/test/files/neg/t8015-ffb.scala\",\n+         \"target/repos/scala/test/files/pos/t389.scala\",\n+         \"target/repos/scala/test/files/run/literals.scala\",\n+         \"target/repos/scala/test/files/run/t3835.scala\",\n+         // Scalac parser seems to accept this, though it blows up later\n+         \"target/repos/scala/test/files/neg/t8266-invalid-interp.scala\",\n+         \"target/repos/scala/test/disabled/\",\n+         \"target/repos/scala/test/files/neg/\",\n+         // trailing . after number\n+         \"target/repos/scala/test/files/presentation/infix-completion/src/Snippet.scala\",\n+         // Unicode escapes in weird places\n+         \"target/repos/sbt/main/settings/src/main/scala/sbt/std/InputWrapper.scala\",\n+         // uses a package called `macro`\n+         \"target/repos/sbt/sbt/src/sbt-test/source-dependencies/inherited-macros\",\n+         \"target/repos/sbt/sbt/src/sbt-test/source-dependencies/macro\",\n+         \"target/repos/lila/modules/lobby/src/main/SocketHandler.scala\").exists(filename.contains)\n+  }\n+\n+  def downloadReposTar(): Unit = {\n+    import sys.process._\n+    // Easier and less awkward than dealing with scala.io.Source\n+    Seq(\"wget\", \"https://github.com/olafurpg/scalafmt/releases/download/v0.1.4/repos.tar.gz\").!\n+  }\n+\n+  def extractReposTar(): Unit = {\n+    import sys.process._\n+    Seq(\"tar\", \"xf\", \"repos.tar.gz\").!\n+  }\n+\n+  def getAll: Generator[ScalaFile] = {\n+    if (!FileOps.getFile(\"repos.tar.gz\").isFile) {\n+      downloadReposTar()\n+    }\n+    if (!FileOps.getFile(\"target\", \"repos\").isDirectory) {\n+      extractReposTar()\n+    }\n+\n+    val repos = FileOps.getFile(\"target\", \"repos\")\n+    val files = Option(repos.listFiles()).getOrElse {\n+      throw new IllegalStateException(s\"\"\"${repos.getAbsolutePath} is not a directory, run:\n+           |* wget https://github.com/olafurpg/scalafmt/releases/download/v0.1.4/repos.tar.gz\n+           |* tar xvf repos.tar.gz\n+           |\"\"\".stripMargin)","path":"tests/converter/src/test/scala/org/scalameta/tests/ScalaFile.scala","position":null,"original_position":82,"commit_id":"12bf136f1b288299d7bf75dcde2ecc8f5ed182fb","original_commit_id":"05bf6d0e61fec87a6119d930e1f340c3f37b0ef0","user":{"login":"olafurpg","id":1408093,"avatar_url":"https://avatars.githubusercontent.com/u/1408093?v=3","gravatar_id":"","url":"https://api.github.com/users/olafurpg","html_url":"https://github.com/olafurpg","followers_url":"https://api.github.com/users/olafurpg/followers","following_url":"https://api.github.com/users/olafurpg/following{/other_user}","gists_url":"https://api.github.com/users/olafurpg/gists{/gist_id}","starred_url":"https://api.github.com/users/olafurpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olafurpg/subscriptions","organizations_url":"https://api.github.com/users/olafurpg/orgs","repos_url":"https://api.github.com/users/olafurpg/repos","events_url":"https://api.github.com/users/olafurpg/events{/privacy}","received_events_url":"https://api.github.com/users/olafurpg/received_events","type":"User","site_admin":false},"body":"This message was written before I automated the dowload+unzipping. I updated the message now.","created_at":"2016-10-20T08:04:23Z","updated_at":"2016-10-20T08:08:12Z","html_url":"https://github.com/scalameta/paradise/pull/95#discussion_r84230214","pull_request_url":"https://api.github.com/repos/scalameta/paradise/pulls/95","_links":{"self":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/comments/84230214"},"html":{"href":"https://github.com/scalameta/paradise/pull/95#discussion_r84230214"},"pull_request":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/95"}}},"pull_request":{"url":"https://api.github.com/repos/scalameta/paradise/pulls/95","id":89661493,"html_url":"https://github.com/scalameta/paradise/pull/95","diff_url":"https://github.com/scalameta/paradise/pull/95.diff","patch_url":"https://github.com/scalameta/paradise/pull/95.patch","issue_url":"https://api.github.com/repos/scalameta/paradise/issues/95","number":95,"state":"open","locked":false,"title":"WIP Run converters on million lines of code","user":{"login":"olafurpg","id":1408093,"avatar_url":"https://avatars.githubusercontent.com/u/1408093?v=3","gravatar_id":"","url":"https://api.github.com/users/olafurpg","html_url":"https://github.com/olafurpg","followers_url":"https://api.github.com/users/olafurpg/followers","following_url":"https://api.github.com/users/olafurpg/following{/other_user}","gists_url":"https://api.github.com/users/olafurpg/gists{/gist_id}","starred_url":"https://api.github.com/users/olafurpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olafurpg/subscriptions","organizations_url":"https://api.github.com/users/olafurpg/orgs","repos_url":"https://api.github.com/users/olafurpg/repos","events_url":"https://api.github.com/users/olafurpg/events{/privacy}","received_events_url":"https://api.github.com/users/olafurpg/received_events","type":"User","site_admin":false},"body":"Current results:\r\n\r\n```\r\nConvertException: Ident: 3\r\nConvertException: unexpected result: expected = Pat.Type, actual = Type.Annotate: 4\r\nConvertException: unexpected result: expected = Pat.Type, actual = Type.With: 7\r\nConvertException: unexpected result: expected = Pat.Type, actual = Type.Project: 8\r\nUnreachableError: this code path should've been unreachable: 12\r\nConvertException: unexpected result: expected = Type, actual = Type.Arg.ByName: 55\r\nConvertException: Star: 65\r\nConvertException: unexpected result: expected = Pat.Type, actual = Type.Apply: 106\r\nConvertException: Bind: 241\r\nConvertException: ModuleDef: 533\r\nConvertException: unexpected error (scroll down the stacktrace to see the cause):: 547\r\nConvertException: EmptyTree$: 4642\r\nSuccess: 18077\r\nTotal: 24994\r\n```","created_at":"2016-10-17T16:51:57Z","updated_at":"2016-10-20T08:08:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"17c3b58cc9435c838330af7dfe8f25a4a0b8bca7","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/scalameta/paradise/pulls/95/commits","review_comments_url":"https://api.github.com/repos/scalameta/paradise/pulls/95/comments","review_comment_url":"https://api.github.com/repos/scalameta/paradise/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scalameta/paradise/issues/95/comments","statuses_url":"https://api.github.com/repos/scalameta/paradise/statuses/12bf136f1b288299d7bf75dcde2ecc8f5ed182fb","head":{"label":"olafurpg:properties","ref":"properties","sha":"12bf136f1b288299d7bf75dcde2ecc8f5ed182fb","user":{"login":"olafurpg","id":1408093,"avatar_url":"https://avatars.githubusercontent.com/u/1408093?v=3","gravatar_id":"","url":"https://api.github.com/users/olafurpg","html_url":"https://github.com/olafurpg","followers_url":"https://api.github.com/users/olafurpg/followers","following_url":"https://api.github.com/users/olafurpg/following{/other_user}","gists_url":"https://api.github.com/users/olafurpg/gists{/gist_id}","starred_url":"https://api.github.com/users/olafurpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olafurpg/subscriptions","organizations_url":"https://api.github.com/users/olafurpg/orgs","repos_url":"https://api.github.com/users/olafurpg/repos","events_url":"https://api.github.com/users/olafurpg/events{/privacy}","received_events_url":"https://api.github.com/users/olafurpg/received_events","type":"User","site_admin":false},"repo":{"id":68739480,"name":"paradise","full_name":"olafurpg/paradise","owner":{"login":"olafurpg","id":1408093,"avatar_url":"https://avatars.githubusercontent.com/u/1408093?v=3","gravatar_id":"","url":"https://api.github.com/users/olafurpg","html_url":"https://github.com/olafurpg","followers_url":"https://api.github.com/users/olafurpg/followers","following_url":"https://api.github.com/users/olafurpg/following{/other_user}","gists_url":"https://api.github.com/users/olafurpg/gists{/gist_id}","starred_url":"https://api.github.com/users/olafurpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olafurpg/subscriptions","organizations_url":"https://api.github.com/users/olafurpg/orgs","repos_url":"https://api.github.com/users/olafurpg/repos","events_url":"https://api.github.com/users/olafurpg/events{/privacy}","received_events_url":"https://api.github.com/users/olafurpg/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/olafurpg/paradise","description":"Implementation of new-style (\"inline\") macros for scalac","fork":true,"url":"https://api.github.com/repos/olafurpg/paradise","forks_url":"https://api.github.com/repos/olafurpg/paradise/forks","keys_url":"https://api.github.com/repos/olafurpg/paradise/keys{/key_id}","collaborators_url":"https://api.github.com/repos/olafurpg/paradise/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/olafurpg/paradise/teams","hooks_url":"https://api.github.com/repos/olafurpg/paradise/hooks","issue_events_url":"https://api.github.com/repos/olafurpg/paradise/issues/events{/number}","events_url":"https://api.github.com/repos/olafurpg/paradise/events","assignees_url":"https://api.github.com/repos/olafurpg/paradise/assignees{/user}","branches_url":"https://api.github.com/repos/olafurpg/paradise/branches{/branch}","tags_url":"https://api.github.com/repos/olafurpg/paradise/tags","blobs_url":"https://api.github.com/repos/olafurpg/paradise/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/olafurpg/paradise/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/olafurpg/paradise/git/refs{/sha}","trees_url":"https://api.github.com/repos/olafurpg/paradise/git/trees{/sha}","statuses_url":"https://api.github.com/repos/olafurpg/paradise/statuses/{sha}","languages_url":"https://api.github.com/repos/olafurpg/paradise/languages","stargazers_url":"https://api.github.com/repos/olafurpg/paradise/stargazers","contributors_url":"https://api.github.com/repos/olafurpg/paradise/contributors","subscribers_url":"https://api.github.com/repos/olafurpg/paradise/subscribers","subscription_url":"https://api.github.com/repos/olafurpg/paradise/subscription","commits_url":"https://api.github.com/repos/olafurpg/paradise/commits{/sha}","git_commits_url":"https://api.github.com/repos/olafurpg/paradise/git/commits{/sha}","comments_url":"https://api.github.com/repos/olafurpg/paradise/comments{/number}","issue_comment_url":"https://api.github.com/repos/olafurpg/paradise/issues/comments{/number}","contents_url":"https://api.github.com/repos/olafurpg/paradise/contents/{+path}","compare_url":"https://api.github.com/repos/olafurpg/paradise/compare/{base}...{head}","merges_url":"https://api.github.com/repos/olafurpg/paradise/merges","archive_url":"https://api.github.com/repos/olafurpg/paradise/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/olafurpg/paradise/downloads","issues_url":"https://api.github.com/repos/olafurpg/paradise/issues{/number}","pulls_url":"https://api.github.com/repos/olafurpg/paradise/pulls{/number}","milestones_url":"https://api.github.com/repos/olafurpg/paradise/milestones{/number}","notifications_url":"https://api.github.com/repos/olafurpg/paradise/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/olafurpg/paradise/labels{/name}","releases_url":"https://api.github.com/repos/olafurpg/paradise/releases{/id}","deployments_url":"https://api.github.com/repos/olafurpg/paradise/deployments","created_at":"2016-09-20T18:04:44Z","updated_at":"2016-09-20T18:04:46Z","pushed_at":"2016-10-20T08:06:51Z","git_url":"git://github.com/olafurpg/paradise.git","ssh_url":"git@github.com:olafurpg/paradise.git","clone_url":"https://github.com/olafurpg/paradise.git","svn_url":"https://github.com/olafurpg/paradise","homepage":"http://event.scaladays.org/scaladays-berlin-2016#!#schedulePopupExtras-7598","size":1173,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"4.x"}},"base":{"label":"scalameta:master","ref":"master","sha":"1e0cd7569526040bba637f7fbefe48a7f2bee2d1","user":{"login":"scalameta","id":7526438,"avatar_url":"https://avatars.githubusercontent.com/u/7526438?v=3","gravatar_id":"","url":"https://api.github.com/users/scalameta","html_url":"https://github.com/scalameta","followers_url":"https://api.github.com/users/scalameta/followers","following_url":"https://api.github.com/users/scalameta/following{/other_user}","gists_url":"https://api.github.com/users/scalameta/gists{/gist_id}","starred_url":"https://api.github.com/users/scalameta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalameta/subscriptions","organizations_url":"https://api.github.com/users/scalameta/orgs","repos_url":"https://api.github.com/users/scalameta/repos","events_url":"https://api.github.com/users/scalameta/events{/privacy}","received_events_url":"https://api.github.com/users/scalameta/received_events","type":"Organization","site_admin":false},"repo":{"id":58476934,"name":"paradise","full_name":"scalameta/paradise","owner":{"login":"scalameta","id":7526438,"avatar_url":"https://avatars.githubusercontent.com/u/7526438?v=3","gravatar_id":"","url":"https://api.github.com/users/scalameta","html_url":"https://github.com/scalameta","followers_url":"https://api.github.com/users/scalameta/followers","following_url":"https://api.github.com/users/scalameta/following{/other_user}","gists_url":"https://api.github.com/users/scalameta/gists{/gist_id}","starred_url":"https://api.github.com/users/scalameta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalameta/subscriptions","organizations_url":"https://api.github.com/users/scalameta/orgs","repos_url":"https://api.github.com/users/scalameta/repos","events_url":"https://api.github.com/users/scalameta/events{/privacy}","received_events_url":"https://api.github.com/users/scalameta/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scalameta/paradise","description":"Implementation of new-style (\"inline\") macros for scalac","fork":true,"url":"https://api.github.com/repos/scalameta/paradise","forks_url":"https://api.github.com/repos/scalameta/paradise/forks","keys_url":"https://api.github.com/repos/scalameta/paradise/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalameta/paradise/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalameta/paradise/teams","hooks_url":"https://api.github.com/repos/scalameta/paradise/hooks","issue_events_url":"https://api.github.com/repos/scalameta/paradise/issues/events{/number}","events_url":"https://api.github.com/repos/scalameta/paradise/events","assignees_url":"https://api.github.com/repos/scalameta/paradise/assignees{/user}","branches_url":"https://api.github.com/repos/scalameta/paradise/branches{/branch}","tags_url":"https://api.github.com/repos/scalameta/paradise/tags","blobs_url":"https://api.github.com/repos/scalameta/paradise/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalameta/paradise/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalameta/paradise/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalameta/paradise/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalameta/paradise/statuses/{sha}","languages_url":"https://api.github.com/repos/scalameta/paradise/languages","stargazers_url":"https://api.github.com/repos/scalameta/paradise/stargazers","contributors_url":"https://api.github.com/repos/scalameta/paradise/contributors","subscribers_url":"https://api.github.com/repos/scalameta/paradise/subscribers","subscription_url":"https://api.github.com/repos/scalameta/paradise/subscription","commits_url":"https://api.github.com/repos/scalameta/paradise/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalameta/paradise/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalameta/paradise/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalameta/paradise/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalameta/paradise/contents/{+path}","compare_url":"https://api.github.com/repos/scalameta/paradise/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalameta/paradise/merges","archive_url":"https://api.github.com/repos/scalameta/paradise/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalameta/paradise/downloads","issues_url":"https://api.github.com/repos/scalameta/paradise/issues{/number}","pulls_url":"https://api.github.com/repos/scalameta/paradise/pulls{/number}","milestones_url":"https://api.github.com/repos/scalameta/paradise/milestones{/number}","notifications_url":"https://api.github.com/repos/scalameta/paradise/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalameta/paradise/labels{/name}","releases_url":"https://api.github.com/repos/scalameta/paradise/releases{/id}","deployments_url":"https://api.github.com/repos/scalameta/paradise/deployments","created_at":"2016-05-10T16:28:34Z","updated_at":"2016-10-09T07:39:56Z","pushed_at":"2016-10-20T08:06:52Z","git_url":"git://github.com/scalameta/paradise.git","ssh_url":"git@github.com:scalameta/paradise.git","clone_url":"https://github.com/scalameta/paradise.git","svn_url":"https://github.com/scalameta/paradise","homepage":"","size":1231,"stargazers_count":51,"watchers_count":51,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":18,"forks":11,"open_issues":18,"watchers":51,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/95"},"html":{"href":"https://github.com/scalameta/paradise/pull/95"},"issue":{"href":"https://api.github.com/repos/scalameta/paradise/issues/95"},"comments":{"href":"https://api.github.com/repos/scalameta/paradise/issues/95/comments"},"review_comments":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/95/comments"},"review_comment":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scalameta/paradise/pulls/95/commits"},"statuses":{"href":"https://api.github.com/repos/scalameta/paradise/statuses/12bf136f1b288299d7bf75dcde2ecc8f5ed182fb"}}}}
{"actor":{"display_login":"olafurpg"}}