{"action":"created","comment":{"url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/comments/31379057","id":31379057,"diff_hunk":"@@ -216,4 +216,46 @@ class DocumentTest {\n   @Test\n   def lastOpt_on_empty_file_returns_none() =\n     document(\"\").lastOpt === None\n+\n+  @Test\n+  def lineInformation_on_non_empty_file_succeeds() = {\n+    val d = document(\"\"\"|first\n+                        |second\n+                        |third\n+                        |\"\"\".stripMargin)\n+    d.lineInformation(1).text(d) === \"second\"\n+  }\n+","path":"org.scala-ide.sdt.core.tests/src/org/scalaide/core/text/DocumentTest.scala","position":13,"original_position":13,"commit_id":"dbfffeb1061b317f17efd57e152c18e319cd9b71","original_commit_id":"dbfffeb1061b317f17efd57e152c18e319cd9b71","user":{"login":"sschaef","id":488530,"avatar_url":"https://avatars.githubusercontent.com/u/488530?v=3","gravatar_id":"","url":"https://api.github.com/users/sschaef","html_url":"https://github.com/sschaef","followers_url":"https://api.github.com/users/sschaef/followers","following_url":"https://api.github.com/users/sschaef/following{/other_user}","gists_url":"https://api.github.com/users/sschaef/gists{/gist_id}","starred_url":"https://api.github.com/users/sschaef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sschaef/subscriptions","organizations_url":"https://api.github.com/users/sschaef/orgs","repos_url":"https://api.github.com/users/sschaef/repos","events_url":"https://api.github.com/users/sschaef/events{/privacy}","received_events_url":"https://api.github.com/users/sschaef/received_events","type":"User","site_admin":false},"body":"JUnit tests can only have `Unit` as return type therefore it doesn't really matter. But I can add it.","created_at":"2015-05-30T08:45:59Z","updated_at":"2015-05-30T08:45:59Z","html_url":"https://github.com/scala-ide/scala-ide/pull/886#discussion_r31379057","pull_request_url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886","_links":{"self":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/comments/31379057"},"html":{"href":"https://github.com/scala-ide/scala-ide/pull/886#discussion_r31379057"},"pull_request":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886"}}},"pull_request":{"url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886","id":26422128,"html_url":"https://github.com/scala-ide/scala-ide/pull/886","diff_url":"https://github.com/scala-ide/scala-ide/pull/886.diff","patch_url":"https://github.com/scala-ide/scala-ide/pull/886.patch","issue_url":"https://api.github.com/repos/scala-ide/scala-ide/issues/886","number":886,"state":"open","locked":false,"title":"Auto edits","user":{"login":"sschaef","id":488530,"avatar_url":"https://avatars.githubusercontent.com/u/488530?v=3","gravatar_id":"","url":"https://api.github.com/users/sschaef","html_url":"https://github.com/sschaef","followers_url":"https://api.github.com/users/sschaef/followers","following_url":"https://api.github.com/users/sschaef/following{/other_user}","gists_url":"https://api.github.com/users/sschaef/gists{/gist_id}","starred_url":"https://api.github.com/users/sschaef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sschaef/subscriptions","organizations_url":"https://api.github.com/users/sschaef/orgs","repos_url":"https://api.github.com/users/sschaef/repos","events_url":"https://api.github.com/users/sschaef/events{/privacy}","received_events_url":"https://api.github.com/users/sschaef/received_events","type":"User","site_admin":false},"body":"Auto edits are the new way to support users while typing (and therefore replace the existing auto edit strategies (subtypes of `IAutoEditStrategy`) borrowed from Eclipse). This work is mostly finished and I would like to get review for it to see if it works for others and not just for me.\r\n\r\nNew key features are:\r\n- Support for Eclipse' linked mode model\r\n- Auto expand templates by pressing <kbd>tab</kbd> (see `ApplyTemplate`)\r\n- Auto close curly braces to surround a single expression (see `SurroundBlock`)\r\n- Easier way to enable/disable auto edits due to a new configuration page\r\n\r\nMore in depth explanations about design choices: https://groups.google.com/forum/#!searchin/scala-ide-dev/auto$20edits/scala-ide-dev/HbF1B5GkluA/ZLpu__Rzeg4J\r\n\r\nTodos:\r\n- [x] More Scaladoc for the API needs to be written\r\n- [ ] The table in the preference page doesn't grow correctly (scroll bar missing)\r\n- [ ] Lost functionality: Move braces to correct position. It should be reintroduced.\r\n- [x] Fix [1002133](https://www.assembla.com/spaces/scala-ide/tickets/1002133#/activity/ticket:)\r\n- [x] when multiple linked models are created (which happens when multiple open parens are typed for example) it is not possible to use the tab key to navigate to \"outer\" linked models\r\n- [x] Templates with empty patterns (`${}`) need to be optimized away by the underlying processor, otherwise they can get in the way in special situations\r\n- [ ] Fix [1002379](https://www.assembla.com/spaces/scala-ide/tickets/1002379#/activity/ticket:)\r\n- [ ] Convert `AutoIndentStrategy` to an auto edit\r\n- [ ] Convert `CommentAutoIndentStrategy` to an auto edit\r\n- [ ] Convert `LiteralAutoEditStrategy` to an auto edit\r\n- [ ] Convert `MultiLineStringAutoEditStrategy` to an auto edit\r\n- [ ] Convert `MultiLineStringAutoIndentStrategy` to an auto edit\r\n- [ ] Convert `StringAutoEditStrategy` to an auto edit\r\n- [x] Convert `SurroundSelectionStrategy` to an auto edit\r\n- [x] Convert `TabsToSpacesConverter` to an auto edit (or use the save action instead)\r\n- [x] Fix [1002463](https://www.assembla.com/spaces/scala-ide/tickets/1002463#/activity/ticket:)\r\n\r\nThe previous PR with some more info is #770.","created_at":"2014-12-20T23:26:12Z","updated_at":"2015-05-30T08:45:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e691e336ca6482ce8a5b303456ce971c1d4b3f73","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886/commits","review_comments_url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886/comments","review_comment_url":"https://api.github.com/repos/scala-ide/scala-ide/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scala-ide/scala-ide/issues/886/comments","statuses_url":"https://api.github.com/repos/scala-ide/scala-ide/statuses/dbfffeb1061b317f17efd57e152c18e319cd9b71","head":{"label":"sschaef:auto-edits","ref":"auto-edits","sha":"dbfffeb1061b317f17efd57e152c18e319cd9b71","user":{"login":"sschaef","id":488530,"avatar_url":"https://avatars.githubusercontent.com/u/488530?v=3","gravatar_id":"","url":"https://api.github.com/users/sschaef","html_url":"https://github.com/sschaef","followers_url":"https://api.github.com/users/sschaef/followers","following_url":"https://api.github.com/users/sschaef/following{/other_user}","gists_url":"https://api.github.com/users/sschaef/gists{/gist_id}","starred_url":"https://api.github.com/users/sschaef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sschaef/subscriptions","organizations_url":"https://api.github.com/users/sschaef/orgs","repos_url":"https://api.github.com/users/sschaef/repos","events_url":"https://api.github.com/users/sschaef/events{/privacy}","received_events_url":"https://api.github.com/users/sschaef/received_events","type":"User","site_admin":false},"repo":{"id":4021060,"name":"scala-ide","full_name":"sschaef/scala-ide","owner":{"login":"sschaef","id":488530,"avatar_url":"https://avatars.githubusercontent.com/u/488530?v=3","gravatar_id":"","url":"https://api.github.com/users/sschaef","html_url":"https://github.com/sschaef","followers_url":"https://api.github.com/users/sschaef/followers","following_url":"https://api.github.com/users/sschaef/following{/other_user}","gists_url":"https://api.github.com/users/sschaef/gists{/gist_id}","starred_url":"https://api.github.com/users/sschaef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sschaef/subscriptions","organizations_url":"https://api.github.com/users/sschaef/orgs","repos_url":"https://api.github.com/users/sschaef/repos","events_url":"https://api.github.com/users/sschaef/events{/privacy}","received_events_url":"https://api.github.com/users/sschaef/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sschaef/scala-ide","description":"Scala IDE for Eclipse","fork":true,"url":"https://api.github.com/repos/sschaef/scala-ide","forks_url":"https://api.github.com/repos/sschaef/scala-ide/forks","keys_url":"https://api.github.com/repos/sschaef/scala-ide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sschaef/scala-ide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sschaef/scala-ide/teams","hooks_url":"https://api.github.com/repos/sschaef/scala-ide/hooks","issue_events_url":"https://api.github.com/repos/sschaef/scala-ide/issues/events{/number}","events_url":"https://api.github.com/repos/sschaef/scala-ide/events","assignees_url":"https://api.github.com/repos/sschaef/scala-ide/assignees{/user}","branches_url":"https://api.github.com/repos/sschaef/scala-ide/branches{/branch}","tags_url":"https://api.github.com/repos/sschaef/scala-ide/tags","blobs_url":"https://api.github.com/repos/sschaef/scala-ide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sschaef/scala-ide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sschaef/scala-ide/git/refs{/sha}","trees_url":"https://api.github.com/repos/sschaef/scala-ide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sschaef/scala-ide/statuses/{sha}","languages_url":"https://api.github.com/repos/sschaef/scala-ide/languages","stargazers_url":"https://api.github.com/repos/sschaef/scala-ide/stargazers","contributors_url":"https://api.github.com/repos/sschaef/scala-ide/contributors","subscribers_url":"https://api.github.com/repos/sschaef/scala-ide/subscribers","subscription_url":"https://api.github.com/repos/sschaef/scala-ide/subscription","commits_url":"https://api.github.com/repos/sschaef/scala-ide/commits{/sha}","git_commits_url":"https://api.github.com/repos/sschaef/scala-ide/git/commits{/sha}","comments_url":"https://api.github.com/repos/sschaef/scala-ide/comments{/number}","issue_comment_url":"https://api.github.com/repos/sschaef/scala-ide/issues/comments{/number}","contents_url":"https://api.github.com/repos/sschaef/scala-ide/contents/{+path}","compare_url":"https://api.github.com/repos/sschaef/scala-ide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sschaef/scala-ide/merges","archive_url":"https://api.github.com/repos/sschaef/scala-ide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sschaef/scala-ide/downloads","issues_url":"https://api.github.com/repos/sschaef/scala-ide/issues{/number}","pulls_url":"https://api.github.com/repos/sschaef/scala-ide/pulls{/number}","milestones_url":"https://api.github.com/repos/sschaef/scala-ide/milestones{/number}","notifications_url":"https://api.github.com/repos/sschaef/scala-ide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sschaef/scala-ide/labels{/name}","releases_url":"https://api.github.com/repos/sschaef/scala-ide/releases{/id}","created_at":"2012-04-13T23:03:01Z","updated_at":"2015-05-08T13:08:22Z","pushed_at":"2015-05-29T09:01:31Z","git_url":"git://github.com/sschaef/scala-ide.git","ssh_url":"git@github.com:sschaef/scala-ide.git","clone_url":"https://github.com/sschaef/scala-ide.git","svn_url":"https://github.com/sschaef/scala-ide","homepage":"www.scala-ide.org","size":146991,"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":"master"}},"base":{"label":"scala-ide:master","ref":"master","sha":"fb4bffde732aa0f2548831e8f9d3255facb5b823","user":{"login":"scala-ide","id":1026788,"avatar_url":"https://avatars.githubusercontent.com/u/1026788?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-ide","html_url":"https://github.com/scala-ide","followers_url":"https://api.github.com/users/scala-ide/followers","following_url":"https://api.github.com/users/scala-ide/following{/other_user}","gists_url":"https://api.github.com/users/scala-ide/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-ide/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-ide/subscriptions","organizations_url":"https://api.github.com/users/scala-ide/orgs","repos_url":"https://api.github.com/users/scala-ide/repos","events_url":"https://api.github.com/users/scala-ide/events{/privacy}","received_events_url":"https://api.github.com/users/scala-ide/received_events","type":"Organization","site_admin":false},"repo":{"id":2510011,"name":"scala-ide","full_name":"scala-ide/scala-ide","owner":{"login":"scala-ide","id":1026788,"avatar_url":"https://avatars.githubusercontent.com/u/1026788?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-ide","html_url":"https://github.com/scala-ide","followers_url":"https://api.github.com/users/scala-ide/followers","following_url":"https://api.github.com/users/scala-ide/following{/other_user}","gists_url":"https://api.github.com/users/scala-ide/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-ide/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-ide/subscriptions","organizations_url":"https://api.github.com/users/scala-ide/orgs","repos_url":"https://api.github.com/users/scala-ide/repos","events_url":"https://api.github.com/users/scala-ide/events{/privacy}","received_events_url":"https://api.github.com/users/scala-ide/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scala-ide/scala-ide","description":"Scala IDE for Eclipse","fork":false,"url":"https://api.github.com/repos/scala-ide/scala-ide","forks_url":"https://api.github.com/repos/scala-ide/scala-ide/forks","keys_url":"https://api.github.com/repos/scala-ide/scala-ide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scala-ide/scala-ide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scala-ide/scala-ide/teams","hooks_url":"https://api.github.com/repos/scala-ide/scala-ide/hooks","issue_events_url":"https://api.github.com/repos/scala-ide/scala-ide/issues/events{/number}","events_url":"https://api.github.com/repos/scala-ide/scala-ide/events","assignees_url":"https://api.github.com/repos/scala-ide/scala-ide/assignees{/user}","branches_url":"https://api.github.com/repos/scala-ide/scala-ide/branches{/branch}","tags_url":"https://api.github.com/repos/scala-ide/scala-ide/tags","blobs_url":"https://api.github.com/repos/scala-ide/scala-ide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scala-ide/scala-ide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scala-ide/scala-ide/git/refs{/sha}","trees_url":"https://api.github.com/repos/scala-ide/scala-ide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scala-ide/scala-ide/statuses/{sha}","languages_url":"https://api.github.com/repos/scala-ide/scala-ide/languages","stargazers_url":"https://api.github.com/repos/scala-ide/scala-ide/stargazers","contributors_url":"https://api.github.com/repos/scala-ide/scala-ide/contributors","subscribers_url":"https://api.github.com/repos/scala-ide/scala-ide/subscribers","subscription_url":"https://api.github.com/repos/scala-ide/scala-ide/subscription","commits_url":"https://api.github.com/repos/scala-ide/scala-ide/commits{/sha}","git_commits_url":"https://api.github.com/repos/scala-ide/scala-ide/git/commits{/sha}","comments_url":"https://api.github.com/repos/scala-ide/scala-ide/comments{/number}","issue_comment_url":"https://api.github.com/repos/scala-ide/scala-ide/issues/comments{/number}","contents_url":"https://api.github.com/repos/scala-ide/scala-ide/contents/{+path}","compare_url":"https://api.github.com/repos/scala-ide/scala-ide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scala-ide/scala-ide/merges","archive_url":"https://api.github.com/repos/scala-ide/scala-ide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scala-ide/scala-ide/downloads","issues_url":"https://api.github.com/repos/scala-ide/scala-ide/issues{/number}","pulls_url":"https://api.github.com/repos/scala-ide/scala-ide/pulls{/number}","milestones_url":"https://api.github.com/repos/scala-ide/scala-ide/milestones{/number}","notifications_url":"https://api.github.com/repos/scala-ide/scala-ide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scala-ide/scala-ide/labels{/name}","releases_url":"https://api.github.com/repos/scala-ide/scala-ide/releases{/id}","created_at":"2011-10-04T05:56:23Z","updated_at":"2015-05-28T05:41:24Z","pushed_at":"2015-05-29T13:45:14Z","git_url":"git://github.com/scala-ide/scala-ide.git","ssh_url":"git@github.com:scala-ide/scala-ide.git","clone_url":"https://github.com/scala-ide/scala-ide.git","svn_url":"https://github.com/scala-ide/scala-ide","homepage":"www.scala-ide.org","size":158834,"stargazers_count":392,"watchers_count":392,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":200,"mirror_url":null,"open_issues_count":8,"forks":200,"open_issues":8,"watchers":392,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886"},"html":{"href":"https://github.com/scala-ide/scala-ide/pull/886"},"issue":{"href":"https://api.github.com/repos/scala-ide/scala-ide/issues/886"},"comments":{"href":"https://api.github.com/repos/scala-ide/scala-ide/issues/886/comments"},"review_comments":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886/comments"},"review_comment":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scala-ide/scala-ide/pulls/886/commits"},"statuses":{"href":"https://api.github.com/repos/scala-ide/scala-ide/statuses/dbfffeb1061b317f17efd57e152c18e319cd9b71"}}}}