From 88829fbee7b0a9400f4ec2bec975dbe9271da027 Mon Sep 17 00:00:00 2001 From: Weihang Fan Date: Thu, 13 Mar 2014 12:23:21 +0800 Subject: [PATCH 1/3] Add auto-indent in CoffeeScript for if, for, while, and loop statements. --- lib/ace/mode/coffee.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index de331204..331ab89e 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -50,7 +50,7 @@ oop.inherits(Mode, TextMode); (function() { - var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/; + var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; var commentLine = /^(\s*)#/; var hereComment = /^\s*###(?!#)/; var indentation = /^\s*/; From 59c392042a2753a5e03fbb546af7b1f8f29f6aaf Mon Sep 17 00:00:00 2001 From: Weihang Fan Date: Thu, 13 Mar 2014 19:10:19 +0800 Subject: [PATCH 2/3] Fixed auto-indent for switch statements. --- lib/ace/mode/coffee.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index 331ab89e..8e286351 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -50,7 +50,7 @@ oop.inherits(Mode, TextMode); (function() { - var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; + var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; var commentLine = /^(\s*)#/; var hereComment = /^\s*###(?!#)/; var indentation = /^\s*/; From 1f33265ba793249e91179a4f84215e0df1486e5c Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 11 Apr 2014 20:46:39 +0400 Subject: [PATCH 3/3] fix typo in indenter regexp --- lib/ace/mode/coffee.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index 8e286351..67e53111 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -50,7 +50,28 @@ oop.inherits(Mode, TextMode); (function() { - var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; + /*: + [({[=:] # Opening parentheses or brackets + |[-=]> # OR single or double arrow + |\b(?: # OR one of these words: + else # else + |try # OR try + |(?:swi|ca)tch # OR catch, optionally followed by: + (?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)? # a variable + |finally # OR finally + ))\s*$ # all as the last thing on a line (allowing trailing space) + | # ---- OR ---- : + ^\s* # a line starting with optional space + (else\b\s*)? # followed by an optional "else" + (?: # followed by one of the following: + if # if + |for # OR for + |while # OR while + |loop # OR loop + )\b # (as a word) + (?!.*\bthen\b) # ... but NOT followed by "then" on the line + */ + var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|(?:swi|ca)tch(?:\s+[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; var commentLine = /^(\s*)#/; var hereComment = /^\s*###(?!#)/; var indentation = /^\s*/;