build: update npm install command to use --legacy-peer-deps
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.
This commit is contained in:
+156
-184
@@ -22,211 +22,183 @@ const astUtils = require("./utils/ast-utils");
|
||||
* @returns {boolean} `true` if the node is function body.
|
||||
*/
|
||||
function isFunctionBody(node) {
|
||||
const parent = node.parent;
|
||||
const parent = node.parent;
|
||||
|
||||
return (
|
||||
node.type === "BlockStatement" &&
|
||||
astUtils.isFunction(parent) &&
|
||||
parent.body === node
|
||||
);
|
||||
return (
|
||||
node.type === "BlockStatement" &&
|
||||
astUtils.isFunction(parent) &&
|
||||
parent.body === node
|
||||
);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Rule Definition
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** @type {import('../types').Rule.RuleModule} */
|
||||
/** @type {import('../shared/types').Rule} */
|
||||
module.exports = {
|
||||
meta: {
|
||||
deprecated: {
|
||||
message: "Formatting rules are being moved out of ESLint core.",
|
||||
url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
|
||||
deprecatedSince: "8.53.0",
|
||||
availableUntil: "11.0.0",
|
||||
replacedBy: [
|
||||
{
|
||||
message:
|
||||
"ESLint Stylistic now maintains deprecated stylistic core rules.",
|
||||
url: "https://eslint.style/guide/migration",
|
||||
plugin: {
|
||||
name: "@stylistic/eslint-plugin",
|
||||
url: "https://eslint.style",
|
||||
},
|
||||
rule: {
|
||||
name: "space-before-blocks",
|
||||
url: "https://eslint.style/rules/space-before-blocks",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
type: "layout",
|
||||
meta: {
|
||||
deprecated: true,
|
||||
replacedBy: [],
|
||||
type: "layout",
|
||||
|
||||
docs: {
|
||||
description: "Enforce consistent spacing before blocks",
|
||||
recommended: false,
|
||||
url: "https://eslint.org/docs/latest/rules/space-before-blocks",
|
||||
},
|
||||
docs: {
|
||||
description: "Enforce consistent spacing before blocks",
|
||||
recommended: false,
|
||||
url: "https://eslint.org/docs/latest/rules/space-before-blocks"
|
||||
},
|
||||
|
||||
fixable: "whitespace",
|
||||
fixable: "whitespace",
|
||||
|
||||
schema: [
|
||||
{
|
||||
oneOf: [
|
||||
{
|
||||
enum: ["always", "never"],
|
||||
},
|
||||
{
|
||||
type: "object",
|
||||
properties: {
|
||||
keywords: {
|
||||
enum: ["always", "never", "off"],
|
||||
},
|
||||
functions: {
|
||||
enum: ["always", "never", "off"],
|
||||
},
|
||||
classes: {
|
||||
enum: ["always", "never", "off"],
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
schema: [
|
||||
{
|
||||
oneOf: [
|
||||
{
|
||||
enum: ["always", "never"]
|
||||
},
|
||||
{
|
||||
type: "object",
|
||||
properties: {
|
||||
keywords: {
|
||||
enum: ["always", "never", "off"]
|
||||
},
|
||||
functions: {
|
||||
enum: ["always", "never", "off"]
|
||||
},
|
||||
classes: {
|
||||
enum: ["always", "never", "off"]
|
||||
}
|
||||
},
|
||||
additionalProperties: false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
messages: {
|
||||
unexpectedSpace: "Unexpected space before opening brace.",
|
||||
missingSpace: "Missing space before opening brace.",
|
||||
},
|
||||
},
|
||||
messages: {
|
||||
unexpectedSpace: "Unexpected space before opening brace.",
|
||||
missingSpace: "Missing space before opening brace."
|
||||
}
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const config = context.options[0],
|
||||
sourceCode = context.sourceCode;
|
||||
let alwaysFunctions = true,
|
||||
alwaysKeywords = true,
|
||||
alwaysClasses = true,
|
||||
neverFunctions = false,
|
||||
neverKeywords = false,
|
||||
neverClasses = false;
|
||||
create(context) {
|
||||
const config = context.options[0],
|
||||
sourceCode = context.sourceCode;
|
||||
let alwaysFunctions = true,
|
||||
alwaysKeywords = true,
|
||||
alwaysClasses = true,
|
||||
neverFunctions = false,
|
||||
neverKeywords = false,
|
||||
neverClasses = false;
|
||||
|
||||
if (typeof config === "object") {
|
||||
alwaysFunctions = config.functions === "always";
|
||||
alwaysKeywords = config.keywords === "always";
|
||||
alwaysClasses = config.classes === "always";
|
||||
neverFunctions = config.functions === "never";
|
||||
neverKeywords = config.keywords === "never";
|
||||
neverClasses = config.classes === "never";
|
||||
} else if (config === "never") {
|
||||
alwaysFunctions = false;
|
||||
alwaysKeywords = false;
|
||||
alwaysClasses = false;
|
||||
neverFunctions = true;
|
||||
neverKeywords = true;
|
||||
neverClasses = true;
|
||||
}
|
||||
if (typeof config === "object") {
|
||||
alwaysFunctions = config.functions === "always";
|
||||
alwaysKeywords = config.keywords === "always";
|
||||
alwaysClasses = config.classes === "always";
|
||||
neverFunctions = config.functions === "never";
|
||||
neverKeywords = config.keywords === "never";
|
||||
neverClasses = config.classes === "never";
|
||||
} else if (config === "never") {
|
||||
alwaysFunctions = false;
|
||||
alwaysKeywords = false;
|
||||
alwaysClasses = false;
|
||||
neverFunctions = true;
|
||||
neverKeywords = true;
|
||||
neverClasses = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the spacing before the given block is already controlled by another rule:
|
||||
* - `arrow-spacing` checks spaces after `=>`.
|
||||
* - `keyword-spacing` checks spaces after keywords in certain contexts.
|
||||
* - `switch-colon-spacing` checks spaces after `:` of switch cases.
|
||||
* @param {Token} precedingToken first token before the block.
|
||||
* @param {ASTNode|Token} node `BlockStatement` node or `{` token of a `SwitchStatement` node.
|
||||
* @returns {boolean} `true` if requiring or disallowing spaces before the given block could produce conflicts with other rules.
|
||||
*/
|
||||
function isConflicted(precedingToken, node) {
|
||||
return (
|
||||
astUtils.isArrowToken(precedingToken) ||
|
||||
(astUtils.isKeywordToken(precedingToken) &&
|
||||
!isFunctionBody(node)) ||
|
||||
(astUtils.isColonToken(precedingToken) &&
|
||||
node.parent &&
|
||||
node.parent.type === "SwitchCase" &&
|
||||
precedingToken ===
|
||||
astUtils.getSwitchCaseColonToken(
|
||||
node.parent,
|
||||
sourceCode,
|
||||
))
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Checks whether the spacing before the given block is already controlled by another rule:
|
||||
* - `arrow-spacing` checks spaces after `=>`.
|
||||
* - `keyword-spacing` checks spaces after keywords in certain contexts.
|
||||
* - `switch-colon-spacing` checks spaces after `:` of switch cases.
|
||||
* @param {Token} precedingToken first token before the block.
|
||||
* @param {ASTNode|Token} node `BlockStatement` node or `{` token of a `SwitchStatement` node.
|
||||
* @returns {boolean} `true` if requiring or disallowing spaces before the given block could produce conflicts with other rules.
|
||||
*/
|
||||
function isConflicted(precedingToken, node) {
|
||||
return (
|
||||
astUtils.isArrowToken(precedingToken) ||
|
||||
(
|
||||
astUtils.isKeywordToken(precedingToken) &&
|
||||
!isFunctionBody(node)
|
||||
) ||
|
||||
(
|
||||
astUtils.isColonToken(precedingToken) &&
|
||||
node.parent &&
|
||||
node.parent.type === "SwitchCase" &&
|
||||
precedingToken === astUtils.getSwitchCaseColonToken(node.parent, sourceCode)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.
|
||||
* @param {ASTNode|Token} node The AST node of a BlockStatement.
|
||||
* @returns {void} undefined.
|
||||
*/
|
||||
function checkPrecedingSpace(node) {
|
||||
const precedingToken = sourceCode.getTokenBefore(node);
|
||||
/**
|
||||
* Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.
|
||||
* @param {ASTNode|Token} node The AST node of a BlockStatement.
|
||||
* @returns {void} undefined.
|
||||
*/
|
||||
function checkPrecedingSpace(node) {
|
||||
const precedingToken = sourceCode.getTokenBefore(node);
|
||||
|
||||
if (
|
||||
precedingToken &&
|
||||
!isConflicted(precedingToken, node) &&
|
||||
astUtils.isTokenOnSameLine(precedingToken, node)
|
||||
) {
|
||||
const hasSpace = sourceCode.isSpaceBetweenTokens(
|
||||
precedingToken,
|
||||
node,
|
||||
);
|
||||
let requireSpace;
|
||||
let requireNoSpace;
|
||||
if (precedingToken && !isConflicted(precedingToken, node) && astUtils.isTokenOnSameLine(precedingToken, node)) {
|
||||
const hasSpace = sourceCode.isSpaceBetweenTokens(precedingToken, node);
|
||||
let requireSpace;
|
||||
let requireNoSpace;
|
||||
|
||||
if (isFunctionBody(node)) {
|
||||
requireSpace = alwaysFunctions;
|
||||
requireNoSpace = neverFunctions;
|
||||
} else if (node.type === "ClassBody") {
|
||||
requireSpace = alwaysClasses;
|
||||
requireNoSpace = neverClasses;
|
||||
} else {
|
||||
requireSpace = alwaysKeywords;
|
||||
requireNoSpace = neverKeywords;
|
||||
}
|
||||
if (isFunctionBody(node)) {
|
||||
requireSpace = alwaysFunctions;
|
||||
requireNoSpace = neverFunctions;
|
||||
} else if (node.type === "ClassBody") {
|
||||
requireSpace = alwaysClasses;
|
||||
requireNoSpace = neverClasses;
|
||||
} else {
|
||||
requireSpace = alwaysKeywords;
|
||||
requireNoSpace = neverKeywords;
|
||||
}
|
||||
|
||||
if (requireSpace && !hasSpace) {
|
||||
context.report({
|
||||
node,
|
||||
messageId: "missingSpace",
|
||||
fix(fixer) {
|
||||
return fixer.insertTextBefore(node, " ");
|
||||
},
|
||||
});
|
||||
} else if (requireNoSpace && hasSpace) {
|
||||
context.report({
|
||||
node,
|
||||
messageId: "unexpectedSpace",
|
||||
fix(fixer) {
|
||||
return fixer.removeRange([
|
||||
precedingToken.range[1],
|
||||
node.range[0],
|
||||
]);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requireSpace && !hasSpace) {
|
||||
context.report({
|
||||
node,
|
||||
messageId: "missingSpace",
|
||||
fix(fixer) {
|
||||
return fixer.insertTextBefore(node, " ");
|
||||
}
|
||||
});
|
||||
} else if (requireNoSpace && hasSpace) {
|
||||
context.report({
|
||||
node,
|
||||
messageId: "unexpectedSpace",
|
||||
fix(fixer) {
|
||||
return fixer.removeRange([precedingToken.range[1], node.range[0]]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the CaseBlock of an given SwitchStatement node has a preceding space.
|
||||
* @param {ASTNode} node The node of a SwitchStatement.
|
||||
* @returns {void} undefined.
|
||||
*/
|
||||
function checkSpaceBeforeCaseBlock(node) {
|
||||
const cases = node.cases;
|
||||
let openingBrace;
|
||||
/**
|
||||
* Checks if the CaseBlock of an given SwitchStatement node has a preceding space.
|
||||
* @param {ASTNode} node The node of a SwitchStatement.
|
||||
* @returns {void} undefined.
|
||||
*/
|
||||
function checkSpaceBeforeCaseBlock(node) {
|
||||
const cases = node.cases;
|
||||
let openingBrace;
|
||||
|
||||
if (cases.length > 0) {
|
||||
openingBrace = sourceCode.getTokenBefore(cases[0]);
|
||||
} else {
|
||||
openingBrace = sourceCode.getLastToken(node, 1);
|
||||
}
|
||||
if (cases.length > 0) {
|
||||
openingBrace = sourceCode.getTokenBefore(cases[0]);
|
||||
} else {
|
||||
openingBrace = sourceCode.getLastToken(node, 1);
|
||||
}
|
||||
|
||||
checkPrecedingSpace(openingBrace);
|
||||
}
|
||||
checkPrecedingSpace(openingBrace);
|
||||
}
|
||||
|
||||
return {
|
||||
BlockStatement: checkPrecedingSpace,
|
||||
ClassBody: checkPrecedingSpace,
|
||||
SwitchStatement: checkSpaceBeforeCaseBlock,
|
||||
};
|
||||
},
|
||||
return {
|
||||
BlockStatement: checkPrecedingSpace,
|
||||
ClassBody: checkPrecedingSpace,
|
||||
SwitchStatement: checkSpaceBeforeCaseBlock
|
||||
};
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user