UNPKG

eslint-plugin-stylistic-compat

Version:

Compatibility version of @stylistic/eslint-plugin for Node.js >= 12 and ESLint v8

211 lines (207 loc) 8.58 kB
'use strict'; var _Object$assign = require('@babel/runtime-corejs3/core-js/object/assign'); var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/slice'); var utils = require('../utils.js'); require('@babel/runtime-corejs3/core-js/object/from-entries'); require('@babel/runtime-corejs3/core-js/instance/map'); require('@babel/runtime-corejs3/core-js/instance/filter'); require('@babel/runtime-corejs3/core-js/object/entries'); require('@babel/runtime-corejs3/core-js/set'); require('@babel/runtime-corejs3/core-js/instance/flags'); require('@babel/runtime-corejs3/core-js/instance/includes'); require('@babel/runtime-corejs3/core-js/instance/starts-with'); require('../vendor.js'); require('@babel/runtime-corejs3/core-js/object/create'); require('@babel/runtime-corejs3/core-js/object/freeze'); require('@babel/runtime-corejs3/core-js/array/is-array'); require('@babel/runtime-corejs3/core-js/instance/last-index-of'); require('@babel/runtime-corejs3/core-js/object/define-properties'); require('@babel/runtime-corejs3/core-js/object/keys'); require('@babel/runtime-corejs3/core-js/instance/index-of'); require('@babel/runtime-corejs3/core-js/instance/at'); require('@babel/runtime-corejs3/core-js/symbol'); require('@babel/runtime-corejs3/core-js/symbol/iterator'); require('@babel/runtime-corejs3/core-js/parse-int'); require('@babel/runtime-corejs3/core-js/parse-float'); require('@babel/runtime-corejs3/core-js/weak-map'); require('@babel/runtime-corejs3/core-js/object/define-property'); require('@babel/runtime-corejs3/core-js/global-this'); require('@babel/runtime-corejs3/core-js/instance/for-each'); require('@babel/runtime-corejs3/core-js/array/from'); require('eslint/use-at-your-own-risk'); require('eslint'); require('@babel/runtime-corejs3/core-js/object/get-own-property-descriptor'); require('@babel/runtime-corejs3/core-js/map'); require('@babel/runtime-corejs3/core-js/instance/some'); require('@babel/runtime-corejs3/core-js/instance/find'); require('@babel/runtime-corejs3/core-js/instance/every'); require('@babel/runtime-corejs3/core-js/instance/sort'); require('@babel/runtime-corejs3/core-js/array/of'); require('@babel/runtime-corejs3/core-js/instance/concat'); require('@babel/runtime-corejs3/core-js/instance/entries'); require('@babel/runtime-corejs3/core-js/instance/find-index'); require('@babel/runtime-corejs3/core-js/instance/flat'); require('@babel/runtime-corejs3/core-js/instance/keys'); require('@babel/runtime-corejs3/core-js/instance/values'); require('@babel/runtime-corejs3/core-js/object/get-own-property-names'); require('@babel/runtime-corejs3/core-js/number/is-finite'); require('@babel/runtime-corejs3/core-js/number/is-nan'); require('@babel/runtime-corejs3/core-js/number/parse-float'); require('@babel/runtime-corejs3/core-js/number/parse-int'); require('@babel/runtime-corejs3/core-js/object/is'); require('@babel/runtime-corejs3/core-js/object/is-extensible'); require('@babel/runtime-corejs3/core-js/object/is-frozen'); require('@babel/runtime-corejs3/core-js/object/is-sealed'); require('@babel/runtime-corejs3/core-js/object/values'); require('@babel/runtime-corejs3/core-js/string/from-code-point'); require('@babel/runtime-corejs3/core-js/string/raw'); require('@babel/runtime-corejs3/core-js/instance/code-point-at'); require('@babel/runtime-corejs3/core-js/instance/ends-with'); require('@babel/runtime-corejs3/core-js/instance/pad-end'); require('@babel/runtime-corejs3/core-js/instance/pad-start'); require('@babel/runtime-corejs3/core-js/instance/trim'); require('@babel/runtime-corejs3/core-js/instance/trim-end'); require('@babel/runtime-corejs3/core-js/instance/trim-left'); require('@babel/runtime-corejs3/core-js/instance/trim-right'); require('@babel/runtime-corejs3/core-js/instance/trim-start'); require('@babel/runtime-corejs3/core-js/symbol/for'); require('@babel/runtime-corejs3/core-js/symbol/key-for'); require('@babel/runtime-corejs3/core-js/object/prevent-extensions'); require('@babel/runtime-corejs3/core-js/object/seal'); require('@babel/runtime-corejs3/core-js/object/get-prototype-of'); require('@babel/runtime-corejs3/core-js/symbol/replace'); require('@babel/runtime-corejs3/core-js/instance/bind'); require('@babel/runtime-corejs3/core-js/instance/splice'); require('@babel/runtime-corejs3/core-js/instance/repeat'); require('@babel/runtime-corejs3/core-js/instance/reduce'); require('@babel/runtime-corejs3/core-js/instance/reverse'); const OVERRIDE_SCHEMA = { oneOf: [{ type: "string", enum: ["before", "after", "both", "neither"] }, { type: "object", properties: { before: { type: "boolean" }, after: { type: "boolean" } }, additionalProperties: false }] }; var generatorStarSpacing = utils.createRule({ name: "generator-star-spacing", package: "js", meta: { type: "layout", docs: { description: "Enforce consistent spacing around `*` operators in generator functions" }, fixable: "whitespace", schema: [{ oneOf: [{ type: "string", enum: ["before", "after", "both", "neither"] }, { type: "object", properties: { before: { type: "boolean" }, after: { type: "boolean" }, named: OVERRIDE_SCHEMA, anonymous: OVERRIDE_SCHEMA, method: OVERRIDE_SCHEMA }, additionalProperties: false }] }], messages: { missingBefore: "Missing space before *.", missingAfter: "Missing space after *.", unexpectedBefore: "Unexpected space before *.", unexpectedAfter: "Unexpected space after *." } }, create(context) { const optionDefinitions = { before: { before: true, after: false }, after: { before: false, after: true }, both: { before: true, after: true }, neither: { before: false, after: false } }; function optionToDefinition(option, defaults) { if (!option) return defaults; return typeof option === "string" ? optionDefinitions[option] : _Object$assign({}, defaults, option); } const modes = function (option) { const defaults = optionToDefinition(option, optionDefinitions.before); return { named: optionToDefinition(option.named, defaults), anonymous: optionToDefinition(option.anonymous, defaults), method: optionToDefinition(option.method, defaults) }; }(context.options[0] || {}); const sourceCode = context.sourceCode; function isStarToken(token) { return token.value === "*" && token.type === "Punctuator"; } function getStarToken(node) { return sourceCode.getFirstToken("method" in node.parent && node.parent.method || node.parent.type === "MethodDefinition" ? node.parent : node, isStarToken); } function capitalize(str) { return str[0].toUpperCase() + _sliceInstanceProperty(str).call(str, 1); } function checkSpacing(kind, side, leftToken, rightToken) { if (!!(rightToken.range[0] - leftToken.range[1]) !== modes[kind][side]) { const after = leftToken.value === "*"; const spaceRequired = modes[kind][side]; const node = after ? leftToken : rightToken; const messageId = `${spaceRequired ? "missing" : "unexpected"}${capitalize(side)}`; context.report({ node, messageId, fix(fixer) { if (spaceRequired) { if (after) return fixer.insertTextAfter(node, " "); return fixer.insertTextBefore(node, " "); } return fixer.removeRange([leftToken.range[1], rightToken.range[0]]); } }); } } function checkFunction(node) { if (!node.generator) return; const starToken = getStarToken(node); const prevToken = sourceCode.getTokenBefore(starToken); const nextToken = sourceCode.getTokenAfter(starToken); let kind = "named"; if (node.parent.type === "MethodDefinition" || node.parent.type === "Property" && node.parent.method) kind = "method";else if (!node.id) kind = "anonymous"; if (!(kind === "method" && starToken === sourceCode.getFirstToken(node.parent))) checkSpacing(kind, "before", prevToken, starToken); checkSpacing(kind, "after", starToken, nextToken); } return { FunctionDeclaration: checkFunction, FunctionExpression: checkFunction }; } }); module.exports = generatorStarSpacing;