give more information (at most 35 chars before and after) for too long lines

add tests for giving more informations for too long lines

add edge tests for giving more informations for too long lines

avoid printing out tailing white space

update test case after avoiding printing out trailing whitespace

update test case for removing the pre-release warning from reference

refactor the code to if-else flavor

rename folder to cmdlineErrorReports under test

rename folder to cmdlineErrorReports under test

ignore whitespace for reference files

avoiding to modify the file stderr_path by call sed without -i option

print ' ...' instead of ' ... ' at the end of a line
This commit is contained in:
liangdzou 2018-09-11 03:22:13 +08:00
parent 9214c7c34f
commit 558a4ac49c
14 changed files with 90 additions and 4 deletions

View File

@ -55,8 +55,14 @@ void SourceReferenceFormatter::printSourceLocation(SourceLocation const* _locati
} }
if (line.length() > 150) if (line.length() > 150)
{ {
line = " ... " + line.substr(startColumn, locationLength) + " ... "; int len = line.length();
startColumn = 5; line = line.substr(max(0, startColumn - 35), min(startColumn, 35) + min(locationLength + 35, len - startColumn));
if (startColumn + locationLength + 35 < len)
line += " ...";
if (startColumn > 35) {
line = " ... " + line;
startColumn = 40;
}
endColumn = startColumn + locationLength; endColumn = startColumn + locationLength;
} }

View File

@ -0,0 +1,4 @@
contract C {
function ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(announcementType Type, string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line.sol:2:164: Error: Identifier not found or not unique.
... ffffffffffffffffffffffffffffffffff(announcementType Type, string Announcement, string ...
^--------------^

View File

@ -0,0 +1,5 @@
contract C {
function f(announcementTypeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Type,
string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line_both_sides_short.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line_both_sides_short.sol:2:15: Error: Identifier not found or not unique.
function f(announcementTypeXXXXXXXXXXXXXXXXXXX ... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Type,
^-------------------------------------------------------------------------^

View File

@ -0,0 +1,4 @@
contract C {
function ffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ty, string A) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line_edge_in.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line_edge_in.sol:2:36: Error: Identifier not found or not unique.
function ffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ty, string A) onlyOwner external {
^----------------------------------------------------------------------------------------------^

View File

@ -0,0 +1,4 @@
contract C {
function fffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Typ, string A) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line_edge_out.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line_edge_out.sol:2:37: Error: Identifier not found or not unique.
... function fffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Typ, string A) onlyOwner external ...
^----------------------------------------------------------------------------------------------^

View File

@ -0,0 +1,4 @@
contract C {
function f(announcementType Type, string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line_left_short.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line_left_short.sol:2:15: Error: Identifier not found or not unique.
function f(announcementType Type, string Announcement, string ...
^--------------^

View File

@ -0,0 +1,5 @@
contract C {
function ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(announcementType Type,
string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
}
}

View File

@ -0,0 +1,7 @@
too_long_line_right_short.sol:1:1: Warning: Source file does not specify required compiler version!
contract C {
^ (Relevant source part starts here and spans across multiple lines).
too_long_line_right_short.sol:2:164: Error: Identifier not found or not unique.
... ffffffffffffffffffffffffffffffffff(announcementType Type,
^--------------^

View File

@ -117,6 +117,8 @@ test_solc_file_input_failures() {
exitCode=$? exitCode=$?
set -e set -e
stderr=`sed 's/.*This is a pre-release compiler version, please do not use it in production.*$//' $stderr_path`
if [[ $exitCode -eq 0 ]]; then if [[ $exitCode -eq 0 ]]; then
printError "Incorrect exit code. Expected failure (non-zero) but got success (0)." printError "Incorrect exit code. Expected failure (non-zero) but got success (0)."
rm -f $stdout_path $stderr_path rm -f $stdout_path $stderr_path
@ -133,12 +135,12 @@ test_solc_file_input_failures() {
exit 1 exit 1
fi fi
if [[ "$(cat $stderr_path)" != "${stderr_expected}" ]]; then if [[ "$stderr" != "${stderr_expected}" ]]; then
printError "Incorrect output on stderr received. Expected:" printError "Incorrect output on stderr received. Expected:"
echo -e "${stderr_expected}" echo -e "${stderr_expected}"
printError "But got:" printError "But got:"
cat $stderr_path echo $stderr
rm -f $stdout_path $stderr_path rm -f $stdout_path $stderr_path
exit 1 exit 1
fi fi
@ -156,6 +158,16 @@ printTask "Testing passing empty remappings..."
test_solc_file_input_failures "${0}" "=/some/remapping/target" "" "Invalid remapping: \"=/some/remapping/target\"." test_solc_file_input_failures "${0}" "=/some/remapping/target" "" "Invalid remapping: \"=/some/remapping/target\"."
test_solc_file_input_failures "${0}" "ctx:=/some/remapping/target" "" "Invalid remapping: \"ctx:=/some/remapping/target\"." test_solc_file_input_failures "${0}" "ctx:=/some/remapping/target" "" "Invalid remapping: \"ctx:=/some/remapping/target\"."
printTask "Testing passing location printing..."
(
cd "$REPO_ROOT"/test/cmdlineErrorReports/
for file in *.sol
do
ret=`cat $file.ref`
test_solc_file_input_failures "$file" "" "" "$ret"
done
)
printTask "Compiling various other contracts and libraries..." printTask "Compiling various other contracts and libraries..."
( (
cd "$REPO_ROOT"/test/compilationTests/ cd "$REPO_ROOT"/test/compilationTests/