MCPcopy Create free account
hub / github.com/EndstoneMC/endstone / parse

Method parse

src/endstone/core/command/command_usage_parser.cpp:40–94  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38namespace endstone::core {
39
40nonstd::expected<CommandUsageParser::Result, std::string> CommandUsageParser::parse() noexcept
41{
42 Result result;
43 lexer_.reset();
44
45 // Expect a slash at the start.
46 if (auto slash = parseToken(CommandLexer::TokenType::Slash, "/"); !slash) {
47 return nonstd::make_unexpected(slash.error());
48 }
49
50 // Parse command name.
51 auto command_name_result = parseIdentifier("command name");
52 if (!command_name_result) {
53 return nonstd::make_unexpected(command_name_result.error());
54 }
55 result.command_name = std::string(command_name_result.value());
56 command_name_ = result.command_name;
57
58 // Parse parameters (or enums).
59 while (true) {
60 auto token = lexer_.peek();
61 switch (token.type) {
62 case CommandLexer::TokenType::Identifier: {
63 auto enum_result = parseSingleUnnamedEnum();
64 if (!enum_result) {
65 return nonstd::make_unexpected(enum_result.error());
66 }
67 result.parameters.push_back(enum_result.value());
68 break;
69 }
70 case CommandLexer::TokenType::LeftParen: {
71 auto enum_result = parseEnum();
72 if (!enum_result) {
73 return nonstd::make_unexpected(enum_result.error());
74 }
75 result.parameters.push_back(enum_result.value());
76 break;
77 }
78 case CommandLexer::TokenType::LeftSquare:
79 case CommandLexer::TokenType::LessThan: {
80 auto param_result = parseParameterOrEnum();
81 if (!param_result) {
82 return nonstd::make_unexpected(param_result.error());
83 }
84 result.parameters.push_back(param_result.value());
85 break;
86 }
87 case CommandLexer::TokenType::End:
88 return result;
89 default:
90 return nonstd::make_unexpected(fmt::format("Syntax Error: expect '(', '<' or '[', got '{}' at position {}.",
91 token.value, lexer_.getPosition()));
92 }
93 }
94}
95
96nonstd::expected<std::string_view, std::string> CommandUsageParser::parseToken(CommandLexer::TokenType type,
97 std::string what)

Callers 5

_valid_sigFunction · 0.80
registerCommandMethod · 0.80
_scan_pe_fallbackFunction · 0.80
mainFunction · 0.80
TEST_FFunction · 0.80

Calls 6

valueMethod · 0.80
push_backMethod · 0.80
resetMethod · 0.45
errorMethod · 0.45
peekMethod · 0.45
getPositionMethod · 0.45

Tested by 1

TEST_FFunction · 0.64