diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-05 01:12:52 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-05 01:12:52 +0800 |
commit | 02a04eef5c897dc4c211d14803285bd0485f8877 (patch) | |
tree | c20d0e7e85daf4fa23723f94886c07bb1bacba48 | |
parent | df4db1de0714e000376bc1efa3db85d57c6a6819 (diff) | |
download | dexon-solidity-02a04eef5c897dc4c211d14803285bd0485f8877.tar.gz dexon-solidity-02a04eef5c897dc4c211d14803285bd0485f8877.tar.zst dexon-solidity-02a04eef5c897dc4c211d14803285bd0485f8877.zip |
Natspec @return tag parsing
- Also omitting tags from the output JSON file if they are missing
instead of providing an empty string for their value
-rw-r--r-- | InterfaceHandler.cpp | 32 | ||||
-rw-r--r-- | InterfaceHandler.h | 4 |
2 files changed, 28 insertions, 8 deletions
diff --git a/InterfaceHandler.cpp b/InterfaceHandler.cpp index 222711e6..2a6de2c3 100644 --- a/InterfaceHandler.cpp +++ b/InterfaceHandler.cpp @@ -75,8 +75,11 @@ std::unique_ptr<std::string> InterfaceHandler::getUserDocumentation(std::shared_ { resetUser(); parseDocString(*strPtr); - user["notice"] = Json::Value(m_notice); - methods[f->getName()] = user; + if (!m_notice.empty()) + {// since @notice is the only user tag if missing function should not appear + user["notice"] = Json::Value(m_notice); + methods[f->getName()] = user; + } } } doc["methods"] = methods; @@ -86,6 +89,8 @@ std::unique_ptr<std::string> InterfaceHandler::getUserDocumentation(std::shared_ std::unique_ptr<std::string> InterfaceHandler::getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef) { + // LTODO: Somewhere in this function warnings for mismatch of param names + // should be thrown Json::Value doc; Json::Value methods(Json::objectValue); @@ -98,14 +103,20 @@ std::unique_ptr<std::string> InterfaceHandler::getDevDocumentation(std::shared_p resetDev(); parseDocString(*strPtr); - method["details"] = Json::Value(m_dev); + if (!m_dev.empty()) + method["details"] = Json::Value(m_dev); Json::Value params(Json::objectValue); for (auto const& pair: m_params) { params[pair.first] = pair.second; } - method["params"] = params; - methods[f->getName()] = method; + if (!m_params.empty()) + method["params"] = params; + if (!m_return.empty()) + method["return"] = m_return; + + if (!method.empty()) // add the function, only if we have any documentation to add + methods[f->getName()] = method; } } doc["methods"] = methods; @@ -122,6 +133,7 @@ void InterfaceHandler::resetUser() void InterfaceHandler::resetDev() { m_dev.clear(); + m_return.clear(); m_params.clear(); } @@ -188,7 +200,7 @@ size_t InterfaceHandler::appendDocTagParam(std::string const& _string, size_t _s size_t InterfaceHandler::parseDocTag(std::string const& _string, std::string const& _tag, size_t _pos) { - //TODO: need to check for @(start of a tag) between here and the end of line + // LTODO: need to check for @(start of a tag) between here and the end of line // for all cases size_t nlPos = _pos; if (m_lastTag == DOCTAG_NONE || _tag != "") @@ -197,11 +209,13 @@ size_t InterfaceHandler::parseDocTag(std::string const& _string, std::string con nlPos = parseDocTagLine(_string, m_dev, _pos, DOCTAG_DEV); else if (_tag == "notice") nlPos = parseDocTagLine(_string, m_notice, _pos, DOCTAG_NOTICE); + else if (_tag == "return") + nlPos = parseDocTagLine(_string, m_return, _pos, DOCTAG_RETURN); else if (_tag == "param") nlPos = parseDocTagParam(_string, _pos); else { - //TODO: Some form of warning + // LTODO: Unknown tas, throw some form of warning } } else @@ -223,6 +237,10 @@ size_t InterfaceHandler::appendDocTag(std::string const& _string, size_t _startP m_notice += " "; newPos = parseDocTagLine(_string, m_notice, _startPos, DOCTAG_NOTICE); break; + case DOCTAG_RETURN: + m_return += " "; + newPos = parseDocTagLine(_string, m_return, _startPos, DOCTAG_RETURN); + break; case DOCTAG_PARAM: newPos = appendDocTagParam(_string, _startPos); break; diff --git a/InterfaceHandler.h b/InterfaceHandler.h index 2a70af95..eeaed033 100644 --- a/InterfaceHandler.h +++ b/InterfaceHandler.h @@ -42,7 +42,8 @@ enum docTagType DOCTAG_NONE = 0, DOCTAG_DEV, DOCTAG_NOTICE, - DOCTAG_PARAM + DOCTAG_PARAM, + DOCTAG_RETURN }; class InterfaceHandler @@ -91,6 +92,7 @@ private: enum docTagType m_lastTag; std::string m_notice; std::string m_dev; + std::string m_return; std::vector<std::pair<std::string, std::string>> m_params; }; |