Refactor usage message (#7803)

* Update usage string formation

* Rework help message to use code generator interface

* update

* refactor
This commit is contained in:
Khanh Nguyen
2023-01-28 11:17:36 -08:00
committed by GitHub
parent 5b7a02d037
commit a105c26eca
3 changed files with 95 additions and 141 deletions

View File

@@ -241,6 +241,9 @@ const static FlatCOption flatc_options[] = {
"Currently this is required to generate private types in Rust" },
};
auto cmp = [](FlatCOption a, FlatCOption b) { return a.long_opt < b.long_opt; };
static std::set<FlatCOption, decltype(cmp)> language_options(cmp);
static void AppendTextWrappedString(std::stringstream &ss, std::string &text,
size_t max_col, size_t start_col) {
size_t max_line_length = max_col - start_col;
@@ -312,12 +315,19 @@ std::string FlatCompiler::GetShortUsageString(
const std::string &program_name) const {
std::stringstream ss;
ss << "Usage: " << program_name << " [";
for (const FlatCOption &option : language_options) {
AppendShortOption(ss, option);
ss << ", ";
}
// TODO(derekbailey): These should be generated from this.generators
for (size_t i = 0; i < params_.num_generators; ++i) {
const Generator &g = params_.generators[i];
AppendShortOption(ss, g.option);
ss << ", ";
}
for (const FlatCOption &option : flatc_options) {
AppendShortOption(ss, option);
ss << ", ";
@@ -335,6 +345,11 @@ std::string FlatCompiler::GetUsageString(
std::stringstream ss;
ss << "Usage: " << program_name
<< " [OPTION]... FILE... [-- BINARY_FILE...]\n";
for (const FlatCOption &option : language_options) {
AppendOption(ss, option, 80, 25);
}
// TODO(derekbailey): These should be generated from this.generators
for (size_t i = 0; i < params_.num_generators; ++i) {
const Generator &g = params_.generators[i];
@@ -1018,12 +1033,31 @@ int FlatCompiler::Compile(const FlatCOptions &options) {
}
bool FlatCompiler::RegisterCodeGenerator(
const std::string &flag, std::shared_ptr<CodeGenerator> code_generator) {
if (code_generators_.find(flag) != code_generators_.end()) {
Error("multiple generators registered under: " + flag, false, false);
const FlatCOption &option, std::shared_ptr<CodeGenerator> code_generator) {
if (!option.short_opt.empty() &&
code_generators_.find("-" + option.short_opt) != code_generators_.end()) {
Error("multiple generators registered under: -" + option.short_opt, false,
false);
return false;
}
code_generators_[flag] = std::move(code_generator);
if (!option.short_opt.empty()) {
code_generators_["-" + option.short_opt] = code_generator;
}
if (!option.long_opt.empty() &&
code_generators_.find("--" + option.long_opt) != code_generators_.end()) {
Error("multiple generators registered under: --" + option.long_opt, false,
false);
return false;
}
if (!option.long_opt.empty()) {
code_generators_["--" + option.long_opt] = code_generator;
}
language_options.insert(option);
return true;
}