diff --git a/kythe/cxx/indexer/proto/marked_source.cc b/kythe/cxx/indexer/proto/marked_source.cc index 1a5578cce2..325e8f856d 100644 --- a/kythe/cxx/indexer/proto/marked_source.cc +++ b/kythe/cxx/indexer/proto/marked_source.cc @@ -96,6 +96,22 @@ std::optional GenerateMarkedSourceForDescriptor( full_name = descriptor->full_name(); } MarkedSource ms; + if (!descriptor->containing_oneof() && descriptor->label()) { + auto* mod = ms.add_child(); + mod->set_kind(MarkedSource::MODIFIER); + switch (descriptor->label()) { + case google::protobuf::FieldDescriptor::Label::LABEL_OPTIONAL: + mod->set_pre_text("optional"); + break; + case google::protobuf::FieldDescriptor::Label::LABEL_REQUIRED: + mod->set_pre_text("required"); + break; + case google::protobuf::FieldDescriptor::Label::LABEL_REPEATED: + mod->set_pre_text("repeated"); + break; + } + mod->set_post_text(" "); + } auto* type = ms.add_child(); type->set_kind(MarkedSource::TYPE); switch (descriptor->type()) { diff --git a/kythe/cxx/indexer/proto/testdata/basic/message-fields.proto b/kythe/cxx/indexer/proto/testdata/basic/message-fields.proto index e4c26a45aa..11fe0fb0ec 100644 --- a/kythe/cxx/indexer/proto/testdata/basic/message-fields.proto +++ b/kythe/cxx/indexer/proto/testdata/basic/message-fields.proto @@ -16,7 +16,10 @@ message MessageFields { //- FieldNameNode.subkind field //- FieldNameNode typed Type1Node //- FieldNameNode code FNRoot - //- FNRoot child.1 FNName + //- FNRoot child.0 FNLabel + //- FNLabel.kind "MODIFIER" + //- FNLabel.pre_text "optional" + //- FNRoot child.2 FNName //- FNName child.0 FNQualName //- FNName child.1 FNIdent //- FNIdent.pre_text field_name diff --git a/kythe/cxx/indexer/proto/testdata/basic/signatures.proto b/kythe/cxx/indexer/proto/testdata/basic/signatures.proto index d58c9ff0ce..7333234910 100644 --- a/kythe/cxx/indexer/proto/testdata/basic/signatures.proto +++ b/kythe/cxx/indexer/proto/testdata/basic/signatures.proto @@ -10,22 +10,22 @@ package proto_kythe_test; message Message { //- @R defines/binding R //- R.code/rendered/qualified_name "proto_kythe_test.Message.R" - //- R.code/rendered/signature "string R" + //- R.code/rendered/signature "required string R" required string R = 1; //- @I defines/binding I //- I.code/rendered/qualified_name "proto_kythe_test.Message.I" - //- I.code/rendered/signature "int32 I" + //- I.code/rendered/signature "optional int32 I" optional int32 I = 2; //- @L defines/binding L //- L.code/rendered/qualified_name "proto_kythe_test.Message.L" - //- L.code/rendered/signature "Message L" + //- L.code/rendered/signature "repeated Message L" repeated Message L = 3; //- @#1E defines/binding E //- E.code/rendered/qualified_name "proto_kythe_test.Message.E" - //- E.code/rendered/signature "Enum E" + //- E.code/rendered/signature "optional Enum E" optional Enum E = 4; }