Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

eslint-plugin-header

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-header - npm Package Compare versions

Comparing version 2.0.0 to 3.0.0

6

CHANGELOG.md

@@ -0,1 +1,7 @@

# 3.0.0
* Allow regexp in multiline arrays (#23)
* Add `template` option for regexps, for `eslint --fix` (#23)
* Update eslint to v5.12.0 (#19)
# 2.0.0

@@ -2,0 +8,0 @@

83

lib/rules/header.js

@@ -33,3 +33,3 @@ "use strict";

if (commentType === "block") {
return "/*" + textArray[0] + "*/" + eol;
return "/*" + textArray.join(eol) + "*/" + eol;
} else {

@@ -72,2 +72,3 @@ return "//" + textArray.join(eol + "//") + eol;

}
return null;
}

@@ -98,5 +99,3 @@

var commentType = options[0];
// If commentType is line then we want an array of the lines,
// but if block then we want just a string
var header, headerLines;
var headerLines, fixLines = [];
// If any of the lines are regular expressions, then we can't

@@ -106,28 +105,23 @@ // automatically fix them. We set this to true below once we

var canFix = false;
if (commentType === "line") {
if (Array.isArray(options[1])) {
canFix = true;
headerLines = options[1].map(function(line) {
var isRegex = isPattern(line);
if (isRegex) {
canFix = false;
}
return isRegex ? new RegExp(line.pattern) : line;
});
} else if (isPattern(options[1])) {
headerLines = [new RegExp(options[1].pattern)];
} else {
canFix = true;
headerLines = options[1].split(/\r?\n/);
}
if (Array.isArray(options[1])) {
canFix = true;
headerLines = options[1].map(function(line) {
var isRegex = isPattern(line);
// Can only fix regex option if a template is also provided
if (isRegex && !line.template) {
canFix = false;
}
fixLines.push(line.template || line);
return isRegex ? new RegExp(line.pattern) : line;
});
} else if (isPattern(options[1])) {
var line = options[1];
headerLines = [new RegExp(line.pattern)];
fixLines.push(line.template || line);
// Same as above for regex and template
canFix = !!line.template;
} else {
if (Array.isArray(options[1])) {
canFix = true;
header = options[1].join(eol);
} else if (isPattern(options[1])) {
header = new RegExp(options[1].pattern);
} else {
canFix = true;
header = options[1];
}
canFix = true;
headerLines = options[1].split(/\r?\n/);
fixLines = headerLines;
}

@@ -143,3 +137,3 @@

message: "missing header",
fix: canFix ? genPrependFixer(commentType, node, header ? [header] : headerLines, eol) : null
fix: canFix ? genPrependFixer(commentType, node, fixLines, eol) : null
});

@@ -153,3 +147,3 @@ } else if (leadingComments[0].type.toLowerCase() !== commentType) {

},
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, header ? [header] : headerLines, eol) : null
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, fixLines, eol) : null
});

@@ -162,3 +156,3 @@ } else {

message: "incorrect header",
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines, eol) : null
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, fixLines, eol) : null
});

@@ -172,3 +166,3 @@ return;

message: "incorrect header",
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, headerLines, eol) : null
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, fixLines, eol) : null
});

