aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-09-13 15:43:47 +0800
committerGitHub <noreply@github.com>2018-09-13 15:43:47 +0800
commit15c8c0d2cf92ef50c5bd9eac8c561463e131ff3a (patch)
tree6a58a384b8a3600a5186a303f93405fa27a26000
parent9214c7c34f5e4501a50cb29de964bbf04131f9a3 (diff)
parent558a4ac49c40761697580e0915490714c4370767 (diff)
downloaddexon-solidity-15c8c0d2cf92ef50c5bd9eac8c561463e131ff3a.tar.gz
dexon-solidity-15c8c0d2cf92ef50c5bd9eac8c561463e131ff3a.tar.zst
dexon-solidity-15c8c0d2cf92ef50c5bd9eac8c561463e131ff3a.zip
Merge pull request #4941 from liangdzou/properly_truncate_referenced_src
Properly truncate referenced src
-rw-r--r--libsolidity/interface/SourceReferenceFormatter.cpp10
-rw-r--r--test/cmdlineErrorReports/too_long_line.sol4
-rw-r--r--test/cmdlineErrorReports/too_long_line.sol.ref7
-rw-r--r--test/cmdlineErrorReports/too_long_line_both_sides_short.sol5
-rw-r--r--test/cmdlineErrorReports/too_long_line_both_sides_short.sol.ref7
-rw-r--r--test/cmdlineErrorReports/too_long_line_edge_in.sol4
-rw-r--r--test/cmdlineErrorReports/too_long_line_edge_in.sol.ref7
-rw-r--r--test/cmdlineErrorReports/too_long_line_edge_out.sol4
-rw-r--r--test/cmdlineErrorReports/too_long_line_edge_out.sol.ref7
-rw-r--r--test/cmdlineErrorReports/too_long_line_left_short.sol4
-rw-r--r--test/cmdlineErrorReports/too_long_line_left_short.sol.ref7
-rw-r--r--test/cmdlineErrorReports/too_long_line_right_short.sol5
-rw-r--r--test/cmdlineErrorReports/too_long_line_right_short.sol.ref7
-rwxr-xr-xtest/cmdlineTests.sh16
14 files changed, 90 insertions, 4 deletions
diff --git a/libsolidity/interface/SourceReferenceFormatter.cpp b/libsolidity/interface/SourceReferenceFormatter.cpp
index 0f014372..4724fc7f 100644
--- a/libsolidity/interface/SourceReferenceFormatter.cpp
+++ b/libsolidity/interface/SourceReferenceFormatter.cpp
@@ -55,8 +55,14 @@ void SourceReferenceFormatter::printSourceLocation(SourceLocation const* _locati
}
if (line.length() > 150)
{
- line = " ... " + line.substr(startColumn, locationLength) + " ... ";
- startColumn = 5;
+ int len = line.length();
+ 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;
}
diff --git a/test/cmdlineErrorReports/too_long_line.sol b/test/cmdlineErrorReports/too_long_line.sol
new file mode 100644
index 00000000..7df1057a
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line.sol
@@ -0,0 +1,4 @@
+contract C {
+ function ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(announcementType Type, string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line.sol.ref b/test/cmdlineErrorReports/too_long_line.sol.ref
new file mode 100644
index 00000000..7cad93ee
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line.sol.ref
@@ -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 ...
+ ^--------------^
diff --git a/test/cmdlineErrorReports/too_long_line_both_sides_short.sol b/test/cmdlineErrorReports/too_long_line_both_sides_short.sol
new file mode 100644
index 00000000..062f0292
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_both_sides_short.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f(announcementTypeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Type,
+ string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line_both_sides_short.sol.ref b/test/cmdlineErrorReports/too_long_line_both_sides_short.sol.ref
new file mode 100644
index 00000000..f2ea427a
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_both_sides_short.sol.ref
@@ -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,
+ ^-------------------------------------------------------------------------^
diff --git a/test/cmdlineErrorReports/too_long_line_edge_in.sol b/test/cmdlineErrorReports/too_long_line_edge_in.sol
new file mode 100644
index 00000000..6f181c83
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_edge_in.sol
@@ -0,0 +1,4 @@
+contract C {
+ function ffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ty, string A) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line_edge_in.sol.ref b/test/cmdlineErrorReports/too_long_line_edge_in.sol.ref
new file mode 100644
index 00000000..b6699933
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_edge_in.sol.ref
@@ -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 {
+ ^----------------------------------------------------------------------------------------------^
diff --git a/test/cmdlineErrorReports/too_long_line_edge_out.sol b/test/cmdlineErrorReports/too_long_line_edge_out.sol
new file mode 100644
index 00000000..29d3cee6
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_edge_out.sol
@@ -0,0 +1,4 @@
+contract C {
+ function fffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Typ, string A) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line_edge_out.sol.ref b/test/cmdlineErrorReports/too_long_line_edge_out.sol.ref
new file mode 100644
index 00000000..76df589a
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_edge_out.sol.ref
@@ -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 ...
+ ^----------------------------------------------------------------------------------------------^
diff --git a/test/cmdlineErrorReports/too_long_line_left_short.sol b/test/cmdlineErrorReports/too_long_line_left_short.sol
new file mode 100644
index 00000000..2accfcce
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_left_short.sol
@@ -0,0 +1,4 @@
+contract C {
+ function f(announcementType Type, string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line_left_short.sol.ref b/test/cmdlineErrorReports/too_long_line_left_short.sol.ref
new file mode 100644
index 00000000..efaa559d
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_left_short.sol.ref
@@ -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 ...
+ ^--------------^
diff --git a/test/cmdlineErrorReports/too_long_line_right_short.sol b/test/cmdlineErrorReports/too_long_line_right_short.sol
new file mode 100644
index 00000000..936b3961
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_right_short.sol
@@ -0,0 +1,5 @@
+contract C {
+ function ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(announcementType Type,
+ string Announcement, string Link, bool Oppositable, string _str, uint256 _uint, address _addr) onlyOwner external {
+}
+}
diff --git a/test/cmdlineErrorReports/too_long_line_right_short.sol.ref b/test/cmdlineErrorReports/too_long_line_right_short.sol.ref
new file mode 100644
index 00000000..2b0c6d8c
--- /dev/null
+++ b/test/cmdlineErrorReports/too_long_line_right_short.sol.ref
@@ -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,
+ ^--------------^
diff --git a/test/cmdlineTests.sh b/test/cmdlineTests.sh
index 6f8a8ac1..f7577cb3 100755
--- a/test/cmdlineTests.sh
+++ b/test/cmdlineTests.sh
@@ -117,6 +117,8 @@ test_solc_file_input_failures() {
exitCode=$?
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
printError "Incorrect exit code. Expected failure (non-zero) but got success (0)."
rm -f $stdout_path $stderr_path
@@ -133,12 +135,12 @@ test_solc_file_input_failures() {
exit 1
fi
- if [[ "$(cat $stderr_path)" != "${stderr_expected}" ]]; then
+ if [[ "$stderr" != "${stderr_expected}" ]]; then
printError "Incorrect output on stderr received. Expected:"
echo -e "${stderr_expected}"
printError "But got:"
- cat $stderr_path
+ echo $stderr
rm -f $stdout_path $stderr_path
exit 1
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}" "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..."
(
cd "$REPO_ROOT"/test/compilationTests/