UNPKG

eclint

Version:

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

84 lines 2.33 kB
"use strict"; 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