UNPKG

eslint-plugin-stylistic-compat

Version:

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

237 lines (233 loc) 11.8 kB
'use strict'; var _repeatInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/repeat'); var _Map = require('@babel/runtime-corejs3/core-js/map'); var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/slice'); var _findInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/find'); var _reverseInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/reverse'); var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/filter'); var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/includes'); var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/concat'); var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/for-each'); 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/object/entries'); require('@babel/runtime-corejs3/core-js/set'); require('@babel/runtime-corejs3/core-js/instance/flags'); 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/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/instance/some'); 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/reduce'); var indentBinaryOps = utils.createRule({ name: "indent-binary-ops", package: "plus", meta: { type: "layout", docs: { description: "Indentation for binary operators" }, fixable: "whitespace", schema: [{ oneOf: [{ type: "integer", minimum: 0 }, { type: "string", enum: ["tab"] }] }], messages: { wrongIndentation: "Expected indentation of {{expected}}" } }, defaultOptions: [2], create: (context, options) => { var _context, _options$; const { sourceCode } = context; const indentStr = options[0] === "tab" ? " " : _repeatInstanceProperty(_context = " ").call(_context, (_options$ = options[0]) != null ? _options$ : 2); const indentCache = /* @__PURE__ */new _Map(); function getIndentOfLine(line) { var _sourceCode$lines$mat, _sourceCode$lines$mat2; if (indentCache.has(line)) return indentCache.get(line); return (_sourceCode$lines$mat = (_sourceCode$lines$mat2 = sourceCode.lines[line - 1].match(/^\s*/)) == null ? undefined : _sourceCode$lines$mat2[0]) != null ? _sourceCode$lines$mat : ""; } function subtractionIndent(indent) { var _options$2; if (options[0] === "tab") { return _sliceInstanceProperty(indent).call(indent, 1); } return _sliceInstanceProperty(indent).call(indent, (_options$2 = options[0]) != null ? _options$2 : 2); } function getTargetIndent(indent, needAdditionIndent, needSubtractionIndent) { if (needAdditionIndent && !needSubtractionIndent) { return indent + indentStr; } if (!needAdditionIndent && needSubtractionIndent) { return subtractionIndent(indent); } return indent; } function firstTokenOfLine(line) { var _context2; return _findInstanceProperty(_context2 = sourceCode.tokensAndComments).call(_context2, token => token.loc.start.line === line); } function lastTokenOfLine(line) { var _context3, _context4; return _findInstanceProperty(_context3 = _reverseInstanceProperty(_context4 = [...sourceCode.tokensAndComments]).call(_context4)).call(_context3, token => token.loc.end.line === line); } function isGreaterThanCloseBracketOfLine(line) { var _context5; const tokensAndCommentsOfLine = _filterInstanceProperty(_context5 = sourceCode.tokensAndComments).call(_context5, token => token.loc.start.line === line); let openBracketCount = 0; let closeBracketCount = 0; for (const token of tokensAndCommentsOfLine) { if (token.value === "(") { openBracketCount++; } if (token.value === ")") { closeBracketCount++; } } return openBracketCount < closeBracketCount; } function isTypeKeywordOfNode(typeToken, node) { while (node.parent) { node = node.parent; if (node.type === "TSTypeAliasDeclaration" && context.sourceCode.getTokenBefore(node.id) === typeToken) { return true; } } return false; } function handler(node, right) { var _context6, _context7, _context8, _context9, _context0, _context1; if (node.loc.start.line === node.loc.end.line) return; let tokenRight = sourceCode.getFirstToken(right); let tokenOperator = sourceCode.getTokenBefore(tokenRight); while (tokenOperator.value === "(") { tokenRight = tokenOperator; tokenOperator = sourceCode.getTokenBefore(tokenRight); if (tokenOperator.range[0] <= right.parent.range[0]) return; } const tokenBeforeAll = sourceCode.getTokenBefore(node); const tokenLeft = sourceCode.getTokenBefore(tokenOperator); const isMultiline = tokenRight.loc.start.line !== tokenLeft.loc.start.line; if (!isMultiline) return; const firstTokenOfLineLeft = firstTokenOfLine(tokenLeft.loc.start.line); const lastTokenOfLineLeft = lastTokenOfLine(tokenLeft.loc.start.line); const needAdditionIndent = (firstTokenOfLineLeft == null ? undefined : firstTokenOfLineLeft.type) === "Keyword" && !_includesInstanceProperty(_context6 = ["typeof", "instanceof", "this"]).call(_context6, firstTokenOfLineLeft.value) || (firstTokenOfLineLeft == null ? undefined : firstTokenOfLineLeft.type) === "Identifier" && firstTokenOfLineLeft.value === "type" && isTypeKeywordOfNode(firstTokenOfLineLeft, node) || _includesInstanceProperty(_context7 = _concatInstanceProperty(_context8 = [":", "[", "(", "<"]).call(_context8, utils.ASSIGNMENT_OPERATOR)).call(_context7, (lastTokenOfLineLeft == null ? undefined : lastTokenOfLineLeft.value) || "") || _includesInstanceProperty(_context9 = _concatInstanceProperty(_context0 = ["[", "(", "=>", ":"]).call(_context0, utils.ASSIGNMENT_OPERATOR)).call(_context9, (tokenBeforeAll == null ? undefined : tokenBeforeAll.value) || "") && (firstTokenOfLineLeft == null ? undefined : firstTokenOfLineLeft.loc.start.line) === (tokenBeforeAll == null ? undefined : tokenBeforeAll.loc.start.line); const needSubtractionIndent = (lastTokenOfLineLeft == null ? undefined : lastTokenOfLineLeft.value) === ")" && isGreaterThanCloseBracketOfLine(tokenLeft.loc.start.line) && !_includesInstanceProperty(_context1 = ["]", ")", "}"]).call(_context1, (firstTokenOfLineLeft == null ? undefined : firstTokenOfLineLeft.value) || ""); const indentLeft = getIndentOfLine(tokenLeft.loc.start.line); const indentRight = getIndentOfLine(tokenRight.loc.start.line); const indentTarget = getTargetIndent(indentLeft, needAdditionIndent, needSubtractionIndent); if (indentTarget !== indentRight) { const start = { line: tokenRight.loc.start.line, column: 0 }; const end = { line: tokenRight.loc.start.line, column: indentRight.length }; context.report({ loc: { start, end }, messageId: "wrongIndentation", data: { expected: `${indentTarget.length} ${options[0] === "tab" ? "tab" : "space"}${indentTarget.length === 1 ? "" : "s"}` }, fix(fixer) { return fixer.replaceTextRange([sourceCode.getIndexFromLoc(start), sourceCode.getIndexFromLoc(end)], indentTarget); } }); indentCache.set(tokenRight.loc.start.line, indentTarget); } } return { BinaryExpression(node) { handler(node, node.right); }, LogicalExpression(node) { handler(node, node.right); }, TSUnionType(node) { if (node.types.length > 1) { var _context10; _forEachInstanceProperty(_context10 = node.types).call(_context10, type => { handler(node, type); }); } }, TSIntersectionType(node) { if (node.types.length > 1) { var _context11; _forEachInstanceProperty(_context11 = node.types).call(_context11, type => { handler(node, type); }); } } }; } }); module.exports = indentBinaryOps;