This change modifies the build scripts to use --legacy-peer-deps flag when installing npm dependencies to resolve potential peer dependency conflicts during the build process. The change is applied to both bash (build.sh) and batch (build.bat) build scripts.
159 lines
5.2 KiB
JavaScript
159 lines
5.2 KiB
JavaScript
/**
|
|
* @fileoverview Rule to enforce location of semicolons.
|
|
* @author Toru Nagashima
|
|
* @deprecated in ESLint v8.53.0
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Requirements
|
|
//------------------------------------------------------------------------------
|
|
|
|
const astUtils = require("./utils/ast-utils");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Rule Definition
|
|
//------------------------------------------------------------------------------
|
|
|
|
const SELECTOR = [
|
|
"BreakStatement", "ContinueStatement", "DebuggerStatement",
|
|
"DoWhileStatement", "ExportAllDeclaration",
|
|
"ExportDefaultDeclaration", "ExportNamedDeclaration",
|
|
"ExpressionStatement", "ImportDeclaration", "ReturnStatement",
|
|
"ThrowStatement", "VariableDeclaration", "PropertyDefinition"
|
|
].join(",");
|
|
|
|
/**
|
|
* Get the child node list of a given node.
|
|
* This returns `BlockStatement#body`, `StaticBlock#body`, `Program#body`,
|
|
* `ClassBody#body`, or `SwitchCase#consequent`.
|
|
* This is used to check whether a node is the first/last child.
|
|
* @param {Node} node A node to get child node list.
|
|
* @returns {Node[]|null} The child node list.
|
|
*/
|
|
function getChildren(node) {
|
|
const t = node.type;
|
|
|
|
if (
|
|
t === "BlockStatement" ||
|
|
t === "StaticBlock" ||
|
|
t === "Program" ||
|
|
t === "ClassBody"
|
|
) {
|
|
return node.body;
|
|
}
|
|
if (t === "SwitchCase") {
|
|
return node.consequent;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Check whether a given node is the last statement in the parent block.
|
|
* @param {Node} node A node to check.
|
|
* @returns {boolean} `true` if the node is the last statement in the parent block.
|
|
*/
|
|
function isLastChild(node) {
|
|
const t = node.parent.type;
|
|
|
|
if (t === "IfStatement" && node.parent.consequent === node && node.parent.alternate) { // before `else` keyword.
|
|
return true;
|
|
}
|
|
if (t === "DoWhileStatement") { // before `while` keyword.
|
|
return true;
|
|
}
|
|
const nodeList = getChildren(node.parent);
|
|
|
|
return nodeList !== null && nodeList[nodeList.length - 1] === node; // before `}` or etc.
|
|
}
|
|
|
|
/** @type {import('../shared/types').Rule} */
|
|
module.exports = {
|
|
meta: {
|
|
deprecated: true,
|
|
replacedBy: [],
|
|
type: "layout",
|
|
|
|
docs: {
|
|
description: "Enforce location of semicolons",
|
|
recommended: false,
|
|
url: "https://eslint.org/docs/latest/rules/semi-style"
|
|
},
|
|
|
|
schema: [{ enum: ["last", "first"] }],
|
|
fixable: "whitespace",
|
|
|
|
messages: {
|
|
expectedSemiColon: "Expected this semicolon to be at {{pos}}."
|
|
}
|
|
},
|
|
|
|
create(context) {
|
|
const sourceCode = context.sourceCode;
|
|
const option = context.options[0] || "last";
|
|
|
|
/**
|
|
* Check the given semicolon token.
|
|
* @param {Token} semiToken The semicolon token to check.
|
|
* @param {"first"|"last"} expected The expected location to check.
|
|
* @returns {void}
|
|
*/
|
|
function check(semiToken, expected) {
|
|
const prevToken = sourceCode.getTokenBefore(semiToken);
|
|
const nextToken = sourceCode.getTokenAfter(semiToken);
|
|
const prevIsSameLine = !prevToken || astUtils.isTokenOnSameLine(prevToken, semiToken);
|
|
const nextIsSameLine = !nextToken || astUtils.isTokenOnSameLine(semiToken, nextToken);
|
|
|
|
if ((expected === "last" && !prevIsSameLine) || (expected === "first" && !nextIsSameLine)) {
|
|
context.report({
|
|
loc: semiToken.loc,
|
|
messageId: "expectedSemiColon",
|
|
data: {
|
|
pos: (expected === "last")
|
|
? "the end of the previous line"
|
|
: "the beginning of the next line"
|
|
},
|
|
fix(fixer) {
|
|
if (prevToken && nextToken && sourceCode.commentsExistBetween(prevToken, nextToken)) {
|
|
return null;
|
|
}
|
|
|
|
const start = prevToken ? prevToken.range[1] : semiToken.range[0];
|
|
const end = nextToken ? nextToken.range[0] : semiToken.range[1];
|
|
const text = (expected === "last") ? ";\n" : "\n;";
|
|
|
|
return fixer.replaceTextRange([start, end], text);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
[SELECTOR](node) {
|
|
if (option === "first" && isLastChild(node)) {
|
|
return;
|
|
}
|
|
|
|
const lastToken = sourceCode.getLastToken(node);
|
|
|
|
if (astUtils.isSemicolonToken(lastToken)) {
|
|
check(lastToken, option);
|
|
}
|
|
},
|
|
|
|
ForStatement(node) {
|
|
const firstSemi = node.init && sourceCode.getTokenAfter(node.init, astUtils.isSemicolonToken);
|
|
const secondSemi = node.test && sourceCode.getTokenAfter(node.test, astUtils.isSemicolonToken);
|
|
|
|
if (firstSemi) {
|
|
check(firstSemi, "last");
|
|
}
|
|
if (secondSemi) {
|
|
check(secondSemi, "last");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
};
|