UNPKG

eslint-plugin-stylistic-compat

Version:

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

177 lines (173 loc) 7.81 kB
'use strict'; var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/concat'); var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/slice'); var _Object$assign = require('@babel/runtime-corejs3/core-js/object/assign'); var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/reduce'); 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/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/reverse'); const messages = { noLineGap: "Expected no line gap between \u201C{{prop1}}\u201D and \u201C{{prop2}}\u201D", onlyOneSpace: "Expected only one space between \u201C{{prop1}}\u201D and \u201C{{prop2}}\u201D" }; var jsxPropsNoMultiSpaces = utils.createRule({ name: "jsx-props-no-multi-spaces", package: "jsx", meta: { type: "layout", docs: { description: "Disallow multiple spaces between inline JSX props" }, fixable: "code", messages, schema: [] }, create(context) { const sourceCode = context.sourceCode; function getPropName(propNode) { switch (propNode.type) { case "JSXSpreadAttribute": return sourceCode.getText(propNode.argument); case "JSXIdentifier": return propNode.name; case "JSXMemberExpression": return `${getPropName(propNode.object)}.${propNode.property.name}`; default: return propNode.name ? propNode.name.name : `${sourceCode.getText(propNode.object)}.${propNode.property.name}`; } } function hasEmptyLines(first, second) { var _context; const comments = sourceCode.getCommentsBefore ? sourceCode.getCommentsBefore(second) : []; const nodes = _concatInstanceProperty(_context = []).call(_context, first, comments, second); for (let i = 1; i < nodes.length; i += 1) { const prev = nodes[i - 1]; const curr = nodes[i]; if (curr.loc.start.line - prev.loc.end.line >= 2) return true; } return false; } function checkSpacing(prev, node) { var _context2; if (hasEmptyLines(prev, node)) { context.report({ messageId: "noLineGap", node, data: { prop1: getPropName(prev), prop2: getPropName(node) } }); } if (prev.loc.end.line !== node.loc.end.line) return; const between = _sliceInstanceProperty(_context2 = sourceCode.text).call(_context2, prev.range[1], node.range[0]); if (between !== " ") { context.report({ node, messageId: "onlyOneSpace", data: { prop1: getPropName(prev), prop2: getPropName(node) }, fix(fixer) { return fixer.replaceTextRange([prev.range[1], node.range[0]], " "); } }); } } function containsGenericType(node) { var _node$typeArguments; const containsTypeParams = typeof node.typeArguments !== "undefined"; return containsTypeParams && ((_node$typeArguments = node.typeArguments) == null ? undefined : _node$typeArguments.type) === "TSTypeParameterInstantiation"; } function getGenericNode(node) { const name = node.name; if (containsGenericType(node)) { const type = node.typeArguments; return _Object$assign({}, node, { range: [name.range[0], type == null ? undefined : type.range[1]] }); } return name; } return { JSXOpeningElement(node) { var _context3; _reduceInstanceProperty(_context3 = node.attributes).call(_context3, (prev, prop) => { checkSpacing(prev, prop); return prop; }, getGenericNode(node)); } }; } }); module.exports = jsxPropsNoMultiSpaces;