mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-07 13:53:38 +00:00
Generate appropriate schema doc comments from .proto files
- Add parse handling of .proto struct and field doc comments (enums and their values were already handled) - Add FBS generation handling of doc comments for structs, their fields, enums, and their values (requires linking idl_gen_general in the test binary build) - Tested using test.proto|golden with doc comments added. Xcode run of flattest passes. Change-Id: Idff64dd8064afba227174ab77d2c7be22d006628
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
b8708beeec
commit
3ad853630c
@@ -61,11 +61,13 @@ std::string GenerateFBS(const Parser &parser, const std::string &file_name,
|
||||
for (auto enum_def_it = parser.enums_.vec.begin();
|
||||
enum_def_it != parser.enums_.vec.end(); ++enum_def_it) {
|
||||
EnumDef &enum_def = **enum_def_it;
|
||||
GenComment(enum_def.doc_comment, &schema, nullptr);
|
||||
schema += "enum " + enum_def.name + " : ";
|
||||
schema += GenType(enum_def.underlying_type) + " {\n";
|
||||
for (auto it = enum_def.vals.vec.begin();
|
||||
it != enum_def.vals.vec.end(); ++it) {
|
||||
auto &ev = **it;
|
||||
GenComment(ev.doc_comment, &schema, nullptr, " ");
|
||||
schema += " " + ev.name + " = " + NumToString(ev.value) + ",\n";
|
||||
}
|
||||
schema += "}\n\n";
|
||||
@@ -74,10 +76,12 @@ std::string GenerateFBS(const Parser &parser, const std::string &file_name,
|
||||
for (auto it = parser.structs_.vec.begin();
|
||||
it != parser.structs_.vec.end(); ++it) {
|
||||
StructDef &struct_def = **it;
|
||||
GenComment(struct_def.doc_comment, &schema, nullptr);
|
||||
schema += "table " + struct_def.name + " {\n";
|
||||
for (auto field_it = struct_def.fields.vec.begin();
|
||||
field_it != struct_def.fields.vec.end(); ++field_it) {
|
||||
auto &field = **field_it;
|
||||
GenComment(field.doc_comment, &schema, nullptr, " ");
|
||||
schema += " " + field.name + ":" + GenType(field.value.type);
|
||||
if (field.value.constant != "0") schema += " = " + field.value.constant;
|
||||
if (field.required) schema += " (required)";
|
||||
|
||||
@@ -991,10 +991,13 @@ void Parser::ParseProtoDecl() {
|
||||
// These are identical in syntax to FlatBuffer's namespace decl.
|
||||
ParseNamespace();
|
||||
} else if (attribute_ == "message") {
|
||||
std::vector<std::string> struct_comment = doc_comment_;
|
||||
Next();
|
||||
auto &struct_def = StartStruct();
|
||||
struct_def.doc_comment = struct_comment;
|
||||
Expect('{');
|
||||
while (token_ != '}') {
|
||||
std::vector<std::string> field_comment = doc_comment_;
|
||||
// Parse the qualifier.
|
||||
bool required = false;
|
||||
bool repeated = false;
|
||||
@@ -1021,6 +1024,7 @@ void Parser::ParseProtoDecl() {
|
||||
Expect('=');
|
||||
Expect(kTokenIntegerConstant);
|
||||
auto &field = AddField(struct_def, name, type);
|
||||
field.doc_comment = field_comment;
|
||||
field.required = required;
|
||||
// See if there's a default specified.
|
||||
if (IsNext('[')) {
|
||||
|
||||
Reference in New Issue
Block a user