coffescript folding improvements (fixes #582)

This commit is contained in:
nightwing 2011-12-18 18:15:35 +04:00
commit a673864f38
3 changed files with 7 additions and 4 deletions

View file

@ -49,7 +49,7 @@ var oop = require("../lib/oop");
function Mode() { function Mode() {
this.$tokenizer = new Tokenizer(new Rules().getRules()); this.$tokenizer = new Tokenizer(new Rules().getRules());
this.$outdent = new Outdent(); this.$outdent = new Outdent();
this.foldingRules = new PythonFoldMode("\\[|=|(=>)|(->)"); this.foldingRules = new PythonFoldMode("=|=>|->|\\s*class [^#]*");
} }
oop.inherits(Mode, TextMode); oop.inherits(Mode, TextMode);

View file

@ -41,7 +41,7 @@ var oop = require("../../lib/oop");
var BaseFoldMode = require("./fold_mode").FoldMode; var BaseFoldMode = require("./fold_mode").FoldMode;
var FoldMode = exports.FoldMode = function(markers) { var FoldMode = exports.FoldMode = function(markers) {
this.foldingStartMarker = new RegExp("(?:(\\[)|" + markers + ")(?:\\s*)(?:#.*)?$"); this.foldingStartMarker = new RegExp("(?:([\\[{])|(" + markers + "))(?:\\s*)(?:#.*)?$");
}; };
oop.inherits(FoldMode, BaseFoldMode); oop.inherits(FoldMode, BaseFoldMode);
@ -53,8 +53,9 @@ oop.inherits(FoldMode, BaseFoldMode);
if (match) { if (match) {
if (match[1]) if (match[1])
return this.openingBracketBlock(session, match[1], row, match.index); return this.openingBracketBlock(session, match[1], row, match.index);
if (match[2])
return this.indentationBlock(session, row, match.index + 1); return this.indentationBlock(session, row, match.index + match[2].length);
return this.indentationBlock(session, row);
} }
} }

View file

@ -52,6 +52,7 @@ module.exports = {
'stuff', 'stuff',
']', ']',
'[ ' '[ '
'{ '
]); ]);
var mode = new PythonMode(); var mode = new PythonMode();
@ -62,6 +63,7 @@ module.exports = {
assert.equal(session.getFoldWidget(1), ""); assert.equal(session.getFoldWidget(1), "");
assert.equal(session.getFoldWidget(2), ""); assert.equal(session.getFoldWidget(2), "");
assert.equal(session.getFoldWidget(3), "start"); assert.equal(session.getFoldWidget(3), "start");
assert.equal(session.getFoldWidget(4), "start");
assert.range(session.getFoldWidgetRange(0), 0, 1, 2, 0); assert.range(session.getFoldWidgetRange(0), 0, 1, 2, 0);
assert.equal(session.getFoldWidgetRange(3), null); assert.equal(session.getFoldWidgetRange(3), null);