mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Work in progress for parsing natspec doxytags
This commit is contained in:
parent
d25581de7c
commit
a0ff2179d4
@ -5,6 +5,8 @@
|
|||||||
namespace dev {
|
namespace dev {
|
||||||
namespace solidity {
|
namespace solidity {
|
||||||
|
|
||||||
|
/* -- public -- */
|
||||||
|
|
||||||
InterfaceHandler::InterfaceHandler()
|
InterfaceHandler::InterfaceHandler()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -80,8 +82,69 @@ std::unique_ptr<std::string> InterfaceHandler::getUserDocumentation(std::shared_
|
|||||||
|
|
||||||
std::unique_ptr<std::string> InterfaceHandler::getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef)
|
std::unique_ptr<std::string> InterfaceHandler::getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef)
|
||||||
{
|
{
|
||||||
//TODO
|
Json::Value doc;
|
||||||
return nullptr;
|
Json::Value methods(Json::objectValue);
|
||||||
|
|
||||||
|
for (FunctionDefinition const* f: _contractDef->getInterfaceFunctions())
|
||||||
|
{
|
||||||
|
Json::Value method;
|
||||||
|
auto strPtr = f->getDocumentation();
|
||||||
|
if (strPtr)
|
||||||
|
{
|
||||||
|
m_dev.clear();
|
||||||
|
parseDocString(*strPtr);
|
||||||
|
|
||||||
|
method["dev"] = Json::Value(m_dev);
|
||||||
|
methods[f->getName()] = method;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
doc["methods"] = methods;
|
||||||
|
|
||||||
|
return std::unique_ptr<std::string>(new std::string(m_writer.write(doc)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- private -- */
|
||||||
|
size_t InterfaceHandler::parseDocTag(std::string const& _string, std::string const& _tag, size_t _pos)
|
||||||
|
{
|
||||||
|
size_t nlPos = _pos;
|
||||||
|
if (_tag == "dev")
|
||||||
|
{
|
||||||
|
nlPos = _string.find("\n", _pos);
|
||||||
|
m_dev += _string.substr(_pos,
|
||||||
|
nlPos == std::string::npos ?
|
||||||
|
_string.length() :
|
||||||
|
nlPos - _pos);
|
||||||
|
}
|
||||||
|
else if (_tag == "notice")
|
||||||
|
{
|
||||||
|
nlPos = _string.find("\n", _pos);
|
||||||
|
m_notice += _string.substr(_pos,
|
||||||
|
nlPos == std::string::npos ?
|
||||||
|
_string.length() :
|
||||||
|
nlPos - _pos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//TODO: Some form of warning
|
||||||
|
}
|
||||||
|
|
||||||
|
return nlPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
void InterfaceHandler::parseDocString(std::string const& _string, size_t _startPos)
|
||||||
|
{
|
||||||
|
size_t pos2;
|
||||||
|
size_t pos1 = _string.find("@", _startPos);
|
||||||
|
|
||||||
|
if (pos1 == std::string::npos)
|
||||||
|
return; // no doxytags found
|
||||||
|
|
||||||
|
pos2 = _string.find(" ", pos1);
|
||||||
|
if (pos2 == std::string::npos)
|
||||||
|
return; //no end of tag found
|
||||||
|
|
||||||
|
size_t newPos = parseDocTag(_string, _string.substr(pos1 + 1, pos2 - pos1), pos2);
|
||||||
|
parseDocString(_string, newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
} //solidity NS
|
} //solidity NS
|
||||||
|
@ -67,7 +67,14 @@ public:
|
|||||||
std::unique_ptr<std::string> getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef);
|
std::unique_ptr<std::string> getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void parseDocString(std::string const& _string, size_t _startPos = 0);
|
||||||
|
size_t parseDocTag(std::string const& _string, std::string const& _tag, size_t _pos);
|
||||||
|
|
||||||
Json::StyledWriter m_writer;
|
Json::StyledWriter m_writer;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
std::string m_notice;
|
||||||
|
std::string m_dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
} //solidity NS
|
} //solidity NS
|
||||||
|
Loading…
Reference in New Issue
Block a user