eclint
Version:
Validate or fix code that doesn't adhere to EditorConfig settings or infer settings from existing code.
79 lines • 2.58 kB
JavaScript
;
var _ = require("lodash");
var EditorConfigError = require("../editor-config-error");
var boms = {
'utf-16be': '\u00FE\u00FF',
'utf-16le': '\u00FF\u00FE',
'utf-32be': '\u0000\u0000\u00FE\u00FF',
'utf-32le': '\u00FF\u00FE\u0000\u0000',
'utf-8-bom': '\u00EF\u00BB\u00BF',
};
function resolve(settings) {
return settings.charset;
}
function check(settings, document) {
function creatErrorArray(message) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var error = new (EditorConfigError.bind.apply(EditorConfigError, [void 0, message].concat(args)))();
var source = '';
document.lines.some(function (line) {
if (/\S/.test(line.text)) {
source += line.text;
return true;
}
else {
source += line.text + line.ending;
}
});
error.source = source;
error.rule = 'charset';
return [error];
}
var inferredSetting = infer(document);
var configSetting = resolve(settings);
if (inferredSetting) {
if (inferredSetting !== settings.charset) {
return creatErrorArray('invalid charset: %s, expected: %s', inferredSetting, configSetting);
}
return [];
}
if (configSetting === 'latin1') {
var errors = document.lines.map(checkLatin1TextRange);
return [].concat.apply([], errors);
}
if (_.includes(Object.keys(boms), configSetting)) {
return creatErrorArray('expected charset: %s', settings.charset);
}
return [];
}
function fix(settings, document) {
document.charset = resolve(settings);
return document;
}
function infer(document) {
return document.charset;
}
function checkLatin1TextRange(line) {
return [].slice.call(line.text, 0).map(function (character, i) {
if (character.charCodeAt(0) >= 0x80) {
var error = new EditorConfigError('character out of latin1 range: %s', JSON.stringify(character));
error.lineNumber = line.number;
error.columnNumber = i + 1;
error.source = line.text;
error.rule = 'charset';
return error;
}
}).filter(Boolean);
}
var CharsetRule = {
check: check,
fix: fix,
infer: infer,
resolve: resolve,
type: 'DocumentRule',
};
module.exports = CharsetRule;
//# sourceMappingURL=charset.js.map