| Index: pkg/analysis_services/lib/src/correction/name_suggestion.dart
|
| diff --git a/pkg/analysis_services/lib/src/correction/name_suggestion.dart b/pkg/analysis_services/lib/src/correction/name_suggestion.dart
|
| deleted file mode 100644
|
| index 5c551243a72eb8a742480f1145bb360e165d654b..0000000000000000000000000000000000000000
|
| --- a/pkg/analysis_services/lib/src/correction/name_suggestion.dart
|
| +++ /dev/null
|
| @@ -1,255 +0,0 @@
|
| -// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library services.src.correction.name_suggestion;
|
| -
|
| -import 'package:analysis_services/src/correction/strings.dart';
|
| -import 'package:analyzer/src/generated/ast.dart';
|
| -import 'package:analyzer/src/generated/element.dart';
|
| -
|
| -
|
| -List<String> _KNOWN_METHOD_NAME_PREFIXES = ['get', 'is', 'to'];
|
| -
|
| -/**
|
| - * Returns a list of words for the given camel case string.
|
| - *
|
| - * 'getCamelWords' => ['get', 'Camel', 'Words']
|
| - * 'getHTMLText' => ['get', 'HTML', 'Text']
|
| - */
|
| -List<String> getCamelWords(String str) {
|
| - if (str == null || str.isEmpty) {
|
| - return <String>[];
|
| - }
|
| - List<String> parts = <String>[];
|
| - bool wasLowerCase = false;
|
| - bool wasUpperCase = false;
|
| - int wordStart = 0;
|
| - for (int i = 0; i < str.length; i++) {
|
| - int c = str.codeUnitAt(i);
|
| - var newLowerCase = isLowerCase(c);
|
| - var newUpperCase = isUpperCase(c);
|
| - // myWord
|
| - // | ^
|
| - if (wasLowerCase && newUpperCase) {
|
| - parts.add(str.substring(wordStart, i));
|
| - wordStart = i;
|
| - }
|
| - // myHTMLText
|
| - // | ^
|
| - if (wasUpperCase &&
|
| - newUpperCase &&
|
| - i + 1 < str.length &&
|
| - isLowerCase(str.codeUnitAt(i + 1))) {
|
| - parts.add(str.substring(wordStart, i));
|
| - wordStart = i;
|
| - }
|
| - wasLowerCase = newLowerCase;
|
| - wasUpperCase = newUpperCase;
|
| - }
|
| - parts.add(str.substring(wordStart));
|
| - return parts;
|
| -}
|
| -
|
| -/**
|
| - * Returns possible names for a [String] variable with [text] value.
|
| - */
|
| -List<String> getVariableNameSuggestionsForText(String text,
|
| - Set<String> excluded) {
|
| - // filter out everything except of letters and white spaces
|
| - {
|
| - StringBuffer sb = new StringBuffer();
|
| - for (int i = 0; i < text.length; i++) {
|
| - int c = text.codeUnitAt(i);
|
| - if (isLetter(c) || isWhitespace(c)) {
|
| - sb.writeCharCode(c);
|
| - }
|
| - }
|
| - text = sb.toString();
|
| - }
|
| - // make single camel-case text
|
| - {
|
| - List<String> words = text.split(' ');
|
| - StringBuffer sb = new StringBuffer();
|
| - for (int i = 0; i < words.length; i++) {
|
| - String word = words[i];
|
| - if (i > 0) {
|
| - word = capitalize(word);
|
| - }
|
| - sb.write(word);
|
| - }
|
| - text = sb.toString();
|
| - }
|
| - // split camel-case into separate suggested names
|
| - Set<String> res = new Set();
|
| - _addAll(excluded, res, _getCamelWordCombinations(text));
|
| - return new List.from(res);
|
| -}
|
| -
|
| -/**
|
| - * Returns possible names for a variable with the given expected type and
|
| - * expression assigned.
|
| - */
|
| -List<String> getVariableNameSuggestionsForExpression(DartType expectedType,
|
| - Expression assignedExpression, Set<String> excluded) {
|
| - Set<String> res = new Set();
|
| - // use expression
|
| - if (assignedExpression != null) {
|
| - String nameFromExpression = _getBaseNameFromExpression(assignedExpression);
|
| - if (nameFromExpression != null) {
|
| - nameFromExpression = removeStart(nameFromExpression, '_');
|
| - _addAll(excluded, res, _getCamelWordCombinations(nameFromExpression));
|
| - }
|
| - String nameFromParent =
|
| - _getBaseNameFromLocationInParent(assignedExpression);
|
| - if (nameFromParent != null) {
|
| - _addAll(excluded, res, _getCamelWordCombinations(nameFromParent));
|
| - }
|
| - }
|
| - // use type
|
| - if (expectedType != null && !expectedType.isDynamic) {
|
| - String typeName = expectedType.name;
|
| - if ('int' == typeName) {
|
| - _addSingleCharacterName(excluded, res, 0x69);
|
| - } else if ('double' == typeName) {
|
| - _addSingleCharacterName(excluded, res, 0x64);
|
| - } else if ('String' == typeName) {
|
| - _addSingleCharacterName(excluded, res, 0x73);
|
| - } else {
|
| - _addAll(excluded, res, _getCamelWordCombinations(typeName));
|
| - }
|
| - res.remove(typeName);
|
| - }
|
| - // done
|
| - return new List.from(res);
|
| -}
|
| -
|
| -/**
|
| - * Adds [toAdd] items which are not excluded.
|
| - */
|
| -void _addAll(Set<String> excluded, Set<String> result, Iterable<String> toAdd) {
|
| - for (String item in toAdd) {
|
| - // add name based on "item", but not "excluded"
|
| - for (int suffix = 1; ; suffix++) {
|
| - // prepare name, just "item" or "item2", "item3", etc
|
| - String name = item;
|
| - if (suffix > 1) {
|
| - name += suffix.toString();
|
| - }
|
| - // add once found not excluded
|
| - if (!excluded.contains(name)) {
|
| - result.add(name);
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Adds to [result] either [c] or the first ASCII character after it.
|
| - */
|
| -void _addSingleCharacterName(Set<String> excluded, Set<String> result, int c) {
|
| - while (c < 0x7A) {
|
| - String name = new String.fromCharCode(c);
|
| - // may be done
|
| - if (!excluded.contains(name)) {
|
| - result.add(name);
|
| - break;
|
| - }
|
| - // next character
|
| - c = c + 1;
|
| - }
|
| -}
|
| -
|
| -String _getBaseNameFromExpression(Expression expression) {
|
| - String name = null;
|
| - // e as Type
|
| - if (expression is AsExpression) {
|
| - AsExpression asExpression = expression as AsExpression;
|
| - expression = asExpression.expression;
|
| - }
|
| - // analyze expressions
|
| - if (expression is SimpleIdentifier) {
|
| - SimpleIdentifier node = expression;
|
| - return node.name;
|
| - } else if (expression is PrefixedIdentifier) {
|
| - PrefixedIdentifier node = expression;
|
| - return node.identifier.name;
|
| - } else if (expression is MethodInvocation) {
|
| - name = expression.methodName.name;
|
| - } else if (expression is InstanceCreationExpression) {
|
| - InstanceCreationExpression creation = expression;
|
| - ConstructorName constructorName = creation.constructorName;
|
| - TypeName typeName = constructorName.type;
|
| - if (typeName != null) {
|
| - Identifier typeNameIdentifier = typeName.name;
|
| - // new ClassName()
|
| - if (typeNameIdentifier is SimpleIdentifier) {
|
| - return typeNameIdentifier.name;
|
| - }
|
| - // new prefix.name();
|
| - if (typeNameIdentifier is PrefixedIdentifier) {
|
| - PrefixedIdentifier prefixed = typeNameIdentifier;
|
| - // new prefix.ClassName()
|
| - if (prefixed.prefix.staticElement is PrefixElement) {
|
| - return prefixed.identifier.name;
|
| - }
|
| - // new ClassName.constructorName()
|
| - return prefixed.prefix.name;
|
| - }
|
| - }
|
| - }
|
| - // strip known prefixes
|
| - if (name != null) {
|
| - for (int i = 0; i < _KNOWN_METHOD_NAME_PREFIXES.length; i++) {
|
| - String curr = _KNOWN_METHOD_NAME_PREFIXES[i];
|
| - if (name.startsWith(curr)) {
|
| - if (name == curr) {
|
| - return null;
|
| - } else if (isUpperCase(name.codeUnitAt(curr.length))) {
|
| - return name.substring(curr.length);
|
| - }
|
| - }
|
| - }
|
| - }
|
| - // done
|
| - return name;
|
| -}
|
| -
|
| -
|
| -String _getBaseNameFromLocationInParent(Expression expression) {
|
| - // value in named expression
|
| - if (expression.parent is NamedExpression) {
|
| - NamedExpression namedExpression = expression.parent as NamedExpression;
|
| - if (namedExpression.expression == expression) {
|
| - return namedExpression.name.label.name;
|
| - }
|
| - }
|
| - // positional argument
|
| - {
|
| - ParameterElement parameter = expression.propagatedParameterElement;
|
| - if (parameter == null) {
|
| - parameter = expression.staticParameterElement;
|
| - }
|
| - if (parameter != null) {
|
| - return parameter.displayName;
|
| - }
|
| - }
|
| - // unknown
|
| - return null;
|
| -}
|
| -
|
| -/**
|
| - * Returns all variants of names by removing leading words one by one.
|
| - */
|
| -List<String> _getCamelWordCombinations(String name) {
|
| - List<String> result = [];
|
| - List<String> parts = getCamelWords(name);
|
| - for (int i = 0; i < parts.length; i++) {
|
| - var s1 = parts[i].toLowerCase();
|
| - var s2 = parts.skip(i + 1).join();
|
| - String suggestion = '$s1$s2';
|
| - result.add(suggestion);
|
| - }
|
| - return result;
|
| -}
|
|
|