eslint 7.13.0 → 7.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ v7.14.0 - November 20, 2020
2
+
3
+ * [`5f09073`](https://github.com/eslint/eslint/commit/5f0907399a9666dec78c74384c8969c01483c30e) Update: fix 'skip' options in no-irregular-whitespace (fixes #13852) (#13853) (Milos Djermanovic)
4
+ * [`1861b40`](https://github.com/eslint/eslint/commit/1861b4086f1018f43ab19744d866d5da986c500d) Docs: correct the function-call-argument-newline 'default' descriptions (#13866) (Trevin Hofmann)
5
+ * [`98c00c4`](https://github.com/eslint/eslint/commit/98c00c41d2aecb3a990393d430694f4ce6b47de5) New: Add no-nonoctal-decimal-escape rule (fixes #13765) (#13845) (Milos Djermanovic)
6
+ * [`95d2fe6`](https://github.com/eslint/eslint/commit/95d2fe6057498fc1cc2193d28c8c2d1593224b33) Chore: remove eslint comment from no-octal-escape tests (#13846) (Milos Djermanovic)
7
+ * [`2004b7e`](https://github.com/eslint/eslint/commit/2004b7ecd3db0d4e7376cc3344246f7b9ada5801) Fix: enable debug logs for @eslint/eslintrc (fixes #13850) (#13861) (Milos Djermanovic)
8
+ * [`d2239a1`](https://github.com/eslint/eslint/commit/d2239a1fdec452e24ede04e990d16d42516fa538) Fix: no-useless-constructor crash on bodyless constructor (fixes #13830) (#13842) (Ari Perkkiö)
9
+ * [`eda0aa1`](https://github.com/eslint/eslint/commit/eda0aa18498dd85eb618873e8e0f4ac97032cfca) Docs: no-restricted-imports is only for static imports (#13863) (Robat Williams)
10
+ * [`042ae44`](https://github.com/eslint/eslint/commit/042ae44682a8a6c5037d920689124e2304056dd8) Docs: Fix JS syntax and doc URL in working-with-custom-formatters.md (#13828) (Raphael LANG)
11
+ * [`038dc73`](https://github.com/eslint/eslint/commit/038dc73c99ae68eae2035ef303f3a947053c8f05) Chore: Test on Node.js 15 (#13844) (Brandon Mills)
12
+ * [`37a06d6`](https://github.com/eslint/eslint/commit/37a06d633d3669f0f43236141dc43465b8bc7ec5) Sponsors: Sync README with website (ESLint Jenkins)
13
+
1
14
  v7.13.0 - November 6, 2020
2
15
 
3
16
  * [`254e00f`](https://github.com/eslint/eslint/commit/254e00fea8745ff5a8bcc8cb874fcfd02996d81b) New: Configurable List Size For Per-Rule Performance Metrics (#13812) (Bryan Mishkin)
package/README.md CHANGED
@@ -265,7 +265,7 @@ The following companies, organizations, and individuals support ESLint's ongoing
265
265
  <!--sponsorsstart-->
266
266
  <h3>Platinum Sponsors</h3>
267
267
  <p><a href="https://automattic.com"><img src="https://images.opencollective.com/photomatt/ff91f0b/logo.png" alt="Automattic" height="undefined"></a></p><h3>Gold Sponsors</h3>
268
- <p><a href="https://www.shopify.com"><img src="https://images.opencollective.com/shopify/e780cd4/logo.png" alt="Shopify" height="96"></a> <a href="https://www.salesforce.com"><img src="https://images.opencollective.com/salesforce/ca8f997/logo.png" alt="Salesforce" height="96"></a> <a href="https://www.airbnb.com/"><img src="https://images.opencollective.com/airbnb/d327d66/logo.png" alt="Airbnb" height="96"></a> <a href="https://aka.ms/microsoftfossfund"><img src="https://avatars1.githubusercontent.com/u/67931232?u=7fddc652a464d7151b97e8f108392af7d54fa3e8&v=4" alt="Microsoft FOSS Fund Sponsorships" height="96"></a></p><h3>Silver Sponsors</h3>
268
+ <p><a href="https://google.com/chrome"><img src="https://images.opencollective.com/chrome/dc55bd4/logo.png" alt="Chrome's Web Framework & Tools Performance Fund" height="96"></a> <a href="https://www.shopify.com"><img src="https://images.opencollective.com/shopify/e780cd4/logo.png" alt="Shopify" height="96"></a> <a href="https://www.salesforce.com"><img src="https://images.opencollective.com/salesforce/ca8f997/logo.png" alt="Salesforce" height="96"></a> <a href="https://www.airbnb.com/"><img src="https://images.opencollective.com/airbnb/d327d66/logo.png" alt="Airbnb" height="96"></a> <a href="https://aka.ms/microsoftfossfund"><img src="https://avatars1.githubusercontent.com/u/67931232?u=7fddc652a464d7151b97e8f108392af7d54fa3e8&v=4" alt="Microsoft FOSS Fund Sponsorships" height="96"></a></p><h3>Silver Sponsors</h3>
269
269
  <p><a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://www.ampproject.org/"><img src="https://images.opencollective.com/amp/c8a3b25/logo.png" alt="AMP Project" height="64"></a></p><h3>Bronze Sponsors</h3>
270
270
  <p><a href="https://writersperhour.com"><img src="https://images.opencollective.com/writersperhour/5787d4b/logo.png" alt="Writers Per Hour" height="32"></a> <a href="https://www.betacalendars.com/printable-calendar"><img src="https://images.opencollective.com/betacalendars/9334b33/logo.png" alt="2021 calendar" height="32"></a> <a href="https://buy.fineproxy.org/eng/"><img src="https://images.opencollective.com/buy-fineproxy-org/b282e39/logo.png" alt="Buy.Fineproxy.Org" height="32"></a> <a href="https://www.veikkaajat.com"><img src="https://images.opencollective.com/veikkaajat/b92b427/logo.png" alt="Veikkaajat.com" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="null"><img src="https://images.opencollective.com/bugsnag-stability-monitoring/c2cef36/logo.png" alt="Bugsnag Stability Monitoring" height="32"></a> <a href="https://mixpanel.com"><img src="https://images.opencollective.com/mixpanel/cd682f7/logo.png" alt="Mixpanel" height="32"></a> <a href="https://www.vpsserver.com"><img src="https://images.opencollective.com/vpsservercom/logo.png" alt="VPS Server" height="32"></a> <a href="https://icons8.com"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8: free icons, photos, illustrations, and music" height="32"></a> <a href="https://discordapp.com"><img src="https://images.opencollective.com/discordapp/7e3d9a9/logo.png" alt="Discord" height="32"></a> <a href="https://themeisle.com"><img src="https://images.opencollective.com/themeisle/d5592fe/logo.png" alt="ThemeIsle" height="32"></a> <a href="https://www.firesticktricks.com"><img src="https://images.opencollective.com/fire-stick-tricks/b8fbe2c/logo.png" alt="Fire Stick Tricks" height="32"></a></p>
271
271
  <!--sponsorsend-->
package/bin/eslint.js CHANGED
@@ -14,7 +14,7 @@ require("v8-compile-cache");
14
14
 
15
15
  // must do this initialization *before* other requires in order to work
16
16
  if (process.argv.includes("--debug")) {
17
- require("debug").enable("eslint:*,-eslint:code-path");
17
+ require("debug").enable("eslint:*,-eslint:code-path,eslintrc:*");
18
18
  }
19
19
 
20
20
  //------------------------------------------------------------------------------
@@ -169,6 +169,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({
169
169
  "no-new-require": () => require("./no-new-require"),
170
170
  "no-new-symbol": () => require("./no-new-symbol"),
171
171
  "no-new-wrappers": () => require("./no-new-wrappers"),
172
+ "no-nonoctal-decimal-escape": () => require("./no-nonoctal-decimal-escape"),
172
173
  "no-obj-calls": () => require("./no-obj-calls"),
173
174
  "no-octal": () => require("./no-octal"),
174
175
  "no-octal-escape": () => require("./no-octal-escape"),
@@ -82,7 +82,7 @@ module.exports = {
82
82
  const commentNodes = sourceCode.getAllComments();
83
83
 
84
84
  /**
85
- * Removes errors that occur inside a string node
85
+ * Removes errors that occur inside the given node
86
86
  * @param {ASTNode} node to check for matching errors.
87
87
  * @returns {void}
88
88
  * @private
@@ -91,14 +91,12 @@ module.exports = {
91
91
  const locStart = node.loc.start;
92
92
  const locEnd = node.loc.end;
93
93
 
94
- errors = errors.filter(({ loc: { start: errorLoc } }) => {
95
- if (errorLoc.line >= locStart.line && errorLoc.line <= locEnd.line) {
96
- if (errorLoc.column >= locStart.column && (errorLoc.column <= locEnd.column || errorLoc.line < locEnd.line)) {
97
- return false;
98
- }
99
- }
100
- return true;
101
- });
94
+ errors = errors.filter(({ loc: { start: errorLocStart } }) => (
95
+ errorLocStart.line < locStart.line ||
96
+ errorLocStart.line === locStart.line && errorLocStart.column < locStart.column ||
97
+ errorLocStart.line === locEnd.line && errorLocStart.column >= locEnd.column ||
98
+ errorLocStart.line > locEnd.line
99
+ ));
102
100
  }
103
101
 
104
102
  /**
@@ -0,0 +1,147 @@
1
+ /**
2
+ * @fileoverview Rule to disallow `\8` and `\9` escape sequences in string literals.
3
+ * @author Milos Djermanovic
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Helpers
10
+ //------------------------------------------------------------------------------
11
+
12
+ const QUICK_TEST_REGEX = /\\[89]/u;
13
+
14
+ /**
15
+ * Returns unicode escape sequence that represents the given character.
16
+ * @param {string} character A single code unit.
17
+ * @returns {string} "\uXXXX" sequence.
18
+ */
19
+ function getUnicodeEscape(character) {
20
+ return `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`;
21
+ }
22
+
23
+ //------------------------------------------------------------------------------
24
+ // Rule Definition
25
+ //------------------------------------------------------------------------------
26
+
27
+ module.exports = {
28
+ meta: {
29
+ type: "suggestion",
30
+
31
+ docs: {
32
+ description: "disallow `\\8` and `\\9` escape sequences in string literals",
33
+ category: "Best Practices",
34
+ recommended: false,
35
+ url: "https://eslint.org/docs/rules/no-nonoctal-decimal-escape",
36
+ suggestion: true
37
+ },
38
+
39
+ schema: [],
40
+
41
+ messages: {
42
+ decimalEscape: "Don't use '{{decimalEscape}}' escape sequence.",
43
+
44
+ // suggestions
45
+ refactor: "Replace '{{original}}' with '{{replacement}}'. This maintains the current functionality.",
46
+ escapeBackslash: "Replace '{{original}}' with '{{replacement}}' to include the actual backslash character."
47
+ }
48
+ },
49
+
50
+ create(context) {
51
+ const sourceCode = context.getSourceCode();
52
+
53
+ /**
54
+ * Creates a new Suggestion object.
55
+ * @param {string} messageId "refactor" or "escapeBackslash".
56
+ * @param {int[]} range The range to replace.
57
+ * @param {string} replacement New text for the range.
58
+ * @returns {Object} Suggestion
59
+ */
60
+ function createSuggestion(messageId, range, replacement) {
61
+ return {
62
+ messageId,
63
+ data: {
64
+ original: sourceCode.getText().slice(...range),
65
+ replacement
66
+ },
67
+ fix(fixer) {
68
+ return fixer.replaceTextRange(range, replacement);
69
+ }
70
+ };
71
+ }
72
+
73
+ return {
74
+ Literal(node) {
75
+ if (typeof node.value !== "string") {
76
+ return;
77
+ }
78
+
79
+ if (!QUICK_TEST_REGEX.test(node.raw)) {
80
+ return;
81
+ }
82
+
83
+ const regex = /(?:[^\\]|(?<previousEscape>\\.))*?(?<decimalEscape>\\[89])/suy;
84
+ let match;
85
+
86
+ while ((match = regex.exec(node.raw))) {
87
+ const { previousEscape, decimalEscape } = match.groups;
88
+ const decimalEscapeRangeEnd = node.range[0] + match.index + match[0].length;
89
+ const decimalEscapeRangeStart = decimalEscapeRangeEnd - decimalEscape.length;
90
+ const decimalEscapeRange = [decimalEscapeRangeStart, decimalEscapeRangeEnd];
91
+ const suggest = [];
92
+
93
+ // When `regex` is matched, `previousEscape` can only capture characters adjacent to `decimalEscape`
94
+ if (previousEscape === "\\0") {
95
+
96
+ /*
97
+ * Now we have a NULL escape "\0" immediately followed by a decimal escape, e.g.: "\0\8".
98
+ * Fixing this to "\08" would turn "\0" into a legacy octal escape. To avoid producing
99
+ * an octal escape while fixing a decimal escape, we provide different suggestions.
100
+ */
101
+ suggest.push(
102
+ createSuggestion( // "\0\8" -> "\u00008"
103
+ "refactor",
104
+ [decimalEscapeRangeStart - previousEscape.length, decimalEscapeRangeEnd],
105
+ `${getUnicodeEscape("\0")}${decimalEscape[1]}`
106
+ ),
107
+ createSuggestion( // "\8" -> "\u0038"
108
+ "refactor",
109
+ decimalEscapeRange,
110
+ getUnicodeEscape(decimalEscape[1])
111
+ )
112
+ );
113
+ } else {
114
+ suggest.push(
115
+ createSuggestion( // "\8" -> "8"
116
+ "refactor",
117
+ decimalEscapeRange,
118
+ decimalEscape[1]
119
+ )
120
+ );
121
+ }
122
+
123
+ suggest.push(
124
+ createSuggestion( // "\8" -> "\\8"
125
+ "escapeBackslash",
126
+ decimalEscapeRange,
127
+ `\\${decimalEscape}`
128
+ )
129
+ );
130
+
131
+ context.report({
132
+ node,
133
+ loc: {
134
+ start: sourceCode.getLocFromIndex(decimalEscapeRangeStart),
135
+ end: sourceCode.getLocFromIndex(decimalEscapeRangeEnd)
136
+ },
137
+ messageId: "decimalEscape",
138
+ data: {
139
+ decimalEscape
140
+ },
141
+ suggest
142
+ });
143
+ }
144
+ }
145
+ };
146
+ }
147
+ };
@@ -162,6 +162,14 @@ module.exports = {
162
162
  return;
163
163
  }
164
164
 
165
+ /*
166
+ * Prevent crashing on parsers which do not require class constructor
167
+ * to have a body, e.g. typescript and flow
168
+ */
169
+ if (!node.value.body) {
170
+ return;
171
+ }
172
+
165
173
  const body = node.value.body.body;
166
174
  const ctorParams = node.value.params;
167
175
  const superClass = node.parent.parent.superClass;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint",
3
- "version": "7.13.0",
3
+ "version": "7.14.0",
4
4
  "author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>",
5
5
  "description": "An AST-based pattern checker for JavaScript.",
6
6
  "bin": {