// 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/fix/fix_dart.dart';
import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
import 'package:analysis_server/src/services/linter/lint_names.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';

/// Return true if this [errorCode] is likely to have a fix associated with it.
bool hasFix(ErrorCode errorCode) =>
    errorCode == CompileTimeErrorCode.CAST_TO_NON_TYPE ||
    errorCode == CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ||
    errorCode == CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE ||
    errorCode == CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER ||
    errorCode == CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION ||
    errorCode == CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
    errorCode ==
        CompileTimeErrorCode
            .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR ||
    errorCode ==
        CompileTimeErrorCode
            .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS ||
    errorCode == CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT ||
    errorCode == CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 ||
    errorCode ==
        CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS ||
    errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER ||
    errorCode ==
        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE ||
    errorCode == CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE ||
    errorCode == CompileTimeErrorCode.INVALID_ANNOTATION ||
    errorCode == CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT ||
    errorCode == CompileTimeErrorCode.PART_OF_NON_PART ||
    errorCode == CompileTimeErrorCode.UNDEFINED_ANNOTATION ||
    errorCode == CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN ||
    errorCode ==
        CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT ||
    errorCode == CompileTimeErrorCode.UNDEFINED_FUNCTION ||
    errorCode == CompileTimeErrorCode.UNDEFINED_GETTER ||
    errorCode == CompileTimeErrorCode.UNDEFINED_METHOD ||
    errorCode == CompileTimeErrorCode.UNDEFINED_SETTER ||
    errorCode == CompileTimeErrorCode.URI_DOES_NOT_EXIST ||
    errorCode == CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED ||
    errorCode == HintCode.CAN_BE_NULL_AFTER_NULL_AWARE ||
    errorCode == HintCode.DEAD_CODE ||
    errorCode == HintCode.DIVISION_OPTIMIZATION ||
    errorCode == HintCode.TYPE_CHECK_IS_NOT_NULL ||
    errorCode == HintCode.TYPE_CHECK_IS_NULL ||
    errorCode == HintCode.UNNECESSARY_CAST ||
    errorCode == HintCode.UNUSED_CATCH_CLAUSE ||
    errorCode == HintCode.UNUSED_CATCH_STACK ||
    errorCode == HintCode.UNUSED_IMPORT ||
    errorCode == ParserErrorCode.EXPECTED_TOKEN ||
    errorCode == ParserErrorCode.GETTER_WITH_PARAMETERS ||
    errorCode == ParserErrorCode.VAR_AS_TYPE_NAME ||
    errorCode == CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER ||
    (errorCode is LintCode &&
        (errorCode.name == LintNames.always_require_non_null_named_parameters ||
            errorCode.name == LintNames.annotate_overrides ||
            errorCode.name == LintNames.avoid_annotating_with_dynamic ||
            errorCode.name == LintNames.avoid_empty_else ||
            errorCode.name == LintNames.avoid_init_to_null ||
            errorCode.name == LintNames.avoid_redundant_argument_values ||
            errorCode.name == LintNames.avoid_return_types_on_setters ||
            errorCode.name == LintNames.avoid_types_on_closure_parameters ||
            errorCode.name == LintNames.await_only_futures ||
            errorCode.name == LintNames.empty_catches ||
            errorCode.name == LintNames.empty_constructor_bodies ||
            errorCode.name == LintNames.empty_statements ||
            errorCode.name == LintNames.no_duplicate_case_values ||
            errorCode.name == LintNames.non_constant_identifier_names ||
            errorCode.name == LintNames.null_closures ||
            errorCode.name == LintNames.prefer_collection_literals ||
            errorCode.name == LintNames.prefer_conditional_assignment ||
            errorCode.name == LintNames.prefer_const_constructors ||
            errorCode.name ==
                LintNames.prefer_const_constructors_in_immutables ||
            errorCode.name == LintNames.prefer_const_declarations ||
            errorCode.name == LintNames.prefer_equal_for_default_values ||
            errorCode.name == LintNames.prefer_final_fields ||
            errorCode.name == LintNames.prefer_final_locals ||
            errorCode.name == LintNames.prefer_is_not_empty ||
            errorCode.name == LintNames.type_init_formals ||
            errorCode.name == LintNames.unawaited_futures ||
            errorCode.name == LintNames.unnecessary_brace_in_string_interps ||
            errorCode.name == LintNames.unnecessary_const ||
            errorCode.name == LintNames.unnecessary_lambdas ||
            errorCode.name == LintNames.unnecessary_new ||
            errorCode.name == LintNames.unnecessary_overrides ||
            errorCode.name == LintNames.unnecessary_this ||
            errorCode.name == LintNames.use_rethrow_when_possible));

