mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #5208 from mestorlx/bug4156
[WIP] Bad identifier suggestion in certain cases
This commit is contained in:
commit
0778fb2dfc
@ -101,6 +101,7 @@ Compiler Features:
|
||||
* Code Generator: Allocate and free local variables according to their scope.
|
||||
* Removed ``pragma experimental "v0.5.0";``.
|
||||
* Syntax Checker: Improved error message for lookup in function types.
|
||||
* Name Resolver: Updated name suggestion look up function to take into account length of the identifier: 1: no search, 2-3: at most one change, 4-: at most two changes
|
||||
|
||||
Bugfixes:
|
||||
* Build System: Support versions of CVC4 linked against CLN instead of GMP. In case of compilation issues due to the experimental SMT solver support, the solvers can be disabled when configuring the project with CMake using ``-DUSE_CVC4=OFF`` or ``-DUSE_Z3=OFF``.
|
||||
|
@ -137,23 +137,23 @@ vector<Declaration const*> DeclarationContainer::resolveName(ASTString const& _n
|
||||
|
||||
vector<ASTString> DeclarationContainer::similarNames(ASTString const& _name) const
|
||||
{
|
||||
static size_t const MAXIMUM_EDIT_DISTANCE = 2;
|
||||
|
||||
// because the function below has quadratic runtime - it will not magically improve once a better algorithm is discovered ;)
|
||||
// since 80 is the suggested line length limit, we use 80^2 as length threshold
|
||||
static size_t const MAXIMUM_LENGTH_THRESHOLD = 80 * 80;
|
||||
|
||||
vector<ASTString> similar;
|
||||
|
||||
size_t maximumEditDistance = _name.size() > 3 ? 2 : _name.size() / 2;
|
||||
for (auto const& declaration: m_declarations)
|
||||
{
|
||||
string const& declarationName = declaration.first;
|
||||
if (stringWithinDistance(_name, declarationName, MAXIMUM_EDIT_DISTANCE, MAXIMUM_LENGTH_THRESHOLD))
|
||||
if (stringWithinDistance(_name, declarationName, maximumEditDistance, MAXIMUM_LENGTH_THRESHOLD))
|
||||
similar.push_back(declarationName);
|
||||
}
|
||||
for (auto const& declaration: m_invisibleDeclarations)
|
||||
{
|
||||
string const& declarationName = declaration.first;
|
||||
if (stringWithinDistance(_name, declarationName, MAXIMUM_EDIT_DISTANCE, MAXIMUM_LENGTH_THRESHOLD))
|
||||
if (stringWithinDistance(_name, declarationName, maximumEditDistance, MAXIMUM_LENGTH_THRESHOLD))
|
||||
similar.push_back(declarationName);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,14 @@
|
||||
contract c {
|
||||
function f () public
|
||||
{
|
||||
a = ac;
|
||||
a = cd;
|
||||
a = b;
|
||||
}
|
||||
uint256 a;
|
||||
uint256 ab;
|
||||
}
|
||||
// ----
|
||||
// DeclarationError: (56-58): Undeclared identifier. Did you mean "ab"?
|
||||
// DeclarationError: (72-74): Undeclared identifier.
|
||||
// DeclarationError: (88-89): Undeclared identifier.
|
@ -0,0 +1,12 @@
|
||||
contract c {
|
||||
function f () public
|
||||
{
|
||||
a = abd;
|
||||
a = ade;
|
||||
}
|
||||
uint256 a;
|
||||
uint256 abc;
|
||||
}
|
||||
// ----
|
||||
// DeclarationError: (56-59): Undeclared identifier. Did you mean "abc" or "abi"?
|
||||
// DeclarationError: (73-76): Undeclared identifier.
|
@ -0,0 +1,17 @@
|
||||
contract c {
|
||||
function f () public
|
||||
{
|
||||
a = land;
|
||||
a = lost;
|
||||
a = lang;
|
||||
}
|
||||
uint256 long;
|
||||
uint256 abc;
|
||||
}
|
||||
// ----
|
||||
// DeclarationError: (52-53): Undeclared identifier.
|
||||
// DeclarationError: (56-60): Undeclared identifier. Did you mean "long"?
|
||||
// DeclarationError: (70-71): Undeclared identifier.
|
||||
// DeclarationError: (74-78): Undeclared identifier. Did you mean "long", "log0", "log1", "log2", "log3" or "log4"?
|
||||
// DeclarationError: (88-89): Undeclared identifier.
|
||||
// DeclarationError: (92-96): Undeclared identifier. Did you mean "long"?
|
Loading…
Reference in New Issue
Block a user