{"action":"created","issue":{"url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/57","repository_url":"https://api.github.com/repos/oakmac/atom-parinfer","labels_url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/57/labels{/name}","comments_url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/57/comments","events_url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/57/events","html_url":"https://github.com/oakmac/atom-parinfer/issues/57","id":150126125,"number":57,"title":"Bad layout of let-expressions (or: contradicting the user)","user":{"login":"stugol","id":1113153,"avatar_url":"https://avatars.githubusercontent.com/u/1113153?v=3","gravatar_id":"","url":"https://api.github.com/users/stugol","html_url":"https://github.com/stugol","followers_url":"https://api.github.com/users/stugol/followers","following_url":"https://api.github.com/users/stugol/following{/other_user}","gists_url":"https://api.github.com/users/stugol/gists{/gist_id}","starred_url":"https://api.github.com/users/stugol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stugol/subscriptions","organizations_url":"https://api.github.com/users/stugol/orgs","repos_url":"https://api.github.com/users/stugol/repos","events_url":"https://api.github.com/users/stugol/events{/privacy}","received_events_url":"https://api.github.com/users/stugol/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2016-04-21T16:34:10Z","updated_at":"2016-04-22T19:34:07Z","closed_at":null,"body":"The following code is wrongly handled:\r\n```\r\n(let ((result (catch 'fail\r\n  (loop for code in content do\r\n    (eval code))\r\n  nil))))\r\n```\r\nLeading to:\r\n```\r\n(let ((result (catch 'fail)))\r\n    (loop for code in content do\r\n      (eval code))\r\n    nil)\r\n```\r\nWhich of course is not what I intended. To work around this, I need to introduce redundant line breaks:\r\n```\r\n(let\r\n  ((result\r\n    (catch 'fail\r\n      (loop for code in content do\r\n        (eval code))\r\n      nil))))\r\n```\r\nWhat _should_ happen, is that when I delete the closing paren after `'fail`, it is automatically added to the end. And if I then type the closing paren after `'fail`, the extra paren is removed from the end. In short, I should be able to override the paren placement. The plugin should never delete a paren _that I have just typed!_ If I explicitly type it, then I obviously want it there! If the parens are then imbalanced, one should be removed that I have _not_ explicitly typed.\r\n\r\nOne way you could achieve this, is by assigning a hidden timestamp to every paren typed (or deleted!) by the user. If the expression is not balanced, and parens need to be added or removed, try to find somewhere to add them that has not already been adjusted by the user - or, failing that, prefer to overwrite earlier adjustments rather than later ones."},"comment":{"url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/comments/213563169","html_url":"https://github.com/oakmac/atom-parinfer/issues/57#issuecomment-213563169","issue_url":"https://api.github.com/repos/oakmac/atom-parinfer/issues/57","id":213563169,"user":{"login":"stugol","id":1113153,"avatar_url":"https://avatars.githubusercontent.com/u/1113153?v=3","gravatar_id":"","url":"https://api.github.com/users/stugol","html_url":"https://github.com/stugol","followers_url":"https://api.github.com/users/stugol/followers","following_url":"https://api.github.com/users/stugol/following{/other_user}","gists_url":"https://api.github.com/users/stugol/gists{/gist_id}","starred_url":"https://api.github.com/users/stugol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stugol/subscriptions","organizations_url":"https://api.github.com/users/stugol/orgs","repos_url":"https://api.github.com/users/stugol/repos","events_url":"https://api.github.com/users/stugol/events{/privacy}","received_events_url":"https://api.github.com/users/stugol/received_events","type":"User","site_admin":false},"created_at":"2016-04-22T19:34:07Z","updated_at":"2016-04-22T19:34:07Z","body":"@oakmac Thanks, I'll look into that.\r\n\r\n@shaunlebron So essentially, dynamically-sized tab stops? Sounds great. Any hope for this soon?"}}