summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordhasenan <dhasenan@gmail.com>2017-10-21 08:25:14 -0700
committerJames E. King, III <jking@apache.org>2017-10-23 14:49:13 -0400
commitba5e065aaa0e1f9a3d0174a5c287fff09ad2f3a7 (patch)
tree3f7ca8d3d74e52c5f59ddd86f31480000c20c3e0
parentcd5be7be702bac300a658184fa0b496debdfee72 (diff)
downloadthrift-ba5e065aaa0e1f9a3d0174a5c287fff09ad2f3a7.tar.gz
THRIFT-4305 Doc comments in dlang output
Client: d Patch: Neia Neutuladh This closes #1396 This closes #1395
-rw-r--r--compiler/cpp/src/thrift/generate/t_d_generator.cc28
1 files changed, 21 insertions, 7 deletions
diff --git a/compiler/cpp/src/thrift/generate/t_d_generator.cc b/compiler/cpp/src/thrift/generate/t_d_generator.cc
index 159d93a1f..35f611d93 100644
--- a/compiler/cpp/src/thrift/generate/t_d_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_d_generator.cc
@@ -131,6 +131,7 @@ protected:
vector<t_const*>::iterator c_iter;
for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
+ this->emit_doc(*c_iter, f_consts);
string name = (*c_iter)->get_name();
t_type* type = (*c_iter)->get_type();
indent(f_consts) << "immutable(" << render_type_name(type) << ") " << name << ";" << endl;
@@ -159,6 +160,7 @@ protected:
}
virtual void generate_typedef(t_typedef* ttypedef) {
+ this->emit_doc(ttypedef, f_types_);
f_types_ << indent() << "alias " << render_type_name(ttypedef->get_type()) << " "
<< ttypedef->get_symbolic() << ";" << endl << endl;
}
@@ -166,21 +168,17 @@ protected:
virtual void generate_enum(t_enum* tenum) {
vector<t_enum_value*> constants = tenum->get_constants();
+ this->emit_doc(tenum, f_types_);
string enum_name = tenum->get_name();
f_types_ << indent() << "enum " << enum_name << " {" << endl;
indent_up();
vector<t_enum_value*>::const_iterator c_iter;
- bool first = true;
for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
- if (first) {
- first = false;
- } else {
- f_types_ << "," << endl;
- }
+ this->emit_doc(*c_iter, f_types_);
indent(f_types_) << (*c_iter)->get_name();
- f_types_ << " = " << (*c_iter)->get_value();
+ f_types_ << " = " << (*c_iter)->get_value() << ",";
}
f_types_ << endl;
@@ -225,6 +223,7 @@ protected:
extends = " : " + render_type_name(tservice->get_extends());
}
+ this->emit_doc(tservice, f_service);
f_service << indent() << "interface " << svc_name << extends << " {" << endl;
indent_up();
@@ -236,6 +235,7 @@ protected:
vector<t_function*> functions = tservice->get_functions();
vector<t_function*>::iterator fn_iter;
for (fn_iter = functions.begin(); fn_iter != functions.end(); ++fn_iter) {
+ this->emit_doc(*fn_iter, f_service);
f_service << indent();
print_function_signature(f_service, *fn_iter);
f_service << ";" << endl;
@@ -345,6 +345,20 @@ protected:
f_skeleton.close();
}
+ void emit_doc(t_doc *doc, std::ofstream& out) {
+ if (!doc->has_doc()) {
+ return;
+ }
+ indent(out) << "/**" << std::endl;
+ indent_up();
+ // No endl -- comments reliably have a newline at the end.
+ // This is true even for stuff like:
+ // /** method infos */ void foo(/** huh?*/ 1: i64 stuff)
+ indent(out) << doc->get_doc();
+ indent_down();
+ indent(out) << "*/" << std::endl;
+ }
+
private:
/**
* Writes a server skeleton for the passed service to out.