blob: 47624e2b980b5940be7a6a4355b9bcbf86997846 [file] [log] [blame]
// 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.
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/instrumentation/service.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
/// The implementation of [DartAssistContext].
class DartAssistContextImpl implements DartAssistContext {
@override
final InstrumentationService instrumentationService;
@override
final ChangeWorkspace workspace;
@override
final ResolvedUnitResult resolveResult;
@override
final int selectionOffset;
@override
final int selectionLength;
DartAssistContextImpl(this.instrumentationService, this.workspace,
this.resolveResult, this.selectionOffset, this.selectionLength);
}
/// An enumeration of possible assist kinds.
class DartAssistKind {
static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = AssistKind(
'dart.assist.add.diagnosticPropertyReference',
30,
'Add a debug reference to this property',
);
static const ADD_NOT_NULL_ASSERT = AssistKind(
'dart.assist.add.notNullAssert',
30,
'Add a not-null assertion',
);
static const ADD_RETURN_TYPE = AssistKind(
'dart.assist.add.returnType',
30,
'Add return type',
);
static const ADD_TYPE_ANNOTATION = AssistKind(
'dart.assist.add.typeAnnotation',
30,
'Add type annotation',
);
static const ASSIGN_TO_LOCAL_VARIABLE = AssistKind(
'dart.assist.assignToVariable',
30,
'Assign value to new local variable',
);
static const CONVERT_CLASS_TO_MIXIN = AssistKind(
'dart.assist.convert.classToMixin',
30,
'Convert class to a mixin',
);
static const CONVERT_DOCUMENTATION_INTO_BLOCK = AssistKind(
'dart.assist.convert.blockComment',
30,
'Convert to block documentation comment',
);
static const CONVERT_DOCUMENTATION_INTO_LINE = AssistKind(
'dart.assist.convert.lineComment',
30,
'Convert to line documentation comment',
);
static const CONVERT_INTO_ASYNC_BODY = AssistKind(
'dart.assist.convert.bodyToAsync',
29,
'Convert to async function body',
);
static const CONVERT_INTO_BLOCK_BODY = AssistKind(
'dart.assist.convert.bodyToBlock',
30,
'Convert to block body',
);
static const CONVERT_INTO_EXPRESSION_BODY = AssistKind(
'dart.assist.convert.bodyToExpression',
30,
'Convert to expression body',
);
static const CONVERT_INTO_FINAL_FIELD = AssistKind(
'dart.assist.convert.getterToFinalField',
30,
'Convert to final field',
);
static const CONVERT_INTO_FOR_INDEX = AssistKind(
'dart.assist.convert.forEachToForIndex',
30,
'Convert to for-index loop',
);
static const CONVERT_INTO_GENERIC_FUNCTION_SYNTAX = AssistKind(
'dart.assist.convert.toGenericFunctionSyntax',
30,
"Convert into 'Function' syntax",
);
static const CONVERT_INTO_GETTER = AssistKind(
'dart.assist.convert.finalFieldToGetter',
30,
'Convert to getter',
);
static const CONVERT_INTO_IS_NOT = AssistKind(
'dart.assist.convert.isNot',
30,
'Convert to is!',
);
static const CONVERT_INTO_IS_NOT_EMPTY = AssistKind(
'dart.assist.convert.isNotEmpty',
30,
"Convert to 'isNotEmpty'",
);
static const CONVERT_PART_OF_TO_URI = AssistKind(
'dart.assist.convert.partOfToPartUri',
30,
'Convert to use a URI',
);
static const CONVERT_TO_DOUBLE_QUOTED_STRING = AssistKind(
'dart.assist.convert.toDoubleQuotedString',
30,
'Convert to double quoted string',
);
static const CONVERT_TO_FIELD_PARAMETER = AssistKind(
'dart.assist.convert.toConstructorFieldParameter',
30,
'Convert to field formal parameter',
);
static const CONVERT_TO_FOR_ELEMENT = AssistKind(
'dart.assist.convert.toForElement',
30,
"Convert to a 'for' element",
);
static const CONVERT_TO_IF_ELEMENT = AssistKind(
'dart.assist.convert.toIfElement',
30,
"Convert to an 'if' element",
);
static const CONVERT_TO_INT_LITERAL = AssistKind(
'dart.assist.convert.toIntLiteral',
30,
'Convert to an int literal',
);
static const CONVERT_TO_LIST_LITERAL = AssistKind(
'dart.assist.convert.toListLiteral',
30,
'Convert to list literal',
);
static const CONVERT_TO_MAP_LITERAL = AssistKind(
'dart.assist.convert.toMapLiteral',
30,
'Convert to map literal',
);
static const CONVERT_TO_MULTILINE_STRING = AssistKind(
'dart.assist.convert.toMultilineString',
30,
'Convert to multiline string',
);
static const CONVERT_TO_NORMAL_PARAMETER = AssistKind(
'dart.assist.convert.toConstructorNormalParameter',
30,
'Convert to normal parameter',
);
static const CONVERT_TO_NULL_AWARE = AssistKind(
'dart.assist.convert.toNullAware',
30,
"Convert to use '?.'",
);
static const CONVERT_TO_PACKAGE_IMPORT = AssistKind(
'dart.assist.convert.relativeToPackageImport',
30,
"Convert to 'package:' import",
);
static const CONVERT_TO_RELATIVE_IMPORT = AssistKind(
'dart.assist.convert.packageToRelativeImport',
30,
'Convert to a relative import',
);
static const CONVERT_TO_SET_LITERAL = AssistKind(
'dart.assist.convert.toSetLiteral',
30,
'Convert to set literal',
);
static const CONVERT_TO_SINGLE_QUOTED_STRING = AssistKind(
'dart.assist.convert.toSingleQuotedString',
30,
'Convert to single quoted string',
);
static const CONVERT_TO_SPREAD = AssistKind(
'dart.assist.convert.toSpread',
30,
'Convert to a spread',
);
static const ENCAPSULATE_FIELD = AssistKind(
'dart.assist.encapsulateField',
30,
'Encapsulate field',
);
static const EXCHANGE_OPERANDS = AssistKind(
'dart.assist.exchangeOperands',
30,
'Exchange operands',
);
// Flutter assists
static const FLUTTER_CONVERT_TO_CHILDREN = AssistKind(
'dart.assist.flutter.convert.childToChildren',
30,
'Convert to children:',
);
static const FLUTTER_CONVERT_TO_STATEFUL_WIDGET = AssistKind(
'dart.assist.flutter.convert.toStatefulWidget',
30,
'Convert to StatefulWidget',
);
// Flutter wrap specific assists
static const FLUTTER_WRAP_GENERIC = AssistKind(
'dart.assist.flutter.wrap.generic',
31,
'Wrap with widget...',
);
static const FLUTTER_WRAP_BUILDER = AssistKind(
'dart.assist.flutter.wrap.builder',
32,
'Wrap with Builder',
);
static const FLUTTER_WRAP_CENTER = AssistKind(
'dart.assist.flutter.wrap.center',
32,
'Wrap with Center',
);
static const FLUTTER_WRAP_COLUMN = AssistKind(
'dart.assist.flutter.wrap.column',
32,
'Wrap with Column',
);
static const FLUTTER_WRAP_CONTAINER = AssistKind(
'dart.assist.flutter.wrap.container',
32,
'Wrap with Container',
);
static const FLUTTER_WRAP_PADDING = AssistKind(
'dart.assist.flutter.wrap.padding',
32,
'Wrap with Padding',
);
static const FLUTTER_WRAP_ROW = AssistKind(
'dart.assist.flutter.wrap.row',
32,
'Wrap with Row',
);
static const FLUTTER_WRAP_SIZED_BOX = AssistKind(
'dart.assist.flutter.wrap.sizedBox',
32,
'Wrap with SizedBox',
);
static const FLUTTER_WRAP_STREAM_BUILDER = AssistKind(
'dart.assist.flutter.wrap.streamBuilder',
32,
'Wrap with StreamBuilder',
);
// Flutter re-order assists
static const FLUTTER_SWAP_WITH_CHILD = AssistKind(
'dart.assist.flutter.swap.withChild',
33,
'Swap with child',
);
static const FLUTTER_SWAP_WITH_PARENT = AssistKind(
'dart.assist.flutter.swap.withParent',
33,
'Swap with parent',
);
static const FLUTTER_MOVE_DOWN = AssistKind(
'dart.assist.flutter.move.down',
34,
'Move widget down',
);
static const FLUTTER_MOVE_UP = AssistKind(
'dart.assist.flutter.move.up',
34,
'Move widget up',
);
// Flutter remove assist
static const FLUTTER_REMOVE_WIDGET = AssistKind(
'dart.assist.flutter.removeWidget',
35,
'Remove this widget',
);
static const IMPORT_ADD_SHOW = AssistKind(
'dart.assist.add.showCombinator',
30,
"Add explicit 'show' combinator",
);
static const INLINE_INVOCATION = AssistKind(
'dart.assist.inline',
30,
"Inline invocation of '{0}'",
);
static const INTRODUCE_LOCAL_CAST_TYPE = AssistKind(
'dart.assist.introduceLocalCast',
30,
'Introduce new local with tested type',
);
static const INVERT_IF_STATEMENT = AssistKind(
'dart.assist.invertIf',
30,
"Invert 'if' statement",
);
static const JOIN_IF_WITH_INNER = AssistKind(
'dart.assist.joinWithInnerIf',
30,
"Join 'if' statement with inner 'if' statement",
);
static const JOIN_IF_WITH_OUTER = AssistKind(
'dart.assist.joinWithOuterIf',
30,
"Join 'if' statement with outer 'if' statement",
);
static const JOIN_VARIABLE_DECLARATION = AssistKind(
'dart.assist.joinVariableDeclaration',
30,
'Join variable declaration',
);
static const REMOVE_TYPE_ANNOTATION = AssistKind(
// todo (pq): unify w/ fix
'dart.assist.remove.typeAnnotation',
29,
'Remove type annotation',
);
static const REPLACE_CONDITIONAL_WITH_IF_ELSE = AssistKind(
'dart.assist.convert.conditionalToIfElse',
30,
"Replace conditional with 'if-else'",
);
static const REPLACE_IF_ELSE_WITH_CONDITIONAL = AssistKind(
'dart.assist.convert.ifElseToConditional',
30,
"Replace 'if-else' with conditional ('c ? x : y')",
);
static const REPLACE_WITH_VAR = AssistKind(
'dart.assist.replace.withVar',
30,
"Replace type annotation with 'var'",
);
static const SHADOW_FIELD = AssistKind(
'dart.assist.shadowField',
30,
'Create a local variable that shadows the field',
);
static const SORT_CHILD_PROPERTY_LAST = AssistKind(
'dart.assist.sort.child.properties.last',
30,
'Move child property to end of arguments',
);
static const SPLIT_AND_CONDITION = AssistKind(
'dart.assist.splitIfConjunction',
30,
'Split && condition',
);
static const SPLIT_VARIABLE_DECLARATION = AssistKind(
'dart.assist.splitVariableDeclaration',
30,
'Split variable declaration',
);
static const SURROUND_WITH_BLOCK = AssistKind(
'dart.assist.surround.block',
22,
'Surround with block',
);
static const SURROUND_WITH_DO_WHILE = AssistKind(
'dart.assist.surround.doWhile',
27,
"Surround with 'do-while'",
);
static const SURROUND_WITH_FOR = AssistKind(
'dart.assist.surround.forEach',
26,
"Surround with 'for'",
);
static const SURROUND_WITH_FOR_IN = AssistKind(
'dart.assist.surround.forIn',
25,
"Surround with 'for-in'",
);
static const SURROUND_WITH_IF = AssistKind(
'dart.assist.surround.if',
23,
"Surround with 'if'",
);
static const SURROUND_WITH_SET_STATE = AssistKind(
'dart.assist.surround.setState',
27,
"Surround with 'setState'",
);
static const SURROUND_WITH_TRY_CATCH = AssistKind(
'dart.assist.surround.tryCatch',
28,
"Surround with 'try-catch'",
);
static const SURROUND_WITH_TRY_FINALLY = AssistKind(
'dart.assist.surround.tryFinally',
29,
"Surround with 'try-finally'",
);
static const SURROUND_WITH_WHILE = AssistKind(
'dart.assist.surround.while',
24,
"Surround with 'while'",
);
static const USE_CURLY_BRACES = AssistKind(
'dart.assist.surround.curlyBraces',
30,
'Use curly braces',
);
}