eslint-plugin-header
Advanced tools
+4
-0
@@ -0,1 +1,5 @@ | ||
| # 2.0.0 | ||
| * Use the OS's line endings (`\n` on *nix, `\r\n` on Windows) when parsing and fixing comments. This can be configured with the `lineEndings` option. Major version bump as this could be a breaking change for projects. | ||
| # 1.2.0 | ||
@@ -2,0 +6,0 @@ |
@@ -12,4 +12,3 @@ "use strict"; | ||
| "line", | ||
| // TODO \r as well | ||
| text.split("\n").map(function(line) { | ||
| text.split(/\r?\n/).map(function(line) { | ||
| return line.substr(2); | ||
@@ -16,0 +15,0 @@ }) |
+40
-20
@@ -5,2 +5,3 @@ "use strict"; | ||
| var commentParser = require("../comment-parser"); | ||
| var os = require("os"); | ||
@@ -31,15 +32,15 @@ function isPattern(object) { | ||
| function genCommentBody(commentType, textArray) { | ||
| function genCommentBody(commentType, textArray, eol) { | ||
| if (commentType === "block") { | ||
| return "/*" + textArray[0] + "*/\n"; | ||
| return "/*" + textArray[0] + "*/" + eol; | ||
| } else { | ||
| return "//" + textArray.join("\n//") + "\n"; | ||
| return "//" + textArray.join(eol + "//") + eol; | ||
| } | ||
| } | ||
| function genCommentsRange(context, comments) { | ||
| function genCommentsRange(context, comments, eol) { | ||
| var start = comments[0].range[0]; | ||
| var end = comments.slice(-1)[0].range[1]; | ||
| if (context.getSourceCode().text[end] === "\n") { | ||
| end++; | ||
| if (context.getSourceCode().text[end] === eol) { | ||
| end += eol.length; | ||
| } | ||
@@ -49,7 +50,7 @@ return [start, end]; | ||
| function genPrependFixer(commentType, node, headerLines) { | ||
| function genPrependFixer(commentType, node, headerLines, eol) { | ||
| return function(fixer) { | ||
| return fixer.insertTextBefore( | ||
| node, | ||
| genCommentBody(commentType, headerLines) | ||
| genCommentBody(commentType, headerLines, eol) | ||
| ); | ||
@@ -59,7 +60,7 @@ }; | ||
| function genReplaceFixer(commentType, context, leadingComments, headerLines) { | ||
| function genReplaceFixer(commentType, context, leadingComments, headerLines, eol) { | ||
| return function(fixer) { | ||
| return fixer.replaceTextRange( | ||
| genCommentsRange(context, leadingComments), | ||
| genCommentBody(commentType, headerLines) | ||
| genCommentsRange(context, leadingComments, eol), | ||
| genCommentBody(commentType, headerLines, eol) | ||
| ); | ||
@@ -69,7 +70,27 @@ }; | ||
| function findSettings(options) { | ||
| var lastOption = options.length > 0 ? options[options.length - 1] : null; | ||
| if (typeof lastOption === "object" && !Array.isArray(lastOption) && lastOption !== null && !lastOption.hasOwnProperty("pattern")) { | ||
| return lastOption; | ||
| } | ||
| } | ||
| function getEOL(options) { | ||
| var settings = findSettings(options); | ||
| if (settings && settings.lineEndings === "unix") { | ||
| return "\n"; | ||
| } | ||
| if (settings && settings.lineEndings === "windows") { | ||
| return "\r\n"; | ||
| } | ||
| return os.EOL; | ||
| } | ||
| module.exports = function(context) { | ||
| var options = context.options; | ||
| var eol = getEOL(options); | ||
| // If just one option then read comment from file | ||
| if (options.length === 1) { | ||
| if (options.length === 1 || (options.length === 2 && findSettings(options))) { | ||
| var text = fs.readFileSync(context.options[0], "utf8"); | ||
@@ -101,4 +122,3 @@ options = commentParser(text); | ||
| canFix = true; | ||
| // TODO split on \r as well | ||
| headerLines = options[1].split("\n"); | ||
| headerLines = options[1].split(/\r?\n/); | ||
| } | ||
@@ -108,3 +128,3 @@ } else { | ||
| canFix = true; | ||
| header = options[1].join("\n"); | ||
| header = options[1].join(eol); | ||
| } else if (isPattern(options[1])) { | ||
@@ -126,3 +146,3 @@ header = new RegExp(options[1].pattern); | ||
| message: "missing header", | ||
| fix: canFix ? genPrependFixer(commentType, node, header ? [header] : headerLines) : null | ||
| fix: canFix ? genPrependFixer(commentType, node, header ? [header] : headerLines, eol) : null | ||
| }); | ||
@@ -136,3 +156,3 @@ } else if (leadingComments[0].type.toLowerCase() !== commentType) { | ||
| }, | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, header ? [header] : headerLines) : null | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, header ? [header] : headerLines, eol) : null | ||
| }); | ||
@@ -145,3 +165,3 @@ } else { | ||
| message: "incorrect header", | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines) : null | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines, eol) : null | ||
| }); | ||
@@ -155,3 +175,3 @@ return; | ||
| message: "incorrect header", | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines) : null | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines, eol) : null | ||
| }); | ||
@@ -166,3 +186,3 @@ return; | ||
| message: "incorrect header", | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, [header]) : null | ||
| fix: canFix ? genReplaceFixer(commentType, context, leadingComments, [header], eol) : null | ||
| }); | ||
@@ -169,0 +189,0 @@ } |
+1
-1
| { | ||
| "name": "eslint-plugin-header", | ||
| "version": "1.2.0", | ||
| "version": "2.0.0", | ||
| "description": "ESLint plugin to ensure that files begin with given comment", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
+12
-2
@@ -10,3 +10,3 @@ eslint-plugin-header | ||
| This rule takes 1 or 2 arguments. | ||
| This rule takes 1 or 2 arguments with an optional settings object. | ||
@@ -39,3 +39,3 @@ ### 1 argument | ||
| In the 2 argument form the first must be either `"block"` or `"line"` to indiciate what style of comment should be used. The second is either a string (including newlines) of the comment, or an array of each line of the comment. | ||
| In the 2 argument form the first must be either `"block"` or `"line"` to indicate what style of comment should be used. The second is either a string (including newlines) of the comment, or an array of each line of the comment. | ||
@@ -66,2 +66,12 @@ ```json | ||
| ### Line Endings | ||
| The rule works with both unix and windows line endings. For ESLint `--fix`, the rule will use the line ending format of the current operating system (via the node `os` package). This setting can be overwritten as follows: | ||
| ```json | ||
| "rules": { | ||
| "header/header": [2, "block", ["Copyright 2018", "My Company"], {"lineEndings": "windows"}] | ||
| } | ||
| ``` | ||
| Possible values are `unix` for `\n` and `windows` for `\r\n` line endings. | ||
| ## Examples | ||
@@ -68,0 +78,0 @@ |
@@ -73,2 +73,18 @@ "use strict"; | ||
| ]] | ||
| }, | ||
| { | ||
| code: "// Copyright 2015\r\n// My Company\r\nconsole.log(1)", | ||
| options: ["tests/support/line.js"] | ||
| }, | ||
| { | ||
| code: "//Copyright 2018\r\n//My Company\r\n/* DOCS */", | ||
| options: ["line", ["Copyright 2018", "My Company"]] | ||
| }, | ||
| { | ||
| code: "/*Copyright 2018\r\nMy Company*/\r\nconsole.log(1)", | ||
| options: ["block", ["Copyright 2018", "My Company"], {"lineEndings": "windows"}] | ||
| }, | ||
| { | ||
| code: "/*Copyright 2018\nMy Company*/\nconsole.log(1)", | ||
| options: ["block", ["Copyright 2018", "My Company"], {"lineEndings": "unix"}] | ||
| } | ||
@@ -145,4 +161,11 @@ ], | ||
| ] | ||
| }, | ||
| { | ||
| code: "/*Copyright 2018\r\nMy Company*/\r\nconsole.log(1)", | ||
| options: ["block", ["Copyright 2018", "My Company"], {"lineEndings": "unix"}], | ||
| errors: [ | ||
| {message: "incorrect header"} | ||
| ] | ||
| } | ||
| ] | ||
| }); |
Sorry, the diff of this file is not supported yet
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
21468
11.64%387
11.21%122
8.93%13
-7.14%