From 372cdf25450767a04dd8ccfef3837a27990e2703 Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 25 Feb 2015 15:29:00 +0400 Subject: [PATCH 1/3] be more cautious when detecting indentation of mixed files --- node_modules/ace/lib/ace/ext/whitespace.js | 31 ++++++++++--------- .../ace/lib/ace/ext/whitespace_test.js | 8 ++++- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/node_modules/ace/lib/ace/ext/whitespace.js b/node_modules/ace/lib/ace/ext/whitespace.js index 27ee223e..eabefafb 100644 --- a/node_modules/ace/lib/ace/ext/whitespace.js +++ b/node_modules/ace/lib/ace/ext/whitespace.js @@ -46,19 +46,20 @@ exports.$detectIndentation = function(lines, fallback) { if (!/^\s*[^*+\-\s]/.test(line)) continue; - if (line[0] == "\t") + if (line[0] == "\t") { tabIndents++; - - var spaces = line.match(/^ */)[0].length; - if (spaces && line[spaces] != "\t") { - var diff = spaces - prevSpaces; - if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff)) - changes[diff] = (changes[diff] || 0) + 1; - - stats[spaces] = (stats[spaces] || 0) + 1; + prevSpaces = -Number.MAX_VALUE; + } else { + var spaces = line.match(/^ */)[0].length; + if (spaces && line[spaces] != "\t") { + var diff = spaces - prevSpaces; + if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff)) + changes[diff] = (changes[diff] || 0) + 1; + + stats[spaces] = (stats[spaces] || 0) + 1; + } + prevSpaces = spaces; } - prevSpaces = spaces; - // ignore lines ending with backslash while (i < max && line[line.length - 1] == "\\") line = lines[i++]; @@ -81,7 +82,7 @@ exports.$detectIndentation = function(lines, fallback) { spaceIndents = score; score = stats[1] ? 0.9 : 0.8; if (!stats.length) - score = 0 + score = 0; } else score /= spaceIndents; @@ -95,9 +96,11 @@ exports.$detectIndentation = function(lines, fallback) { if (first.score && first.score > 1.4) var tabLength = first.length; - if (tabIndents > spaceIndents + 1) + if (tabIndents > spaceIndents + 1) { + if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8) + tabLength = undefined; return {ch: "\t", length: tabLength}; - + } if (spaceIndents > tabIndents + 1) return {ch: " ", length: tabLength}; }; diff --git a/node_modules/ace/lib/ace/ext/whitespace_test.js b/node_modules/ace/lib/ace/ext/whitespace_test.js index be4f360f..6cc0c70e 100644 --- a/node_modules/ace/lib/ace/ext/whitespace_test.js +++ b/node_modules/ace/lib/ace/ext/whitespace_test.js @@ -29,7 +29,13 @@ module.exports = { assert.equal(indent.ch, "\t"); assert.equal(indent.length, undefined); - s.insert({row: 0, column: 0}, " "); + s.insert({row: 0, column: 0}, " "); + indent = whitespace.$detectIndentation(s.doc.$lines); + assert.equal(indent.ch, "\t"); + assert.equal(indent.length, undefined); + s.doc.removeInLine(0, 0, 1); + + s.insert({row: 0, column: 0}, "x\n y\n"); indent = whitespace.$detectIndentation(s.doc.$lines); assert.equal(indent.ch, "\t"); assert.equal(indent.length, 4); From 3fa2e55c9137f57845066445f143ed29a677a234 Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 25 Feb 2015 15:48:04 +0400 Subject: [PATCH 2/3] respect guessTabSize setting --- plugins/c9.ide.ace/ace.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index c45d1371..e72fdcf1 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -2052,7 +2052,8 @@ define(function(require, exports, module) { function detectSettingsOnLoad(c9Session) { var session = c9Session.session; - whitespaceUtil.detectIndentation(session); + if (settings.get("project/ace/@guessTabSize")) + whitespaceUtil.detectIndentation(session); if (!session.syntax) { var syntax = detectSyntax(c9Session); if (syntax) From d4ebf4c22f808258fbf8a8c70455b97dd7de5b21 Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 25 Feb 2015 15:54:06 +0400 Subject: [PATCH 3/3] add ui for guessTabSize setting --- plugins/c9.ide.ace/ace.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index e72fdcf1..963555e1 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -632,6 +632,11 @@ define(function(require, exports, module) { max: "64", position: 100 }, + "Autodetect Tab Size on Load" : { + type: "checkbox", + path: "project/ace/@guessTabSize", + position: 150 + }, "New File Line Endings" : { type: "dropdown", path: "project/ace/@newLineMode",