diff options
author | chriseth <chris@ethereum.org> | 2018-02-13 23:48:21 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-13 23:48:21 +0800 |
commit | f84b2c451425a5913ef3decc18cf56ef95988d83 (patch) | |
tree | 553e77484feb69103ad8fc05e6b421390872d9a9 /libsolidity/analysis/DeclarationContainer.cpp | |
parent | 8f8ad3840eecd7b22565e0c36eb55ceca5d5b57a (diff) | |
parent | 1dcd7c5e0b249511dca34dff0507b432db3bf7d1 (diff) | |
download | dexon-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.cpp | 22 |
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; +} |