UNPKG

eslint-plugin-stylistic-compat

Version:

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

227 lines (223 loc) 10.3 kB
'use strict'; var _Set = require('@babel/runtime-corejs3/core-js/set'); 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/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/assign'); 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 PRESERVE_PREFIX_SPACE_BEFORE_GENERIC = /* @__PURE__ */new _Set(["TSCallSignatureDeclaration", "ArrowFunctionExpression", "TSFunctionType", "FunctionExpression"]); var typeGenericSpacing = utils.createRule({ name: "type-generic-spacing", package: "plus", meta: { type: "layout", docs: { description: "Enforces consistent spacing inside TypeScript type generics" }, fixable: "whitespace", schema: [], messages: { genericSpacingMismatch: "Generic spaces mismatch" } }, defaultOptions: [], create: context => { const sourceCode = context.sourceCode; return { TSTypeParameterInstantiation: node => { const params = node.params; const openToken = sourceCode.getTokenBefore(params[0]); const firstToken = openToken ? sourceCode.getTokenAfter(openToken) : null; const closeToken = sourceCode.getTokenAfter(params[params.length - 1]); const lastToken = closeToken ? sourceCode.getTokenBefore(closeToken) : null; if (openToken && firstToken) { var _context; const textBetween = _sliceInstanceProperty(_context = sourceCode.text).call(_context, openToken.range[1], firstToken.range[0]); if (/\s/.test(textBetween) && !/^[\r\n]/.test(textBetween)) { context.report({ node, messageId: "genericSpacingMismatch", *fix(fixer) { yield fixer.replaceTextRange([openToken.range[1], firstToken.range[0]], ""); } }); } } if (closeToken && lastToken) { var _context2; const textBetween = _sliceInstanceProperty(_context2 = sourceCode.text).call(_context2, lastToken.range[1], closeToken.range[0]); if (/\s/.test(textBetween) && !/^[\r\n]/.test(textBetween)) { context.report({ node, messageId: "genericSpacingMismatch", *fix(fixer) { yield fixer.replaceTextRange([lastToken.range[1], closeToken.range[0]], ""); } }); } } }, TSTypeParameterDeclaration: node => { if (!PRESERVE_PREFIX_SPACE_BEFORE_GENERIC.has(node.parent.type)) { var _context3, _pre$match; const pre = _sliceInstanceProperty(_context3 = sourceCode.text).call(_context3, 0, node.range[0]); const preSpace = (_pre$match = pre.match(/(\s+)$/)) == null ? undefined : _pre$match[0]; if (preSpace && preSpace.length) { context.report({ node, messageId: "genericSpacingMismatch", *fix(fixer) { yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], ""); } }); } } const params = node.params; const openToken = sourceCode.getTokenBefore(params[0]); const firstToken = openToken ? sourceCode.getTokenAfter(openToken) : null; const closeToken = sourceCode.getTokenAfter(params[params.length - 1]); const lastToken = closeToken ? sourceCode.getTokenBefore(closeToken) : null; if (openToken && firstToken) { var _context4; const textBetween = _sliceInstanceProperty(_context4 = sourceCode.text).call(_context4, openToken.range[1], firstToken.range[0]); if (/\s/.test(textBetween) && !/^[\r\n]/.test(textBetween)) { context.report({ node, messageId: "genericSpacingMismatch", *fix(fixer) { yield fixer.replaceTextRange([openToken.range[1], firstToken.range[0]], ""); } }); } } if (closeToken && lastToken) { var _context5; const textBetween = _sliceInstanceProperty(_context5 = sourceCode.text).call(_context5, lastToken.range[1], closeToken.range[0]); if (/\s/.test(textBetween) && !/^[\r\n]/.test(textBetween)) { context.report({ node, messageId: "genericSpacingMismatch", *fix(fixer) { yield fixer.replaceTextRange([lastToken.range[1], closeToken.range[0]], ""); } }); } } for (let i = 1; i < params.length; i++) { var _context6; const prev = params[i - 1]; const current = params[i]; const from = prev.range[1]; const to = current.range[0]; const span = _sliceInstanceProperty(_context6 = sourceCode.text).call(_context6, from, to); if (span !== ", " && !span.match(/,\s*\n/)) { context.report({ *fix(fixer) { yield fixer.replaceTextRange([from, to], ", "); }, loc: { start: prev.loc.end, end: current.loc.start }, messageId: "genericSpacingMismatch", node }); } } }, // add space around = in type Foo<T = true> TSTypeParameter: node => { var _context7; if (!node.default) return; const endNode = node.constraint || node.name; const from = endNode.range[1]; const to = node.default.range[0]; const span = _sliceInstanceProperty(_context7 = sourceCode.text).call(_context7, from, to); if (!span.match(/(?:^|[^ ]) = (?:$|[^ ])/)) { context.report({ *fix(fixer) { yield fixer.replaceTextRange([from, to], span.replace(/\s*=\s*/, " = ")); }, loc: { start: endNode.loc.end, end: node.default.loc.start }, messageId: "genericSpacingMismatch", node }); } } }; } }); module.exports = typeGenericSpacing;