oxlint-plugin-eslint 1.52.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/LICENSE +22 -0
- package/README.md +36 -0
- package/common/ast-utils.cjs +5843 -0
- package/common/chunk.cjs +9 -0
- package/common/eslint-utils.cjs +1633 -0
- package/common/fix-tracker.cjs +89 -0
- package/common/ignore.cjs +123 -0
- package/common/keywords.cjs +15 -0
- package/common/regexpp.cjs +1720 -0
- package/common/regular-expressions.cjs +40 -0
- package/common/string-utils.cjs +39 -0
- package/index.js +7477 -0
- package/package.json +34 -0
- package/rules/accessor-pairs.cjs +233 -0
- package/rules/array-bracket-newline.cjs +172 -0
- package/rules/array-bracket-spacing.cjs +184 -0
- package/rules/array-callback-return.cjs +262 -0
- package/rules/array-element-newline.cjs +178 -0
- package/rules/arrow-body-style.cjs +135 -0
- package/rules/arrow-parens.cjs +130 -0
- package/rules/arrow-spacing.cjs +129 -0
- package/rules/block-scoped-var.cjs +101 -0
- package/rules/block-spacing.cjs +125 -0
- package/rules/brace-style.cjs +141 -0
- package/rules/callback-return.cjs +117 -0
- package/rules/camelcase.cjs +194 -0
- package/rules/capitalized-comments.cjs +168 -0
- package/rules/class-methods-use-this.cjs +155 -0
- package/rules/comma-dangle.cjs +274 -0
- package/rules/comma-spacing.cjs +111 -0
- package/rules/comma-style.cjs +180 -0
- package/rules/complexity.cjs +100 -0
- package/rules/computed-property-spacing.cjs +155 -0
- package/rules/consistent-return.cjs +113 -0
- package/rules/consistent-this.cjs +109 -0
- package/rules/constructor-super.cjs +207 -0
- package/rules/curly.cjs +173 -0
- package/rules/default-case-last.cjs +36 -0
- package/rules/default-case.cjs +50 -0
- package/rules/default-param-last.cjs +61 -0
- package/rules/dot-location.cjs +87 -0
- package/rules/dot-notation.cjs +77 -0
- package/rules/eol-last.cjs +91 -0
- package/rules/eqeqeq.cjs +127 -0
- package/rules/for-direction.cjs +94 -0
- package/rules/func-call-spacing.cjs +127 -0
- package/rules/func-name-matching.cjs +138 -0
- package/rules/func-names.cjs +121 -0
- package/rules/func-style.cjs +103 -0
- package/rules/function-call-argument-newline.cjs +109 -0
- package/rules/function-paren-newline.cjs +173 -0
- package/rules/generator-star-spacing.cjs +174 -0
- package/rules/getter-return.cjs +129 -0
- package/rules/global-require.cjs +84 -0
- package/rules/grouped-accessor-pairs.cjs +146 -0
- package/rules/guard-for-in.cjs +39 -0
- package/rules/handle-callback-err.cjs +86 -0
- package/rules/id-blacklist.cjs +135 -0
- package/rules/id-denylist.cjs +126 -0
- package/rules/id-length.cjs +119 -0
- package/rules/id-match.cjs +139 -0
- package/rules/implicit-arrow-linebreak.cjs +76 -0
- package/rules/indent-legacy.cjs +520 -0
- package/rules/indent.cjs +842 -0
- package/rules/init-declarations.cjs +88 -0
- package/rules/jsx-quotes.cjs +84 -0
- package/rules/key-spacing.cjs +399 -0
- package/rules/keyword-spacing.cjs +464 -0
- package/rules/line-comment-position.cjs +75 -0
- package/rules/linebreak-style.cjs +89 -0
- package/rules/lines-around-comment.cjs +290 -0
- package/rules/lines-around-directive.cjs +129 -0
- package/rules/lines-between-class-members.cjs +212 -0
- package/rules/logical-assignment-operators.cjs +305 -0
- package/rules/max-classes-per-file.cjs +61 -0
- package/rules/max-depth.cjs +117 -0
- package/rules/max-len.cjs +256 -0
- package/rules/max-lines-per-function.cjs +116 -0
- package/rules/max-lines.cjs +109 -0
- package/rules/max-nested-callbacks.cjs +78 -0
- package/rules/max-params.cjs +78 -0
- package/rules/max-statements-per-line.cjs +147 -0
- package/rules/max-statements.cjs +119 -0
- package/rules/multiline-comment-style.cjs +319 -0
- package/rules/multiline-ternary.cjs +106 -0
- package/rules/new-cap.cjs +139 -0
- package/rules/new-parens.cjs +70 -0
- package/rules/newline-after-var.cjs +159 -0
- package/rules/newline-before-return.cjs +128 -0
- package/rules/newline-per-chained-call.cjs +100 -0
- package/rules/no-alert.cjs +84 -0
- package/rules/no-array-constructor.cjs +91 -0
- package/rules/no-async-promise-executor.cjs +33 -0
- package/rules/no-await-in-loop.cjs +75 -0
- package/rules/no-bitwise.cjs +106 -0
- package/rules/no-buffer-constructor.cjs +51 -0
- package/rules/no-caller.cjs +34 -0
- package/rules/no-case-declarations.cjs +56 -0
- package/rules/no-catch-shadow.cjs +57 -0
- package/rules/no-class-assign.cjs +55 -0
- package/rules/no-compare-neg-zero.cjs +52 -0
- package/rules/no-cond-assign.cjs +104 -0
- package/rules/no-confusing-arrow.cjs +87 -0
- package/rules/no-console.cjs +138 -0
- package/rules/no-const-assign.cjs +50 -0
- package/rules/no-constant-binary-expression.cjs +284 -0
- package/rules/no-constant-condition.cjs +119 -0
- package/rules/no-constructor-return.cjs +43 -0
- package/rules/no-continue.cjs +33 -0
- package/rules/no-control-regex.cjs +74 -0
- package/rules/no-debugger.cjs +33 -0
- package/rules/no-delete-var.cjs +32 -0
- package/rules/no-div-regex.cjs +39 -0
- package/rules/no-dupe-args.cjs +61 -0
- package/rules/no-dupe-class-members.cjs +77 -0
- package/rules/no-dupe-else-if.cjs +74 -0
- package/rules/no-dupe-keys.cjs +88 -0
- package/rules/no-duplicate-case.cjs +49 -0
- package/rules/no-duplicate-imports.cjs +166 -0
- package/rules/no-else-return.cjs +182 -0
- package/rules/no-empty-character-class.cjs +47 -0
- package/rules/no-empty-function.cjs +141 -0
- package/rules/no-empty-pattern.cjs +50 -0
- package/rules/no-empty-static-block.cjs +50 -0
- package/rules/no-empty.cjs +78 -0
- package/rules/no-eq-null.cjs +34 -0
- package/rules/no-eval.cjs +165 -0
- package/rules/no-ex-assign.cjs +45 -0
- package/rules/no-extend-native.cjs +103 -0
- package/rules/no-extra-bind.cjs +127 -0
- package/rules/no-extra-boolean-cast.cjs +159 -0
- package/rules/no-extra-label.cjs +116 -0
- package/rules/no-extra-parens.cjs +665 -0
- package/rules/no-extra-semi.cjs +103 -0
- package/rules/no-fallthrough.cjs +136 -0
- package/rules/no-floating-decimal.cjs +66 -0
- package/rules/no-func-assign.cjs +63 -0
- package/rules/no-global-assign.cjs +62 -0
- package/rules/no-implicit-coercion.cjs +219 -0
- package/rules/no-implicit-globals.cjs +77 -0
- package/rules/no-implied-eval.cjs +87 -0
- package/rules/no-import-assign.cjs +123 -0
- package/rules/no-inline-comments.cjs +57 -0
- package/rules/no-inner-declarations.cjs +82 -0
- package/rules/no-invalid-regexp.cjs +130 -0
- package/rules/no-invalid-this.cjs +90 -0
- package/rules/no-irregular-whitespace.cjs +157 -0
- package/rules/no-iterator.cjs +34 -0
- package/rules/no-label-var.cjs +46 -0
- package/rules/no-labels.cjs +106 -0
- package/rules/no-lone-blocks.cjs +75 -0
- package/rules/no-lonely-if.cjs +42 -0
- package/rules/no-loop-func.cjs +143 -0
- package/rules/no-loss-of-precision.cjs +160 -0
- package/rules/no-magic-numbers.cjs +222 -0
- package/rules/no-misleading-character-class.cjs +500 -0
- package/rules/no-mixed-operators.cjs +197 -0
- package/rules/no-mixed-requires.cjs +117 -0
- package/rules/no-mixed-spaces-and-tabs.cjs +87 -0
- package/rules/no-multi-assign.cjs +38 -0
- package/rules/no-multi-spaces.cjs +95 -0
- package/rules/no-multi-str.cjs +44 -0
- package/rules/no-multiple-empty-lines.cjs +112 -0
- package/rules/no-native-reassign.cjs +72 -0
- package/rules/no-negated-condition.cjs +77 -0
- package/rules/no-negated-in-lhs.cjs +43 -0
- package/rules/no-nested-ternary.cjs +33 -0
- package/rules/no-new-func.cjs +50 -0
- package/rules/no-new-native-nonconstructor.cjs +42 -0
- package/rules/no-new-object.cjs +47 -0
- package/rules/no-new-require.cjs +50 -0
- package/rules/no-new-symbol.cjs +48 -0
- package/rules/no-new-wrappers.cjs +44 -0
- package/rules/no-new.cjs +33 -0
- package/rules/no-nonoctal-decimal-escape.cjs +80 -0
- package/rules/no-obj-calls.cjs +64 -0
- package/rules/no-object-constructor.cjs +69 -0
- package/rules/no-octal-escape.cjs +35 -0
- package/rules/no-octal.cjs +32 -0
- package/rules/no-param-reassign.cjs +135 -0
- package/rules/no-path-concat.cjs +52 -0
- package/rules/no-plusplus.cjs +64 -0
- package/rules/no-process-env.cjs +51 -0
- package/rules/no-process-exit.cjs +50 -0
- package/rules/no-promise-executor-return.cjs +131 -0
- package/rules/no-proto.cjs +34 -0
- package/rules/no-prototype-builtins.cjs +85 -0
- package/rules/no-redeclare.cjs +103 -0
- package/rules/no-regex-spaces.cjs +115 -0
- package/rules/no-restricted-exports.cjs +117 -0
- package/rules/no-restricted-globals.cjs +147 -0
- package/rules/no-restricted-imports.cjs +421 -0
- package/rules/no-restricted-modules.cjs +144 -0
- package/rules/no-restricted-properties.cjs +123 -0
- package/rules/no-restricted-syntax.cjs +49 -0
- package/rules/no-return-assign.cjs +45 -0
- package/rules/no-return-await.cjs +88 -0
- package/rules/no-script-url.cjs +49 -0
- package/rules/no-self-assign.cjs +88 -0
- package/rules/no-self-compare.cjs +53 -0
- package/rules/no-sequences.cjs +81 -0
- package/rules/no-setter-return.cjs +110 -0
- package/rules/no-shadow-restricted-names.cjs +60 -0
- package/rules/no-shadow.cjs +302 -0
- package/rules/no-spaced-func.cjs +69 -0
- package/rules/no-sparse-arrays.cjs +40 -0
- package/rules/no-sync.cjs +58 -0
- package/rules/no-tabs.cjs +73 -0
- package/rules/no-template-curly-in-string.cjs +33 -0
- package/rules/no-ternary.cjs +33 -0
- package/rules/no-this-before-super.cjs +177 -0
- package/rules/no-throw-literal.cjs +40 -0
- package/rules/no-trailing-spaces.cjs +123 -0
- package/rules/no-unassigned-vars.cjs +54 -0
- package/rules/no-undef-init.cjs +46 -0
- package/rules/no-undef.cjs +51 -0
- package/rules/no-undefined.cjs +58 -0
- package/rules/no-underscore-dangle.cjs +211 -0
- package/rules/no-unexpected-multiline.cjs +76 -0
- package/rules/no-unmodified-loop-condition.cjs +849 -0
- package/rules/no-unneeded-ternary.cjs +112 -0
- package/rules/no-unreachable-loop.cjs +128 -0
- package/rules/no-unreachable.cjs +195 -0
- package/rules/no-unsafe-finally.cjs +67 -0
- package/rules/no-unsafe-negation.cjs +86 -0
- package/rules/no-unsafe-optional-chaining.cjs +164 -0
- package/rules/no-unused-expressions.cjs +163 -0
- package/rules/no-unused-labels.cjs +97 -0
- package/rules/no-unused-private-class-members.cjs +69 -0
- package/rules/no-unused-vars.cjs +639 -0
- package/rules/no-use-before-define.cjs +245 -0
- package/rules/no-useless-assignment.cjs +250 -0
- package/rules/no-useless-backreference.cjs +137 -0
- package/rules/no-useless-call.cjs +57 -0
- package/rules/no-useless-catch.cjs +38 -0
- package/rules/no-useless-computed-key.cjs +106 -0
- package/rules/no-useless-concat.cjs +78 -0
- package/rules/no-useless-constructor.cjs +152 -0
- package/rules/no-useless-escape.cjs +164 -0
- package/rules/no-useless-rename.cjs +94 -0
- package/rules/no-useless-return.cjs +229 -0
- package/rules/no-var.cjs +235 -0
- package/rules/no-void.cjs +39 -0
- package/rules/no-warning-comments.cjs +112 -0
- package/rules/no-whitespace-before-property.cjs +72 -0
- package/rules/no-with.cjs +32 -0
- package/rules/nonblock-statement-body-position.cjs +107 -0
- package/rules/object-curly-newline.cjs +194 -0
- package/rules/object-curly-spacing.cjs +225 -0
- package/rules/object-property-newline.cjs +81 -0
- package/rules/object-shorthand.cjs +284 -0
- package/rules/one-var-declaration-per-line.cjs +75 -0
- package/rules/one-var.cjs +378 -0
- package/rules/operator-assignment.cjs +146 -0
- package/rules/operator-linebreak.cjs +150 -0
- package/rules/padded-blocks.cjs +192 -0
- package/rules/padding-line-between-statements.cjs +377 -0
- package/rules/prefer-arrow-callback.cjs +185 -0
- package/rules/prefer-const.cjs +240 -0
- package/rules/prefer-destructuring.cjs +188 -0
- package/rules/prefer-exponentiation-operator.cjs +100 -0
- package/rules/prefer-named-capture-group.cjs +111 -0
- package/rules/prefer-numeric-literals.cjs +75 -0
- package/rules/prefer-object-has-own.cjs +54 -0
- package/rules/prefer-object-spread.cjs +170 -0
- package/rules/prefer-promise-reject-errors.cjs +62 -0
- package/rules/prefer-reflect.cjs +100 -0
- package/rules/prefer-regex-literals.cjs +256 -0
- package/rules/prefer-rest-params.cjs +80 -0
- package/rules/prefer-spread.cjs +57 -0
- package/rules/prefer-template.cjs +147 -0
- package/rules/preserve-caught-error.cjs +196 -0
- package/rules/quote-props.cjs +224 -0
- package/rules/quotes.cjs +187 -0
- package/rules/radix.cjs +124 -0
- package/rules/require-atomic-updates.cjs +197 -0
- package/rules/require-await.cjs +90 -0
- package/rules/require-unicode-regexp.cjs +101 -0
- package/rules/require-yield.cjs +56 -0
- package/rules/rest-spread-spacing.cjs +99 -0
- package/rules/semi-spacing.cjs +215 -0
- package/rules/semi-style.cjs +116 -0
- package/rules/semi.cjs +239 -0
- package/rules/sort-imports.cjs +140 -0
- package/rules/sort-keys.cjs +165 -0
- package/rules/sort-vars.cjs +50 -0
- package/rules/space-before-blocks.cjs +132 -0
- package/rules/space-before-function-paren.cjs +126 -0
- package/rules/space-in-parens.cjs +175 -0
- package/rules/space-infix-ops.cjs +133 -0
- package/rules/space-unary-ops.cjs +237 -0
- package/rules/spaced-comment.cjs +233 -0
- package/rules/strict.cjs +206 -0
- package/rules/switch-colon-spacing.cjs +114 -0
- package/rules/symbol-description.cjs +49 -0
- package/rules/template-curly-spacing.cjs +112 -0
- package/rules/template-tag-spacing.cjs +82 -0
- package/rules/unicode-bom.cjs +52 -0
- package/rules/use-isnan.cjs +144 -0
- package/rules/valid-typeof.cjs +104 -0
- package/rules/vars-on-top.cjs +94 -0
- package/rules/wrap-iife.cjs +131 -0
- package/rules/wrap-regex.cjs +57 -0
- package/rules/yield-star-spacing.cjs +115 -0
- package/rules/yoda.cjs +185 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs");
|
|
2
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/one-var.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview A rule to control the use of single variable declarations.
|
|
5
|
+
* @author Ian Christian Myers
|
|
6
|
+
*/
|
|
7
|
+
var require_one_var = /* @__PURE__ */ require_chunk.t(((exports, module) => {
|
|
8
|
+
let astUtils = require_ast_utils$1.t();
|
|
9
|
+
/**
|
|
10
|
+
* Determines whether the given node is in a statement list.
|
|
11
|
+
* @param {ASTNode} node node to check
|
|
12
|
+
* @returns {boolean} `true` if the given node is in a statement list
|
|
13
|
+
*/
|
|
14
|
+
function isInStatementList(node) {
|
|
15
|
+
return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type);
|
|
16
|
+
}
|
|
17
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
18
|
+
module.exports = {
|
|
19
|
+
meta: {
|
|
20
|
+
type: "suggestion",
|
|
21
|
+
docs: {
|
|
22
|
+
description: "Enforce variables to be declared either together or separately in functions",
|
|
23
|
+
recommended: !1,
|
|
24
|
+
frozen: !0,
|
|
25
|
+
url: "https://eslint.org/docs/latest/rules/one-var"
|
|
26
|
+
},
|
|
27
|
+
fixable: "code",
|
|
28
|
+
schema: [{ oneOf: [
|
|
29
|
+
{ enum: [
|
|
30
|
+
"always",
|
|
31
|
+
"never",
|
|
32
|
+
"consecutive"
|
|
33
|
+
] },
|
|
34
|
+
{
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
separateRequires: { type: "boolean" },
|
|
38
|
+
var: { enum: [
|
|
39
|
+
"always",
|
|
40
|
+
"never",
|
|
41
|
+
"consecutive"
|
|
42
|
+
] },
|
|
43
|
+
let: { enum: [
|
|
44
|
+
"always",
|
|
45
|
+
"never",
|
|
46
|
+
"consecutive"
|
|
47
|
+
] },
|
|
48
|
+
const: { enum: [
|
|
49
|
+
"always",
|
|
50
|
+
"never",
|
|
51
|
+
"consecutive"
|
|
52
|
+
] },
|
|
53
|
+
using: { enum: [
|
|
54
|
+
"always",
|
|
55
|
+
"never",
|
|
56
|
+
"consecutive"
|
|
57
|
+
] },
|
|
58
|
+
awaitUsing: { enum: [
|
|
59
|
+
"always",
|
|
60
|
+
"never",
|
|
61
|
+
"consecutive"
|
|
62
|
+
] }
|
|
63
|
+
},
|
|
64
|
+
additionalProperties: !1
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
initialized: { enum: [
|
|
70
|
+
"always",
|
|
71
|
+
"never",
|
|
72
|
+
"consecutive"
|
|
73
|
+
] },
|
|
74
|
+
uninitialized: { enum: [
|
|
75
|
+
"always",
|
|
76
|
+
"never",
|
|
77
|
+
"consecutive"
|
|
78
|
+
] }
|
|
79
|
+
},
|
|
80
|
+
additionalProperties: !1
|
|
81
|
+
}
|
|
82
|
+
] }],
|
|
83
|
+
messages: {
|
|
84
|
+
combineUninitialized: "Combine this with the previous '{{type}}' statement with uninitialized variables.",
|
|
85
|
+
combineInitialized: "Combine this with the previous '{{type}}' statement with initialized variables.",
|
|
86
|
+
splitUninitialized: "Split uninitialized '{{type}}' declarations into multiple statements.",
|
|
87
|
+
splitInitialized: "Split initialized '{{type}}' declarations into multiple statements.",
|
|
88
|
+
splitRequires: "Split requires to be separated into a single block.",
|
|
89
|
+
combine: "Combine this with the previous '{{type}}' statement.",
|
|
90
|
+
split: "Split '{{type}}' declarations into multiple statements."
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
create(context) {
|
|
94
|
+
let MODE_ALWAYS = "always", MODE_NEVER = "never", MODE_CONSECUTIVE = "consecutive", mode = context.options[0] || MODE_ALWAYS, options = {};
|
|
95
|
+
typeof mode == "string" ? (options.var = {
|
|
96
|
+
uninitialized: mode,
|
|
97
|
+
initialized: mode
|
|
98
|
+
}, options.let = {
|
|
99
|
+
uninitialized: mode,
|
|
100
|
+
initialized: mode
|
|
101
|
+
}, options.const = {
|
|
102
|
+
uninitialized: mode,
|
|
103
|
+
initialized: mode
|
|
104
|
+
}, options.using = {
|
|
105
|
+
uninitialized: mode,
|
|
106
|
+
initialized: mode
|
|
107
|
+
}, options.awaitUsing = {
|
|
108
|
+
uninitialized: mode,
|
|
109
|
+
initialized: mode
|
|
110
|
+
}) : typeof mode == "object" && (options.separateRequires = !!mode.separateRequires, options.var = {
|
|
111
|
+
uninitialized: mode.var,
|
|
112
|
+
initialized: mode.var
|
|
113
|
+
}, options.let = {
|
|
114
|
+
uninitialized: mode.let,
|
|
115
|
+
initialized: mode.let
|
|
116
|
+
}, options.const = {
|
|
117
|
+
uninitialized: mode.const,
|
|
118
|
+
initialized: mode.const
|
|
119
|
+
}, options.using = {
|
|
120
|
+
uninitialized: mode.using,
|
|
121
|
+
initialized: mode.using
|
|
122
|
+
}, options.awaitUsing = {
|
|
123
|
+
uninitialized: mode.awaitUsing,
|
|
124
|
+
initialized: mode.awaitUsing
|
|
125
|
+
}, Object.hasOwn(mode, "uninitialized") && (options.var.uninitialized = mode.uninitialized, options.let.uninitialized = mode.uninitialized, options.const.uninitialized = mode.uninitialized, options.using.uninitialized = mode.uninitialized, options.awaitUsing.uninitialized = mode.uninitialized), Object.hasOwn(mode, "initialized") && (options.var.initialized = mode.initialized, options.let.initialized = mode.initialized, options.const.initialized = mode.initialized, options.using.initialized = mode.initialized, options.awaitUsing.initialized = mode.initialized));
|
|
126
|
+
let sourceCode = context.sourceCode, functionStack = [], blockStack = [];
|
|
127
|
+
/**
|
|
128
|
+
* Increments the blockStack counter.
|
|
129
|
+
* @returns {void}
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
132
|
+
function startBlock() {
|
|
133
|
+
blockStack.push({
|
|
134
|
+
let: {
|
|
135
|
+
initialized: !1,
|
|
136
|
+
uninitialized: !1
|
|
137
|
+
},
|
|
138
|
+
const: {
|
|
139
|
+
initialized: !1,
|
|
140
|
+
uninitialized: !1
|
|
141
|
+
},
|
|
142
|
+
using: {
|
|
143
|
+
initialized: !1,
|
|
144
|
+
uninitialized: !1
|
|
145
|
+
},
|
|
146
|
+
awaitUsing: {
|
|
147
|
+
initialized: !1,
|
|
148
|
+
uninitialized: !1
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Increments the functionStack counter.
|
|
154
|
+
* @returns {void}
|
|
155
|
+
* @private
|
|
156
|
+
*/
|
|
157
|
+
function startFunction() {
|
|
158
|
+
functionStack.push({
|
|
159
|
+
initialized: !1,
|
|
160
|
+
uninitialized: !1
|
|
161
|
+
}), startBlock();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Decrements the blockStack counter.
|
|
165
|
+
* @returns {void}
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
function endBlock() {
|
|
169
|
+
blockStack.pop();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Decrements the functionStack counter.
|
|
173
|
+
* @returns {void}
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
function endFunction() {
|
|
177
|
+
functionStack.pop(), endBlock();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if a variable declaration is a require.
|
|
181
|
+
* @param {ASTNode} decl variable declaration Node
|
|
182
|
+
* @returns {bool} if decl is a require, return true; else return false.
|
|
183
|
+
* @private
|
|
184
|
+
*/
|
|
185
|
+
function isRequire(decl) {
|
|
186
|
+
return decl.init && decl.init.type === "CallExpression" && decl.init.callee.name === "require";
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Records whether initialized/uninitialized/required variables are defined in current scope.
|
|
190
|
+
* @param {string} statementType one of: "var", "let", "const", "using", or "awaitUsing"
|
|
191
|
+
* @param {ASTNode[]} declarations List of declarations
|
|
192
|
+
* @param {Object} currentScope The scope being investigated
|
|
193
|
+
* @returns {void}
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
function recordTypes(statementType, declarations, currentScope) {
|
|
197
|
+
for (let i = 0; i < declarations.length; i++) declarations[i].init === null ? options[statementType] && options[statementType].uninitialized === MODE_ALWAYS && (currentScope.uninitialized = !0) : options[statementType] && options[statementType].initialized === MODE_ALWAYS && (options.separateRequires && isRequire(declarations[i]) ? currentScope.required = !0 : currentScope.initialized = !0);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Determines the current scope (function or block)
|
|
201
|
+
* @param {string} statementType one of: "var", "let", "const", "using", or "awaitUsing"
|
|
202
|
+
* @returns {Object} The scope associated with statementType
|
|
203
|
+
*/
|
|
204
|
+
function getCurrentScope(statementType) {
|
|
205
|
+
let currentScope;
|
|
206
|
+
return statementType === "var" ? currentScope = functionStack.at(-1) : statementType === "let" ? currentScope = blockStack.at(-1).let : statementType === "const" ? currentScope = blockStack.at(-1).const : statementType === "using" ? currentScope = blockStack.at(-1).using : statementType === "awaitUsing" && (currentScope = blockStack.at(-1).awaitUsing), currentScope;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Counts the number of initialized and uninitialized declarations in a list of declarations
|
|
210
|
+
* @param {ASTNode[]} declarations List of declarations
|
|
211
|
+
* @returns {Object} Counts of 'uninitialized' and 'initialized' declarations
|
|
212
|
+
* @private
|
|
213
|
+
*/
|
|
214
|
+
function countDeclarations(declarations) {
|
|
215
|
+
let counts = {
|
|
216
|
+
uninitialized: 0,
|
|
217
|
+
initialized: 0
|
|
218
|
+
};
|
|
219
|
+
for (let i = 0; i < declarations.length; i++) declarations[i].init === null ? counts.uninitialized++ : counts.initialized++;
|
|
220
|
+
return counts;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Determines if there is more than one var statement in the current scope.
|
|
224
|
+
* @param {string} statementType one of: "var", "let", "const", "using", or "awaitUsing"
|
|
225
|
+
* @param {ASTNode[]} declarations List of declarations
|
|
226
|
+
* @returns {boolean} Returns true if it is the first var declaration, false if not.
|
|
227
|
+
* @private
|
|
228
|
+
*/
|
|
229
|
+
function hasOnlyOneStatement(statementType, declarations) {
|
|
230
|
+
let declarationCounts = countDeclarations(declarations), currentOptions = options[statementType] || {}, currentScope = getCurrentScope(statementType), hasRequires = declarations.some(isRequire);
|
|
231
|
+
return currentOptions.uninitialized === MODE_ALWAYS && currentOptions.initialized === MODE_ALWAYS && (currentScope.uninitialized || currentScope.initialized) && !hasRequires || declarationCounts.uninitialized > 0 && currentOptions.uninitialized === MODE_ALWAYS && currentScope.uninitialized || declarationCounts.initialized > 0 && currentOptions.initialized === MODE_ALWAYS && currentScope.initialized && !hasRequires || currentScope.required && hasRequires ? !1 : (recordTypes(statementType, declarations, currentScope), !0);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Fixer to join VariableDeclaration's into a single declaration
|
|
235
|
+
* @param {VariableDeclarator[]} declarations The `VariableDeclaration` to join
|
|
236
|
+
* @returns {Function} The fixer function
|
|
237
|
+
*/
|
|
238
|
+
function joinDeclarations(declarations) {
|
|
239
|
+
let declaration = declarations[0], body = Array.isArray(declaration.parent.parent.body) ? declaration.parent.parent.body : [], previousNode = body[body.findIndex((node) => node.range[0] === declaration.parent.range[0]) - 1];
|
|
240
|
+
return function* joinDeclarationsFixer(fixer) {
|
|
241
|
+
let type = sourceCode.getFirstToken(declaration.parent), beforeType = sourceCode.getTokenBefore(type);
|
|
242
|
+
if (previousNode && previousNode.kind === declaration.parent.kind) {
|
|
243
|
+
if (beforeType.value === ";" ? yield fixer.replaceText(beforeType, ",") : yield fixer.insertTextAfter(beforeType, ","), declaration.parent.kind === "await using") {
|
|
244
|
+
let usingToken = sourceCode.getTokenAfter(type);
|
|
245
|
+
yield fixer.remove(usingToken);
|
|
246
|
+
}
|
|
247
|
+
yield fixer.replaceText(type, "");
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Fixer to split a VariableDeclaration into individual declarations
|
|
253
|
+
* @param {VariableDeclaration} declaration The `VariableDeclaration` to split
|
|
254
|
+
* @returns {Function|null} The fixer function
|
|
255
|
+
*/
|
|
256
|
+
function splitDeclarations(declaration) {
|
|
257
|
+
let { parent } = declaration;
|
|
258
|
+
return isInStatementList(parent.type === "ExportNamedDeclaration" ? parent : declaration) ? (fixer) => declaration.declarations.map((declarator) => {
|
|
259
|
+
let tokenAfterDeclarator = sourceCode.getTokenAfter(declarator);
|
|
260
|
+
if (tokenAfterDeclarator === null) return null;
|
|
261
|
+
let afterComma = sourceCode.getTokenAfter(tokenAfterDeclarator, { includeComments: !0 });
|
|
262
|
+
if (tokenAfterDeclarator.value !== ",") return null;
|
|
263
|
+
let exportPlacement = declaration.parent.type === "ExportNamedDeclaration" ? "export " : "";
|
|
264
|
+
if (afterComma.range[0] === tokenAfterDeclarator.range[1]) return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind} `);
|
|
265
|
+
if (afterComma.loc.start.line > tokenAfterDeclarator.loc.end.line || afterComma.type === "Line" || afterComma.type === "Block") {
|
|
266
|
+
let lastComment = afterComma;
|
|
267
|
+
for (; lastComment.type === "Line" || lastComment.type === "Block";) lastComment = sourceCode.getTokenAfter(lastComment, { includeComments: !0 });
|
|
268
|
+
return fixer.replaceTextRange([tokenAfterDeclarator.range[0], lastComment.range[0]], `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${exportPlacement}${declaration.kind} `);
|
|
269
|
+
}
|
|
270
|
+
return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind}`);
|
|
271
|
+
}).filter((x) => x) : null;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Checks a given VariableDeclaration node for errors.
|
|
275
|
+
* @param {ASTNode} node The VariableDeclaration node to check
|
|
276
|
+
* @returns {void}
|
|
277
|
+
* @private
|
|
278
|
+
*/
|
|
279
|
+
function checkVariableDeclaration(node) {
|
|
280
|
+
let parent = node.parent, type = node.kind, key = type === "await using" ? "awaitUsing" : type;
|
|
281
|
+
if (!options[key]) return;
|
|
282
|
+
let declarations = node.declarations, declarationCounts = countDeclarations(declarations), mixedRequires = declarations.some(isRequire) && !declarations.every(isRequire);
|
|
283
|
+
options[key].initialized === MODE_ALWAYS && options.separateRequires && mixedRequires && context.report({
|
|
284
|
+
node,
|
|
285
|
+
messageId: "splitRequires"
|
|
286
|
+
});
|
|
287
|
+
let nodeIndex = parent.body && parent.body.length > 0 && parent.body.indexOf(node) || 0;
|
|
288
|
+
if (nodeIndex > 0) {
|
|
289
|
+
let previousNode = parent.body[nodeIndex - 1], isPreviousNodeDeclaration = previousNode.type === "VariableDeclaration", declarationsWithPrevious = declarations.concat(previousNode.declarations || []);
|
|
290
|
+
if (isPreviousNodeDeclaration && previousNode.kind === type && !(declarationsWithPrevious.some(isRequire) && !declarationsWithPrevious.every(isRequire))) {
|
|
291
|
+
let previousDeclCounts = countDeclarations(previousNode.declarations);
|
|
292
|
+
options[key].initialized === MODE_CONSECUTIVE && options[key].uninitialized === MODE_CONSECUTIVE ? context.report({
|
|
293
|
+
node,
|
|
294
|
+
messageId: "combine",
|
|
295
|
+
data: { type },
|
|
296
|
+
fix: joinDeclarations(declarations)
|
|
297
|
+
}) : options[key].initialized === MODE_CONSECUTIVE && declarationCounts.initialized > 0 && previousDeclCounts.initialized > 0 ? context.report({
|
|
298
|
+
node,
|
|
299
|
+
messageId: "combineInitialized",
|
|
300
|
+
data: { type },
|
|
301
|
+
fix: joinDeclarations(declarations)
|
|
302
|
+
}) : options[key].uninitialized === MODE_CONSECUTIVE && declarationCounts.uninitialized > 0 && previousDeclCounts.uninitialized > 0 && context.report({
|
|
303
|
+
node,
|
|
304
|
+
messageId: "combineUninitialized",
|
|
305
|
+
data: { type },
|
|
306
|
+
fix: joinDeclarations(declarations)
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (!hasOnlyOneStatement(key, declarations)) {
|
|
311
|
+
if (options[key].initialized === MODE_ALWAYS && options[key].uninitialized === MODE_ALWAYS) context.report({
|
|
312
|
+
node,
|
|
313
|
+
messageId: "combine",
|
|
314
|
+
data: { type },
|
|
315
|
+
fix: joinDeclarations(declarations)
|
|
316
|
+
});
|
|
317
|
+
else if (options[key].initialized === MODE_ALWAYS && declarationCounts.initialized > 0 && context.report({
|
|
318
|
+
node,
|
|
319
|
+
messageId: "combineInitialized",
|
|
320
|
+
data: { type },
|
|
321
|
+
fix: joinDeclarations(declarations)
|
|
322
|
+
}), options[key].uninitialized === MODE_ALWAYS && declarationCounts.uninitialized > 0) {
|
|
323
|
+
if (node.parent.left === node && (node.parent.type === "ForInStatement" || node.parent.type === "ForOfStatement")) return;
|
|
324
|
+
context.report({
|
|
325
|
+
node,
|
|
326
|
+
messageId: "combineUninitialized",
|
|
327
|
+
data: { type },
|
|
328
|
+
fix: joinDeclarations(declarations)
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
(parent.type !== "ForStatement" || parent.init !== node) && declarationCounts.uninitialized + declarationCounts.initialized > 1 && (options[key].initialized === MODE_NEVER && options[key].uninitialized === MODE_NEVER ? context.report({
|
|
333
|
+
node,
|
|
334
|
+
messageId: "split",
|
|
335
|
+
data: { type },
|
|
336
|
+
fix: splitDeclarations(node)
|
|
337
|
+
}) : options[key].initialized === MODE_NEVER && declarationCounts.initialized > 0 ? context.report({
|
|
338
|
+
node,
|
|
339
|
+
messageId: "splitInitialized",
|
|
340
|
+
data: { type },
|
|
341
|
+
fix: splitDeclarations(node)
|
|
342
|
+
}) : options[key].uninitialized === MODE_NEVER && declarationCounts.uninitialized > 0 && context.report({
|
|
343
|
+
node,
|
|
344
|
+
messageId: "splitUninitialized",
|
|
345
|
+
data: { type },
|
|
346
|
+
fix: splitDeclarations(node)
|
|
347
|
+
}));
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
Program: startFunction,
|
|
351
|
+
FunctionDeclaration: startFunction,
|
|
352
|
+
FunctionExpression: startFunction,
|
|
353
|
+
ArrowFunctionExpression: startFunction,
|
|
354
|
+
StaticBlock: startFunction,
|
|
355
|
+
BlockStatement: startBlock,
|
|
356
|
+
ForStatement: startBlock,
|
|
357
|
+
ForInStatement: startBlock,
|
|
358
|
+
ForOfStatement: startBlock,
|
|
359
|
+
SwitchStatement: startBlock,
|
|
360
|
+
VariableDeclaration: checkVariableDeclaration,
|
|
361
|
+
"ForStatement:exit": endBlock,
|
|
362
|
+
"ForOfStatement:exit": endBlock,
|
|
363
|
+
"ForInStatement:exit": endBlock,
|
|
364
|
+
"SwitchStatement:exit": endBlock,
|
|
365
|
+
"BlockStatement:exit": endBlock,
|
|
366
|
+
"Program:exit": endFunction,
|
|
367
|
+
"FunctionDeclaration:exit": endFunction,
|
|
368
|
+
"FunctionExpression:exit": endFunction,
|
|
369
|
+
"ArrowFunctionExpression:exit": endFunction,
|
|
370
|
+
"StaticBlock:exit": endFunction
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
}));
|
|
375
|
+
//#endregion
|
|
376
|
+
//#region src-js/generated/plugin-eslint/rules/one-var.cjs
|
|
377
|
+
module.exports = require_one_var().create;
|
|
378
|
+
//#endregion
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs");
|
|
2
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/operator-assignment.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Rule to replace assignment expressions with operator assignment
|
|
5
|
+
* @author Brandon Mills
|
|
6
|
+
*/
|
|
7
|
+
var require_operator_assignment = /* @__PURE__ */ require_chunk.t(((exports, module) => {
|
|
8
|
+
let astUtils = require_ast_utils$1.t();
|
|
9
|
+
/**
|
|
10
|
+
* Checks whether an operator is commutative and has an operator assignment
|
|
11
|
+
* shorthand form.
|
|
12
|
+
* @param {string} operator Operator to check.
|
|
13
|
+
* @returns {boolean} True if the operator is commutative and has a
|
|
14
|
+
* shorthand form.
|
|
15
|
+
*/
|
|
16
|
+
function isCommutativeOperatorWithShorthand(operator) {
|
|
17
|
+
return [
|
|
18
|
+
"*",
|
|
19
|
+
"&",
|
|
20
|
+
"^",
|
|
21
|
+
"|"
|
|
22
|
+
].includes(operator);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Checks whether an operator is not commutative and has an operator assignment
|
|
26
|
+
* shorthand form.
|
|
27
|
+
* @param {string} operator Operator to check.
|
|
28
|
+
* @returns {boolean} True if the operator is not commutative and has
|
|
29
|
+
* a shorthand form.
|
|
30
|
+
*/
|
|
31
|
+
function isNonCommutativeOperatorWithShorthand(operator) {
|
|
32
|
+
return [
|
|
33
|
+
"+",
|
|
34
|
+
"-",
|
|
35
|
+
"/",
|
|
36
|
+
"%",
|
|
37
|
+
"<<",
|
|
38
|
+
">>",
|
|
39
|
+
">>>",
|
|
40
|
+
"**"
|
|
41
|
+
].includes(operator);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Determines if the left side of a node can be safely fixed (i.e. if it activates the same getters/setters and)
|
|
45
|
+
* toString calls regardless of whether assignment shorthand is used)
|
|
46
|
+
* @param {ASTNode} node The node on the left side of the expression
|
|
47
|
+
* @returns {boolean} `true` if the node can be fixed
|
|
48
|
+
*/
|
|
49
|
+
function canBeFixed(node) {
|
|
50
|
+
return node.type === "Identifier" || node.type === "MemberExpression" && (node.object.type === "Identifier" || node.object.type === "ThisExpression") && (!node.computed || node.property.type === "Literal");
|
|
51
|
+
}
|
|
52
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
53
|
+
module.exports = {
|
|
54
|
+
meta: {
|
|
55
|
+
type: "suggestion",
|
|
56
|
+
defaultOptions: ["always"],
|
|
57
|
+
docs: {
|
|
58
|
+
description: "Require or disallow assignment operator shorthand where possible",
|
|
59
|
+
recommended: !1,
|
|
60
|
+
frozen: !0,
|
|
61
|
+
url: "https://eslint.org/docs/latest/rules/operator-assignment"
|
|
62
|
+
},
|
|
63
|
+
schema: [{ enum: ["always", "never"] }],
|
|
64
|
+
fixable: "code",
|
|
65
|
+
messages: {
|
|
66
|
+
replaced: "Assignment (=) can be replaced with operator assignment ({{operator}}).",
|
|
67
|
+
unexpected: "Unexpected operator assignment ({{operator}}) shorthand."
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
create(context) {
|
|
71
|
+
let never = context.options[0] === "never", sourceCode = context.sourceCode;
|
|
72
|
+
/**
|
|
73
|
+
* Returns the operator token of an AssignmentExpression or BinaryExpression
|
|
74
|
+
* @param {ASTNode} node An AssignmentExpression or BinaryExpression node
|
|
75
|
+
* @returns {Token} The operator token in the node
|
|
76
|
+
*/
|
|
77
|
+
function getOperatorToken(node) {
|
|
78
|
+
return sourceCode.getFirstTokenBetween(node.left, node.right, (token) => token.value === node.operator);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Ensures that an assignment uses the shorthand form where possible.
|
|
82
|
+
* @param {ASTNode} node An AssignmentExpression node.
|
|
83
|
+
* @returns {void}
|
|
84
|
+
*/
|
|
85
|
+
function verify(node) {
|
|
86
|
+
if (node.operator !== "=" || node.right.type !== "BinaryExpression") return;
|
|
87
|
+
let left = node.left, expr = node.right, operator = expr.operator;
|
|
88
|
+
if (isCommutativeOperatorWithShorthand(operator) || isNonCommutativeOperatorWithShorthand(operator)) {
|
|
89
|
+
let replacementOperator = `${operator}=`;
|
|
90
|
+
astUtils.isSameReference(left, expr.left, !0) ? context.report({
|
|
91
|
+
node,
|
|
92
|
+
messageId: "replaced",
|
|
93
|
+
data: { operator: replacementOperator },
|
|
94
|
+
fix(fixer) {
|
|
95
|
+
if (canBeFixed(left) && canBeFixed(expr.left)) {
|
|
96
|
+
let equalsToken = getOperatorToken(node), operatorToken = getOperatorToken(expr), leftText = sourceCode.getText().slice(node.range[0], equalsToken.range[0]), rightText = sourceCode.getText().slice(operatorToken.range[1], node.right.range[1]);
|
|
97
|
+
return sourceCode.commentsExistBetween(equalsToken, operatorToken) ? null : fixer.replaceText(node, `${leftText}${replacementOperator}${rightText}`);
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}) : astUtils.isSameReference(left, expr.right, !0) && isCommutativeOperatorWithShorthand(operator) && context.report({
|
|
102
|
+
node,
|
|
103
|
+
messageId: "replaced",
|
|
104
|
+
data: { operator: replacementOperator }
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Warns if an assignment expression uses operator assignment shorthand.
|
|
110
|
+
* @param {ASTNode} node An AssignmentExpression node.
|
|
111
|
+
* @returns {void}
|
|
112
|
+
*/
|
|
113
|
+
function prohibit(node) {
|
|
114
|
+
node.operator !== "=" && !astUtils.isLogicalAssignmentOperator(node.operator) && context.report({
|
|
115
|
+
node,
|
|
116
|
+
messageId: "unexpected",
|
|
117
|
+
data: { operator: node.operator },
|
|
118
|
+
fix(fixer) {
|
|
119
|
+
if (canBeFixed(node.left)) {
|
|
120
|
+
let firstToken = sourceCode.getFirstToken(node), operatorToken = getOperatorToken(node), leftText = sourceCode.getText().slice(node.range[0], operatorToken.range[0]), newOperator = node.operator.slice(0, -1), rightText;
|
|
121
|
+
if (sourceCode.commentsExistBetween(firstToken, operatorToken)) return null;
|
|
122
|
+
if (astUtils.getPrecedence(node.right) <= astUtils.getPrecedence({
|
|
123
|
+
type: "BinaryExpression",
|
|
124
|
+
operator: newOperator
|
|
125
|
+
}) && !astUtils.isParenthesised(sourceCode, node.right)) rightText = `${sourceCode.text.slice(operatorToken.range[1], node.right.range[0])}(${sourceCode.getText(node.right)})`;
|
|
126
|
+
else {
|
|
127
|
+
let tokenAfterOperator = sourceCode.getTokenAfter(operatorToken, { includeComments: !0 }), rightTextPrefix = "";
|
|
128
|
+
operatorToken.range[1] === tokenAfterOperator.range[0] && !astUtils.canTokensBeAdjacent({
|
|
129
|
+
type: "Punctuator",
|
|
130
|
+
value: newOperator
|
|
131
|
+
}, tokenAfterOperator) && (rightTextPrefix = " "), rightText = `${rightTextPrefix}${sourceCode.text.slice(operatorToken.range[1], node.range[1])}`;
|
|
132
|
+
}
|
|
133
|
+
return fixer.replaceText(node, `${leftText}= ${leftText}${newOperator}${rightText}`);
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return { AssignmentExpression: never ? prohibit : verify };
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}));
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src-js/generated/plugin-eslint/rules/operator-assignment.cjs
|
|
145
|
+
module.exports = require_operator_assignment().create;
|
|
146
|
+
//#endregion
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs");
|
|
2
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/operator-linebreak.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before
|
|
5
|
+
* @author Benoît Zugmeyer
|
|
6
|
+
* @deprecated in ESLint v8.53.0
|
|
7
|
+
*/
|
|
8
|
+
var require_operator_linebreak = /* @__PURE__ */ require_chunk.t(((exports, module) => {
|
|
9
|
+
let astUtils = require_ast_utils$1.t();
|
|
10
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
11
|
+
module.exports = {
|
|
12
|
+
meta: {
|
|
13
|
+
deprecated: {
|
|
14
|
+
message: "Formatting rules are being moved out of ESLint core.",
|
|
15
|
+
url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
|
|
16
|
+
deprecatedSince: "8.53.0",
|
|
17
|
+
availableUntil: "11.0.0",
|
|
18
|
+
replacedBy: [{
|
|
19
|
+
message: "ESLint Stylistic now maintains deprecated stylistic core rules.",
|
|
20
|
+
url: "https://eslint.style/guide/migration",
|
|
21
|
+
plugin: {
|
|
22
|
+
name: "@stylistic/eslint-plugin",
|
|
23
|
+
url: "https://eslint.style"
|
|
24
|
+
},
|
|
25
|
+
rule: {
|
|
26
|
+
name: "operator-linebreak",
|
|
27
|
+
url: "https://eslint.style/rules/operator-linebreak"
|
|
28
|
+
}
|
|
29
|
+
}]
|
|
30
|
+
},
|
|
31
|
+
type: "layout",
|
|
32
|
+
docs: {
|
|
33
|
+
description: "Enforce consistent linebreak style for operators",
|
|
34
|
+
recommended: !1,
|
|
35
|
+
url: "https://eslint.org/docs/latest/rules/operator-linebreak"
|
|
36
|
+
},
|
|
37
|
+
schema: [{ enum: [
|
|
38
|
+
"after",
|
|
39
|
+
"before",
|
|
40
|
+
"none",
|
|
41
|
+
null
|
|
42
|
+
] }, {
|
|
43
|
+
type: "object",
|
|
44
|
+
properties: { overrides: {
|
|
45
|
+
type: "object",
|
|
46
|
+
additionalProperties: { enum: [
|
|
47
|
+
"after",
|
|
48
|
+
"before",
|
|
49
|
+
"none",
|
|
50
|
+
"ignore"
|
|
51
|
+
] }
|
|
52
|
+
} },
|
|
53
|
+
additionalProperties: !1
|
|
54
|
+
}],
|
|
55
|
+
fixable: "code",
|
|
56
|
+
messages: {
|
|
57
|
+
operatorAtBeginning: "'{{operator}}' should be placed at the beginning of the line.",
|
|
58
|
+
operatorAtEnd: "'{{operator}}' should be placed at the end of the line.",
|
|
59
|
+
badLinebreak: "Bad line breaking before and after '{{operator}}'.",
|
|
60
|
+
noLinebreak: "There should be no line break before or after '{{operator}}'."
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
create(context) {
|
|
64
|
+
let usedDefaultGlobal = !context.options[0], globalStyle = context.options[0] || "after", options = context.options[1] || {}, styleOverrides = options.overrides ? Object.assign({}, options.overrides) : {};
|
|
65
|
+
usedDefaultGlobal && !styleOverrides["?"] && (styleOverrides["?"] = "before"), usedDefaultGlobal && !styleOverrides[":"] && (styleOverrides[":"] = "before");
|
|
66
|
+
let sourceCode = context.sourceCode;
|
|
67
|
+
/**
|
|
68
|
+
* Gets a fixer function to fix rule issues
|
|
69
|
+
* @param {Token} operatorToken The operator token of an expression
|
|
70
|
+
* @param {string} desiredStyle The style for the rule. One of 'before', 'after', 'none'
|
|
71
|
+
* @returns {Function} A fixer function
|
|
72
|
+
*/
|
|
73
|
+
function getFixer(operatorToken, desiredStyle) {
|
|
74
|
+
return (fixer) => {
|
|
75
|
+
let tokenBefore = sourceCode.getTokenBefore(operatorToken), tokenAfter = sourceCode.getTokenAfter(operatorToken), textBefore = sourceCode.text.slice(tokenBefore.range[1], operatorToken.range[0]), textAfter = sourceCode.text.slice(operatorToken.range[1], tokenAfter.range[0]), hasLinebreakBefore = !astUtils.isTokenOnSameLine(tokenBefore, operatorToken), hasLinebreakAfter = !astUtils.isTokenOnSameLine(operatorToken, tokenAfter), newTextBefore, newTextAfter;
|
|
76
|
+
if (hasLinebreakBefore !== hasLinebreakAfter && desiredStyle !== "none") {
|
|
77
|
+
if (sourceCode.getTokenBefore(operatorToken, { includeComments: !0 }) !== tokenBefore && sourceCode.getTokenAfter(operatorToken, { includeComments: !0 }) !== tokenAfter) return null;
|
|
78
|
+
newTextBefore = textAfter, newTextAfter = textBefore;
|
|
79
|
+
} else {
|
|
80
|
+
let LINEBREAK_REGEX = astUtils.createGlobalLinebreakMatcher();
|
|
81
|
+
if (newTextBefore = desiredStyle === "before" || textBefore.trim() ? textBefore : textBefore.replace(LINEBREAK_REGEX, ""), newTextAfter = desiredStyle === "after" || textAfter.trim() ? textAfter : textAfter.replace(LINEBREAK_REGEX, ""), newTextBefore === textBefore && newTextAfter === textAfter) return null;
|
|
82
|
+
}
|
|
83
|
+
return newTextAfter === "" && tokenAfter.type === "Punctuator" && "+-".includes(operatorToken.value) && tokenAfter.value === operatorToken.value && (newTextAfter += " "), fixer.replaceTextRange([tokenBefore.range[1], tokenAfter.range[0]], newTextBefore + operatorToken.value + newTextAfter);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Checks the operator placement
|
|
88
|
+
* @param {ASTNode} node The node to check
|
|
89
|
+
* @param {ASTNode} rightSide The node that comes after the operator in `node`
|
|
90
|
+
* @param {string} operator The operator
|
|
91
|
+
* @private
|
|
92
|
+
* @returns {void}
|
|
93
|
+
*/
|
|
94
|
+
function validateNode(node, rightSide, operator) {
|
|
95
|
+
let operatorToken = sourceCode.getTokenBefore(rightSide, (token) => token.value === operator), leftToken = sourceCode.getTokenBefore(operatorToken), rightToken = sourceCode.getTokenAfter(operatorToken), operatorStyleOverride = styleOverrides[operator], style = operatorStyleOverride || globalStyle, fix = getFixer(operatorToken, style);
|
|
96
|
+
astUtils.isTokenOnSameLine(leftToken, operatorToken) && astUtils.isTokenOnSameLine(operatorToken, rightToken) || (operatorStyleOverride !== "ignore" && !astUtils.isTokenOnSameLine(leftToken, operatorToken) && !astUtils.isTokenOnSameLine(operatorToken, rightToken) ? context.report({
|
|
97
|
+
node,
|
|
98
|
+
loc: operatorToken.loc,
|
|
99
|
+
messageId: "badLinebreak",
|
|
100
|
+
data: { operator },
|
|
101
|
+
fix
|
|
102
|
+
}) : style === "before" && astUtils.isTokenOnSameLine(leftToken, operatorToken) ? context.report({
|
|
103
|
+
node,
|
|
104
|
+
loc: operatorToken.loc,
|
|
105
|
+
messageId: "operatorAtBeginning",
|
|
106
|
+
data: { operator },
|
|
107
|
+
fix
|
|
108
|
+
}) : style === "after" && astUtils.isTokenOnSameLine(operatorToken, rightToken) ? context.report({
|
|
109
|
+
node,
|
|
110
|
+
loc: operatorToken.loc,
|
|
111
|
+
messageId: "operatorAtEnd",
|
|
112
|
+
data: { operator },
|
|
113
|
+
fix
|
|
114
|
+
}) : style === "none" && context.report({
|
|
115
|
+
node,
|
|
116
|
+
loc: operatorToken.loc,
|
|
117
|
+
messageId: "noLinebreak",
|
|
118
|
+
data: { operator },
|
|
119
|
+
fix
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Validates a binary expression using `validateNode`
|
|
124
|
+
* @param {BinaryExpression|LogicalExpression|AssignmentExpression} node node to be validated
|
|
125
|
+
* @returns {void}
|
|
126
|
+
*/
|
|
127
|
+
function validateBinaryExpression(node) {
|
|
128
|
+
validateNode(node, node.right, node.operator);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
BinaryExpression: validateBinaryExpression,
|
|
132
|
+
LogicalExpression: validateBinaryExpression,
|
|
133
|
+
AssignmentExpression: validateBinaryExpression,
|
|
134
|
+
VariableDeclarator(node) {
|
|
135
|
+
node.init && validateNode(node, node.init, "=");
|
|
136
|
+
},
|
|
137
|
+
PropertyDefinition(node) {
|
|
138
|
+
node.value && validateNode(node, node.value, "=");
|
|
139
|
+
},
|
|
140
|
+
ConditionalExpression(node) {
|
|
141
|
+
validateNode(node, node.consequent, "?"), validateNode(node, node.alternate, ":");
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}));
|
|
147
|
+
//#endregion
|
|
148
|
+
//#region src-js/generated/plugin-eslint/rules/operator-linebreak.cjs
|
|
149
|
+
module.exports = require_operator_linebreak().create;
|
|
150
|
+
//#endregion
|