From a673864f38874beb4ad8d2efa09e53ff3b318a2c Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 18 Dec 2011 18:15:35 +0400 Subject: [PATCH] coffescript folding improvements (fixes #582) --- lib/ace/mode/coffee.js | 2 +- lib/ace/mode/folding/pythonic.js | 7 ++++--- lib/ace/mode/folding/pythonic_test.js | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index 39054995..6213710d 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -49,7 +49,7 @@ var oop = require("../lib/oop"); function Mode() { this.$tokenizer = new Tokenizer(new Rules().getRules()); this.$outdent = new Outdent(); - this.foldingRules = new PythonFoldMode("\\[|=|(=>)|(->)"); + this.foldingRules = new PythonFoldMode("=|=>|->|\\s*class [^#]*"); } oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/folding/pythonic.js b/lib/ace/mode/folding/pythonic.js index c76588a0..8237375f 100644 --- a/lib/ace/mode/folding/pythonic.js +++ b/lib/ace/mode/folding/pythonic.js @@ -41,7 +41,7 @@ var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(markers) { - this.foldingStartMarker = new RegExp("(?:(\\[)|" + markers + ")(?:\\s*)(?:#.*)?$"); + this.foldingStartMarker = new RegExp("(?:([\\[{])|(" + markers + "))(?:\\s*)(?:#.*)?$"); }; oop.inherits(FoldMode, BaseFoldMode); @@ -53,8 +53,9 @@ oop.inherits(FoldMode, BaseFoldMode); if (match) { if (match[1]) return this.openingBracketBlock(session, match[1], row, match.index); - - return this.indentationBlock(session, row, match.index + 1); + if (match[2]) + return this.indentationBlock(session, row, match.index + match[2].length); + return this.indentationBlock(session, row); } } diff --git a/lib/ace/mode/folding/pythonic_test.js b/lib/ace/mode/folding/pythonic_test.js index 1b667f9b..84c00bca 100644 --- a/lib/ace/mode/folding/pythonic_test.js +++ b/lib/ace/mode/folding/pythonic_test.js @@ -52,6 +52,7 @@ module.exports = { 'stuff', ']', '[ ' + '{ ' ]); var mode = new PythonMode(); @@ -62,6 +63,7 @@ module.exports = { assert.equal(session.getFoldWidget(1), ""); assert.equal(session.getFoldWidget(2), ""); assert.equal(session.getFoldWidget(3), "start"); + assert.equal(session.getFoldWidget(4), "start"); assert.range(session.getFoldWidgetRange(0), 0, 1, 2, 0); assert.equal(session.getFoldWidgetRange(3), null);