UNPKG

eclint

Version:

Validate or fix code that doesn't adhere to EditorConfig settings or infer settings from existing code.

79 lines 2.58 kB
"use strict"; 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