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
JavaScript
'use strict';
var _repeatInstanceProperty = require('/runtime-corejs3/core-js/instance/repeat');
var _Map = require('/runtime-corejs3/core-js/map');
var _sliceInstanceProperty = require('/runtime-corejs3/core-js/instance/slice');
var _findInstanceProperty = require('/runtime-corejs3/core-js/instance/find');
var _reverseInstanceProperty = require('/runtime-corejs3/core-js/instance/reverse');
var _filterInstanceProperty = require('/runtime-corejs3/core-js/instance/filter');
var _includesInstanceProperty = require('/runtime-corejs3/core-js/instance/includes');
var _concatInstanceProperty = require('/runtime-corejs3/core-js/instance/concat');
var _forEachInstanceProperty = require('/runtime-corejs3/core-js/instance/for-each');
var utils = require('../utils.js');
require('/runtime-corejs3/core-js/object/from-entries');
require('/runtime-corejs3/core-js/instance/map');
require('/runtime-corejs3/core-js/object/entries');
require('/runtime-corejs3/core-js/set');
require('/runtime-corejs3/core-js/instance/flags');
require('/runtime-corejs3/core-js/instance/starts-with');
require('../vendor.js');
require('/runtime-corejs3/core-js/object/assign');
require('/runtime-corejs3/core-js/object/create');
require('/runtime-corejs3/core-js/object/freeze');
require('/runtime-corejs3/core-js/array/is-array');
require('/runtime-corejs3/core-js/instance/last-index-of');
require('/runtime-corejs3/core-js/object/define-properties');
require('/runtime-corejs3/core-js/object/keys');
require('/runtime-corejs3/core-js/instance/index-of');
require('/runtime-corejs3/core-js/instance/at');
require('/runtime-corejs3/core-js/symbol');
require('/runtime-corejs3/core-js/symbol/iterator');
require('/runtime-corejs3/core-js/parse-int');
require('/runtime-corejs3/core-js/parse-float');
require('/runtime-corejs3/core-js/weak-map');
require('/runtime-corejs3/core-js/object/define-property');
require('/runtime-corejs3/core-js/global-this');
require('/runtime-corejs3/core-js/array/from');
require('eslint/use-at-your-own-risk');
require('eslint');
require('/runtime-corejs3/core-js/object/get-own-property-descriptor');
require('/runtime-corejs3/core-js/instance/some');
require('/runtime-corejs3/core-js/instance/every');
require('/runtime-corejs3/core-js/instance/sort');
require('/runtime-corejs3/core-js/array/of');
require('/runtime-corejs3/core-js/instance/entries');
require('/runtime-corejs3/core-js/instance/find-index');
require('/runtime-corejs3/core-js/instance/flat');
require('/runtime-corejs3/core-js/instance/keys');
require('/runtime-corejs3/core-js/instance/values');
require('/runtime-corejs3/core-js/object/get-own-property-names');
require('/runtime-corejs3/core-js/number/is-finite');
require('/runtime-corejs3/core-js/number/is-nan');
require('/runtime-corejs3/core-js/number/parse-float');
require('/runtime-corejs3/core-js/number/parse-int');
require('/runtime-corejs3/core-js/object/is');
require('/runtime-corejs3/core-js/object/is-extensible');
require('/runtime-corejs3/core-js/object/is-frozen');
require('/runtime-corejs3/core-js/object/is-sealed');
require('/runtime-corejs3/core-js/object/values');
require('/runtime-corejs3/core-js/string/from-code-point');
require('/runtime-corejs3/core-js/string/raw');
require('/runtime-corejs3/core-js/instance/code-point-at');
require('/runtime-corejs3/core-js/instance/ends-with');
require('/runtime-corejs3/core-js/instance/pad-end');
require('/runtime-corejs3/core-js/instance/pad-start');
require('/runtime-corejs3/core-js/instance/trim');
require('/runtime-corejs3/core-js/instance/trim-end');
require('/runtime-corejs3/core-js/instance/trim-left');
require('/runtime-corejs3/core-js/instance/trim-right');
require('/runtime-corejs3/core-js/instance/trim-start');
require('/runtime-corejs3/core-js/symbol/for');
require('/runtime-corejs3/core-js/symbol/key-for');
require('/runtime-corejs3/core-js/object/prevent-extensions');
require('/runtime-corejs3/core-js/object/seal');
require('/runtime-corejs3/core-js/object/get-prototype-of');
require('/runtime-corejs3/core-js/symbol/replace');
require('/runtime-corejs3/core-js/instance/bind');
require('/runtime-corejs3/core-js/instance/splice');
require('/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;