kopia lustrzana https://github.com/c9/core
Merge pull request +6368 from c9/fix/tab-guess
Be more cautious when detecting indentation of mixed filespull/39/head^2
commit
8a1c216acb
|
@ -46,19 +46,20 @@ exports.$detectIndentation = function(lines, fallback) {
|
|||
if (!/^\s*[^*+\-\s]/.test(line))
|
||||
continue;
|
||||
|
||||
if (line[0] == "\t")
|
||||
if (line[0] == "\t") {
|
||||
tabIndents++;
|
||||
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;
|
||||
|
||||
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;
|
||||
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};
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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",
|
||||
|
@ -2052,7 +2057,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)
|
||||
|
|
Ładowanie…
Reference in New Issue