/// An enumeration of quick fix kinds for the errors found in an analysis
/// options file.
class AnalysisOptionsFixKind {
  static const REMOVE_SETTING =
      FixKind('analysisOptions.fix.removeSetting', 50, "Remove '{0}'");
}

/// The implementation of [DartFixContext].
class DartFixContextImpl implements DartFixContext {
  @override
  final ChangeWorkspace workspace;

  @override
  final ResolvedUnitResult resolveResult;

  @override
  final AnalysisError error;

  final List<TopLevelDeclaration> Function(String name)
      getTopLevelDeclarationsFunction;

  DartFixContextImpl(this.workspace, this.resolveResult, this.error,
      this.getTopLevelDeclarationsFunction);

  @override
  List<TopLevelDeclaration> getTopLevelDeclarations(String name) {
    return getTopLevelDeclarationsFunction(name);
  }
}

/// An enumeration of quick fix kinds found in a Dart file.
class DartFixKind {
  static const ADD_ASYNC =
      FixKind('dart.fix.add.async', 50, "Add 'async' modifier");
  static const ADD_AWAIT =
      FixKind('dart.fix.add.await', 50, "Add 'await' keyword");
  static const ADD_EXPLICIT_CAST = FixKind(
      'dart.fix.add.explicitCast', 50, 'Add cast',
      appliedTogetherMessage: 'Add all casts in file');
  static const ADD_CONST =
      FixKind('dart.fix.add.const', 50, "Add 'const' modifier");
  static const ADD_CURLY_BRACES =
      FixKind('dart.fix.add.curlyBraces', 50, 'Add curly braces');
  static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = FixKind(
      'dart.fix.add.diagnosticPropertyReference',
      50,
      'Add a debug reference to this property');
  static const ADD_FIELD_FORMAL_PARAMETERS = FixKind(
      'dart.fix.add.fieldFormalParameters',
      70,
      'Add final field formal parameters');
  static const ADD_LATE =
      FixKind('dart.fix.add.late', 50, "Add 'late' modifier");
  static const ADD_MISSING_ENUM_CASE_CLAUSES = FixKind(
      'dart.fix.add.missingEnumCaseClauses', 50, 'Add missing case clauses');
  static const ADD_MISSING_PARAMETER_NAMED = FixKind(
      'dart.fix.add.missingParameterNamed', 70, "Add named parameter '{0}'");
  static const ADD_MISSING_PARAMETER_POSITIONAL = FixKind(
      'dart.fix.add.missingParameterPositional',
      69,
      'Add optional positional parameter');
  static const ADD_MISSING_PARAMETER_REQUIRED = FixKind(
      'dart.fix.add.missingParameterRequired',
      70,
      'Add required positional parameter');
  static const ADD_MISSING_REQUIRED_ARGUMENT = FixKind(
      'dart.fix.add.missingRequiredArgument',
      70,
      "Add required argument '{0}'");
  static const ADD_NE_NULL = FixKind('dart.fix.add.neNull', 50, 'Add != null',
      appliedTogetherMessage: 'Add != null everywhere in file');
  static const ADD_NULL_CHECK =
      FixKind('dart.fix.add.nullCheck', 50, 'Add a null check (!)');
  static const ADD_OVERRIDE =
      FixKind('dart.fix.add.override', 50, "Add '@override' annotation");
  static const ADD_REQUIRED =
      FixKind('dart.fix.add.required', 50, "Add '@required' annotation");
  static const ADD_REQUIRED2 =
      FixKind('dart.fix.add.required', 50, "Add 'required' keyword");
  static const ADD_RETURN_TYPE =
      FixKind('dart.fix.add.returnType', 50, 'Add return type');
  static const ADD_STATIC =
      FixKind('dart.fix.add.static', 50, "Add 'static' modifier");
  static const ADD_SUPER_CONSTRUCTOR_INVOCATION = FixKind(
      'dart.fix.add.superConstructorInvocation',
      50,
      'Add super constructor {0} invocation');
  static const ADD_TYPE_ANNOTATION =
      FixKind('dart.fix.add.typeAnnotation', 50, 'Add type annotation');
  static const CHANGE_ARGUMENT_NAME =
      FixKind('dart.fix.change.argumentName', 60, "Change to '{0}'");
  static const CHANGE_TO = FixKind('dart.fix.change.to', 51, "Change to '{0}'");
  static const CHANGE_TO_NEAREST_PRECISE_VALUE = FixKind(
      'dart.fix.change.toNearestPreciseValue',
      50,
      'Change to nearest precise int-as-double value: {0}');
  static const CHANGE_TO_STATIC_ACCESS = FixKind(
      'dart.fix.change.toStaticAccess',
      50,
      "Change access to static using '{0}'");
  static const CHANGE_TYPE_ANNOTATION = FixKind(
      'dart.fix.change.typeAnnotation',
      50,
      "Change '{0}' to '{1}' type annotation");
  static const CONVERT_FLUTTER_CHILD = FixKind(
      'dart.fix.flutter.convert.childToChildren', 50, 'Convert to children:');
  static const CONVERT_FLUTTER_CHILDREN = FixKind(
      'dart.fix.flutter.convert.childrenToChild', 50, 'Convert to child:');
  static const CONVERT_INTO_EXPRESSION_BODY = FixKind(
      'dart.fix.convert.toExpressionBody', 50, 'Convert to expression body');
  static const CONVERT_TO_CONTAINS =
      FixKind('dart.fix.convert.toContains', 50, "Convert to using 'contains'");
  static const CONVERT_TO_FOR_ELEMENT = FixKind(
      'dart.fix.convert.toForElement', 50, "Convert to a 'for' element");
  static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX = FixKind(
      'dart.fix.convert.toGenericFunctionSyntax',
      50,
      "Convert into 'Function' syntax");
  static const CONVERT_TO_IF_ELEMENT =
      FixKind('dart.fix.convert.toIfElement', 50, "Convert to an 'if' element");
  static const CONVERT_TO_IF_NULL =
      FixKind('dart.fix.convert.toIfNull', 50, "Convert to use '??'");
  static const CONVERT_TO_INT_LITERAL =
      FixKind('dart.fix.convert.toIntLiteral', 50, 'Convert to an int literal');
  static const CONVERT_TO_LINE_COMMENT = FixKind(
      'dart.fix.convert.toLineComment',
      50,
      'Convert to line documentation comment');
  static const CONVERT_TO_LIST_LITERAL =
      FixKind('dart.fix.convert.toListLiteral', 50, 'Convert to list literal');
  static const CONVERT_TO_MAP_LITERAL =
      FixKind('dart.fix.convert.toMapLiteral', 50, 'Convert to map literal');
  static const CONVERT_TO_NAMED_ARGUMENTS = FixKind(
      'dart.fix.convert.toNamedArguments', 50, 'Convert to named arguments');
  static const CONVERT_TO_NULL_AWARE =
      FixKind('dart.fix.convert.toNullAware', 50, "Convert to use '?.'");
  static const CONVERT_TO_ON_TYPE =
      FixKind('dart.fix.convert.toOnType', 50, "Convert to 'on {0}'");
  static const CONVERT_TO_PACKAGE_IMPORT = FixKind(
      'dart.fix.convert.toPackageImport', 50, "Convert to 'package:' import");
  static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
      'dart.fix.convert.toRelativeImport', 50, 'Convert to relative import');
  static const CONVERT_TO_SET_LITERAL =
      FixKind('dart.fix.convert.toSetLiteral', 50, 'Convert to set literal');
  static const CONVERT_TO_SINGLE_QUOTED_STRING = FixKind(
      'dart.fix.convert.toSingleQuotedString',
      50,
      'Convert to single quoted string');
  static const CONVERT_TO_SPREAD =
      FixKind('dart.fix.convert.toSpread', 50, 'Convert to a spread');
  static const CONVERT_TO_WHERE_TYPE = FixKind(
      'dart.fix.convert.toWhereType', 50, "Convert to a use 'whereType'");
  static const CREATE_CLASS =
      FixKind('dart.fix.create.class', 50, "Create class '{0}'");
  static const CREATE_CONSTRUCTOR =
      FixKind('dart.fix.create.constructor', 50, "Create constructor '{0}'");
  static const CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS = FixKind(
      'dart.fix.create.constructorForFinalFields',
      50,
      'Create constructor for final fields');
  static const CREATE_CONSTRUCTOR_SUPER = FixKind(
      'dart.fix.create.constructorSuper', 50, 'Create constructor to call {0}');
  static const CREATE_FIELD =
      FixKind('dart.fix.create.field', 49, "Create field '{0}'");
  static const CREATE_FILE =
      FixKind('dart.fix.create.file', 50, "Create file '{0}'");
  static const CREATE_FUNCTION =
      FixKind('dart.fix.create.function', 49, "Create function '{0}'");
  static const CREATE_GETTER =
      FixKind('dart.fix.create.getter', 50, "Create getter '{0}'");
  static const CREATE_LOCAL_VARIABLE = FixKind(
      'dart.fix.create.localVariable', 50, "Create local variable '{0}'");
  static const CREATE_METHOD =
      FixKind('dart.fix.create.method', 50, "Create method '{0}'");
  static const CREATE_MISSING_OVERRIDES = FixKind(
      'dart.fix.create.missingOverrides', 51, 'Create {0} missing override(s)');
  static const CREATE_MIXIN =
      FixKind('dart.fix.create.mixin', 50, "Create mixin '{0}'");
  static const CREATE_NO_SUCH_METHOD = FixKind(
      'dart.fix.create.noSuchMethod', 49, "Create 'noSuchMethod' method");
  static const CREATE_SETTER =
      FixKind('dart.fix.create.setter', 50, "Create setter '{0}'");
  static const DATA_DRIVEN = FixKind('dart.fix.dataDriven', 50, '{0}');
  static const EXTEND_CLASS_FOR_MIXIN =
      FixKind('dart.fix.extendClassForMixin', 50, "Extend the class '{0}'");
  static const IMPORT_ASYNC =
      FixKind('dart.fix.import.async', 49, "Import 'dart:async'");
  static const IMPORT_LIBRARY_PREFIX = FixKind('dart.fix.import.libraryPrefix',
      49, "Use imported library '{0}' with prefix '{1}'");
  static const IMPORT_LIBRARY_PROJECT1 =
      FixKind('dart.fix.import.libraryProject1', 53, "Import library '{0}'");
  static const IMPORT_LIBRARY_PROJECT2 =
      FixKind('dart.fix.import.libraryProject2', 52, "Import library '{0}'");
  static const IMPORT_LIBRARY_PROJECT3 =
      FixKind('dart.fix.import.libraryProject3', 51, "Import library '{0}'");
  static const IMPORT_LIBRARY_SDK =
      FixKind('dart.fix.import.librarySdk', 54, "Import library '{0}'");
  static const IMPORT_LIBRARY_SHOW =
      FixKind('dart.fix.import.libraryShow', 55, "Update library '{0}' import");
  static const INLINE_INVOCATION =
      FixKind('dart.fix.inlineInvocation', 30, "Inline invocation of '{0}'");
  static const INLINE_TYPEDEF =
      FixKind('dart.fix.inlineTypedef', 30, "Inline the definition of '{0}'");
  static const INSERT_SEMICOLON =
      FixKind('dart.fix.insertSemicolon', 50, "Insert ';'");
  static const MAKE_CLASS_ABSTRACT =
      FixKind('dart.fix.makeClassAbstract', 50, "Make class '{0}' abstract");
  static const MAKE_FIELD_NOT_FINAL =
      FixKind('dart.fix.makeFieldNotFinal', 50, "Make field '{0}' not final");
  static const MAKE_FINAL = FixKind('dart.fix.makeFinal', 50, 'Make final');
  static const MAKE_RETURN_TYPE_NULLABLE = FixKind(
      'dart.fix.makeReturnTypeNullable', 50, 'Make the return type nullable');
  static const MOVE_TYPE_ARGUMENTS_TO_CLASS = FixKind(
      'dart.fix.moveTypeArgumentsToClass',
      50,
      'Move type arguments to after class name');
  static const MAKE_VARIABLE_NOT_FINAL = FixKind(
      'dart.fix.makeVariableNotFinal', 50, "Make variable '{0}' not final");
  static const MAKE_VARIABLE_NULLABLE =
      FixKind('dart.fix.makeVariableNullable', 50, "Make '{0}' nullable");
  static const ORGANIZE_IMPORTS =
      FixKind('dart.fix.organize.imports', 50, 'Organize Imports');
  static const QUALIFY_REFERENCE =
      FixKind('dart.fix.qualifyReference', 50, "Use '{0}'");
  static const REMOVE_ANNOTATION =
      FixKind('dart.fix.remove.annotation', 50, "Remove the '{0}' annotation");
  static const REMOVE_ARGUMENT =
      FixKind('dart.fix.remove.argument', 50, 'Remove argument');
  static const REMOVE_AWAIT =
      FixKind('dart.fix.remove.await', 50, 'Remove await');
  static const REMOVE_COMPARISON =
      FixKind('dart.fix.remove.comparison', 50, 'Remove comparison');
  static const REMOVE_CONST =
      FixKind('dart.fix.remove.const', 50, 'Remove const');
  static const REMOVE_DEAD_CODE =
      FixKind('dart.fix.remove.deadCode', 50, 'Remove dead code');
  static const REMOVE_DUPLICATE_CASE = FixKind(
      'dart.fix.remove.duplicateCase', 50, 'Remove duplicate case statement');
  static const REMOVE_EMPTY_CATCH =
      FixKind('dart.fix.remove.emptyCatch', 50, 'Remove empty catch clause');
  static const REMOVE_EMPTY_CONSTRUCTOR_BODY = FixKind(
      'dart.fix.remove.emptyConstructorBody',
      50,
      'Remove empty constructor body');
  static const REMOVE_EMPTY_ELSE =
      FixKind('dart.fix.remove.emptyElse', 50, 'Remove empty else clause');
  static const REMOVE_EMPTY_STATEMENT =
      FixKind('dart.fix.remove.emptyStatement', 50, 'Remove empty statement');
  static const REMOVE_IF_NULL_OPERATOR =
      FixKind('dart.fix.remove.ifNullOperator', 50, "Remove the '??' operator");
  static const REMOVE_INITIALIZER =
      FixKind('dart.fix.remove.initializer', 50, 'Remove initializer');
  static const REMOVE_INTERPOLATION_BRACES = FixKind(
      'dart.fix.remove.interpolationBraces',
      50,
      'Remove unnecessary interpolation braces');
  static const REMOVE_METHOD_DECLARATION = FixKind(
      'dart.fix.remove.methodDeclaration', 50, 'Remove method declaration');
  static const REMOVE_NAME_FROM_COMBINATOR = FixKind(
      'dart.fix.remove.nameFromCombinator', 50, "Remove name from '{0}'");
  static const REMOVE_OPERATOR =
      FixKind('dart.fix.remove.operator', 50, 'Remove the operator');
  static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = FixKind(
      'dart.fix.remove.parametersInGetterDeclaration',
      50,
      'Remove parameters in getter declaration');
  static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = FixKind(
      'dart.fix.remove.parenthesisInGetterInvocation',
      50,
      'Remove parentheses in getter invocation');
  static const REMOVE_QUESTION_MARK =
      FixKind('dart.fix.remove.questionMark', 50, "Remove the '?'");
  static const REMOVE_THIS_EXPRESSION =
      FixKind('dart.fix.remove.thisExpression', 50, 'Remove this expression');
  static const REMOVE_TYPE_ANNOTATION =
      FixKind('dart.fix.remove.typeAnnotation', 50, 'Remove type annotation');
  static const REMOVE_TYPE_ARGUMENTS =
      FixKind('dart.fix.remove.typeArguments', 49, 'Remove type arguments');
  static const REMOVE_UNNECESSARY_CAST = FixKind(
      'dart.fix.remove.unnecessaryCast', 50, 'Remove unnecessary cast',
      appliedTogetherMessage: 'Remove all unnecessary casts in file');
  static const REMOVE_UNNECESSARY_CONST = FixKind(
      'dart.fix.remove.unnecessaryConst',
      50,
      'Remove unnecessary const keyword');
  static const REMOVE_UNNECESSARY_NEW = FixKind(
      'dart.fix.remove.unnecessaryNew', 50, 'Remove unnecessary new keyword');
  static const REMOVE_UNUSED_CATCH_CLAUSE = FixKind(
      'dart.fix.remove.unusedCatchClause', 50, "Remove unused 'catch' clause");
  static const REMOVE_UNUSED_CATCH_STACK = FixKind(
      'dart.fix.remove.unusedCatchStack',
      50,
      'Remove unused stack trace variable');
  static const REMOVE_UNUSED_ELEMENT =
      FixKind('dart.fix.remove.unusedElement', 50, 'Remove unused element');
  static const REMOVE_UNUSED_FIELD =
      FixKind('dart.fix.remove.unusedField', 50, 'Remove unused field');
  static const REMOVE_UNUSED_IMPORT = FixKind(
      'dart.fix.remove.unusedImport', 50, 'Remove unused import',
      appliedTogetherMessage: 'Remove all unused imports in this file');
  static const REMOVE_UNUSED_LABEL =
      FixKind('dart.fix.remove.unusedLabel', 50, 'Remove unused label');
  static const REMOVE_UNUSED_LOCAL_VARIABLE = FixKind(
      'dart.fix.remove.unusedLocalVariable',
      50,
      'Remove unused local variable');
  static const REMOVE_UNUSED_PARAMETER = FixKind(
      'dart.fix.remove.unusedParameter', 50, 'Remove the unused parameter');
  static const RENAME_TO_CAMEL_CASE =
      FixKind('dart.fix.rename.toCamelCase', 50, "Rename to '{0}'");
  static const REPLACE_BOOLEAN_WITH_BOOL = FixKind(
      'dart.fix.replace.booleanWithBool', 50, "Replace 'boolean' with 'bool'",
      appliedTogetherMessage: "Replace all 'boolean' with 'bool' in file");
  static const REPLACE_CASCADE_WITH_DOT =
      FixKind('dart.fix.replace.cascadeWithDot', 50, "Replace '..' with '.'");
  static const REPLACE_COLON_WITH_EQUALS =
      FixKind('dart.fix.replace.colonWithEquals', 50, "Replace ':' with '='");
  static const REPLACE_WITH_FILLED = FixKind(
      'dart.fix.replace.finalWithListFilled', 50, "Replace with 'List.filled'");
  static const REPLACE_FINAL_WITH_CONST = FixKind(
      'dart.fix.replace.finalWithConst', 50, "Replace 'final' with 'const'");
  static const REPLACE_NEW_WITH_CONST = FixKind(
      'dart.fix.replace.newWithConst', 50, "Replace 'new' with 'const'");
  static const REPLACE_NULL_WITH_CLOSURE = FixKind(
      'dart.fix.replace.nullWithClosure', 50, "Replace 'null' with a closure");
  static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
      'dart.fix.replace.returnTypeFuture',
      50,
      "Return 'Future' from 'async' function");
  static const REPLACE_VAR_WITH_DYNAMIC = FixKind(
      'dart.fix.replace.varWithDynamic', 50, "Replace 'var' with 'dynamic'");
  static const REPLACE_WITH_EIGHT_DIGIT_HEX =
      FixKind('dart.fix.replace.withEightDigitHex', 50, "Replace with '{0}'");
  static const REPLACE_WITH_BRACKETS =
      FixKind('dart.fix.replace.withBrackets', 50, 'Replace with { }');
  static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT = FixKind(
      'dart.fix.replace.withConditionalAssignment', 50, 'Replace with ??=');
  static const REPLACE_WITH_EXTENSION_NAME =
      FixKind('dart.fix.replace.withExtensionName', 50, "Replace with '{0}'");
  static const REPLACE_WITH_IDENTIFIER =
      FixKind('dart.fix.replace.withIdentifier', 50, 'Replace with identifier');
  static const REPLACE_WITH_INTERPOLATION = FixKind(
      'dart.fix.replace.withInterpolation', 50, 'Replace with interpolation');
  static const REPLACE_WITH_IS_EMPTY =
      FixKind('dart.fix.replace.withIsEmpty', 50, "Replace with 'isEmpty'");
  static const REPLACE_WITH_IS_NOT_EMPTY = FixKind(
      'dart.fix.replace.withIsNotEmpty', 50, "Replace with 'isNotEmpty'");
  static const REPLACE_WITH_NOT_NULL_AWARE =
      FixKind('dart.fix.replace.withNotNullAware', 50, "Replace with '{0}'");
  static const REPLACE_WITH_NULL_AWARE = FixKind(
      'dart.fix.replace.withNullAware',
      50,
      "Replace the '.' with a '?.' in the invocation");
  static const REPLACE_WITH_TEAR_OFF = FixKind('dart.fix.replace.withTearOff',
      50, 'Replace function literal with tear-off');
  static const REPLACE_WITH_VAR = FixKind(
      'dart.fix.replace.withVar', 50, "Replace type annotation with 'var'");
  static const SORT_CHILD_PROPERTY_LAST = FixKind(
      'dart.fix.sort.childPropertyLast',
      50,
      'Move child property to end of arguments');
  static const UPDATE_SDK_CONSTRAINTS = FixKind(
      'dart.fix.updateSdkConstraints', 50, 'Update the SDK constraints');
  static const USE_CONST =
      FixKind('dart.fix.use.const', 50, 'Change to constant');
  static const USE_EFFECTIVE_INTEGER_DIVISION = FixKind(
      'dart.fix.use.effectiveIntegerDivision',
      50,
      'Use effective integer division ~/');
  static const USE_EQ_EQ_NULL = FixKind(
      'dart.fix.use.eqEqNull', 50, "Use == null instead of 'is Null'",
      appliedTogetherMessage:
          "Use == null instead of 'is Null' everywhere in file");
  static const USE_IS_NOT_EMPTY = FixKind('dart.fix.use.isNotEmpty', 50,
      "Use x.isNotEmpty instead of '!x.isEmpty'");
  static const USE_NOT_EQ_NULL = FixKind(
      'dart.fix.use.notEqNull', 50, "Use != null instead of 'is! Null'",
      appliedTogetherMessage:
          "Use != null instead of 'is! Null' everywhere in file");
  static const USE_RETHROW =
      FixKind('dart.fix.use.rethrow', 50, 'Replace throw with rethrow');
  static const WRAP_IN_FUTURE =
      FixKind('dart.fix.wrap.future', 50, "Wrap in 'Future.value'");
  static const WRAP_IN_TEXT =
      FixKind('dart.fix.flutter.wrap.text', 50, "Wrap in a 'Text' widget");
}

/// An enumeration of quick fix kinds for the errors found in an Android
/// manifest file.
class ManifestFixKind {}

/// An enumeration of quick fix kinds for the errors found in a pubspec file.
class PubspecFixKind {}
