eslint 7.16.0 → 7.17.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,17 @@
1
+ v7.17.0 - January 1, 2021
2
+
3
+ * [`e128e77`](https://github.com/eslint/eslint/commit/e128e775e9fa116a0ad68a071f1f0997589f8cd4) Update: check logical assignment in no-constant-condition (#13946) (Milos Djermanovic)
4
+ * [`cc48713`](https://github.com/eslint/eslint/commit/cc4871369645c3409dc56ded7a555af8a9f63d51) Chore: refactor calculating range and loc in no-useless-escape (#13964) (Milos Djermanovic)
5
+ * [`535fe47`](https://github.com/eslint/eslint/commit/535fe47fee6544b4957378f9408117c8318d4762) Update: use regexpp's default ecmaVersion in no-control-regex (#13969) (Milos Djermanovic)
6
+ * [`83e98cd`](https://github.com/eslint/eslint/commit/83e98cd48ce3d1acf729f4fb9be40cff332abd6e) Fix: use regexpp's default ecmaVersion in no-invalid-regexp (#13968) (Milos Djermanovic)
7
+ * [`7297363`](https://github.com/eslint/eslint/commit/7297363ea355d0e3b2a74aaec586126deb91fd93) Docs: fix examples for no-multi-str (#13966) (Milos Djermanovic)
8
+ * [`0649871`](https://github.com/eslint/eslint/commit/06498716bfba65ed8c7217917a29a07ad267193a) Update: add autofix to rule multiline-ternary (#13958) (薛定谔的猫)
9
+ * [`f6e7e32`](https://github.com/eslint/eslint/commit/f6e7e3231bc43c989f8c953de8e0d328bac5eea0) Fix: no-useless-escape wrong loc and fix with CRLF in template elements (#13953) (Milos Djermanovic)
10
+ * [`19c69c0`](https://github.com/eslint/eslint/commit/19c69c0293a98634ff0d4884a0cdabc1213ebcb4) Fix: one-var shouldn't split declaration if it isn't in a statement list (#13959) (Milos Djermanovic)
11
+ * [`e451b96`](https://github.com/eslint/eslint/commit/e451b9664aface32ad9321eaf5619c875dc76553) Docs: update build tool for webpack (#13962) (Sam Chen)
12
+ * [`c3e9acc`](https://github.com/eslint/eslint/commit/c3e9accce2f61b04ab699fd37c90703305281aa3) Chore: fix typos (#13960) (YeonJuan)
13
+ * [`7289ecf`](https://github.com/eslint/eslint/commit/7289ecf58ed0d2e7f0ad7f1e5004c8927a7bf805) Sponsors: Sync README with website (ESLint Jenkins)
14
+
1
15
  v7.16.0 - December 18, 2020
2
16
 
3
17
  * [`a62ad6f`](https://github.com/eslint/eslint/commit/a62ad6f03151358b93b5fede022a30d67310705c) Update: fix false negative of no-extra-parens with NewExpression (#13930) (Milos Djermanovic)
package/README.md CHANGED
@@ -262,7 +262,7 @@ The following companies, organizations, and individuals support ESLint's ongoing
262
262
  <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>
263
263
  <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>
264
264
  <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>
265
- <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/3777f94/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>
265
+ <p><a href="https://thestandarddaily.com/"><img src="https://images.opencollective.com/eric-watson/db4e598/avatar.png" alt="The Standard Daily" height="32"></a> <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/3777f94/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>
266
266
  <!--sponsorsend-->
267
267
 
268
268
  ## <a name="technology-sponsors"></a>Technology Sponsors
@@ -272,7 +272,7 @@ function processOptions({
272
272
  errors.push("'rulePaths' must be an array of non-empty strings.");
273
273
  }
274
274
  if (typeof useEslintrc !== "boolean") {
275
- errors.push("'useElintrc' must be a boolean.");
275
+ errors.push("'useEslintrc' must be a boolean.");
276
276
  }
277
277
 
278
278
  if (errors.length > 0) {
@@ -563,7 +563,7 @@ class ESLint {
563
563
 
564
564
  /**
565
565
  * Returns the formatter representing the given formatter name.
566
- * @param {string} [name] The name of the formattter to load.
566
+ * @param {string} [name] The name of the formatter to load.
567
567
  * The following values are allowed:
568
568
  * - `undefined` ... Load `stylish` builtin formatter.
569
569
  * - A builtin formatter name ... Load the builtin formatter.
@@ -191,7 +191,7 @@ module.exports = {
191
191
  }
192
192
 
193
193
  /*
194
- * If the first token of the reutrn value is `{` or the return value is a sequence expression,
194
+ * If the first token of the return value is `{` or the return value is a sequence expression,
195
195
  * enclose the return value by parentheses to avoid syntax error.
196
196
  */
197
197
  if (astUtils.isOpeningBraceToken(firstValueToken) || blockBody[0].argument.type === "SequenceExpression" || (funcInfo.hasInOperator && isInsideForLoopInitializer(node))) {
@@ -59,9 +59,9 @@ module.exports = {
59
59
  }
60
60
 
61
61
  /**
62
- * Check to see if a node contains only identifers
62
+ * Check to see if a node contains only identifiers
63
63
  * @param {ASTNode} node The node to check
64
- * @returns {boolean} Whether or not the node contains only identifers
64
+ * @returns {boolean} Whether or not the node contains only identifiers
65
65
  */
66
66
  function containsOnlyIdentifiers(node) {
67
67
  if (node.type === "Identifier") {
@@ -46,7 +46,7 @@ module.exports = {
46
46
  const sourceCode = context.getSourceCode();
47
47
 
48
48
  /**
49
- * Reports if the dot between object and property is on the correct loccation.
49
+ * Reports if the dot between object and property is on the correct location.
50
50
  * @param {ASTNode} node The `MemberExpression` node.
51
51
  * @returns {void}
52
52
  */
@@ -131,7 +131,7 @@ module.exports = {
131
131
  return null;
132
132
  }
133
133
 
134
- // If `?.` exsits, it doesn't hide no-undexpected-multiline errors
134
+ // If `?.` exists, it doesn't hide no-unexpected-multiline errors
135
135
  if (node.optional) {
136
136
  return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], "?.");
137
137
  }
@@ -177,7 +177,7 @@ module.exports = {
177
177
  /*
178
178
  * Only autofix if there is no newline
179
179
  * https://github.com/eslint/eslint/issues/7787
180
- * But if `?.` exsits, it doesn't hide no-undexpected-multiline errors
180
+ * But if `?.` exists, it doesn't hide no-unexpected-multiline errors
181
181
  */
182
182
  if (!node.optional) {
183
183
  return null;
@@ -27,19 +27,22 @@ module.exports = {
27
27
  enum: ["always", "always-multiline", "never"]
28
28
  }
29
29
  ],
30
+
30
31
  messages: {
31
32
  expectedTestCons: "Expected newline between test and consequent of ternary expression.",
32
33
  expectedConsAlt: "Expected newline between consequent and alternate of ternary expression.",
33
34
  unexpectedTestCons: "Unexpected newline between test and consequent of ternary expression.",
34
35
  unexpectedConsAlt: "Unexpected newline between consequent and alternate of ternary expression."
35
- }
36
+ },
37
+
38
+ fixable: "whitespace"
36
39
  },
37
40
 
38
41
  create(context) {
42
+ const sourceCode = context.getSourceCode();
39
43
  const option = context.options[0];
40
44
  const multiline = option !== "never";
41
45
  const allowSingleLine = option === "always-multiline";
42
- const sourceCode = context.getSourceCode();
43
46
 
44
47
  //--------------------------------------------------------------------------
45
48
  // Public
@@ -59,6 +62,8 @@ module.exports = {
59
62
  const areTestAndConsequentOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfTest, firstTokenOfConsequent);
60
63
  const areConsequentAndAlternateOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfConsequent, firstTokenOfAlternate);
61
64
 
65
+ const hasComments = !!sourceCode.getCommentsInside(node).length;
66
+
62
67
  if (!multiline) {
63
68
  if (!areTestAndConsequentOnSameLine) {
64
69
  context.report({
@@ -67,7 +72,24 @@ module.exports = {
67
72
  start: firstTokenOfTest.loc.start,
68
73
  end: lastTokenOfTest.loc.end
69
74
  },
70
- messageId: "unexpectedTestCons"
75
+ messageId: "unexpectedTestCons",
76
+ fix: fixer => {
77
+ if (hasComments) {
78
+ return null;
79
+ }
80
+ const fixers = [];
81
+ const areTestAndQuestionOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfTest, questionToken);
82
+ const areQuestionAndConsOnSameLine = astUtils.isTokenOnSameLine(questionToken, firstTokenOfConsequent);
83
+
84
+ if (!areTestAndQuestionOnSameLine) {
85
+ fixers.push(fixer.removeRange([lastTokenOfTest.range[1], questionToken.range[0]]));
86
+ }
87
+ if (!areQuestionAndConsOnSameLine) {
88
+ fixers.push(fixer.removeRange([questionToken.range[1], firstTokenOfConsequent.range[0]]));
89
+ }
90
+
91
+ return fixers;
92
+ }
71
93
  });
72
94
  }
73
95
 
@@ -78,7 +100,24 @@ module.exports = {
78
100
  start: firstTokenOfConsequent.loc.start,
79
101
  end: lastTokenOfConsequent.loc.end
80
102
  },
81
- messageId: "unexpectedConsAlt"
103
+ messageId: "unexpectedConsAlt",
104
+ fix: fixer => {
105
+ if (hasComments) {
106
+ return null;
107
+ }
108
+ const fixers = [];
109
+ const areConsAndColonOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfConsequent, colonToken);
110
+ const areColonAndAltOnSameLine = astUtils.isTokenOnSameLine(colonToken, firstTokenOfAlternate);
111
+
112
+ if (!areConsAndColonOnSameLine) {
113
+ fixers.push(fixer.removeRange([lastTokenOfConsequent.range[1], colonToken.range[0]]));
114
+ }
115
+ if (!areColonAndAltOnSameLine) {
116
+ fixers.push(fixer.removeRange([colonToken.range[1], firstTokenOfAlternate.range[0]]));
117
+ }
118
+
119
+ return fixers;
120
+ }
82
121
  });
83
122
  }
84
123
  } else {
@@ -93,7 +132,16 @@ module.exports = {
93
132
  start: firstTokenOfTest.loc.start,
94
133
  end: lastTokenOfTest.loc.end
95
134
  },
96
- messageId: "expectedTestCons"
135
+ messageId: "expectedTestCons",
136
+ fix: fixer => (hasComments ? null : (
137
+ fixer.replaceTextRange(
138
+ [
139
+ lastTokenOfTest.range[1],
140
+ questionToken.range[0]
141
+ ],
142
+ "\n"
143
+ )
144
+ ))
97
145
  });
98
146
  }
99
147
 
@@ -104,7 +152,16 @@ module.exports = {
104
152
  start: firstTokenOfConsequent.loc.start,
105
153
  end: lastTokenOfConsequent.loc.end
106
154
  },
107
- messageId: "expectedConsAlt"
155
+ messageId: "expectedConsAlt",
156
+ fix: (fixer => (hasComments ? null : (
157
+ fixer.replaceTextRange(
158
+ [
159
+ lastTokenOfConsequent.range[1],
160
+ colonToken.range[0]
161
+ ],
162
+ "\n"
163
+ )
164
+ )))
108
165
  });
109
166
  }
110
167
  }
@@ -106,10 +106,15 @@ module.exports = {
106
106
  */
107
107
  return operator === node.operator &&
108
108
  (
109
- isLogicalIdentity(node.left, node.operator) ||
110
- isLogicalIdentity(node.right, node.operator)
109
+ isLogicalIdentity(node.left, operator) ||
110
+ isLogicalIdentity(node.right, operator)
111
111
  );
112
112
 
113
+ case "AssignmentExpression":
114
+ return ["||=", "&&="].includes(node.operator) &&
115
+ operator === node.operator.slice(0, -1) &&
116
+ isLogicalIdentity(node.right, operator);
117
+
113
118
  // no default
114
119
  }
115
120
  return false;
@@ -177,7 +182,15 @@ module.exports = {
177
182
  }
178
183
 
179
184
  case "AssignmentExpression":
180
- return (node.operator === "=") && isConstant(node.right, inBooleanPosition);
185
+ if (node.operator === "=") {
186
+ return isConstant(node.right, inBooleanPosition);
187
+ }
188
+
189
+ if (["||=", "&&="].includes(node.operator) && inBooleanPosition) {
190
+ return isLogicalIdentity(node.right, node.operator.slice(0, -1));
191
+ }
192
+
193
+ return false;
181
194
 
182
195
  case "SequenceExpression":
183
196
  return isConstant(node.expressions[node.expressions.length - 1], inBooleanPosition);
@@ -8,7 +8,6 @@
8
8
  const RegExpValidator = require("regexpp").RegExpValidator;
9
9
  const collector = new (class {
10
10
  constructor() {
11
- this.ecmaVersion = 2018;
12
11
  this._source = "";
13
12
  this._controlChars = [];
14
13
  this._validator = new RegExpValidator(this);
@@ -138,7 +138,7 @@ module.exports = {
138
138
  }
139
139
 
140
140
  /*
141
- * `identifierNode.parent` is a MamberExpression `*.prototype`.
141
+ * `identifierNode.parent` is a MemberExpression `*.prototype`.
142
142
  * If it's an optional member access, it may be wrapped by a `ChainExpression` node.
143
143
  */
144
144
  const prototypeNode =
@@ -97,10 +97,10 @@ function isIterationVariable(node) {
97
97
  * - `Object.defineProperties`
98
98
  * - `Object.freeze`
99
99
  * - `Object.setPrototypeOf`
100
- * - `Refrect.defineProperty`
101
- * - `Refrect.deleteProperty`
102
- * - `Refrect.set`
103
- * - `Refrect.setPrototypeOf`
100
+ * - `Reflect.defineProperty`
101
+ * - `Reflect.deleteProperty`
102
+ * - `Reflect.set`
103
+ * - `Reflect.setPrototypeOf`
104
104
  * @param {ASTNode} node The node to check.
105
105
  * @param {Scope} scope A `escope.Scope` object to find variable (whichever).
106
106
  * @returns {boolean} `true` if the node is at the first argument of a well-known mutation function.
@@ -9,7 +9,7 @@
9
9
  //------------------------------------------------------------------------------
10
10
 
11
11
  const RegExpValidator = require("regexpp").RegExpValidator;
12
- const validator = new RegExpValidator({ ecmaVersion: 2018 });
12
+ const validator = new RegExpValidator();
13
13
  const validFlags = /[gimuys]/gu;
14
14
  const undefined1 = void 0;
15
15
 
@@ -45,7 +45,7 @@ module.exports = {
45
45
 
46
46
  /**
47
47
  * Checks and reports given exported identifier.
48
- * @param {ASTNode} node exported `Identifer` node to check.
48
+ * @param {ASTNode} node exported `Identifier` node to check.
49
49
  * @returns {void}
50
50
  */
51
51
  function checkExportedName(node) {
@@ -171,7 +171,7 @@ module.exports = {
171
171
  /**
172
172
  * Removes the top of stack item.
173
173
  *
174
- * And this treverses all segments of this code path then reports every
174
+ * And this traverses all segments of this code path then reports every
175
175
  * invalid node.
176
176
  * @param {CodePath} codePath A code path which was ended.
177
177
  * @returns {void}
@@ -109,9 +109,9 @@ module.exports = {
109
109
  * @returns {void}
110
110
  */
111
111
  function report(node, startOffset, character) {
112
- const start = sourceCode.getLocFromIndex(sourceCode.getIndexFromLoc(node.loc.start) + startOffset);
113
- const rangeStart = sourceCode.getIndexFromLoc(node.loc.start) + startOffset;
112
+ const rangeStart = node.range[0] + startOffset;
114
113
  const range = [rangeStart, rangeStart + 1];
114
+ const start = sourceCode.getLocFromIndex(rangeStart);
115
115
 
116
116
  context.report({
117
117
  node,
@@ -172,7 +172,7 @@ module.exports = {
172
172
  }
173
173
 
174
174
  if (isUnnecessaryEscape && !isQuoteEscape) {
175
- report(node, match.index + 1, match[0].slice(1));
175
+ report(node, match.index, match[0].slice(1));
176
176
  }
177
177
  }
178
178
 
@@ -206,7 +206,7 @@ module.exports = {
206
206
  return;
207
207
  }
208
208
 
209
- const value = isTemplateElement ? node.value.raw : node.raw.slice(1, -1);
209
+ const value = isTemplateElement ? sourceCode.getText(node) : node.raw;
210
210
  const pattern = /\\[^\d]/gu;
211
211
  let match;
212
212
 
@@ -5,6 +5,25 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Determines whether the given node is in a statement list.
20
+ * @param {ASTNode} node node to check
21
+ * @returns {boolean} `true` if the given node is in a statement list
22
+ */
23
+ function isInStatementList(node) {
24
+ return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type);
25
+ }
26
+
8
27
  //------------------------------------------------------------------------------
9
28
  // Rule Definition
10
29
  //------------------------------------------------------------------------------
@@ -268,8 +287,8 @@ module.exports = {
268
287
 
269
288
  /**
270
289
  * Fixer to join VariableDeclaration's into a single declaration
271
- * @param {VariableDeclarator[]} declarations The `VariableDeclaration` to join
272
- * @returns {Function} The fixer function
290
+ * @param {VariableDeclarator[]} declarations The `VariableDeclaration` to join
291
+ * @returns {Function} The fixer function
273
292
  */
274
293
  function joinDeclarations(declarations) {
275
294
  const declaration = declarations[0];
@@ -297,10 +316,17 @@ module.exports = {
297
316
 
298
317
  /**
299
318
  * Fixer to split a VariableDeclaration into individual declarations
300
- * @param {VariableDeclaration} declaration The `VariableDeclaration` to split
301
- * @returns {Function} The fixer function
319
+ * @param {VariableDeclaration} declaration The `VariableDeclaration` to split
320
+ * @returns {Function|null} The fixer function
302
321
  */
303
322
  function splitDeclarations(declaration) {
323
+ const { parent } = declaration;
324
+
325
+ // don't autofix code such as: if (foo) var x, y;
326
+ if (!isInStatementList(parent.type === "ExportNamedDeclaration" ? parent : declaration)) {
327
+ return null;
328
+ }
329
+
304
330
  return fixer => declaration.declarations.map(declarator => {
305
331
  const tokenAfterDeclarator = sourceCode.getTokenAfter(declarator);
306
332
 
@@ -279,7 +279,7 @@ module.exports = {
279
279
  * @param {ASTNode} node the AssignmentExpression node
280
280
  * @returns {void}
281
281
  */
282
- function checkAssigmentExpression(node) {
282
+ function checkAssignmentExpression(node) {
283
283
  if (node.operator === "=") {
284
284
  performCheck(node.left, node.right, node);
285
285
  }
@@ -291,7 +291,7 @@ module.exports = {
291
291
 
292
292
  return {
293
293
  VariableDeclarator: checkVariableDeclarator,
294
- AssignmentExpression: checkAssigmentExpression
294
+ AssignmentExpression: checkAssignmentExpression
295
295
  };
296
296
  }
297
297
  };
@@ -105,10 +105,10 @@ module.exports = {
105
105
  CallExpression(node) {
106
106
  const methodName = (node.callee.property || {}).name;
107
107
  const isReflectCall = (node.callee.object || {}).name === "Reflect";
108
- const hasReflectSubsitute = Object.prototype.hasOwnProperty.call(reflectSubstitutes, methodName);
108
+ const hasReflectSubstitute = Object.prototype.hasOwnProperty.call(reflectSubstitutes, methodName);
109
109
  const userConfiguredException = exceptions.indexOf(methodName) !== -1;
110
110
 
111
- if (hasReflectSubsitute && !isReflectCall && !userConfiguredException) {
111
+ if (hasReflectSubstitute && !isReflectCall && !userConfiguredException) {
112
112
  report(node, existingNames[methodName], reflectSubstitutes[methodName]);
113
113
  }
114
114
  },
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @fileoverview This rule shoud require or disallow spaces before or after unary operations.
2
+ * @fileoverview This rule should require or disallow spaces before or after unary operations.
3
3
  * @author Marcin Kumorek
4
4
  */
5
5
  "use strict";
@@ -82,7 +82,7 @@ function startsWithUpperCase(s) {
82
82
  /**
83
83
  * Checks whether or not a node is a constructor.
84
84
  * @param {ASTNode} node A function node to check.
85
- * @returns {boolean} Wehether or not a node is a constructor.
85
+ * @returns {boolean} Whether or not a node is a constructor.
86
86
  */
87
87
  function isES5Constructor(node) {
88
88
  return (node.id && startsWithUpperCase(node.id.name));
@@ -1574,7 +1574,7 @@ module.exports = {
1574
1574
  },
1575
1575
 
1576
1576
  /*
1577
- * Determine if a node has a possiblity to be an Error object
1577
+ * Determine if a node has a possibility to be an Error object
1578
1578
  * @param {ASTNode} node ASTNode to check
1579
1579
  * @returns {boolean} True if there is a chance it contains an Error obj
1580
1580
  */
@@ -15,7 +15,7 @@ const lodash = require("lodash");
15
15
  // Private
16
16
  //------------------------------------------------------------------------------
17
17
 
18
- // Defitions for deprecation warnings.
18
+ // Definitions for deprecation warnings.
19
19
  const deprecationWarningMessages = {
20
20
  ESLINT_LEGACY_ECMAFEATURES:
21
21
  "The 'ecmaFeatures' config file property is deprecated and has no effect.",
@@ -46,9 +46,9 @@ module.exports = {};
46
46
  /**
47
47
  * @typedef {Object} OverrideConfigData
48
48
  * @property {Record<string, boolean>} [env] The environment settings.
49
- * @property {string | string[]} [excludedFiles] The glob pattarns for excluded files.
49
+ * @property {string | string[]} [excludedFiles] The glob patterns for excluded files.
50
50
  * @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.
51
- * @property {string | string[]} files The glob pattarns for target files.
51
+ * @property {string | string[]} files The glob patterns for target files.
52
52
  * @property {Record<string, GlobalConf>} [globals] The global variable settings.
53
53
  * @property {boolean} [noInlineConfig] The flag that disables directive comments.
54
54
  * @property {OverrideConfigData[]} [overrides] The override settings per kind of files.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint",
3
- "version": "7.16.0",
3
+ "version": "7.17.0",
4
4
  "author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>",
5
5
  "description": "An AST-based pattern checker for JavaScript.",
6
6
  "bin": {