DocGen: Store expressions for default values

This commit is contained in:
SirLynix 2023-05-06 15:48:38 +02:00
parent 410ca805aa
commit 04e88d067b
1 changed files with 25 additions and 6 deletions

View File

@ -30,6 +30,23 @@ public:
cppast::generate_code(*this, e); cppast::generate_code(*this, e);
} }
simpleCodeGenerator(const cppast::cpp_expression& e)
{
struct dummy_entity : public cppast::cpp_entity
{
using cpp_entity::cpp_entity;
cppast::cpp_entity_kind do_get_entity_kind() const noexcept override
{
return cppast::cpp_entity_kind::unexposed_t;
}
};
dummy_entity dummy("dummy");
output output(type_safe::ref(*this), type_safe::ref(dummy), cppast::cpp_access_specifier_kind::cpp_public);
cppast::detail::write_expression(output, e);
}
// return the result // return the result
const std::string& str() const noexcept const std::string& str() const noexcept
{ {
@ -283,8 +300,8 @@ nlohmann::ordered_json buildClass(const std::string& scope, const cppast::cpp_cl
auto& parameterDoc = parameterArray.emplace_back(); auto& parameterDoc = parameterArray.emplace_back();
parameterDoc["name"] = parameter.name(); parameterDoc["name"] = parameter.name();
parameterDoc["type"] = cppast::to_string(parameter.type()); parameterDoc["type"] = cppast::to_string(parameter.type());
//if (const auto& defaultOpt = parameter.default_value()) if (const auto& defaultOpt = parameter.default_value())
// parameterDoc["default"] = std::string(simpleCodeGenerator(defaultOpt.value())); parameterDoc["default"] = simpleCodeGenerator(defaultOpt.value()).str();
} }
break; break;
} }
@ -313,8 +330,8 @@ nlohmann::ordered_json buildClass(const std::string& scope, const cppast::cpp_cl
auto& parameterDoc = parameterArray.emplace_back(); auto& parameterDoc = parameterArray.emplace_back();
parameterDoc["name"] = parameter.name(); parameterDoc["name"] = parameter.name();
parameterDoc["type"] = cppast::to_string(parameter.type()); parameterDoc["type"] = cppast::to_string(parameter.type());
//if (const auto& defaultOpt = parameter.default_value()) if (const auto& defaultOpt = parameter.default_value())
// parameterDoc["default"] = std::string(simpleCodeGenerator(defaultOpt.value())); parameterDoc["default"] = simpleCodeGenerator(defaultOpt.value()).str();
} }
break; break;
} }
@ -353,8 +370,8 @@ nlohmann::ordered_json buildClass(const std::string& scope, const cppast::cpp_cl
auto& parameterDoc = parameterArray.emplace_back(); auto& parameterDoc = parameterArray.emplace_back();
parameterDoc["name"] = parameter.name(); parameterDoc["name"] = parameter.name();
parameterDoc["type"] = cppast::to_string(parameter.type()); parameterDoc["type"] = cppast::to_string(parameter.type());
//if (const auto& defaultOpt = parameter.default_value()) if (const auto& defaultOpt = parameter.default_value())
// parameterDoc["default"] = std::string(simpleCodeGenerator(defaultOpt.value())); parameterDoc["default"] = simpleCodeGenerator(defaultOpt.value()).str();
} }
break; break;
} }
@ -385,6 +402,8 @@ nlohmann::ordered_json buildEnum(const std::string& scope, const cppast::cpp_enu
auto& valueDoc = enumDoc["values"].emplace_back(); auto& valueDoc = enumDoc["values"].emplace_back();
valueDoc["name"] = entry.name(); valueDoc["name"] = entry.name();
if (const auto& exprOpt = entry.value()) if (const auto& exprOpt = entry.value())
valueDoc["value"] = simpleCodeGenerator(exprOpt.value()).str();
}
return enumDoc; return enumDoc;
} }