mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Adds JSON import / export for structured documentation.
This commit is contained in:
parent
ec27c2e507
commit
4a179056ed
@ -268,7 +268,7 @@ bool ASTJsonConverter::visit(ContractDefinition const& _node)
|
|||||||
{
|
{
|
||||||
setJsonNode(_node, "ContractDefinition", {
|
setJsonNode(_node, "ContractDefinition", {
|
||||||
make_pair("name", _node.name()),
|
make_pair("name", _node.name()),
|
||||||
make_pair("documentation", _node.documentation() ? Json::Value(*_node.documentation()) : Json::nullValue),
|
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
|
||||||
make_pair("contractKind", contractKind(_node.contractKind())),
|
make_pair("contractKind", contractKind(_node.contractKind())),
|
||||||
make_pair("abstract", _node.abstract()),
|
make_pair("abstract", _node.abstract()),
|
||||||
make_pair("fullyImplemented", _node.annotation().unimplementedFunctions.empty()),
|
make_pair("fullyImplemented", _node.annotation().unimplementedFunctions.empty()),
|
||||||
@ -349,7 +349,7 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node)
|
|||||||
{
|
{
|
||||||
std::vector<pair<string, Json::Value>> attributes = {
|
std::vector<pair<string, Json::Value>> attributes = {
|
||||||
make_pair("name", _node.name()),
|
make_pair("name", _node.name()),
|
||||||
make_pair("documentation", _node.documentation() ? Json::Value(*_node.documentation()) : Json::nullValue),
|
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
|
||||||
make_pair("kind", TokenTraits::toString(_node.kind())),
|
make_pair("kind", TokenTraits::toString(_node.kind())),
|
||||||
make_pair("stateMutability", stateMutabilityToString(_node.stateMutability())),
|
make_pair("stateMutability", stateMutabilityToString(_node.stateMutability())),
|
||||||
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
|
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
|
||||||
@ -400,7 +400,7 @@ bool ASTJsonConverter::visit(ModifierDefinition const& _node)
|
|||||||
{
|
{
|
||||||
std::vector<pair<string, Json::Value>> attributes = {
|
std::vector<pair<string, Json::Value>> attributes = {
|
||||||
make_pair("name", _node.name()),
|
make_pair("name", _node.name()),
|
||||||
make_pair("documentation", _node.documentation() ? Json::Value(*_node.documentation()) : Json::nullValue),
|
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
|
||||||
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
|
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
|
||||||
make_pair("parameters", toJson(_node.parameterList())),
|
make_pair("parameters", toJson(_node.parameterList())),
|
||||||
make_pair("virtual", _node.markedVirtual()),
|
make_pair("virtual", _node.markedVirtual()),
|
||||||
@ -427,7 +427,7 @@ bool ASTJsonConverter::visit(EventDefinition const& _node)
|
|||||||
m_inEvent = true;
|
m_inEvent = true;
|
||||||
setJsonNode(_node, "EventDefinition", {
|
setJsonNode(_node, "EventDefinition", {
|
||||||
make_pair("name", _node.name()),
|
make_pair("name", _node.name()),
|
||||||
make_pair("documentation", _node.documentation() ? Json::Value(*_node.documentation()) : Json::nullValue),
|
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
|
||||||
make_pair("parameters", toJson(_node.parameterList())),
|
make_pair("parameters", toJson(_node.parameterList())),
|
||||||
make_pair("anonymous", _node.isAnonymous())
|
make_pair("anonymous", _node.isAnonymous())
|
||||||
});
|
});
|
||||||
@ -833,6 +833,17 @@ bool ASTJsonConverter::visit(Literal const& _node)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ASTJsonConverter::visit(StructuredDocumentation const& _node)
|
||||||
|
{
|
||||||
|
Json::Value text{*_node.text()};
|
||||||
|
std::vector<pair<string, Json::Value>> attributes = {
|
||||||
|
make_pair("text", text)
|
||||||
|
};
|
||||||
|
setJsonNode(_node, "StructuredDocumentation", std::move(attributes));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ASTJsonConverter::endVisit(EventDefinition const&)
|
void ASTJsonConverter::endVisit(EventDefinition const&)
|
||||||
{
|
{
|
||||||
|
@ -119,6 +119,7 @@ public:
|
|||||||
bool visit(Identifier const& _node) override;
|
bool visit(Identifier const& _node) override;
|
||||||
bool visit(ElementaryTypeNameExpression const& _node) override;
|
bool visit(ElementaryTypeNameExpression const& _node) override;
|
||||||
bool visit(Literal const& _node) override;
|
bool visit(Literal const& _node) override;
|
||||||
|
bool visit(StructuredDocumentation const& _node) override;
|
||||||
|
|
||||||
void endVisit(EventDefinition const&) override;
|
void endVisit(EventDefinition const&) override;
|
||||||
|
|
||||||
|
@ -208,6 +208,8 @@ ASTPointer<ASTNode> ASTJsonImporter::convertJsonToASTNode(Json::Value const& _js
|
|||||||
return createElementaryTypeNameExpression(_json);
|
return createElementaryTypeNameExpression(_json);
|
||||||
if (nodeType == "Literal")
|
if (nodeType == "Literal")
|
||||||
return createLiteral(_json);
|
return createLiteral(_json);
|
||||||
|
if (nodeType == "StructuredDocumentation")
|
||||||
|
return createDocumentation(_json);
|
||||||
else
|
else
|
||||||
astAssert(false, "Unknown type of ASTNode: " + nodeType);
|
astAssert(false, "Unknown type of ASTNode: " + nodeType);
|
||||||
}
|
}
|
||||||
@ -283,7 +285,7 @@ ASTPointer<ContractDefinition> ASTJsonImporter::createContractDefinition(Json::V
|
|||||||
return createASTNode<ContractDefinition>(
|
return createASTNode<ContractDefinition>(
|
||||||
_node,
|
_node,
|
||||||
make_shared<ASTString>(_node["name"].asString()),
|
make_shared<ASTString>(_node["name"].asString()),
|
||||||
nullOrASTString(_node, "documentation"),
|
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
|
||||||
baseContracts,
|
baseContracts,
|
||||||
subNodes,
|
subNodes,
|
||||||
contractKind(_node),
|
contractKind(_node),
|
||||||
@ -397,7 +399,7 @@ ASTPointer<FunctionDefinition> ASTJsonImporter::createFunctionDefinition(Json::V
|
|||||||
kind,
|
kind,
|
||||||
memberAsBool(_node, "virtual"),
|
memberAsBool(_node, "virtual"),
|
||||||
_node["overrides"].isNull() ? nullptr : createOverrideSpecifier(member(_node, "overrides")),
|
_node["overrides"].isNull() ? nullptr : createOverrideSpecifier(member(_node, "overrides")),
|
||||||
nullOrASTString(_node, "documentation"),
|
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
|
||||||
createParameterList(member(_node, "parameters")),
|
createParameterList(member(_node, "parameters")),
|
||||||
modifiers,
|
modifiers,
|
||||||
createParameterList(member(_node, "returnParameters")),
|
createParameterList(member(_node, "returnParameters")),
|
||||||
@ -428,7 +430,7 @@ ASTPointer<ModifierDefinition> ASTJsonImporter::createModifierDefinition(Json::V
|
|||||||
return createASTNode<ModifierDefinition>(
|
return createASTNode<ModifierDefinition>(
|
||||||
_node,
|
_node,
|
||||||
memberAsASTString(_node, "name"),
|
memberAsASTString(_node, "name"),
|
||||||
nullOrASTString(_node,"documentation"),
|
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
|
||||||
createParameterList(member(_node, "parameters")),
|
createParameterList(member(_node, "parameters")),
|
||||||
memberAsBool(_node, "virtual"),
|
memberAsBool(_node, "virtual"),
|
||||||
_node["overrides"].isNull() ? nullptr : createOverrideSpecifier(member(_node, "overrides")),
|
_node["overrides"].isNull() ? nullptr : createOverrideSpecifier(member(_node, "overrides")),
|
||||||
@ -453,7 +455,7 @@ ASTPointer<EventDefinition> ASTJsonImporter::createEventDefinition(Json::Value c
|
|||||||
return createASTNode<EventDefinition>(
|
return createASTNode<EventDefinition>(
|
||||||
_node,
|
_node,
|
||||||
memberAsASTString(_node, "name"),
|
memberAsASTString(_node, "name"),
|
||||||
nullOrASTString(_node, "documentation"),
|
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
|
||||||
createParameterList(member(_node, "parameters")),
|
createParameterList(member(_node, "parameters")),
|
||||||
memberAsBool(_node, "anonymous")
|
memberAsBool(_node, "anonymous")
|
||||||
);
|
);
|
||||||
@ -842,6 +844,18 @@ ASTPointer<ASTNode> ASTJsonImporter::createLiteral(Json::Value const& _node)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASTPointer<StructuredDocumentation> ASTJsonImporter::createDocumentation(Json::Value const& _node)
|
||||||
|
{
|
||||||
|
static string const textString = "text";
|
||||||
|
|
||||||
|
astAssert(member(_node, textString).isString(), "'text' must be a string");
|
||||||
|
|
||||||
|
return createASTNode<StructuredDocumentation>(
|
||||||
|
_node,
|
||||||
|
make_shared<ASTString>(_node[textString].asString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// ===== helper functions ==========
|
// ===== helper functions ==========
|
||||||
|
|
||||||
Json::Value ASTJsonImporter::member(Json::Value const& _node, string const& _name)
|
Json::Value ASTJsonImporter::member(Json::Value const& _node, string const& _name)
|
||||||
|
@ -119,6 +119,7 @@ private:
|
|||||||
ASTPointer<Identifier> createIdentifier(Json::Value const& _node);
|
ASTPointer<Identifier> createIdentifier(Json::Value const& _node);
|
||||||
ASTPointer<ElementaryTypeNameExpression> createElementaryTypeNameExpression(Json::Value const& _node);
|
ASTPointer<ElementaryTypeNameExpression> createElementaryTypeNameExpression(Json::Value const& _node);
|
||||||
ASTPointer<ASTNode> createLiteral(Json::Value const& _node);
|
ASTPointer<ASTNode> createLiteral(Json::Value const& _node);
|
||||||
|
ASTPointer<StructuredDocumentation> createDocumentation(Json::Value const& _node);
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
// =============== general helper functions ===================
|
// =============== general helper functions ===================
|
||||||
|
@ -4,10 +4,10 @@
|
|||||||
{
|
{
|
||||||
"C":
|
"C":
|
||||||
[
|
[
|
||||||
1
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"id": 2,
|
"id": 3,
|
||||||
"nodeType": "SourceUnit",
|
"nodeType": "SourceUnit",
|
||||||
"nodes":
|
"nodes":
|
||||||
[
|
[
|
||||||
@ -16,17 +16,23 @@
|
|||||||
"baseContracts": [],
|
"baseContracts": [],
|
||||||
"contractDependencies": [],
|
"contractDependencies": [],
|
||||||
"contractKind": "contract",
|
"contractKind": "contract",
|
||||||
"documentation": "This contract is empty",
|
"documentation":
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"nodeType": "StructuredDocumentation",
|
||||||
|
"src": "0:27:1",
|
||||||
|
"text": "This contract is empty"
|
||||||
|
},
|
||||||
"fullyImplemented": true,
|
"fullyImplemented": true,
|
||||||
"id": 1,
|
"id": 2,
|
||||||
"linearizedBaseContracts":
|
"linearizedBaseContracts":
|
||||||
[
|
[
|
||||||
1
|
2
|
||||||
],
|
],
|
||||||
"name": "C",
|
"name": "C",
|
||||||
"nodeType": "ContractDefinition",
|
"nodeType": "ContractDefinition",
|
||||||
"nodes": [],
|
"nodes": [],
|
||||||
"scope": 2,
|
"scope": 3,
|
||||||
"src": "28:13:1"
|
"src": "28:13:1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -38,10 +44,10 @@
|
|||||||
{
|
{
|
||||||
"C":
|
"C":
|
||||||
[
|
[
|
||||||
3
|
5
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"id": 4,
|
"id": 6,
|
||||||
"nodeType": "SourceUnit",
|
"nodeType": "SourceUnit",
|
||||||
"nodes":
|
"nodes":
|
||||||
[
|
[
|
||||||
@ -50,17 +56,23 @@
|
|||||||
"baseContracts": [],
|
"baseContracts": [],
|
||||||
"contractDependencies": [],
|
"contractDependencies": [],
|
||||||
"contractKind": "contract",
|
"contractKind": "contract",
|
||||||
"documentation": "This contract is empty\nand has a line-breaking comment.",
|
"documentation":
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"nodeType": "StructuredDocumentation",
|
||||||
|
"src": "0:61:2",
|
||||||
|
"text": "This contract is empty\nand has a line-breaking comment."
|
||||||
|
},
|
||||||
"fullyImplemented": true,
|
"fullyImplemented": true,
|
||||||
"id": 3,
|
"id": 5,
|
||||||
"linearizedBaseContracts":
|
"linearizedBaseContracts":
|
||||||
[
|
[
|
||||||
3
|
5
|
||||||
],
|
],
|
||||||
"name": "C",
|
"name": "C",
|
||||||
"nodeType": "ContractDefinition",
|
"nodeType": "ContractDefinition",
|
||||||
"nodes": [],
|
"nodes": [],
|
||||||
"scope": 4,
|
"scope": 6,
|
||||||
"src": "62:13:2"
|
"src": "62:13:2"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -72,10 +84,10 @@
|
|||||||
{
|
{
|
||||||
"C":
|
"C":
|
||||||
[
|
[
|
||||||
15
|
20
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"id": 16,
|
"id": 21,
|
||||||
"nodeType": "SourceUnit",
|
"nodeType": "SourceUnit",
|
||||||
"nodes":
|
"nodes":
|
||||||
[
|
[
|
||||||
@ -86,10 +98,10 @@
|
|||||||
"contractKind": "contract",
|
"contractKind": "contract",
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"fullyImplemented": true,
|
"fullyImplemented": true,
|
||||||
"id": 15,
|
"id": 20,
|
||||||
"linearizedBaseContracts":
|
"linearizedBaseContracts":
|
||||||
[
|
[
|
||||||
15
|
20
|
||||||
],
|
],
|
||||||
"name": "C",
|
"name": "C",
|
||||||
"nodeType": "ContractDefinition",
|
"nodeType": "ContractDefinition",
|
||||||
@ -97,13 +109,19 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"anonymous": false,
|
"anonymous": false,
|
||||||
"documentation": "Some comment on Evt.",
|
"documentation":
|
||||||
"id": 6,
|
{
|
||||||
|
"id": 7,
|
||||||
|
"nodeType": "StructuredDocumentation",
|
||||||
|
"src": "15:26:3",
|
||||||
|
"text": "Some comment on Evt."
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
"name": "Evt",
|
"name": "Evt",
|
||||||
"nodeType": "EventDefinition",
|
"nodeType": "EventDefinition",
|
||||||
"parameters":
|
"parameters":
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 8,
|
||||||
"nodeType": "ParameterList",
|
"nodeType": "ParameterList",
|
||||||
"parameters": [],
|
"parameters": [],
|
||||||
"src": "51:2:3"
|
"src": "51:2:3"
|
||||||
@ -113,26 +131,32 @@
|
|||||||
{
|
{
|
||||||
"body":
|
"body":
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 13,
|
||||||
"nodeType": "Block",
|
"nodeType": "Block",
|
||||||
"src": "99:6:3",
|
"src": "99:6:3",
|
||||||
"statements":
|
"statements":
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 12,
|
||||||
"nodeType": "PlaceholderStatement",
|
"nodeType": "PlaceholderStatement",
|
||||||
"src": "101:1:3"
|
"src": "101:1:3"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"documentation": "Some comment on mod.",
|
"documentation":
|
||||||
"id": 10,
|
{
|
||||||
|
"id": 10,
|
||||||
|
"nodeType": "StructuredDocumentation",
|
||||||
|
"src": "57:26:3",
|
||||||
|
"text": "Some comment on mod."
|
||||||
|
},
|
||||||
|
"id": 14,
|
||||||
"name": "mod",
|
"name": "mod",
|
||||||
"nodeType": "ModifierDefinition",
|
"nodeType": "ModifierDefinition",
|
||||||
"overrides": null,
|
"overrides": null,
|
||||||
"parameters":
|
"parameters":
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 11,
|
||||||
"nodeType": "ParameterList",
|
"nodeType": "ParameterList",
|
||||||
"parameters": [],
|
"parameters": [],
|
||||||
"src": "96:2:3"
|
"src": "96:2:3"
|
||||||
@ -144,14 +168,20 @@
|
|||||||
{
|
{
|
||||||
"body":
|
"body":
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 18,
|
||||||
"nodeType": "Block",
|
"nodeType": "Block",
|
||||||
"src": "155:2:3",
|
"src": "155:2:3",
|
||||||
"statements": []
|
"statements": []
|
||||||
},
|
},
|
||||||
"documentation": "Some comment on fn.",
|
"documentation":
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"nodeType": "StructuredDocumentation",
|
||||||
|
"src": "108:25:3",
|
||||||
|
"text": "Some comment on fn."
|
||||||
|
},
|
||||||
"functionSelector": "a4a2c40b",
|
"functionSelector": "a4a2c40b",
|
||||||
"id": 14,
|
"id": 19,
|
||||||
"implemented": true,
|
"implemented": true,
|
||||||
"kind": "function",
|
"kind": "function",
|
||||||
"modifiers": [],
|
"modifiers": [],
|
||||||
@ -160,26 +190,26 @@
|
|||||||
"overrides": null,
|
"overrides": null,
|
||||||
"parameters":
|
"parameters":
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 16,
|
||||||
"nodeType": "ParameterList",
|
"nodeType": "ParameterList",
|
||||||
"parameters": [],
|
"parameters": [],
|
||||||
"src": "145:2:3"
|
"src": "145:2:3"
|
||||||
},
|
},
|
||||||
"returnParameters":
|
"returnParameters":
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 17,
|
||||||
"nodeType": "ParameterList",
|
"nodeType": "ParameterList",
|
||||||
"parameters": [],
|
"parameters": [],
|
||||||
"src": "155:0:3"
|
"src": "155:0:3"
|
||||||
},
|
},
|
||||||
"scope": 15,
|
"scope": 20,
|
||||||
"src": "134:23:3",
|
"src": "134:23:3",
|
||||||
"stateMutability": "nonpayable",
|
"stateMutability": "nonpayable",
|
||||||
"virtual": false,
|
"virtual": false,
|
||||||
"visibility": "public"
|
"visibility": "public"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"scope": 16,
|
"scope": 21,
|
||||||
"src": "0:159:3"
|
"src": "0:159:3"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
{
|
{
|
||||||
"C":
|
"C":
|
||||||
[
|
[
|
||||||
15
|
20
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -29,10 +29,10 @@
|
|||||||
"fullyImplemented": true,
|
"fullyImplemented": true,
|
||||||
"linearizedBaseContracts":
|
"linearizedBaseContracts":
|
||||||
[
|
[
|
||||||
15
|
20
|
||||||
],
|
],
|
||||||
"name": "C",
|
"name": "C",
|
||||||
"scope": 16
|
"scope": 21
|
||||||
},
|
},
|
||||||
"children":
|
"children":
|
||||||
[
|
[
|
||||||
@ -40,11 +40,19 @@
|
|||||||
"attributes":
|
"attributes":
|
||||||
{
|
{
|
||||||
"anonymous": false,
|
"anonymous": false,
|
||||||
"documentation": "Some comment on Evt.",
|
|
||||||
"name": "Evt"
|
"name": "Evt"
|
||||||
},
|
},
|
||||||
"children":
|
"children":
|
||||||
[
|
[
|
||||||
|
{
|
||||||
|
"attributes":
|
||||||
|
{
|
||||||
|
"text": "Some comment on Evt."
|
||||||
|
},
|
||||||
|
"id": 7,
|
||||||
|
"name": "StructuredDocumentation",
|
||||||
|
"src": "15:26:3"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"attributes":
|
"attributes":
|
||||||
{
|
{
|
||||||
@ -54,19 +62,18 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"children": [],
|
"children": [],
|
||||||
"id": 5,
|
"id": 8,
|
||||||
"name": "ParameterList",
|
"name": "ParameterList",
|
||||||
"src": "51:2:3"
|
"src": "51:2:3"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 6,
|
"id": 9,
|
||||||
"name": "EventDefinition",
|
"name": "EventDefinition",
|
||||||
"src": "42:12:3"
|
"src": "42:12:3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"attributes":
|
"attributes":
|
||||||
{
|
{
|
||||||
"documentation": "Some comment on mod.",
|
|
||||||
"name": "mod",
|
"name": "mod",
|
||||||
"overrides": null,
|
"overrides": null,
|
||||||
"virtual": false,
|
"virtual": false,
|
||||||
@ -77,55 +84,12 @@
|
|||||||
{
|
{
|
||||||
"attributes":
|
"attributes":
|
||||||
{
|
{
|
||||||
"parameters":
|
"text": "Some comment on mod."
|
||||||
[
|
|
||||||
null
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"children": [],
|
"id": 10,
|
||||||
"id": 7,
|
"name": "StructuredDocumentation",
|
||||||
"name": "ParameterList",
|
"src": "57:26:3"
|
||||||
"src": "96:2:3"
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"children":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"name": "PlaceholderStatement",
|
|
||||||
"src": "101:1:3"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": 9,
|
|
||||||
"name": "Block",
|
|
||||||
"src": "99:6:3"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": 10,
|
|
||||||
"name": "ModifierDefinition",
|
|
||||||
"src": "84:21:3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":
|
|
||||||
{
|
|
||||||
"documentation": "Some comment on fn.",
|
|
||||||
"functionSelector": "a4a2c40b",
|
|
||||||
"implemented": true,
|
|
||||||
"isConstructor": false,
|
|
||||||
"kind": "function",
|
|
||||||
"modifiers":
|
|
||||||
[
|
|
||||||
null
|
|
||||||
],
|
|
||||||
"name": "fn",
|
|
||||||
"overrides": null,
|
|
||||||
"scope": 15,
|
|
||||||
"stateMutability": "nonpayable",
|
|
||||||
"virtual": false,
|
|
||||||
"visibility": "public"
|
|
||||||
},
|
|
||||||
"children":
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
"attributes":
|
"attributes":
|
||||||
{
|
{
|
||||||
@ -137,6 +101,66 @@
|
|||||||
"children": [],
|
"children": [],
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"name": "ParameterList",
|
"name": "ParameterList",
|
||||||
|
"src": "96:2:3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"name": "PlaceholderStatement",
|
||||||
|
"src": "101:1:3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 13,
|
||||||
|
"name": "Block",
|
||||||
|
"src": "99:6:3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 14,
|
||||||
|
"name": "ModifierDefinition",
|
||||||
|
"src": "84:21:3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"attributes":
|
||||||
|
{
|
||||||
|
"functionSelector": "a4a2c40b",
|
||||||
|
"implemented": true,
|
||||||
|
"isConstructor": false,
|
||||||
|
"kind": "function",
|
||||||
|
"modifiers":
|
||||||
|
[
|
||||||
|
null
|
||||||
|
],
|
||||||
|
"name": "fn",
|
||||||
|
"overrides": null,
|
||||||
|
"scope": 20,
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"virtual": false,
|
||||||
|
"visibility": "public"
|
||||||
|
},
|
||||||
|
"children":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"attributes":
|
||||||
|
{
|
||||||
|
"text": "Some comment on fn."
|
||||||
|
},
|
||||||
|
"id": 15,
|
||||||
|
"name": "StructuredDocumentation",
|
||||||
|
"src": "108:25:3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"attributes":
|
||||||
|
{
|
||||||
|
"parameters":
|
||||||
|
[
|
||||||
|
null
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": [],
|
||||||
|
"id": 16,
|
||||||
|
"name": "ParameterList",
|
||||||
"src": "145:2:3"
|
"src": "145:2:3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -148,7 +172,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"children": [],
|
"children": [],
|
||||||
"id": 12,
|
"id": 17,
|
||||||
"name": "ParameterList",
|
"name": "ParameterList",
|
||||||
"src": "155:0:3"
|
"src": "155:0:3"
|
||||||
},
|
},
|
||||||
@ -161,22 +185,22 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"children": [],
|
"children": [],
|
||||||
"id": 13,
|
"id": 18,
|
||||||
"name": "Block",
|
"name": "Block",
|
||||||
"src": "155:2:3"
|
"src": "155:2:3"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 14,
|
"id": 19,
|
||||||
"name": "FunctionDefinition",
|
"name": "FunctionDefinition",
|
||||||
"src": "134:23:3"
|
"src": "134:23:3"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 15,
|
"id": 20,
|
||||||
"name": "ContractDefinition",
|
"name": "ContractDefinition",
|
||||||
"src": "0:159:3"
|
"src": "0:159:3"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 16,
|
"id": 21,
|
||||||
"name": "SourceUnit",
|
"name": "SourceUnit",
|
||||||
"src": "0:160:3"
|
"src": "0:160:3"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user