mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-03 12:21:23 +00:00
Refactor usage message (#7803)
* Update usage string formation * Rework help message to use code generator interface * update * refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user