mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #3342 from ethereum/jsonio-sourcelocation
Populate the sourceLocation field properly in standard JSON on errors
This commit is contained in:
commit
55752db956
@ -6,6 +6,7 @@ Features:
|
|||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Parser: Disallow event declarations with no parameter list.
|
* Parser: Disallow event declarations with no parameter list.
|
||||||
|
* Standard JSON: Populate the ``sourceLocation`` field in the error list.
|
||||||
* Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters
|
* Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters
|
||||||
(instead of an internal compiler error).
|
(instead of an internal compiler error).
|
||||||
|
|
||||||
|
@ -81,15 +81,15 @@ Json::Value formatErrorWithException(
|
|||||||
else
|
else
|
||||||
message = _message;
|
message = _message;
|
||||||
|
|
||||||
|
Json::Value sourceLocation;
|
||||||
if (location && location->sourceName)
|
if (location && location->sourceName)
|
||||||
{
|
{
|
||||||
Json::Value sourceLocation = Json::objectValue;
|
|
||||||
sourceLocation["file"] = *location->sourceName;
|
sourceLocation["file"] = *location->sourceName;
|
||||||
sourceLocation["start"] = location->start;
|
sourceLocation["start"] = location->start;
|
||||||
sourceLocation["end"] = location->end;
|
sourceLocation["end"] = location->end;
|
||||||
}
|
}
|
||||||
|
|
||||||
return formatError(_warning, _type, _component, message, formattedMessage, location);
|
return formatError(_warning, _type, _component, message, formattedMessage, sourceLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
set<string> requestedContractNames(Json::Value const& _outputSelection)
|
set<string> requestedContractNames(Json::Value const& _outputSelection)
|
||||||
|
@ -234,6 +234,46 @@ BOOST_AUTO_TEST_CASE(basic_compilation)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(compilation_error)
|
||||||
|
{
|
||||||
|
char const* input = R"(
|
||||||
|
{
|
||||||
|
"language": "Solidity",
|
||||||
|
"settings": {
|
||||||
|
"outputSelection": {
|
||||||
|
"fileA": {
|
||||||
|
"A": [
|
||||||
|
"abi"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"fileA": {
|
||||||
|
"content": "contract A { function }"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
Json::Value result = compile(input);
|
||||||
|
BOOST_CHECK(result.isMember("errors"));
|
||||||
|
BOOST_CHECK(result["errors"].size() >= 1);
|
||||||
|
for (auto const& error: result["errors"])
|
||||||
|
{
|
||||||
|
BOOST_REQUIRE(error.isObject());
|
||||||
|
BOOST_REQUIRE(error["message"].isString());
|
||||||
|
if (error["message"].asString().find("pre-release compiler") == string::npos)
|
||||||
|
{
|
||||||
|
BOOST_CHECK_EQUAL(
|
||||||
|
dev::jsonCompactPrint(error),
|
||||||
|
"{\"component\":\"general\",\"formattedMessage\":\"fileA:1:23: ParserError: Expected identifier, got 'RBrace'\\n"
|
||||||
|
"contract A { function }\\n ^\\n\",\"message\":\"Expected identifier, got 'RBrace'\","
|
||||||
|
"\"severity\":\"error\",\"sourceLocation\":{\"end\":22,\"file\":\"fileA\",\"start\":22},\"type\":\"ParserError\"}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(output_selection_explicit)
|
BOOST_AUTO_TEST_CASE(output_selection_explicit)
|
||||||
{
|
{
|
||||||
char const* input = R"(
|
char const* input = R"(
|
||||||
|
Loading…
Reference in New Issue
Block a user