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,12 +5,14 @@ | |||||||
| namespace dev { | namespace dev { | ||||||
| namespace solidity { | namespace solidity { | ||||||
| 
 | 
 | ||||||
|  | /* -- public -- */ | ||||||
|  | 
 | ||||||
| InterfaceHandler::InterfaceHandler() | InterfaceHandler::InterfaceHandler() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::unique_ptr<std::string> InterfaceHandler::getDocumentation(std::shared_ptr<ContractDefinition> _contractDef, | std::unique_ptr<std::string> InterfaceHandler::getDocumentation(std::shared_ptr<ContractDefinition> _contractDef, | ||||||
| 												 enum documentation_type _type) | 																enum documentation_type _type) | ||||||
| { | { | ||||||
| 	switch(_type) | 	switch(_type) | ||||||
| 	{ | 	{ | ||||||
| @ -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
 | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ | |||||||
|  * Takes the parsed AST and produces the Natspec |  * Takes the parsed AST and produces the Natspec | ||||||
|  * documentation and the ABI interface |  * documentation and the ABI interface | ||||||
|  * https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format
 |  * https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format
 | ||||||
|  *  |  * | ||||||
|  * Can generally deal with JSON files |  * Can generally deal with JSON files | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @ -44,7 +44,7 @@ public: | |||||||
| 
 | 
 | ||||||
| 	/// Get the given type of documentation
 | 	/// Get the given type of documentation
 | ||||||
| 	/// @param _contractDef The contract definition
 | 	/// @param _contractDef The contract definition
 | ||||||
| 	/// @param _type        The type of the documentation. Can be one of the 
 | 	/// @param _type        The type of the documentation. Can be one of the
 | ||||||
| 	///                     types provided by @c documentation_type
 | 	///                     types provided by @c documentation_type
 | ||||||
| 	/// @return             A unique pointer contained string with the json
 | 	/// @return             A unique pointer contained string with the json
 | ||||||
| 	///                     representation of provided type
 | 	///                     representation of provided type
 | ||||||
| @ -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