@@ -179,7 +173,26 @@ return;

} else {
if (!match(leadingComments[0].value, header)) {
// if block comment pattern has more than 1 line, we also split the comment
var leadingLines = [leadingComments[0].value];
if (headerLines.length > 1) {
leadingLines = leadingComments[0].value.split(/\r?\n/);
}
var hasError = false;
if (leadingLines.length > headerLines.length) {
hasError = true;
}
for (i = 0; !hasError && i < headerLines.length; i++) {
if (!match(leadingLines[i], headerLines[i])) {
hasError = true;
}
}
if (hasError) {
if (canFix && headerLines.length > 1) {
fixLines = [fixLines.join(eol)];
}
context.report({
loc: node.loc,
message: "incorrect header",
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, [header], eol) : null
fix: canFix ? genReplaceFixer(commentType, context, leadingComments, fixLines, eol) : null
});

@@ -186,0 +199,0 @@ }

{
"name": "eslint-plugin-header",
"version": "2.0.0",
"version": "3.0.0",
"description": "ESLint plugin to ensure that files begin with given comment",

@@ -12,4 +12,4 @@ "main": "index.js",

"devDependencies": {
"eslint": "^1.0.0",
"mocha": "^2.2.5"
"eslint": "^5.12.0",
"mocha": "^5.2.0"
},

@@ -16,0 +16,0 @@ "peerDependencies": {

@@ -51,4 +51,6 @@ eslint-plugin-header

Instead of a string to be checked for exact matching you can also supply a regular expression (beware that you have to quote backslashes):
#### Regular expressions
Instead of a string to be checked for exact matching you can also supply a regular expression. Be aware that you have to escape backslashes:
```json

@@ -60,3 +62,6 @@ {

"rules": {
"header/header": [2, "block", {"pattern": "^ Copyright \\d{4}\\n My Company$"}]
"header/header": [2, "block", [
{"pattern": " Copyright \\d{4}"},
"My Company"
]]
}

@@ -66,2 +71,25 @@ }

This would match:
```js
/* Copyright 2808
My Company*/
```
When you use a regular expression `pattern`, you can also provide a `template` property, to provide the comment value when using `eslint --fix`:
```json
{
"plugins": [
"header"
],
"rules": {
"header/header": [2, "block", [
{"pattern": " Copyright \\d{4}", "template": " Copyright 2019"},
"My Company"
]]
}
}
```
### Line Endings

@@ -125,2 +153,2 @@

MIT
MIT

@@ -89,2 +89,11 @@ "use strict";

options: ["block", ["Copyright 2018", "My Company"], {"lineEndings": "unix"}]
},
{
code: "/*************************\n * Copyright 2015\n * My Company\n *************************/\nconsole.log(1)",
options: ["block", [
"************************",
{ pattern: " \\* Copyright \\d{4}" },
" * My Company",
" ************************"
]]
}

@@ -126,2 +135,19 @@ ],

{
// Test extra line in comment
code: "/*Copyright 2015\nMy Company\nExtra*/\nconsole.log(1);",
options: ["block", ["Copyright 2015", "My Company"]],
errors: [
{message: "incorrect header"}
],
output: "/*Copyright 2015\nMy Company*/\nconsole.log(1);"
},
{
code: "/*Copyright 2015\n*/\nconsole.log(1);",
options: ["block", ["Copyright 2015", "My Company"]],
errors: [
{message: "incorrect header"}
],
output: "/*Copyright 2015\nMy Company*/\nconsole.log(1);"
},
{
code: "//Copyright 2014\n//My Company\nconsole.log(1)",

@@ -150,2 +176,18 @@ options: ["line", "Copyright 2015\nMy Company"],

{
code: "// Copyright 2017 trailing",
options: ["line", {pattern: "^ Copyright \\d+$", template: " Copyright 2018"}],
errors: [
{message: "incorrect header"}
],
output: "// Copyright 2018\n"
},
{
code: "// Copyright 2017 trailing\n// Someone",
options: ["line", [{pattern: "^ Copyright \\d+$", template: " Copyright 2018"}, " My Company"]],
errors: [
{message: "incorrect header"}
],
output: "// Copyright 2018\n// My Company\n"
},
{
code: "// Copyright 2017\n// Author: ab-c@example.com",

@@ -165,9 +207,15 @@ options: ["line", [{pattern: "Copyright \\d+"}, {pattern: "^ Author: \\w+@\\w+\\.\\w+$"}]],

{
code: "/*Copyright 2018\r\nMy Company*/\r\nconsole.log(1)",
options: ["block", ["Copyright 2018", "My Company"], {"lineEndings": "unix"}],
code: "/*************************\n * Copyright 2015\n * All your base are belong to us!\n *************************/\nconsole.log(1)",
options: ["block", [
"************************",
{ pattern: " \\* Copyright \\d{4}", template: " * Copyright 2019" },
" * My Company",
" ************************"
]],
errors: [
{message: "incorrect header"}
]
],
output: "/*************************\n * Copyright 2019\n * My Company\n *************************/\nconsole.log(1)"
}
]
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc