aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-08-15 20:22:50 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-09-14 22:58:04 +0800
commit5b5367dc1237634886a8ccf1029d95b83a0d8e63 (patch)
tree517f18eb028060f64efd424a8b0560e07e14f3c6
parent1c85ba10e13879f680579031234c911099433596 (diff)
downloaddexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar.gz
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar.bz2
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar.lz
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar.xz
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.tar.zst
dexon-solidity-5b5367dc1237634886a8ccf1029d95b83a0d8e63.zip
Warn if no visibility is specified on contract functions.
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/analysis/SyntaxChecker.cpp14
-rw-r--r--libsolidity/analysis/SyntaxChecker.h1
-rw-r--r--libsolidity/ast/AST.h1
4 files changed, 16 insertions, 1 deletions
diff --git a/Changelog.md b/Changelog.md
index d0d4d8df..cbecb3cd 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -4,6 +4,7 @@ Features:
* Support ``pragma experimental v0.5.0;`` to turn on upcoming breaking changes.
* Code Generator: Added ``.selector`` member on external function types to retrieve their signature.
* Optimizer: Add new optimization step to remove unused ``JUMPDEST``s.
+ * Syntax Checker: Warn if no visibility is specified on contract functions.
* Type Checker: Display helpful warning for unused function arguments/return parameters.
* Type Checker: Do not show the same error multiple times for events.
* Type Checker: Greatly reduce the number of duplicate errors shown for duplicate constructors and functions.
diff --git a/libsolidity/analysis/SyntaxChecker.cpp b/libsolidity/analysis/SyntaxChecker.cpp
index d2571cd3..187eb26f 100644
--- a/libsolidity/analysis/SyntaxChecker.cpp
+++ b/libsolidity/analysis/SyntaxChecker.cpp
@@ -138,7 +138,7 @@ bool SyntaxChecker::visit(WhileStatement const&)
return true;
}
-void SyntaxChecker::endVisit(WhileStatement const& )
+void SyntaxChecker::endVisit(WhileStatement const&)
{
m_inLoopDepth--;
}
@@ -193,6 +193,18 @@ bool SyntaxChecker::visit(PlaceholderStatement const&)
return true;
}
+bool SyntaxChecker::visit(FunctionDefinition const& _function)
+{
+ if (_function.noVisibilitySpecified())
+ m_errorReporter.warning(
+ _function.location(),
+ "No visibility specified. Defaulting to \"" +
+ Declaration::visibilityToString(_function.visibility()) +
+ "\"."
+ );
+ return true;
+}
+
bool SyntaxChecker::visit(FunctionTypeName const& _node)
{
for (auto const& decl: _node.parameterTypeList()->parameters())
diff --git a/libsolidity/analysis/SyntaxChecker.h b/libsolidity/analysis/SyntaxChecker.h
index fa34bab3..7fffbec0 100644
--- a/libsolidity/analysis/SyntaxChecker.h
+++ b/libsolidity/analysis/SyntaxChecker.h
@@ -66,6 +66,7 @@ private:
virtual bool visit(PlaceholderStatement const& _placeholderStatement) override;
+ virtual bool visit(FunctionDefinition const& _function) override;
virtual bool visit(FunctionTypeName const& _node) override;
ErrorReporter& m_errorReporter;
diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h
index cecc2f04..75b8e946 100644
--- a/libsolidity/ast/AST.h
+++ b/libsolidity/ast/AST.h
@@ -180,6 +180,7 @@ public:
/// @returns the declared name.
ASTString const& name() const { return *m_name; }
+ bool noVisibilitySpecified() const { return m_visibility == Visibility::Default; }
Visibility visibility() const { return m_visibility == Visibility::Default ? defaultVisibility() : m_visibility; }
bool isPublic() const { return visibility() >= Visibility::Public; }
virtual bool isVisibleInContract() const { return visibility() != Visibility::External; }