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
package/rules/curly.cjs
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
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/curly.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Rule to flag statements without curly braces
|
|
5
|
+
* @author Nicholas C. Zakas
|
|
6
|
+
*/
|
|
7
|
+
var require_curly = /* @__PURE__ */ require_chunk.t(((exports, module) => {
|
|
8
|
+
let astUtils = require_ast_utils$1.t();
|
|
9
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
10
|
+
module.exports = {
|
|
11
|
+
meta: {
|
|
12
|
+
type: "suggestion",
|
|
13
|
+
docs: {
|
|
14
|
+
description: "Enforce consistent brace style for all control statements",
|
|
15
|
+
recommended: !1,
|
|
16
|
+
frozen: !0,
|
|
17
|
+
url: "https://eslint.org/docs/latest/rules/curly"
|
|
18
|
+
},
|
|
19
|
+
schema: { anyOf: [{
|
|
20
|
+
type: "array",
|
|
21
|
+
items: [{ enum: ["all"] }],
|
|
22
|
+
minItems: 0,
|
|
23
|
+
maxItems: 1
|
|
24
|
+
}, {
|
|
25
|
+
type: "array",
|
|
26
|
+
items: [{ enum: [
|
|
27
|
+
"multi",
|
|
28
|
+
"multi-line",
|
|
29
|
+
"multi-or-nest"
|
|
30
|
+
] }, { enum: ["consistent"] }],
|
|
31
|
+
minItems: 0,
|
|
32
|
+
maxItems: 2
|
|
33
|
+
}] },
|
|
34
|
+
defaultOptions: ["all"],
|
|
35
|
+
fixable: "code",
|
|
36
|
+
messages: {
|
|
37
|
+
missingCurlyAfter: "Expected { after '{{name}}'.",
|
|
38
|
+
missingCurlyAfterCondition: "Expected { after '{{name}}' condition.",
|
|
39
|
+
unexpectedCurlyAfter: "Unnecessary { after '{{name}}'.",
|
|
40
|
+
unexpectedCurlyAfterCondition: "Unnecessary { after '{{name}}' condition."
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
create(context) {
|
|
44
|
+
let multiOnly = context.options[0] === "multi", multiLine = context.options[0] === "multi-line", multiOrNest = context.options[0] === "multi-or-nest", consistent = context.options[1] === "consistent", sourceCode = context.sourceCode;
|
|
45
|
+
/**
|
|
46
|
+
* Determines if a given node is a one-liner that's on the same line as it's preceding code.
|
|
47
|
+
* @param {ASTNode} node The node to check.
|
|
48
|
+
* @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code.
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
function isCollapsedOneLiner(node) {
|
|
52
|
+
let before = sourceCode.getTokenBefore(node), last = sourceCode.getLastToken(node), lastExcludingSemicolon = astUtils.isSemicolonToken(last) ? sourceCode.getTokenBefore(last) : last;
|
|
53
|
+
return before.loc.start.line === lastExcludingSemicolon.loc.end.line;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Determines if a given node is a one-liner.
|
|
57
|
+
* @param {ASTNode} node The node to check.
|
|
58
|
+
* @returns {boolean} True if the node is a one-liner.
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
function isOneLiner(node) {
|
|
62
|
+
if (node.type === "EmptyStatement") return !0;
|
|
63
|
+
let first = sourceCode.getFirstToken(node), last = sourceCode.getLastToken(node), lastExcludingSemicolon = astUtils.isSemicolonToken(last) ? sourceCode.getTokenBefore(last) : last;
|
|
64
|
+
return first.loc.start.line === lastExcludingSemicolon.loc.end.line;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Determines if a semicolon needs to be inserted after removing a set of curly brackets, in order to avoid a SyntaxError.
|
|
68
|
+
* @param {Token} closingBracket The } token
|
|
69
|
+
* @returns {boolean} `true` if a semicolon needs to be inserted after the last statement in the block.
|
|
70
|
+
*/
|
|
71
|
+
function needsSemicolon(closingBracket) {
|
|
72
|
+
let tokenBefore = sourceCode.getTokenBefore(closingBracket), tokenAfter = sourceCode.getTokenAfter(closingBracket), lastBlockNode = sourceCode.getNodeByRangeIndex(tokenBefore.range[0]);
|
|
73
|
+
return astUtils.isSemicolonToken(tokenBefore) || !tokenAfter || lastBlockNode.type === "BlockStatement" && lastBlockNode.parent.type !== "FunctionExpression" && lastBlockNode.parent.type !== "ArrowFunctionExpression" ? !1 : !!(tokenBefore.loc.end.line === tokenAfter.loc.start.line || /^[([/`+-]/u.test(tokenAfter.value) || tokenBefore.type === "Punctuator" && (tokenBefore.value === "++" || tokenBefore.value === "--"));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Prepares to check the body of a node to see if it's a block statement.
|
|
77
|
+
* @param {ASTNode} node The node to report if there's a problem.
|
|
78
|
+
* @param {ASTNode} body The body node to check for blocks.
|
|
79
|
+
* @param {string} name The name to report if there's a problem.
|
|
80
|
+
* @param {{ condition: boolean }} opts Options to pass to the report functions
|
|
81
|
+
* @returns {Object} a prepared check object, with "actual", "expected", "check" properties.
|
|
82
|
+
* "actual" will be `true` or `false` whether the body is already a block statement.
|
|
83
|
+
* "expected" will be `true` or `false` if the body should be a block statement or not, or
|
|
84
|
+
* `null` if it doesn't matter, depending on the rule options. It can be modified to change
|
|
85
|
+
* the final behavior of "check".
|
|
86
|
+
* "check" will be a function reporting appropriate problems depending on the other
|
|
87
|
+
* properties.
|
|
88
|
+
*/
|
|
89
|
+
function prepareCheck(node, body, name, opts) {
|
|
90
|
+
let hasBlock = body.type === "BlockStatement", expected = null;
|
|
91
|
+
if (hasBlock && (body.body.length !== 1 || astUtils.areBracesNecessary(body, sourceCode))) expected = !0;
|
|
92
|
+
else if (multiOnly) expected = !1;
|
|
93
|
+
else if (multiLine) isCollapsedOneLiner(body) || (expected = !0);
|
|
94
|
+
else if (multiOrNest) if (hasBlock) {
|
|
95
|
+
let statement = body.body[0], leadingCommentsInBlock = sourceCode.getCommentsBefore(statement);
|
|
96
|
+
expected = !isOneLiner(statement) || leadingCommentsInBlock.length > 0;
|
|
97
|
+
} else expected = !isOneLiner(body);
|
|
98
|
+
else expected = !0;
|
|
99
|
+
return {
|
|
100
|
+
actual: hasBlock,
|
|
101
|
+
expected,
|
|
102
|
+
check() {
|
|
103
|
+
this.expected !== null && this.expected !== this.actual && (this.expected ? context.report({
|
|
104
|
+
node,
|
|
105
|
+
loc: body.loc,
|
|
106
|
+
messageId: opts && opts.condition ? "missingCurlyAfterCondition" : "missingCurlyAfter",
|
|
107
|
+
data: { name },
|
|
108
|
+
fix: (fixer) => fixer.replaceText(body, `{${sourceCode.getText(body)}}`)
|
|
109
|
+
}) : context.report({
|
|
110
|
+
node,
|
|
111
|
+
loc: body.loc,
|
|
112
|
+
messageId: opts && opts.condition ? "unexpectedCurlyAfterCondition" : "unexpectedCurlyAfter",
|
|
113
|
+
data: { name },
|
|
114
|
+
fix(fixer) {
|
|
115
|
+
let needsPrecedingSpace = node.type === "DoWhileStatement" && sourceCode.getTokenBefore(body).range[1] === body.range[0] && !astUtils.canTokensBeAdjacent("do", sourceCode.getFirstToken(body, { skip: 1 })), openingBracket = sourceCode.getFirstToken(body), closingBracket = sourceCode.getLastToken(body), lastTokenInBlock = sourceCode.getTokenBefore(closingBracket);
|
|
116
|
+
if (needsSemicolon(closingBracket)) return null;
|
|
117
|
+
let resultingBodyText = sourceCode.getText().slice(openingBracket.range[1], lastTokenInBlock.range[0]) + sourceCode.getText(lastTokenInBlock) + sourceCode.getText().slice(lastTokenInBlock.range[1], closingBracket.range[0]);
|
|
118
|
+
return fixer.replaceText(body, (needsPrecedingSpace ? " " : "") + resultingBodyText);
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Prepares to check the bodies of a "if", "else if" and "else" chain.
|
|
126
|
+
* @param {ASTNode} node The first IfStatement node of the chain.
|
|
127
|
+
* @returns {Object[]} prepared checks for each body of the chain. See `prepareCheck` for more
|
|
128
|
+
* information.
|
|
129
|
+
*/
|
|
130
|
+
function prepareIfChecks(node) {
|
|
131
|
+
let preparedChecks = [];
|
|
132
|
+
for (let currentNode = node; currentNode; currentNode = currentNode.alternate) if (preparedChecks.push(prepareCheck(currentNode, currentNode.consequent, "if", { condition: !0 })), currentNode.alternate && currentNode.alternate.type !== "IfStatement") {
|
|
133
|
+
preparedChecks.push(prepareCheck(currentNode, currentNode.alternate, "else"));
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
if (consistent) {
|
|
137
|
+
let expected = preparedChecks.some((preparedCheck) => preparedCheck.expected === null ? preparedCheck.actual : preparedCheck.expected);
|
|
138
|
+
preparedChecks.forEach((preparedCheck) => {
|
|
139
|
+
preparedCheck.expected = expected;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return preparedChecks;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
IfStatement(node) {
|
|
146
|
+
let parent = node.parent;
|
|
147
|
+
parent.type === "IfStatement" && parent.alternate === node || prepareIfChecks(node).forEach((preparedCheck) => {
|
|
148
|
+
preparedCheck.check();
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
WhileStatement(node) {
|
|
152
|
+
prepareCheck(node, node.body, "while", { condition: !0 }).check();
|
|
153
|
+
},
|
|
154
|
+
DoWhileStatement(node) {
|
|
155
|
+
prepareCheck(node, node.body, "do").check();
|
|
156
|
+
},
|
|
157
|
+
ForStatement(node) {
|
|
158
|
+
prepareCheck(node, node.body, "for", { condition: !0 }).check();
|
|
159
|
+
},
|
|
160
|
+
ForInStatement(node) {
|
|
161
|
+
prepareCheck(node, node.body, "for-in").check();
|
|
162
|
+
},
|
|
163
|
+
ForOfStatement(node) {
|
|
164
|
+
prepareCheck(node, node.body, "for-of").check();
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}));
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src-js/generated/plugin-eslint/rules/curly.cjs
|
|
172
|
+
module.exports = require_curly().create;
|
|
173
|
+
//#endregion
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/default-case-last.js
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Rule to enforce `default` clauses in `switch` statements to be last
|
|
4
|
+
* @author Milos Djermanovic
|
|
5
|
+
*/
|
|
6
|
+
var require_default_case_last = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
|
|
7
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
8
|
+
module.exports = {
|
|
9
|
+
meta: {
|
|
10
|
+
type: "suggestion",
|
|
11
|
+
docs: {
|
|
12
|
+
description: "Enforce `default` clauses in `switch` statements to be last",
|
|
13
|
+
recommended: !1,
|
|
14
|
+
url: "https://eslint.org/docs/latest/rules/default-case-last"
|
|
15
|
+
},
|
|
16
|
+
schema: [],
|
|
17
|
+
messages: { notLast: "Default clause should be the last clause." }
|
|
18
|
+
},
|
|
19
|
+
create(context) {
|
|
20
|
+
return { SwitchStatement(node) {
|
|
21
|
+
let cases = node.cases, indexOfDefault = cases.findIndex((c) => c.test === null);
|
|
22
|
+
if (indexOfDefault !== -1 && indexOfDefault !== cases.length - 1) {
|
|
23
|
+
let defaultClause = cases[indexOfDefault];
|
|
24
|
+
context.report({
|
|
25
|
+
node: defaultClause,
|
|
26
|
+
messageId: "notLast"
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
} };
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}));
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src-js/generated/plugin-eslint/rules/default-case-last.cjs
|
|
35
|
+
module.exports = require_default_case_last().create;
|
|
36
|
+
//#endregion
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/default-case.js
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview require default case in switch statements
|
|
4
|
+
* @author Aliaksei Shytkin
|
|
5
|
+
*/
|
|
6
|
+
var require_default_case = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
|
|
7
|
+
let DEFAULT_COMMENT_PATTERN = /^no default$/iu;
|
|
8
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
9
|
+
module.exports = {
|
|
10
|
+
meta: {
|
|
11
|
+
type: "suggestion",
|
|
12
|
+
defaultOptions: [{}],
|
|
13
|
+
docs: {
|
|
14
|
+
description: "Require `default` cases in `switch` statements",
|
|
15
|
+
recommended: !1,
|
|
16
|
+
url: "https://eslint.org/docs/latest/rules/default-case"
|
|
17
|
+
},
|
|
18
|
+
schema: [{
|
|
19
|
+
type: "object",
|
|
20
|
+
properties: { commentPattern: { type: "string" } },
|
|
21
|
+
additionalProperties: !1
|
|
22
|
+
}],
|
|
23
|
+
messages: { missingDefaultCase: "Expected a default case." }
|
|
24
|
+
},
|
|
25
|
+
create(context) {
|
|
26
|
+
let [options] = context.options, commentPattern = options.commentPattern ? new RegExp(options.commentPattern, "u") : DEFAULT_COMMENT_PATTERN, sourceCode = context.sourceCode;
|
|
27
|
+
/**
|
|
28
|
+
* Shortcut to get last element of array
|
|
29
|
+
* @param {*[]} collection Array
|
|
30
|
+
* @returns {any} Last element
|
|
31
|
+
*/
|
|
32
|
+
function last(collection) {
|
|
33
|
+
return collection.at(-1);
|
|
34
|
+
}
|
|
35
|
+
return { SwitchStatement(node) {
|
|
36
|
+
if (node.cases.length && !node.cases.some((v) => v.test === null)) {
|
|
37
|
+
let comment, lastCase = last(node.cases), comments = sourceCode.getCommentsAfter(lastCase);
|
|
38
|
+
comments.length && (comment = last(comments)), (!comment || !commentPattern.test(comment.value.trim())) && context.report({
|
|
39
|
+
node,
|
|
40
|
+
messageId: "missingDefaultCase"
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
} };
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}));
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src-js/generated/plugin-eslint/rules/default-case.cjs
|
|
49
|
+
module.exports = require_default_case().create;
|
|
50
|
+
//#endregion
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/default-param-last.js
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview enforce default parameters to be last
|
|
4
|
+
* @author Chiawen Chen
|
|
5
|
+
*/
|
|
6
|
+
var require_default_param_last = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
|
|
7
|
+
/**
|
|
8
|
+
* Checks if node is required: i.e. does not have a default value or ? optional indicator.
|
|
9
|
+
* @param {ASTNode} node the node to be evaluated
|
|
10
|
+
* @returns {boolean} true if the node is required, false if not.
|
|
11
|
+
*/
|
|
12
|
+
function isRequiredParameter(node) {
|
|
13
|
+
return !(node.type === "AssignmentPattern" || node.type === "RestElement" || node.optional);
|
|
14
|
+
}
|
|
15
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
16
|
+
module.exports = {
|
|
17
|
+
meta: {
|
|
18
|
+
dialects: ["javascript", "typescript"],
|
|
19
|
+
language: "javascript",
|
|
20
|
+
type: "suggestion",
|
|
21
|
+
docs: {
|
|
22
|
+
description: "Enforce default parameters to be last",
|
|
23
|
+
recommended: !1,
|
|
24
|
+
frozen: !0,
|
|
25
|
+
url: "https://eslint.org/docs/latest/rules/default-param-last"
|
|
26
|
+
},
|
|
27
|
+
schema: [],
|
|
28
|
+
messages: { shouldBeLast: "Default parameters should be last." }
|
|
29
|
+
},
|
|
30
|
+
create(context) {
|
|
31
|
+
/**
|
|
32
|
+
* Handler for function contexts.
|
|
33
|
+
* @param {ASTNode} node function node
|
|
34
|
+
* @returns {void}
|
|
35
|
+
*/
|
|
36
|
+
function handleFunction(node) {
|
|
37
|
+
let hasSeenRequiredParameter = !1;
|
|
38
|
+
for (let i = node.params.length - 1; i >= 0; --i) {
|
|
39
|
+
let current = node.params[i];
|
|
40
|
+
if (isRequiredParameter(current.type === "TSParameterProperty" ? current.parameter : current)) {
|
|
41
|
+
hasSeenRequiredParameter = !0;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
hasSeenRequiredParameter && context.report({
|
|
45
|
+
node: current,
|
|
46
|
+
messageId: "shouldBeLast"
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
FunctionDeclaration: handleFunction,
|
|
52
|
+
FunctionExpression: handleFunction,
|
|
53
|
+
ArrowFunctionExpression: handleFunction
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}));
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src-js/generated/plugin-eslint/rules/default-param-last.cjs
|
|
60
|
+
module.exports = require_default_param_last().create;
|
|
61
|
+
//#endregion
|
|
@@ -0,0 +1,87 @@
|
|
|
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/dot-location.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Validates newlines before and after dots
|
|
5
|
+
* @author Greg Cochard
|
|
6
|
+
* @deprecated in ESLint v8.53.0
|
|
7
|
+
*/
|
|
8
|
+
var require_dot_location = /* @__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: "dot-location",
|
|
27
|
+
url: "https://eslint.style/rules/dot-location"
|
|
28
|
+
}
|
|
29
|
+
}]
|
|
30
|
+
},
|
|
31
|
+
type: "layout",
|
|
32
|
+
docs: {
|
|
33
|
+
description: "Enforce consistent newlines before and after dots",
|
|
34
|
+
recommended: !1,
|
|
35
|
+
url: "https://eslint.org/docs/latest/rules/dot-location"
|
|
36
|
+
},
|
|
37
|
+
schema: [{ enum: ["object", "property"] }],
|
|
38
|
+
fixable: "code",
|
|
39
|
+
messages: {
|
|
40
|
+
expectedDotAfterObject: "Expected dot to be on same line as object.",
|
|
41
|
+
expectedDotBeforeProperty: "Expected dot to be on same line as property."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
create(context) {
|
|
45
|
+
let config = context.options[0], onObject = config === "object" || !config, sourceCode = context.sourceCode;
|
|
46
|
+
/**
|
|
47
|
+
* Reports if the dot between object and property is on the correct location.
|
|
48
|
+
* @param {ASTNode} node The `MemberExpression` node.
|
|
49
|
+
* @returns {void}
|
|
50
|
+
*/
|
|
51
|
+
function checkDotLocation(node) {
|
|
52
|
+
let property = node.property, dotToken = sourceCode.getTokenBefore(property);
|
|
53
|
+
if (onObject) {
|
|
54
|
+
let tokenBeforeDot = sourceCode.getTokenBefore(dotToken);
|
|
55
|
+
astUtils.isTokenOnSameLine(tokenBeforeDot, dotToken) || context.report({
|
|
56
|
+
node,
|
|
57
|
+
loc: dotToken.loc,
|
|
58
|
+
messageId: "expectedDotAfterObject",
|
|
59
|
+
*fix(fixer) {
|
|
60
|
+
dotToken.value.startsWith(".") && astUtils.isDecimalIntegerNumericToken(tokenBeforeDot) ? yield fixer.insertTextAfter(tokenBeforeDot, ` ${dotToken.value}`) : yield fixer.insertTextAfter(tokenBeforeDot, dotToken.value), yield fixer.remove(dotToken);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
} else astUtils.isTokenOnSameLine(dotToken, property) || context.report({
|
|
64
|
+
node,
|
|
65
|
+
loc: dotToken.loc,
|
|
66
|
+
messageId: "expectedDotBeforeProperty",
|
|
67
|
+
*fix(fixer) {
|
|
68
|
+
yield fixer.remove(dotToken), yield fixer.insertTextBefore(property, dotToken.value);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Checks the spacing of the dot within a member expression.
|
|
74
|
+
* @param {ASTNode} node The node to check.
|
|
75
|
+
* @returns {void}
|
|
76
|
+
*/
|
|
77
|
+
function checkNode(node) {
|
|
78
|
+
node.computed || checkDotLocation(node);
|
|
79
|
+
}
|
|
80
|
+
return { MemberExpression: checkNode };
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}));
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src-js/generated/plugin-eslint/rules/dot-location.cjs
|
|
86
|
+
module.exports = require_dot_location().create;
|
|
87
|
+
//#endregion
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs"), require_keywords$1 = require("../common/keywords.cjs");
|
|
2
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/dot-notation.js
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Rule to warn about using dot notation instead of square bracket notation when possible.
|
|
5
|
+
* @author Josh Perez
|
|
6
|
+
*/
|
|
7
|
+
var require_dot_notation = /* @__PURE__ */ require_chunk.t(((exports, module) => {
|
|
8
|
+
let astUtils = require_ast_utils$1.t(), keywords = require_keywords$1.t(), validIdentifier = /^[a-zA-Z_$][\w$]*$/u, literalTypesToCheck = new Set(["string", "boolean"]);
|
|
9
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
10
|
+
module.exports = {
|
|
11
|
+
meta: {
|
|
12
|
+
type: "suggestion",
|
|
13
|
+
defaultOptions: [{
|
|
14
|
+
allowKeywords: !0,
|
|
15
|
+
allowPattern: ""
|
|
16
|
+
}],
|
|
17
|
+
docs: {
|
|
18
|
+
description: "Enforce dot notation whenever possible",
|
|
19
|
+
recommended: !1,
|
|
20
|
+
frozen: !0,
|
|
21
|
+
url: "https://eslint.org/docs/latest/rules/dot-notation"
|
|
22
|
+
},
|
|
23
|
+
schema: [{
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
allowKeywords: { type: "boolean" },
|
|
27
|
+
allowPattern: { type: "string" }
|
|
28
|
+
},
|
|
29
|
+
additionalProperties: !1
|
|
30
|
+
}],
|
|
31
|
+
fixable: "code",
|
|
32
|
+
messages: {
|
|
33
|
+
useDot: "[{{key}}] is better written in dot notation.",
|
|
34
|
+
useBrackets: ".{{key}} is a syntax error."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
create(context) {
|
|
38
|
+
let [options] = context.options, allowKeywords = options.allowKeywords, sourceCode = context.sourceCode, allowPattern;
|
|
39
|
+
options.allowPattern && (allowPattern = new RegExp(options.allowPattern, "u"));
|
|
40
|
+
/**
|
|
41
|
+
* Check if the property is valid dot notation
|
|
42
|
+
* @param {ASTNode} node The dot notation node
|
|
43
|
+
* @param {string} value Value which is to be checked
|
|
44
|
+
* @returns {void}
|
|
45
|
+
*/
|
|
46
|
+
function checkComputedProperty(node, value) {
|
|
47
|
+
if (validIdentifier.test(value) && (allowKeywords || !keywords.includes(String(value))) && !(allowPattern && allowPattern.test(value))) {
|
|
48
|
+
let formattedValue = node.property.type === "Literal" ? JSON.stringify(value) : `\`${value}\``;
|
|
49
|
+
context.report({
|
|
50
|
+
node: node.property,
|
|
51
|
+
messageId: "useDot",
|
|
52
|
+
data: { key: formattedValue },
|
|
53
|
+
*fix(fixer) {
|
|
54
|
+
let leftBracket = sourceCode.getTokenAfter(node.object, astUtils.isOpeningBracketToken), rightBracket = sourceCode.getLastToken(node), nextToken = sourceCode.getTokenAfter(node);
|
|
55
|
+
sourceCode.commentsExistBetween(leftBracket, rightBracket) || (node.optional || (yield fixer.insertTextBefore(leftBracket, astUtils.isDecimalInteger(node.object) ? " ." : ".")), yield fixer.replaceTextRange([leftBracket.range[0], rightBracket.range[1]], value), nextToken && rightBracket.range[1] === nextToken.range[0] && !astUtils.canTokensBeAdjacent(String(value), nextToken) && (yield fixer.insertTextAfter(node, " ")));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { MemberExpression(node) {
|
|
61
|
+
node.computed && node.property.type === "Literal" && (literalTypesToCheck.has(typeof node.property.value) || astUtils.isNullLiteral(node.property)) && checkComputedProperty(node, node.property.value), node.computed && astUtils.isStaticTemplateLiteral(node.property) && checkComputedProperty(node, node.property.quasis[0].value.cooked), !allowKeywords && !node.computed && node.property.type === "Identifier" && keywords.includes(String(node.property.name)) && context.report({
|
|
62
|
+
node: node.property,
|
|
63
|
+
messageId: "useBrackets",
|
|
64
|
+
data: { key: node.property.name },
|
|
65
|
+
*fix(fixer) {
|
|
66
|
+
let dotToken = sourceCode.getTokenBefore(node.property);
|
|
67
|
+
node.object.type === "Identifier" && node.object.name === "let" && !node.optional || sourceCode.commentsExistBetween(dotToken, node.property) || (node.optional || (yield fixer.remove(dotToken)), yield fixer.replaceText(node.property, `["${node.property.name}"]`));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
} };
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}));
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src-js/generated/plugin-eslint/rules/dot-notation.cjs
|
|
76
|
+
module.exports = require_dot_notation().create;
|
|
77
|
+
//#endregion
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/eol-last.js
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Require or disallow newline at the end of files
|
|
4
|
+
* @author Nodeca Team <https://github.com/nodeca>
|
|
5
|
+
* @deprecated in ESLint v8.53.0
|
|
6
|
+
*/
|
|
7
|
+
var require_eol_last = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
|
|
8
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
9
|
+
module.exports = {
|
|
10
|
+
meta: {
|
|
11
|
+
deprecated: {
|
|
12
|
+
message: "Formatting rules are being moved out of ESLint core.",
|
|
13
|
+
url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
|
|
14
|
+
deprecatedSince: "8.53.0",
|
|
15
|
+
availableUntil: "11.0.0",
|
|
16
|
+
replacedBy: [{
|
|
17
|
+
message: "ESLint Stylistic now maintains deprecated stylistic core rules.",
|
|
18
|
+
url: "https://eslint.style/guide/migration",
|
|
19
|
+
plugin: {
|
|
20
|
+
name: "@stylistic/eslint-plugin",
|
|
21
|
+
url: "https://eslint.style"
|
|
22
|
+
},
|
|
23
|
+
rule: {
|
|
24
|
+
name: "eol-last",
|
|
25
|
+
url: "https://eslint.style/rules/eol-last"
|
|
26
|
+
}
|
|
27
|
+
}]
|
|
28
|
+
},
|
|
29
|
+
type: "layout",
|
|
30
|
+
docs: {
|
|
31
|
+
description: "Require or disallow newline at the end of files",
|
|
32
|
+
recommended: !1,
|
|
33
|
+
url: "https://eslint.org/docs/latest/rules/eol-last"
|
|
34
|
+
},
|
|
35
|
+
fixable: "whitespace",
|
|
36
|
+
schema: [{ enum: [
|
|
37
|
+
"always",
|
|
38
|
+
"never",
|
|
39
|
+
"unix",
|
|
40
|
+
"windows"
|
|
41
|
+
] }],
|
|
42
|
+
messages: {
|
|
43
|
+
missing: "Newline required at end of file but not found.",
|
|
44
|
+
unexpected: "Newline not allowed at end of file."
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
create(context) {
|
|
48
|
+
return { Program: function checkBadEOF(node) {
|
|
49
|
+
let sourceCode = context.sourceCode, src = sourceCode.getText(), location = {
|
|
50
|
+
column: sourceCode.lines.at(-1).length,
|
|
51
|
+
line: sourceCode.lines.length
|
|
52
|
+
}, endsWithNewline = src.endsWith("\n");
|
|
53
|
+
if (!src.length) return;
|
|
54
|
+
let mode = context.options[0] || "always", appendCRLF = !1;
|
|
55
|
+
if (mode === "unix" && (mode = "always"), mode === "windows" && (mode = "always", appendCRLF = !0), mode === "always" && !endsWithNewline) context.report({
|
|
56
|
+
node,
|
|
57
|
+
loc: location,
|
|
58
|
+
messageId: "missing",
|
|
59
|
+
fix(fixer) {
|
|
60
|
+
return fixer.insertTextAfterRange([0, src.length], appendCRLF ? "\r\n" : "\n");
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
else if (mode === "never" && endsWithNewline) {
|
|
64
|
+
let secondLastLine = sourceCode.lines.at(-2);
|
|
65
|
+
context.report({
|
|
66
|
+
node,
|
|
67
|
+
loc: {
|
|
68
|
+
start: {
|
|
69
|
+
line: sourceCode.lines.length - 1,
|
|
70
|
+
column: secondLastLine.length
|
|
71
|
+
},
|
|
72
|
+
end: {
|
|
73
|
+
line: sourceCode.lines.length,
|
|
74
|
+
column: 0
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
messageId: "unexpected",
|
|
78
|
+
fix(fixer) {
|
|
79
|
+
let start = /(?:\r?\n)+$/u.exec(sourceCode.text).index, end = sourceCode.text.length;
|
|
80
|
+
return fixer.replaceTextRange([start, end], "");
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
} };
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}));
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src-js/generated/plugin-eslint/rules/eol-last.cjs
|
|
90
|
+
module.exports = require_eol_last().create;
|
|
91
|
+
//#endregion
|