mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Exporting Natspec documentation to a JSON interface
- Adding a getDocumentation() function to solidity compiler stack so that we can obtain the natspec interface for a contract - Adding libjsoncpp as a dependency of libsolidity. This is done in a dirty way, using libjsonrpc-cpp s an intermediate dependency for the moment. Will fix soon. - Start of a test file for Natspec exporting to JSON
This commit is contained in:
parent
3fc2708d65
commit
43d6726dd7
2
AST.h
2
AST.h
@ -199,7 +199,7 @@ public:
|
||||
Block& getBody() { return *m_body; }
|
||||
/// @return A shared pointer of an ASTString.
|
||||
/// Can contain a nullptr in which case indicates absence of documentation
|
||||
ASTPointer<ASTString> const& getDocumentation() { return m_documentation; }
|
||||
ASTPointer<ASTString> const& getDocumentation() const { return m_documentation; }
|
||||
|
||||
void addLocalVariable(VariableDeclaration const& _localVariable) { m_localVariables.push_back(&_localVariable); }
|
||||
std::vector<VariableDeclaration const*> const& getLocalVariables() const { return m_localVariables; }
|
||||
|
@ -16,6 +16,10 @@ endif()
|
||||
include_directories(..)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} evmcore devcore)
|
||||
# TODO: Temporary until PR 532 https://github.com/ethereum/cpp-ethereum/pull/532
|
||||
# gets accepted. Then we can simply add jsoncpp as a dependency and not the
|
||||
# whole of JSONRPC as we are doing right here
|
||||
target_link_libraries(${EXECUTABLE} ${JSONRPC_LS})
|
||||
|
||||
install( TARGETS ${EXECUTABLE} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
|
||||
install( FILES ${HEADERS} DESTINATION include/${EXECUTABLE} )
|
||||
|
@ -28,6 +28,8 @@
|
||||
#include <libsolidity/Compiler.h>
|
||||
#include <libsolidity/CompilerStack.h>
|
||||
|
||||
#include <jsonrpc/json/json.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace dev
|
||||
@ -125,6 +127,30 @@ string const& CompilerStack::getInterface()
|
||||
return m_interface;
|
||||
}
|
||||
|
||||
string const& CompilerStack::getDocumentation()
|
||||
{
|
||||
|
||||
Json::StyledWriter writer;
|
||||
if (!m_parseSuccessful)
|
||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
|
||||
if (m_documentation.empty())
|
||||
{
|
||||
Json::Value doc;
|
||||
Json::Value methods;
|
||||
|
||||
vector<FunctionDefinition const*> exportedFunctions = m_contractASTNode->getInterfaceFunctions();
|
||||
for (FunctionDefinition const* f: exportedFunctions)
|
||||
{
|
||||
Json::Value user;
|
||||
user["user"] = Json::Value(*f->getDocumentation());
|
||||
methods[f->getName()] = user;
|
||||
}
|
||||
doc["methods"] = methods;
|
||||
m_documentation = writer.write(doc);
|
||||
}
|
||||
return m_documentation;
|
||||
}
|
||||
|
||||
bytes CompilerStack::staticCompile(std::string const& _sourceCode, bool _optimize)
|
||||
{
|
||||
CompilerStack stack;
|
||||
|
@ -62,6 +62,9 @@ public:
|
||||
/// Returns a string representing the contract interface in JSON.
|
||||
/// Prerequisite: Successful call to parse or compile.
|
||||
std::string const& getInterface();
|
||||
/// Returns a string representing the contract documentation in JSON.
|
||||
/// Prerequisite: Successful call to parse or compile.
|
||||
std::string const& getDocumentation();
|
||||
|
||||
/// Returns the previously used scanner, useful for counting lines during error reporting.
|
||||
Scanner const& getScanner() const { return *m_scanner; }
|
||||
@ -77,6 +80,7 @@ private:
|
||||
std::shared_ptr<ContractDefinition> m_contractASTNode;
|
||||
bool m_parseSuccessful;
|
||||
std::string m_interface;
|
||||
std::string m_documentation;
|
||||
std::shared_ptr<Compiler> m_compiler;
|
||||
bytes m_bytecode;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user