@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
88 lines (87 loc) • 4.25 kB
JavaScript
;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MCFunctionInfoGeneratorTest = void 0;
const ProjectInfoItem_1 = __importDefault(require("./ProjectInfoItem"));
const IInfoItemData_1 = require("./IInfoItemData");
const ProjectInfoUtilities_1 = __importDefault(require("./ProjectInfoUtilities"));
const CommandStructure_1 = __importDefault(require("../app/CommandStructure"));
const CommandRegistry_1 = __importDefault(require("../app/CommandRegistry"));
const IProjectItemData_1 = require("../app/IProjectItemData");
var MCFunctionInfoGeneratorTest;
(function (MCFunctionInfoGeneratorTest) {
MCFunctionInfoGeneratorTest[MCFunctionInfoGeneratorTest["invalidCommandSyntax"] = 102] = "invalidCommandSyntax";
MCFunctionInfoGeneratorTest[MCFunctionInfoGeneratorTest["lineBeginsWithSlash"] = 103] = "lineBeginsWithSlash";
})(MCFunctionInfoGeneratorTest || (exports.MCFunctionInfoGeneratorTest = MCFunctionInfoGeneratorTest = {}));
/***********
* Generator for validating MCFunction Files
*
* Will ensure:
* * command syntax is correct
* * no slashes are present before commands
*
* @see {@link ../../public/data/forms/mctoolsval/mcfunction.form.json} for topic definitions
*/
class MCFunctionInfoGenerator {
id = "MCFUNCTION";
title = "MC Function Validation";
summarize(info, infoSet) {
info.invalidCommandSyntaxCount = infoSet.getSummedDataValue(this.id, MCFunctionInfoGeneratorTest.invalidCommandSyntax);
info.linesWithSlashCount = infoSet.getSummedDataValue(this.id, MCFunctionInfoGeneratorTest.lineBeginsWithSlash);
}
async generate(project) {
const items = [];
const projItems = project.getItemsCopy();
for (const item of projItems) {
if (item.itemType !== IProjectItemData_1.ProjectItemType.MCFunction) {
continue;
}
if (!item.isContentLoaded) {
await item.loadContent();
}
if (!item.primaryFile) {
continue;
}
if (!item.primaryFile.isContentLoaded) {
await item.primaryFile.loadContent();
}
const content = item.primaryFile.content;
if (!content || typeof content !== "string") {
continue;
}
const lines = content
.trim()
.split(/\r?\n/)
.filter((line) => line.trim() !== "");
const commands = lines.map(CommandStructure_1.default.parse);
items.push(...this.getNewLineBeginsWithSlashesResult(lines, item));
items.push(...this.getCommandSyntaxResult(commands, item));
}
return items;
}
getNewLineBeginsWithSlashesResult(lines, item) {
const results = [];
for (const line of lines) {
if (line.startsWith("/")) {
results.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, MCFunctionInfoGeneratorTest.lineBeginsWithSlash, ProjectInfoUtilities_1.default.getTitleFromEnum(MCFunctionInfoGeneratorTest, MCFunctionInfoGeneratorTest.lineBeginsWithSlash), item, `Relevant line: ${line}`));
}
}
return results;
}
getCommandSyntaxResult(commands, item) {
const results = [];
for (const command of commands) {
if (!command.isNamespaced &&
!CommandRegistry_1.default.isMinecraftBuiltInCommand(command.fullName) &&
!CommandRegistry_1.default.isAddOnBlockedCommand(command.fullName)) {
results.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, MCFunctionInfoGeneratorTest.invalidCommandSyntax, ProjectInfoUtilities_1.default.getTitleFromEnum(MCFunctionInfoGeneratorTest, MCFunctionInfoGeneratorTest.invalidCommandSyntax), item, `${command.fullName} ${command.commandArguments.join(" ")}`));
}
}
return results;
}
}
exports.default = MCFunctionInfoGenerator;