summaryrefslogtreecommitdiff
path: root/tools/eslint/lib/rules/linebreak-style.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/lib/rules/linebreak-style.js')
-rw-r--r--tools/eslint/lib/rules/linebreak-style.js57
1 files changed, 46 insertions, 11 deletions
diff --git a/tools/eslint/lib/rules/linebreak-style.js b/tools/eslint/lib/rules/linebreak-style.js
index b9afe7a4ba..29a9dfb7f0 100644
--- a/tools/eslint/lib/rules/linebreak-style.js
+++ b/tools/eslint/lib/rules/linebreak-style.js
@@ -12,26 +12,61 @@
// Rule Definition
//------------------------------------------------------------------------------
-module.exports = function (context) {
+module.exports = function(context) {
+
var EXPECTED_LF_MSG = "Expected linebreaks to be 'LF' but found 'CRLF'.",
EXPECTED_CRLF_MSG = "Expected linebreaks to be 'CRLF' but found 'LF'.";
+ //--------------------------------------------------------------------------
+ // Helpers
+ //--------------------------------------------------------------------------
+
+ /**
+ * Builds a fix function that replaces text at the specified range in the source text.
+ * @param {int[]} range The range to replace
+ * @param {string} text The text to insert.
+ * @returns {function} Fixer function
+ * @private
+ */
+ function createFix(range, text) {
+ return function(fixer) {
+ return fixer.replaceTextRange(range, text);
+ };
+ }
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
return {
"Program": function checkForlinebreakStyle(node) {
var linebreakStyle = context.options[0] || "unix",
expectedLF = linebreakStyle === "unix",
- linebreaks = context.getSource().match(/\r\n|\r|\n|\u2028|\u2029/g),
- lineOfError = -1;
+ expectedLFChars = expectedLF ? "\n" : "\r\n",
+ source = context.getSource(),
+ pattern = /\r\n|\r|\n|\u2028|\u2029/g,
+ match,
+ index,
+ range;
- if (linebreaks !== null) {
- lineOfError = linebreaks.indexOf(expectedLF ? "\r\n" : "\n");
- }
+ var i = 0;
+ while ((match = pattern.exec(source)) !== null) {
+ i++;
+ if (match[0] === expectedLFChars) {
+ continue;
+ }
- if (lineOfError !== -1) {
- context.report(node, {
- line: lineOfError + 1,
- column: context.getSourceLines()[lineOfError].length
- }, expectedLF ? EXPECTED_LF_MSG : EXPECTED_CRLF_MSG);
+ index = match.index;
+ range = [index, index + match[0].length];
+ context.report({
+ node: node,
+ loc: {
+ line: i,
+ column: context.getSourceLines()[i - 1].length
+ },
+ message: expectedLF ? EXPECTED_LF_MSG : EXPECTED_CRLF_MSG,
+ fix: createFix(range, expectedLFChars)
+ });
}
}
};