Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Unified Diff: pkg/analysis_services/lib/src/correction/fix.dart

Issue 417263003: Use a Levenshtein calculating algorithm with a threshold. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_services/lib/src/correction/fix.dart
diff --git a/pkg/analysis_services/lib/src/correction/fix.dart b/pkg/analysis_services/lib/src/correction/fix.dart
index 9d463ed0d12e0f9b858202ad1cf90b36c9f0f71b..5a1a057547826e1b604779cdf32c19d8add960b5 100644
--- a/pkg/analysis_services/lib/src/correction/fix.dart
+++ b/pkg/analysis_services/lib/src/correction/fix.dart
@@ -1029,7 +1029,10 @@ class FixProcessor {
if (_mayBeTypeIdentifier(node)) {
String name = (node as SimpleIdentifier).name;
_ClosestElementFinder finder =
- new _ClosestElementFinder(name, (Element element) => element is ClassElement);
+ new _ClosestElementFinder(
+ name,
+ (Element element) => element is ClassElement,
+ 5);
// find closest element
{
// elements of this library
@@ -1045,7 +1048,7 @@ class FixProcessor {
}
}
// if we have close enough element, suggest to use it
- if (finder != null && finder._distance < 5) {
+ if (finder._element != null) {
Paul Berry 2014/07/25 19:53:26 I think this introduces an unintentional off-by-on
scheglov 2014/07/25 21:18:24 Done.
String closestName = finder._element.name;
_addReplaceEdit(rf.rangeNode(node), closestName);
// add proposal
@@ -1107,7 +1110,8 @@ class FixProcessor {
_ClosestElementFinder finder =
new _ClosestElementFinder(
name,
- (Element element) => element is FunctionElement);
+ (Element element) => element is FunctionElement,
+ 5);
// this library
for (CompilationUnitElement unit in unitLibraryElement.units) {
finder._updateList(unit.functions);
@@ -1120,9 +1124,8 @@ class FixProcessor {
}
}
// if we have close enough element, suggest to use it
- String closestName = null;
- if (finder != null && finder._distance < 5) {
- closestName = finder._element.name;
+ if (finder._element != null) {
+ String closestName = finder._element.name;
_addReplaceEdit(rf.rangeNode(node), closestName);
_addFix(FixKind.CHANGE_TO, [closestName]);
}
@@ -1247,9 +1250,10 @@ class FixProcessor {
MethodInvocation invocation = node.parent as MethodInvocation;
String name = (node as SimpleIdentifier).name;
_ClosestElementFinder finder =
- new _ClosestElementFinder(name, (Element element) {
- return element is MethodElement && !element.isOperator;
- });
+ new _ClosestElementFinder(
+ name,
+ (Element element) => element is MethodElement && !element.isOperator,
+ 5);
// unqualified invocation
Expression target = invocation.realTarget;
if (target == null) {
@@ -1267,9 +1271,8 @@ class FixProcessor {
}
}
// if we have close enough element, suggest to use it
- String closestName = null;
- if (finder != null && finder._distance < 5) {
- closestName = finder._element.name;
+ if (finder._element != null) {
+ String closestName = finder._element.name;
_addReplaceEdit(rf.rangeNode(node), closestName);
_addFix(FixKind.CHANGE_TO, [closestName]);
}
@@ -1923,13 +1926,13 @@ class _ClosestElementFinder {
final Predicate<Element> _predicate;
Element _element = null;
- int _distance = 1 << 10;
+ int _distance;
- _ClosestElementFinder(this._targetName, this._predicate);
+ _ClosestElementFinder(this._targetName, this._predicate, this._distance);
void _update(Element element) {
if (_predicate(element)) {
- int memberDistance = getLevenshteinDistance(element.name, _targetName);
+ int memberDistance = levenshtein(element.name, _targetName, _distance);
if (memberDistance < _distance) {
_element = element;
_distance = memberDistance;

Powered by Google App Engine
This is Rietveld 408576698