eslint 8.1.0 → 8.4.1
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/README.md +7 -11
- package/conf/globals.js +144 -0
- package/lib/cli.js +1 -1
- package/lib/config/default-config.js +11 -2
- package/lib/config/flat-config-array.js +2 -2
- package/lib/config/flat-config-helpers.js +67 -0
- package/lib/config/flat-config-schema.js +13 -8
- package/lib/config/rule-validator.js +28 -27
- package/lib/eslint/eslint.js +11 -3
- package/lib/linter/code-path-analysis/code-path-analyzer.js +6 -1
- package/lib/linter/code-path-analysis/code-path.js +1 -1
- package/lib/linter/linter.js +457 -45
- package/lib/options.js +6 -6
- package/lib/rules/accessor-pairs.js +1 -0
- package/lib/rules/array-bracket-newline.js +1 -0
- package/lib/rules/array-bracket-spacing.js +1 -0
- package/lib/rules/array-callback-return.js +1 -0
- package/lib/rules/array-element-newline.js +1 -0
- package/lib/rules/arrow-body-style.js +1 -0
- package/lib/rules/arrow-parens.js +1 -0
- package/lib/rules/arrow-spacing.js +1 -0
- package/lib/rules/block-scoped-var.js +3 -0
- package/lib/rules/block-spacing.js +11 -3
- package/lib/rules/brace-style.js +7 -0
- package/lib/rules/callback-return.js +1 -0
- package/lib/rules/camelcase.js +1 -0
- package/lib/rules/capitalized-comments.js +1 -0
- package/lib/rules/class-methods-use-this.js +11 -1
- package/lib/rules/comma-dangle.js +1 -0
- package/lib/rules/comma-spacing.js +1 -0
- package/lib/rules/comma-style.js +1 -0
- package/lib/rules/complexity.js +15 -6
- package/lib/rules/computed-property-spacing.js +1 -0
- package/lib/rules/consistent-return.js +1 -0
- package/lib/rules/consistent-this.js +1 -0
- package/lib/rules/constructor-super.js +1 -0
- package/lib/rules/curly.js +1 -0
- package/lib/rules/default-case-last.js +1 -0
- package/lib/rules/default-case.js +1 -0
- package/lib/rules/default-param-last.js +1 -0
- package/lib/rules/dot-location.js +1 -0
- package/lib/rules/dot-notation.js +1 -0
- package/lib/rules/eol-last.js +1 -0
- package/lib/rules/eqeqeq.js +1 -0
- package/lib/rules/for-direction.js +1 -0
- package/lib/rules/func-call-spacing.js +1 -0
- package/lib/rules/func-name-matching.js +1 -0
- package/lib/rules/func-names.js +1 -0
- package/lib/rules/func-style.js +1 -0
- package/lib/rules/function-call-argument-newline.js +1 -0
- package/lib/rules/function-paren-newline.js +1 -0
- package/lib/rules/generator-star-spacing.js +1 -0
- package/lib/rules/getter-return.js +1 -0
- package/lib/rules/global-require.js +1 -0
- package/lib/rules/grouped-accessor-pairs.js +1 -0
- package/lib/rules/guard-for-in.js +1 -0
- package/lib/rules/handle-callback-err.js +1 -0
- package/lib/rules/id-blacklist.js +1 -0
- package/lib/rules/id-denylist.js +1 -0
- package/lib/rules/id-length.js +1 -0
- package/lib/rules/id-match.js +1 -0
- package/lib/rules/implicit-arrow-linebreak.js +1 -0
- package/lib/rules/indent-legacy.js +1 -0
- package/lib/rules/indent.js +22 -0
- package/lib/rules/init-declarations.js +1 -0
- package/lib/rules/jsx-quotes.js +1 -0
- package/lib/rules/key-spacing.js +15 -13
- package/lib/rules/keyword-spacing.js +2 -0
- package/lib/rules/line-comment-position.js +1 -0
- package/lib/rules/linebreak-style.js +1 -0
- package/lib/rules/lines-around-comment.js +55 -7
- package/lib/rules/lines-around-directive.js +1 -0
- package/lib/rules/lines-between-class-members.js +1 -0
- package/lib/rules/max-classes-per-file.js +1 -0
- package/lib/rules/max-depth.js +3 -0
- package/lib/rules/max-len.js +1 -0
- package/lib/rules/max-lines-per-function.js +1 -0
- package/lib/rules/max-lines.js +1 -0
- package/lib/rules/max-nested-callbacks.js +1 -0
- package/lib/rules/max-params.js +1 -0
- package/lib/rules/max-statements-per-line.js +1 -0
- package/lib/rules/max-statements.js +11 -0
- package/lib/rules/multiline-comment-style.js +1 -0
- package/lib/rules/multiline-ternary.js +1 -0
- package/lib/rules/new-cap.js +1 -0
- package/lib/rules/new-parens.js +1 -0
- package/lib/rules/newline-after-var.js +1 -0
- package/lib/rules/newline-before-return.js +1 -0
- package/lib/rules/newline-per-chained-call.js +1 -0
- package/lib/rules/no-alert.js +1 -0
- package/lib/rules/no-array-constructor.js +1 -0
- package/lib/rules/no-async-promise-executor.js +1 -0
- package/lib/rules/no-await-in-loop.js +1 -0
- package/lib/rules/no-bitwise.js +1 -0
- package/lib/rules/no-buffer-constructor.js +1 -0
- package/lib/rules/no-caller.js +1 -0
- package/lib/rules/no-case-declarations.js +1 -0
- package/lib/rules/no-catch-shadow.js +1 -0
- package/lib/rules/no-class-assign.js +1 -0
- package/lib/rules/no-compare-neg-zero.js +1 -0
- package/lib/rules/no-cond-assign.js +1 -0
- package/lib/rules/no-confusing-arrow.js +1 -0
- package/lib/rules/no-console.js +1 -0
- package/lib/rules/no-const-assign.js +1 -0
- package/lib/rules/no-constant-condition.js +4 -1
- package/lib/rules/no-constructor-return.js +1 -0
- package/lib/rules/no-continue.js +1 -0
- package/lib/rules/no-control-regex.js +1 -0
- package/lib/rules/no-debugger.js +1 -0
- package/lib/rules/no-delete-var.js +1 -0
- package/lib/rules/no-div-regex.js +1 -0
- package/lib/rules/no-dupe-args.js +1 -0
- package/lib/rules/no-dupe-class-members.js +1 -0
- package/lib/rules/no-dupe-else-if.js +1 -0
- package/lib/rules/no-dupe-keys.js +1 -0
- package/lib/rules/no-duplicate-case.js +1 -0
- package/lib/rules/no-duplicate-imports.js +1 -0
- package/lib/rules/no-else-return.js +1 -0
- package/lib/rules/no-empty-character-class.js +1 -0
- package/lib/rules/no-empty-function.js +1 -0
- package/lib/rules/no-empty-pattern.js +1 -0
- package/lib/rules/no-empty.js +1 -0
- package/lib/rules/no-eq-null.js +1 -0
- package/lib/rules/no-eval.js +3 -0
- package/lib/rules/no-ex-assign.js +1 -0
- package/lib/rules/no-extend-native.js +1 -0
- package/lib/rules/no-extra-bind.js +1 -0
- package/lib/rules/no-extra-boolean-cast.js +1 -0
- package/lib/rules/no-extra-label.js +1 -0
- package/lib/rules/no-extra-parens.js +1 -0
- package/lib/rules/no-extra-semi.js +2 -1
- package/lib/rules/no-fallthrough.js +1 -0
- package/lib/rules/no-floating-decimal.js +1 -0
- package/lib/rules/no-func-assign.js +1 -0
- package/lib/rules/no-global-assign.js +1 -0
- package/lib/rules/no-implicit-coercion.js +1 -0
- package/lib/rules/no-implicit-globals.js +1 -0
- package/lib/rules/no-implied-eval.js +1 -0
- package/lib/rules/no-import-assign.js +1 -0
- package/lib/rules/no-inline-comments.js +1 -0
- package/lib/rules/no-inner-declarations.js +27 -4
- package/lib/rules/no-invalid-regexp.js +1 -0
- package/lib/rules/no-invalid-this.js +5 -0
- package/lib/rules/no-irregular-whitespace.js +1 -0
- package/lib/rules/no-iterator.js +1 -0
- package/lib/rules/no-label-var.js +1 -0
- package/lib/rules/no-labels.js +1 -0
- package/lib/rules/no-lone-blocks.js +9 -2
- package/lib/rules/no-lonely-if.js +1 -0
- package/lib/rules/no-loop-func.js +1 -0
- package/lib/rules/no-loss-of-precision.js +1 -0
- package/lib/rules/no-magic-numbers.js +1 -0
- package/lib/rules/no-misleading-character-class.js +1 -0
- package/lib/rules/no-mixed-operators.js +1 -0
- package/lib/rules/no-mixed-requires.js +1 -0
- package/lib/rules/no-mixed-spaces-and-tabs.js +1 -0
- package/lib/rules/no-multi-assign.js +1 -0
- package/lib/rules/no-multi-spaces.js +1 -0
- package/lib/rules/no-multi-str.js +1 -0
- package/lib/rules/no-multiple-empty-lines.js +1 -0
- package/lib/rules/no-native-reassign.js +1 -0
- package/lib/rules/no-negated-condition.js +1 -0
- package/lib/rules/no-negated-in-lhs.js +1 -0
- package/lib/rules/no-nested-ternary.js +1 -0
- package/lib/rules/no-new-func.js +1 -0
- package/lib/rules/no-new-object.js +1 -0
- package/lib/rules/no-new-require.js +1 -0
- package/lib/rules/no-new-symbol.js +1 -0
- package/lib/rules/no-new-wrappers.js +1 -0
- package/lib/rules/no-new.js +1 -0
- package/lib/rules/no-nonoctal-decimal-escape.js +1 -0
- package/lib/rules/no-obj-calls.js +1 -0
- package/lib/rules/no-octal-escape.js +1 -0
- package/lib/rules/no-octal.js +1 -0
- package/lib/rules/no-param-reassign.js +1 -0
- package/lib/rules/no-path-concat.js +1 -0
- package/lib/rules/no-plusplus.js +1 -0
- package/lib/rules/no-process-env.js +1 -0
- package/lib/rules/no-process-exit.js +1 -0
- package/lib/rules/no-promise-executor-return.js +1 -0
- package/lib/rules/no-proto.js +1 -0
- package/lib/rules/no-prototype-builtins.js +1 -0
- package/lib/rules/no-redeclare.js +3 -0
- package/lib/rules/no-regex-spaces.js +1 -0
- package/lib/rules/no-restricted-exports.js +1 -0
- package/lib/rules/no-restricted-globals.js +1 -0
- package/lib/rules/no-restricted-imports.js +1 -0
- package/lib/rules/no-restricted-modules.js +1 -0
- package/lib/rules/no-restricted-properties.js +1 -0
- package/lib/rules/no-restricted-syntax.js +1 -0
- package/lib/rules/no-return-assign.js +1 -0
- package/lib/rules/no-return-await.js +1 -0
- package/lib/rules/no-script-url.js +1 -0
- package/lib/rules/no-self-assign.js +1 -0
- package/lib/rules/no-self-compare.js +1 -0
- package/lib/rules/no-sequences.js +1 -0
- package/lib/rules/no-setter-return.js +1 -0
- package/lib/rules/no-shadow-restricted-names.js +1 -0
- package/lib/rules/no-shadow.js +1 -0
- package/lib/rules/no-spaced-func.js +1 -0
- package/lib/rules/no-sparse-arrays.js +1 -0
- package/lib/rules/no-sync.js +1 -0
- package/lib/rules/no-tabs.js +1 -0
- package/lib/rules/no-template-curly-in-string.js +1 -0
- package/lib/rules/no-ternary.js +1 -0
- package/lib/rules/no-this-before-super.js +1 -0
- package/lib/rules/no-throw-literal.js +1 -0
- package/lib/rules/no-trailing-spaces.js +1 -0
- package/lib/rules/no-undef-init.js +1 -0
- package/lib/rules/no-undef.js +1 -0
- package/lib/rules/no-undefined.js +1 -0
- package/lib/rules/no-underscore-dangle.js +1 -0
- package/lib/rules/no-unexpected-multiline.js +1 -0
- package/lib/rules/no-unmodified-loop-condition.js +1 -0
- package/lib/rules/no-unneeded-ternary.js +1 -0
- package/lib/rules/no-unreachable-loop.js +1 -0
- package/lib/rules/no-unreachable.js +1 -0
- package/lib/rules/no-unsafe-finally.js +1 -0
- package/lib/rules/no-unsafe-negation.js +1 -0
- package/lib/rules/no-unsafe-optional-chaining.js +1 -0
- package/lib/rules/no-unused-expressions.js +7 -0
- package/lib/rules/no-unused-labels.js +1 -0
- package/lib/rules/no-unused-private-class-members.js +1 -0
- package/lib/rules/no-unused-vars.js +1 -0
- package/lib/rules/no-use-before-define.js +176 -74
- package/lib/rules/no-useless-backreference.js +1 -0
- package/lib/rules/no-useless-call.js +1 -0
- package/lib/rules/no-useless-catch.js +1 -0
- package/lib/rules/no-useless-computed-key.js +1 -0
- package/lib/rules/no-useless-concat.js +1 -0
- package/lib/rules/no-useless-constructor.js +1 -0
- package/lib/rules/no-useless-escape.js +1 -0
- package/lib/rules/no-useless-rename.js +1 -0
- package/lib/rules/no-useless-return.js +1 -0
- package/lib/rules/no-var.js +1 -0
- package/lib/rules/no-void.js +1 -0
- package/lib/rules/no-warning-comments.js +1 -0
- package/lib/rules/no-whitespace-before-property.js +1 -0
- package/lib/rules/no-with.js +1 -0
- package/lib/rules/nonblock-statement-body-position.js +1 -0
- package/lib/rules/object-curly-newline.js +1 -0
- package/lib/rules/object-curly-spacing.js +1 -0
- package/lib/rules/object-property-newline.js +1 -0
- package/lib/rules/object-shorthand.js +1 -0
- package/lib/rules/one-var-declaration-per-line.js +1 -0
- package/lib/rules/one-var.js +6 -1
- package/lib/rules/operator-assignment.js +1 -0
- package/lib/rules/operator-linebreak.js +1 -0
- package/lib/rules/padded-blocks.js +9 -0
- package/lib/rules/padding-line-between-statements.js +3 -0
- package/lib/rules/prefer-arrow-callback.js +1 -0
- package/lib/rules/prefer-const.js +2 -1
- package/lib/rules/prefer-destructuring.js +1 -0
- package/lib/rules/prefer-exponentiation-operator.js +1 -0
- package/lib/rules/prefer-named-capture-group.js +1 -0
- package/lib/rules/prefer-numeric-literals.js +1 -0
- package/lib/rules/prefer-object-spread.js +1 -0
- package/lib/rules/prefer-promise-reject-errors.js +1 -0
- package/lib/rules/prefer-reflect.js +1 -0
- package/lib/rules/prefer-regex-literals.js +1 -0
- package/lib/rules/prefer-rest-params.js +1 -0
- package/lib/rules/prefer-spread.js +1 -0
- package/lib/rules/prefer-template.js +1 -0
- package/lib/rules/quote-props.js +1 -0
- package/lib/rules/quotes.js +1 -0
- package/lib/rules/radix.js +1 -0
- package/lib/rules/require-atomic-updates.js +15 -2
- package/lib/rules/require-await.js +1 -0
- package/lib/rules/require-jsdoc.js +1 -0
- package/lib/rules/require-unicode-regexp.js +1 -0
- package/lib/rules/require-yield.js +1 -0
- package/lib/rules/rest-spread-spacing.js +1 -0
- package/lib/rules/semi-spacing.js +1 -0
- package/lib/rules/semi-style.js +9 -2
- package/lib/rules/semi.js +19 -9
- package/lib/rules/sort-imports.js +1 -0
- package/lib/rules/sort-keys.js +1 -0
- package/lib/rules/sort-vars.js +1 -0
- package/lib/rules/space-before-blocks.js +1 -0
- package/lib/rules/space-before-function-paren.js +1 -0
- package/lib/rules/space-in-parens.js +1 -0
- package/lib/rules/space-infix-ops.js +1 -0
- package/lib/rules/space-unary-ops.js +1 -0
- package/lib/rules/spaced-comment.js +1 -0
- package/lib/rules/strict.js +1 -0
- package/lib/rules/switch-colon-spacing.js +1 -0
- package/lib/rules/symbol-description.js +1 -0
- package/lib/rules/template-curly-spacing.js +1 -0
- package/lib/rules/template-tag-spacing.js +1 -0
- package/lib/rules/unicode-bom.js +1 -0
- package/lib/rules/use-isnan.js +1 -0
- package/lib/rules/utils/ast-utils.js +15 -3
- package/lib/rules/valid-jsdoc.js +1 -0
- package/lib/rules/valid-typeof.js +1 -0
- package/lib/rules/vars-on-top.js +26 -12
- package/lib/rules/wrap-iife.js +1 -0
- package/lib/rules/wrap-regex.js +1 -0
- package/lib/rules/yield-star-spacing.js +1 -0
- package/lib/rules/yoda.js +1 -0
- package/lib/shared/types.js +10 -0
- package/package.json +11 -11
@@ -43,6 +43,7 @@ function isValidThisArg(expectedThis, thisArg, context) {
|
|
43
43
|
// Rule Definition
|
44
44
|
//------------------------------------------------------------------------------
|
45
45
|
|
46
|
+
/** @type {import('../shared/types').Rule} */
|
46
47
|
module.exports = {
|
47
48
|
meta: {
|
48
49
|
type: "suggestion",
|
@@ -122,6 +122,7 @@ function endsWithTemplateCurly(node) {
|
|
122
122
|
// Rule Definition
|
123
123
|
//------------------------------------------------------------------------------
|
124
124
|
|
125
|
+
/** @type {import('../shared/types').Rule} */
|
125
126
|
module.exports = {
|
126
127
|
meta: {
|
127
128
|
type: "suggestion",
|
package/lib/rules/quote-props.js
CHANGED
package/lib/rules/quotes.js
CHANGED
package/lib/rules/radix.js
CHANGED
@@ -165,6 +165,7 @@ class SegmentInfo {
|
|
165
165
|
// Rule Definition
|
166
166
|
//------------------------------------------------------------------------------
|
167
167
|
|
168
|
+
/** @type {import('../shared/types').Rule} */
|
168
169
|
module.exports = {
|
169
170
|
meta: {
|
170
171
|
type: "problem",
|
@@ -176,7 +177,17 @@ module.exports = {
|
|
176
177
|
},
|
177
178
|
|
178
179
|
fixable: null,
|
179
|
-
|
180
|
+
|
181
|
+
schema: [{
|
182
|
+
type: "object",
|
183
|
+
properties: {
|
184
|
+
allowProperties: {
|
185
|
+
type: "boolean",
|
186
|
+
default: false
|
187
|
+
}
|
188
|
+
},
|
189
|
+
additionalProperties: false
|
190
|
+
}],
|
180
191
|
|
181
192
|
messages: {
|
182
193
|
nonAtomicUpdate: "Possible race condition: `{{value}}` might be reassigned based on an outdated value of `{{value}}`.",
|
@@ -185,6 +196,8 @@ module.exports = {
|
|
185
196
|
},
|
186
197
|
|
187
198
|
create(context) {
|
199
|
+
const allowProperties = !!context.options[0] && context.options[0].allowProperties;
|
200
|
+
|
188
201
|
const sourceCode = context.getSourceCode();
|
189
202
|
const assignmentReferences = new Map();
|
190
203
|
const segmentInfo = new SegmentInfo();
|
@@ -284,7 +297,7 @@ module.exports = {
|
|
284
297
|
value: variable.name
|
285
298
|
}
|
286
299
|
});
|
287
|
-
} else {
|
300
|
+
} else if (!allowProperties) {
|
288
301
|
context.report({
|
289
302
|
node: node.parent,
|
290
303
|
messageId: "nonAtomicObjectUpdate",
|
package/lib/rules/semi-style.js
CHANGED
@@ -25,7 +25,8 @@ const SELECTOR = [
|
|
25
25
|
|
26
26
|
/**
|
27
27
|
* Get the child node list of a given node.
|
28
|
-
* This returns `
|
28
|
+
* This returns `BlockStatement#body`, `StaticBlock#body`, `Program#body`,
|
29
|
+
* `ClassBody#body`, or `SwitchCase#consequent`.
|
29
30
|
* This is used to check whether a node is the first/last child.
|
30
31
|
* @param {Node} node A node to get child node list.
|
31
32
|
* @returns {Node[]|null} The child node list.
|
@@ -33,7 +34,12 @@ const SELECTOR = [
|
|
33
34
|
function getChildren(node) {
|
34
35
|
const t = node.type;
|
35
36
|
|
36
|
-
if (
|
37
|
+
if (
|
38
|
+
t === "BlockStatement" ||
|
39
|
+
t === "StaticBlock" ||
|
40
|
+
t === "Program" ||
|
41
|
+
t === "ClassBody"
|
42
|
+
) {
|
37
43
|
return node.body;
|
38
44
|
}
|
39
45
|
if (t === "SwitchCase") {
|
@@ -61,6 +67,7 @@ function isLastChild(node) {
|
|
61
67
|
return nodeList !== null && nodeList[nodeList.length - 1] === node; // before `}` or etc.
|
62
68
|
}
|
63
69
|
|
70
|
+
/** @type {import('../shared/types').Rule} */
|
64
71
|
module.exports = {
|
65
72
|
meta: {
|
66
73
|
type: "layout",
|
package/lib/rules/semi.js
CHANGED
@@ -15,6 +15,7 @@ const astUtils = require("./utils/ast-utils");
|
|
15
15
|
// Rule Definition
|
16
16
|
//------------------------------------------------------------------------------
|
17
17
|
|
18
|
+
/** @type {import('../shared/types').Rule} */
|
18
19
|
module.exports = {
|
19
20
|
meta: {
|
20
21
|
type: "layout",
|
@@ -306,22 +307,31 @@ module.exports = {
|
|
306
307
|
}
|
307
308
|
|
308
309
|
/**
|
309
|
-
* Checks a node to see if it's in a one-liner block
|
310
|
+
* Checks a node to see if it's the last item in a one-liner block.
|
311
|
+
* Block is any `BlockStatement` or `StaticBlock` node. Block is a one-liner if its
|
312
|
+
* braces (and consequently everything between them) are on the same line.
|
310
313
|
* @param {ASTNode} node The node to check.
|
311
|
-
* @returns {boolean} whether the node is in a one-liner block
|
314
|
+
* @returns {boolean} whether the node is the last item in a one-liner block.
|
312
315
|
*/
|
313
|
-
function
|
316
|
+
function isLastInOneLinerBlock(node) {
|
314
317
|
const parent = node.parent;
|
315
318
|
const nextToken = sourceCode.getTokenAfter(node);
|
316
319
|
|
317
320
|
if (!nextToken || nextToken.value !== "}") {
|
318
321
|
return false;
|
319
322
|
}
|
320
|
-
|
321
|
-
|
322
|
-
parent.
|
323
|
-
|
324
|
-
|
323
|
+
|
324
|
+
if (parent.type === "BlockStatement") {
|
325
|
+
return parent.loc.start.line === parent.loc.end.line;
|
326
|
+
}
|
327
|
+
|
328
|
+
if (parent.type === "StaticBlock") {
|
329
|
+
const openingBrace = sourceCode.getFirstToken(parent, { skip: 1 }); // skip the `static` token
|
330
|
+
|
331
|
+
return openingBrace.loc.start.line === parent.loc.end.line;
|
332
|
+
}
|
333
|
+
|
334
|
+
return false;
|
325
335
|
}
|
326
336
|
|
327
337
|
/**
|
@@ -343,7 +353,7 @@ module.exports = {
|
|
343
353
|
report(node);
|
344
354
|
}
|
345
355
|
} else {
|
346
|
-
const oneLinerBlock = (exceptOneLine &&
|
356
|
+
const oneLinerBlock = (exceptOneLine && isLastInOneLinerBlock(node));
|
347
357
|
|
348
358
|
if (isSemi && oneLinerBlock) {
|
349
359
|
report(node, true);
|
package/lib/rules/sort-keys.js
CHANGED
package/lib/rules/sort-vars.js
CHANGED
@@ -146,6 +146,7 @@ function createNeverStylePattern(markers) {
|
|
146
146
|
// Rule Definition
|
147
147
|
//------------------------------------------------------------------------------
|
148
148
|
|
149
|
+
/** @type {import('../shared/types').Rule} */
|
149
150
|
module.exports = {
|
150
151
|
meta: {
|
151
152
|
type: "suggestion",
|
package/lib/rules/strict.js
CHANGED
package/lib/rules/unicode-bom.js
CHANGED
package/lib/rules/use-isnan.js
CHANGED
@@ -35,7 +35,7 @@ const COMMENTS_IGNORE_PATTERN = /^\s*(?:eslint|jshint\s+|jslint\s+|istanbul\s+|g
|
|
35
35
|
const LINEBREAKS = new Set(["\r\n", "\r", "\n", "\u2028", "\u2029"]);
|
36
36
|
|
37
37
|
// A set of node types that can contain a list of statements
|
38
|
-
const STATEMENT_LIST_PARENTS = new Set(["Program", "BlockStatement", "SwitchCase"]);
|
38
|
+
const STATEMENT_LIST_PARENTS = new Set(["Program", "BlockStatement", "StaticBlock", "SwitchCase"]);
|
39
39
|
|
40
40
|
const DECIMAL_INTEGER_PATTERN = /^(?:0|0[0-7]*[89]\d*|[1-9](?:_?\d)*)$/u;
|
41
41
|
|
@@ -937,6 +937,8 @@ module.exports = {
|
|
937
937
|
*
|
938
938
|
* First, this checks the node:
|
939
939
|
*
|
940
|
+
* - The given node is not in `PropertyDefinition#value` position.
|
941
|
+
* - The given node is not `StaticBlock`.
|
940
942
|
* - The function name does not start with uppercase. It's a convention to capitalize the names
|
941
943
|
* of constructor functions. This check is not performed if `capIsConstructor` is set to `false`.
|
942
944
|
* - The function does not have a JSDoc comment that has a @this tag.
|
@@ -951,7 +953,8 @@ module.exports = {
|
|
951
953
|
* - The location is not on an ES2015 class.
|
952
954
|
* - Its `bind`/`call`/`apply` method is not called directly.
|
953
955
|
* - The function is not a callback of array methods (such as `.forEach()`) if `thisArg` is given.
|
954
|
-
* @param {ASTNode} node A function node to check.
|
956
|
+
* @param {ASTNode} node A function node to check. It also can be an implicit function, like `StaticBlock`
|
957
|
+
* or any expression that is `PropertyDefinition#value` node.
|
955
958
|
* @param {SourceCode} sourceCode A SourceCode instance to get comments.
|
956
959
|
* @param {boolean} [capIsConstructor = true] `false` disables the assumption that functions which name starts
|
957
960
|
* with an uppercase or are assigned to a variable which name starts with an uppercase are constructors.
|
@@ -964,7 +967,12 @@ module.exports = {
|
|
964
967
|
* Therefore, A expression node at `PropertyDefinition#value` is a function.
|
965
968
|
* In this case, `this` is always not default binding.
|
966
969
|
*/
|
967
|
-
if (node
|
970
|
+
if (node.parent.type === "PropertyDefinition" && node.parent.value === node) {
|
971
|
+
return false;
|
972
|
+
}
|
973
|
+
|
974
|
+
// Class static blocks are implicit functions. In this case, `this` is always not default binding.
|
975
|
+
if (node.type === "StaticBlock") {
|
968
976
|
return false;
|
969
977
|
}
|
970
978
|
|
@@ -1825,6 +1833,10 @@ module.exports = {
|
|
1825
1833
|
return true;
|
1826
1834
|
}
|
1827
1835
|
|
1836
|
+
if (rightToken.type === "PrivateIdentifier") {
|
1837
|
+
return true;
|
1838
|
+
}
|
1839
|
+
|
1828
1840
|
return false;
|
1829
1841
|
},
|
1830
1842
|
|
package/lib/rules/valid-jsdoc.js
CHANGED
package/lib/rules/vars-on-top.js
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
// Rule Definition
|
10
10
|
//------------------------------------------------------------------------------
|
11
11
|
|
12
|
+
/** @type {import('../shared/types').Rule} */
|
12
13
|
module.exports = {
|
13
14
|
meta: {
|
14
15
|
type: "suggestion",
|
@@ -77,10 +78,12 @@ module.exports = {
|
|
77
78
|
const l = statements.length;
|
78
79
|
let i = 0;
|
79
80
|
|
80
|
-
//
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
// Skip over directives and imports. Static blocks don't have either.
|
82
|
+
if (node.parent.type !== "StaticBlock") {
|
83
|
+
for (; i < l; ++i) {
|
84
|
+
if (!looksLikeDirective(statements[i]) && !looksLikeImport(statements[i])) {
|
85
|
+
break;
|
86
|
+
}
|
84
87
|
}
|
85
88
|
}
|
86
89
|
|
@@ -111,16 +114,27 @@ module.exports = {
|
|
111
114
|
/**
|
112
115
|
* Checks whether variable is on top at functional block scope level
|
113
116
|
* @param {ASTNode} node The node to check
|
114
|
-
* @param {ASTNode} parent Parent of the node
|
115
|
-
* @param {ASTNode} grandParent Parent of the node's parent
|
116
117
|
* @returns {void}
|
117
118
|
*/
|
118
|
-
function blockScopeVarCheck(node
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
119
|
+
function blockScopeVarCheck(node) {
|
120
|
+
const { parent } = node;
|
121
|
+
|
122
|
+
if (
|
123
|
+
parent.type === "BlockStatement" &&
|
124
|
+
/Function/u.test(parent.parent.type) &&
|
125
|
+
isVarOnTop(node, parent.body)
|
126
|
+
) {
|
127
|
+
return;
|
123
128
|
}
|
129
|
+
|
130
|
+
if (
|
131
|
+
parent.type === "StaticBlock" &&
|
132
|
+
isVarOnTop(node, parent.body)
|
133
|
+
) {
|
134
|
+
return;
|
135
|
+
}
|
136
|
+
|
137
|
+
context.report({ node, messageId: "top" });
|
124
138
|
}
|
125
139
|
|
126
140
|
//--------------------------------------------------------------------------
|
@@ -134,7 +148,7 @@ module.exports = {
|
|
134
148
|
} else if (node.parent.type === "Program") {
|
135
149
|
globalVarCheck(node, node.parent);
|
136
150
|
} else {
|
137
|
-
blockScopeVarCheck(node
|
151
|
+
blockScopeVarCheck(node);
|
138
152
|
}
|
139
153
|
}
|
140
154
|
};
|
package/lib/rules/wrap-iife.js
CHANGED
package/lib/rules/wrap-regex.js
CHANGED
package/lib/rules/yoda.js
CHANGED
@@ -115,6 +115,7 @@ function getNormalizedLiteral(node) {
|
|
115
115
|
// Rule Definition
|
116
116
|
//------------------------------------------------------------------------------
|
117
117
|
|
118
|
+
/** @type {import('../shared/types').Rule} */
|
118
119
|
module.exports = {
|
119
120
|
meta: {
|
120
121
|
type: "suggestion",
|
package/lib/shared/types.js
CHANGED
@@ -23,6 +23,16 @@ module.exports = {};
|
|
23
23
|
* @property {EcmaFeatures} [ecmaFeatures] The optional features.
|
24
24
|
* @property {3|5|6|7|8|9|10|11|12|13|2015|2016|2017|2018|2019|2020|2021|2022} [ecmaVersion] The ECMAScript version (or revision number).
|
25
25
|
* @property {"script"|"module"} [sourceType] The source code type.
|
26
|
+
* @property {boolean} [allowReserved] Allowing the use of reserved words as identifiers in ES3.
|
27
|
+
*/
|
28
|
+
|
29
|
+
/**
|
30
|
+
* @typedef {Object} LanguageOptions
|
31
|
+
* @property {number|"latest"} [ecmaVersion] The ECMAScript version (or revision number).
|
32
|
+
* @property {Record<string, GlobalConf>} [globals] The global variable settings.
|
33
|
+
* @property {"script"|"module"|"commonjs"} [sourceType] The source code type.
|
34
|
+
* @property {string|Object} [parser] The parser to use.
|
35
|
+
* @property {Object} [parserOptions] The parser options to use.
|
26
36
|
*/
|
27
37
|
|
28
38
|
/**
|