eclint
Version:
Validate or fix code that doesn't adhere to EditorConfig settings or infer settings from existing code.
84 lines • 2.33 kB
JavaScript
var _ = require("lodash");
var doc = require("../doc");
var EditorConfigError = require("../editor-config-error");
var newlines = {
cr: '\r',
crlf: '\r\n',
lf: '\n',
};
function resolve(settings) {
if (_.isBoolean(settings.insert_final_newline)) {
return settings.insert_final_newline;
}
return void (0);
}
function check(settings, document) {
var configSetting = resolve(settings);
var inferredSetting = infer(document);
if (configSetting == null || inferredSetting === configSetting) {
return [];
}
var message;
if (configSetting) {
message = 'expected final newline';
}
else {
message = 'unexpected final newline';
}
var error = new EditorConfigError(message);
error.lineNumber = document.lines.length;
var lastLine = document.lines[document.lines.length - 1];
error.columnNumber = lastLine.text.length + lastLine.ending.length;
error.rule = 'insert_final_newline';
error.source = lastLine.text + lastLine.ending;
return [error];
}
function fix(settings, document) {
var lastLine;
var ending;
var configSetting = resolve(settings);
function hasFinalNewline() {
lastLine = document.lines[document.lines.length - 1];
return lastLine && !lastLine.text;
}
if (configSetting) {
var endOfLineSetting = settings.end_of_line || 'lf';
ending = newlines[endOfLineSetting];
}
else {
ending = '';
}
while (hasFinalNewline()) {
document.lines.pop();
}
if (lastLine) {
lastLine.ending = ending;
}
else {
lastLine = new doc.Line({
ending: ending,
number: 1,
offset: 0,
text: '',
});
document.lines.push(lastLine);
}
return document;
}
function infer(document) {
var lastLine = document.lines[document.lines.length - 1];
if (lastLine && lastLine.ending) {
return true;
}
return false;
}
var InsertFinalNewlineRule = {
check: check,
fix: fix,
infer: infer,
resolve: resolve,
type: 'DocumentRule',
};
module.exports = InsertFinalNewlineRule;
//# sourceMappingURL=insert_final_newline.js.map
;