aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/analysis/DeclarationContainer.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-02-13 23:48:21 +0800
committerGitHub <noreply@github.com>2018-02-13 23:48:21 +0800
commitf84b2c451425a5913ef3decc18cf56ef95988d83 (patch)
tree553e77484feb69103ad8fc05e6b421390872d9a9 /libsolidity/analysis/DeclarationContainer.cpp
parent8f8ad3840eecd7b22565e0c36eb55ceca5d5b57a (diff)
parent1dcd7c5e0b249511dca34dff0507b432db3bf7d1 (diff)
downloaddexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar.gz
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar.bz2
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar.lz
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar.xz
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.tar.zst
dexon-solidity-f84b2c451425a5913ef3decc18cf56ef95988d83.zip
Merge pull request #3147 from Balajiganapathi/alternative_scope
Suggest alternatives when identifier not found. Closes #3058.
Diffstat (limited to 'libsolidity/analysis/DeclarationContainer.cpp')
-rw-r--r--libsolidity/analysis/DeclarationContainer.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/libsolidity/analysis/DeclarationContainer.cpp b/libsolidity/analysis/DeclarationContainer.cpp
index b33c8568..7508ad9e 100644
--- a/libsolidity/analysis/DeclarationContainer.cpp
+++ b/libsolidity/analysis/DeclarationContainer.cpp
@@ -23,6 +23,7 @@
#include <libsolidity/analysis/DeclarationContainer.h>
#include <libsolidity/ast/AST.h>
#include <libsolidity/ast/Types.h>
+#include <libdevcore/StringUtils.h>
using namespace std;
using namespace dev;
@@ -105,7 +106,7 @@ bool DeclarationContainer::registerDeclaration(
return true;
}
-std::vector<Declaration const*> DeclarationContainer::resolveName(ASTString const& _name, bool _recursive) const
+vector<Declaration const*> DeclarationContainer::resolveName(ASTString const& _name, bool _recursive) const
{
solAssert(!_name.empty(), "Attempt to resolve empty name.");
auto result = m_declarations.find(_name);
@@ -115,3 +116,22 @@ std::vector<Declaration const*> DeclarationContainer::resolveName(ASTString cons
return m_enclosingContainer->resolveName(_name, true);
return vector<Declaration const*>({});
}
+
+vector<ASTString> DeclarationContainer::similarNames(ASTString const& _name) const
+{
+ static size_t const MAXIMUM_EDIT_DISTANCE = 2;
+
+ vector<ASTString> similar;
+
+ for (auto const& declaration: m_declarations)
+ {
+ string const& declarationName = declaration.first;
+ if (stringWithinDistance(_name, declarationName, MAXIMUM_EDIT_DISTANCE))
+ similar.push_back(declarationName);
+ }
+
+ if (m_enclosingContainer)
+ similar += m_enclosingContainer->similarNames(_name);
+
+ return similar;
+}