// 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/extensions.dart';
import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/instrumentation/service.dart';
import 'package:analyzer/src/error/codes.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) {
  if (errorCode is LintCode) {
    var lintName = errorCode.name;
    return FixProcessor.lintProducerMap.containsKey(lintName);
  }
  // TODO(brianwilkerson) Either deprecate the part of the protocol supported by
  //  this function, or handle error codes associated with non-dart files.
  return FixProcessor.nonLintProducerMap.containsKey(errorCode) ||
      FixProcessor.nonLintMultiProducerMap.containsKey(errorCode);
}

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

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

  @override
  final ChangeWorkspace workspace;

  @override
  final ResolvedUnitResult resolveResult;

  @override
  final AnalysisError error;

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

  @override
  Future<Map<LibraryElement, Element>> getTopLevelDeclarations(
      String name) async {
    return TopLevelDeclarations(resolveResult).withName(name);
  }

  @override
  Stream<LibraryElement> librariesWithExtensions(String memberName) {
    return Extensions(resolveResult).libraries(memberName);
  }
}

/// An enumeration of quick fix kinds found in a Dart file.
class DartFixKind {
  static const ADD_ASYNC = FixKind(
    'dart.fix.add.async',
    DartFixKindPriority.DEFAULT,
    "Add 'async' modifier",
  );
  static const ADD_AWAIT = FixKind(
    'dart.fix.add.await',
    DartFixKindPriority.DEFAULT,
    "Add 'await' keyword",
  );
  static const ADD_AWAIT_MULTI = FixKind(
    'dart.fix.add.await.multi',
    DartFixKindPriority.IN_FILE,
    "Add 'await's everywhere in file",
  );
  static const ADD_EXPLICIT_CAST = FixKind(
    'dart.fix.add.explicitCast',
    DartFixKindPriority.DEFAULT,
    'Add cast',
  );
  static const ADD_CONST = FixKind(
    'dart.fix.add.const',
    DartFixKindPriority.DEFAULT,
    "Add 'const' modifier",
  );
  static const ADD_CONST_MULTI = FixKind(
    'dart.fix.add.const.multi',
    DartFixKindPriority.IN_FILE,
    "Add 'const' modifiers everywhere in file",
  );
  static const ADD_CURLY_BRACES = FixKind(
    'dart.fix.add.curlyBraces',
    DartFixKindPriority.DEFAULT,
    'Add curly braces',
  );
  static const ADD_CURLY_BRACES_MULTI = FixKind(
    'dart.fix.add.curlyBraces.multi',
    DartFixKindPriority.IN_FILE,
    'Add curly braces everywhere in file',
  );
  static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = FixKind(
    'dart.fix.add.diagnosticPropertyReference',
    DartFixKindPriority.DEFAULT,
    'Add a debug reference to this property',
  );
  static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE_MULTI = FixKind(
    'dart.fix.add.diagnosticPropertyReference.multi',
    DartFixKindPriority.IN_FILE,
    'Add missing debug property references everywhere in file',
  );
  static const ADD_EOL_AT_END_OF_FILE = FixKind(
    'dart.fix.add.eolAtEndOfFile',
    DartFixKindPriority.DEFAULT,
    'Add EOL at end of file',
  );
  static const ADD_FIELD_FORMAL_PARAMETERS = FixKind(
    'dart.fix.add.fieldFormalParameters',
    70,
    'Add final field formal parameters',
  );
  static const ADD_KEY_TO_CONSTRUCTORS = FixKind(
    'dart.fix.add.keyToConstructors',
    DartFixKindPriority.DEFAULT,
    "Add 'key' to constructors",
  );
  static const ADD_LATE = FixKind(
    'dart.fix.add.late',
    DartFixKindPriority.DEFAULT,
    "Add 'late' modifier",
  );
  static const ADD_LEADING_NEWLINE_TO_STRING = FixKind(
    'dart.fix.add.leadingNewlineToString',
    DartFixKindPriority.DEFAULT,
    'Add leading new line',
  );
  static const ADD_LEADING_NEWLINE_TO_STRING_MULTI = FixKind(
    'dart.fix.add.leadingNewlineToString.multi',
    DartFixKindPriority.DEFAULT,
    'Add leading new line everywhere in file',
  );
  static const ADD_MISSING_ENUM_CASE_CLAUSES = FixKind(
    'dart.fix.add.missingEnumCaseClauses',
    DartFixKindPriority.DEFAULT,
    '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',
    DartFixKindPriority.DEFAULT,
    'Add != null',
  );
  static const ADD_NE_NULL_MULTI = FixKind(
    'dart.fix.add.neNull.multi',
    DartFixKindPriority.IN_FILE,
    'Add != null everywhere in file',
  );
  static const ADD_NULL_CHECK = FixKind(
    'dart.fix.add.nullCheck',
    DartFixKindPriority.DEFAULT - 1,
    'Add a null check (!)',
  );
  static const ADD_OVERRIDE = FixKind(
    'dart.fix.add.override',
    DartFixKindPriority.DEFAULT,
    "Add '@override' annotation",
  );
  static const ADD_OVERRIDE_MULTI = FixKind(
    'dart.fix.add.override.multi',
    DartFixKindPriority.IN_FILE,
    "Add '@override' annotations everywhere in file",
  );
  static const ADD_REQUIRED = FixKind(
    'dart.fix.add.required',
    DartFixKindPriority.DEFAULT,
    "Add '@required' annotation",
  );
  static const ADD_REQUIRED_MULTI = FixKind(
    'dart.fix.add.required.multi',
    DartFixKindPriority.IN_FILE,
    "Add '@required' annotations everywhere in file",
  );
  static const ADD_REQUIRED2 = FixKind(
    'dart.fix.add.required',
    DartFixKindPriority.DEFAULT,
    "Add 'required' keyword",
  );
  static const ADD_REQUIRED2_MULTI = FixKind(
    'dart.fix.add.required.multi',
    DartFixKindPriority.IN_FILE,
    "Add 'required' keywords everywhere in file",
  );
  static const ADD_RETURN_NULL = FixKind(
    'dart.fix.add.returnNull',
    DartFixKindPriority.DEFAULT,
    "Add 'return null'",
  );
  static const ADD_RETURN_NULL_MULTI = FixKind(
    'dart.fix.add.returnNull.multi',
    DartFixKindPriority.IN_FILE,
    "Add 'return null' everywhere in file",
  );
  static const ADD_RETURN_TYPE = FixKind(
    'dart.fix.add.returnType',
    DartFixKindPriority.DEFAULT,
    'Add return type',
  );
  static const ADD_RETURN_TYPE_MULTI = FixKind(
    'dart.fix.add.returnType.multi',
    DartFixKindPriority.IN_FILE,
    'Add return types everywhere in file',
  );
  static const ADD_STATIC = FixKind(
    'dart.fix.add.static',
    DartFixKindPriority.DEFAULT,
    "Add 'static' modifier",
  );
  static const ADD_SUPER_CONSTRUCTOR_INVOCATION = FixKind(
    'dart.fix.add.superConstructorInvocation',
    DartFixKindPriority.DEFAULT,
    'Add super constructor {0} invocation',
  );
  static const ADD_SWITCH_CASE_BREAK = FixKind(
    'dart.fix.add.switchCaseReturn',
    DartFixKindPriority.DEFAULT,
    "Add 'break'",
  );
  static const ADD_SWITCH_CASE_BREAK_MULTI = FixKind(
    'dart.fix.add.switchCaseReturn.multi',
    DartFixKindPriority.IN_FILE,
    "Add 'break' everywhere in file",
  );
  static const ADD_TRAILING_COMMA = FixKind(
    'dart.fix.add.trailingComma',
    DartFixKindPriority.DEFAULT,
    'Add trailing comma',
  );
  static const ADD_TRAILING_COMMA_MULTI = FixKind(
    'dart.fix.add.trailingComma.multi',
    DartFixKindPriority.IN_FILE,
    'Add trailing commas everywhere in file',
  );
  static const ADD_TYPE_ANNOTATION = FixKind(
    'dart.fix.add.typeAnnotation',
    DartFixKindPriority.DEFAULT,
    'Add type annotation',
  );
  static const ADD_TYPE_ANNOTATION_MULTI = FixKind(
    'dart.fix.add.typeAnnotation.multi',
    DartFixKindPriority.IN_FILE,
    'Add type annotations everywhere in file',
  );
  static const CHANGE_ARGUMENT_NAME = FixKind(
    'dart.fix.change.argumentName',
    60,
    "Change to '{0}'",
  );
  static const CHANGE_TO = FixKind(
    'dart.fix.change.to',
    DartFixKindPriority.DEFAULT + 1,
    "Change to '{0}'",
  );
  static const CHANGE_TO_NEAREST_PRECISE_VALUE = FixKind(
    'dart.fix.change.toNearestPreciseValue',
    DartFixKindPriority.DEFAULT,
    'Change to nearest precise int-as-double value: {0}',
  );
  static const CHANGE_TO_STATIC_ACCESS = FixKind(
    'dart.fix.change.toStaticAccess',
    DartFixKindPriority.DEFAULT,
    "Change access to static using '{0}'",
  );
  static const CHANGE_TYPE_ANNOTATION = FixKind(
    'dart.fix.change.typeAnnotation',
    DartFixKindPriority.DEFAULT,
    "Change '{0}' to '{1}' type annotation",
  );
  static const CONVERT_CLASS_TO_ENUM = FixKind(
    'dart.fix.convert.classToEnum',
    DartFixKindPriority.DEFAULT,
    'Convert class to an enum',
  );
  static const CONVERT_CLASS_TO_ENUM_MULTI = FixKind(
    'dart.fix.convert.classToEnum.multi',
    DartFixKindPriority.DEFAULT,
    'Convert classes to enums in file',
  );
  static const CONVERT_FLUTTER_CHILD = FixKind(
    'dart.fix.flutter.convert.childToChildren',
    DartFixKindPriority.DEFAULT,
    'Convert to children:',
  );
  static const CONVERT_FLUTTER_CHILDREN = FixKind(
    'dart.fix.flutter.convert.childrenToChild',
    DartFixKindPriority.DEFAULT,
    'Convert to child:',
  );
  static const CONVERT_INTO_BLOCK_BODY = FixKind(
    'dart.fix.convert.bodyToBlock',
    DartFixKindPriority.DEFAULT,
    'Convert to block body',
  );
  static const CONVERT_FOR_EACH_TO_FOR_LOOP = FixKind(
    'dart.fix.convert.toForLoop',
    DartFixKindPriority.DEFAULT,
    "Convert 'forEach' to a 'for' loop",
  );
  static const CONVERT_FOR_EACH_TO_FOR_LOOP_MULTI = FixKind(
    'dart.fix.convert.toForLoop.multi',
    DartFixKindPriority.IN_FILE,
    "Convert 'forEach' to a 'for' loop everywhere in file",
  );
  static const CONVERT_INTO_EXPRESSION_BODY = FixKind(
    'dart.fix.convert.toExpressionBody',
    DartFixKindPriority.DEFAULT,
    'Convert to expression body',
  );
  static const CONVERT_INTO_EXPRESSION_BODY_MULTI = FixKind(
    'dart.fix.convert.toExpressionBody.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to expression bodies everywhere in file',
  );
  static const CONVERT_QUOTES = FixKind(
    'dart.fix.convert.quotes',
    DartFixKindPriority.DEFAULT,
    'Convert the quotes and remove escapes',
  );
  static const CONVERT_QUOTES_MULTI = FixKind(
    'dart.fix.convert.quotes.multi',
    DartFixKindPriority.IN_FILE,
    'Convert the quotes and remove escapes everywhere in file',
  );
  static const CONVERT_TO_CASCADE = FixKind(
    'dart.fix.convert.toCascade',
    DartFixKindPriority.DEFAULT,
    'Convert to cascade notation',
  );
  static const CONVERT_TO_CONTAINS = FixKind(
    'dart.fix.convert.toContains',
    DartFixKindPriority.DEFAULT,
    "Convert to using 'contains'",
  );
  static const CONVERT_TO_CONTAINS_MULTI = FixKind(
    'dart.fix.convert.toContains.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to using 'contains' everywhere in file",
  );
  static const CONVERT_TO_DOUBLE_QUOTED_STRING = FixKind(
    'dart.fix.convert.toDoubleQuotedString',
    DartFixKindPriority.DEFAULT,
    'Convert to double quoted string',
  );
  static const CONVERT_TO_DOUBLE_QUOTED_STRING_MULTI = FixKind(
    'dart.fix.convert.toDoubleQuotedString.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to double quoted strings everywhere in file',
  );
  static const CONVERT_TO_FOR_ELEMENT = FixKind(
    'dart.fix.convert.toForElement',
    DartFixKindPriority.DEFAULT,
    "Convert to a 'for' element",
  );
  static const CONVERT_TO_FOR_ELEMENT_MULTI = FixKind(
    'dart.fix.convert.toForElement.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to 'for' elements everywhere in file",
  );
  static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX = FixKind(
    'dart.fix.convert.toGenericFunctionSyntax',
    DartFixKindPriority.DEFAULT,
    "Convert into 'Function' syntax",
  );
  static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX_MULTI = FixKind(
    'dart.fix.convert.toGenericFunctionSyntax.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to 'Function' syntax everywhere in file",
  );
  static const CONVERT_TO_FUNCTION_DECLARATION = FixKind(
    'dart.fix.convert.toFunctionDeclaration',
    DartFixKindPriority.DEFAULT,
    'Convert to function declaration',
  );
  static const CONVERT_TO_FUNCTION_DECLARATION_MULTI = FixKind(
    'dart.fix.convert.toFunctionDeclaration.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to function declaration everywhere in file',
  );
  static const CONVERT_TO_IF_ELEMENT = FixKind(
    'dart.fix.convert.toIfElement',
    DartFixKindPriority.DEFAULT,
    "Convert to an 'if' element",
  );
  static const CONVERT_TO_IF_ELEMENT_MULTI = FixKind(
    'dart.fix.convert.toIfElement.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to 'if' elements everywhere in file",
  );
  static const CONVERT_TO_IF_NULL = FixKind(
    'dart.fix.convert.toIfNull',
    DartFixKindPriority.DEFAULT,
    "Convert to use '??'",
  );
  static const CONVERT_TO_IF_NULL_MULTI = FixKind(
    'dart.fix.convert.toIfNull.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to '??'s everywhere in file",
  );
  static const CONVERT_TO_INITIALIZING_FORMAL = FixKind(
    'dart.fix.convert.toInitializingFormal',
    DartFixKindPriority.DEFAULT,
    'Convert to an initializing formal parameter',
  );
  static const CONVERT_TO_INT_LITERAL = FixKind(
    'dart.fix.convert.toIntLiteral',
    DartFixKindPriority.DEFAULT,
    'Convert to an int literal',
  );
  static const CONVERT_TO_INT_LITERAL_MULTI = FixKind(
    'dart.fix.convert.toIntLiteral.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to int literals everywhere in file',
  );
  static const CONVERT_TO_IS_NOT = FixKind(
    'dart.fix.convert.isNot',
    DartFixKindPriority.DEFAULT,
    'Convert to is!',
  );
  static const CONVERT_TO_IS_NOT_MULTI = FixKind(
    'dart.fix.convert.isNot.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to is! everywhere in file',
  );
  static const CONVERT_TO_LINE_COMMENT = FixKind(
    'dart.fix.convert.toLineComment',
    DartFixKindPriority.DEFAULT,
    'Convert to line documentation comment',
  );
  static const CONVERT_TO_LINE_COMMENT_MULTI = FixKind(
    'dart.fix.convert.toLineComment.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to line documentation comments everywhere in file',
  );
  static const CONVERT_TO_LIST_LITERAL = FixKind(
    'dart.fix.convert.toListLiteral',
    DartFixKindPriority.DEFAULT,
    'Convert to list literal',
  );
  static const CONVERT_TO_LIST_LITERAL_MULTI = FixKind(
    'dart.fix.convert.toListLiteral.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to list literals everywhere in file',
  );
  static const CONVERT_TO_MAP_LITERAL = FixKind(
    'dart.fix.convert.toMapLiteral',
    DartFixKindPriority.DEFAULT,
    'Convert to map literal',
  );
  static const CONVERT_TO_MAP_LITERAL_MULTI = FixKind(
    'dart.fix.convert.toMapLiteral.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to map literals everywhere in file',
  );
  static const CONVERT_TO_NAMED_ARGUMENTS = FixKind(
    'dart.fix.convert.toNamedArguments',
    DartFixKindPriority.DEFAULT,
    'Convert to named arguments',
  );
  static const CONVERT_TO_NULL_AWARE = FixKind(
    'dart.fix.convert.toNullAware',
    DartFixKindPriority.DEFAULT,
    "Convert to use '?.'",
  );
  static const CONVERT_TO_NULL_AWARE_MULTI = FixKind(
    'dart.fix.convert.toNullAware.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to use '?.' everywhere in file",
  );
  static const CONVERT_TO_NULL_AWARE_SPREAD = FixKind(
    'dart.fix.convert.toNullAwareSpread',
    DartFixKindPriority.DEFAULT,
    "Convert to use '...?'",
  );
  static const CONVERT_TO_NULL_AWARE_SPREAD_MULTI = FixKind(
    'dart.fix.convert.toNullAwareSpread.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to use '...?' everywhere in file",
  );
  static const CONVERT_TO_ON_TYPE = FixKind(
    'dart.fix.convert.toOnType',
    DartFixKindPriority.DEFAULT,
    "Convert to 'on {0}'",
  );
  static const CONVERT_TO_PACKAGE_IMPORT = FixKind(
    'dart.fix.convert.toPackageImport',
    DartFixKindPriority.DEFAULT,
    "Convert to 'package:' import",
  );
  static const CONVERT_TO_PACKAGE_IMPORT_MULTI = FixKind(
    'dart.fix.convert.toPackageImport.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to 'package:' imports everywhere in file",
  );
  static const CONVERT_TO_RAW_STRING = FixKind(
    'dart.fix.convert.toRawString',
    DartFixKindPriority.DEFAULT,
    'Convert to raw string',
  );
  static const CONVERT_TO_RAW_STRING_MULTI = FixKind(
    'dart.fix.convert.toRawString.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to raw strings everywhere in file',
  );
  static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
    'dart.fix.convert.toRelativeImport',
    DartFixKindPriority.DEFAULT,
    'Convert to relative import',
  );
  static const CONVERT_TO_RELATIVE_IMPORT_MULTI = FixKind(
    'dart.fix.convert.toRelativeImport.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to relative imports everywhere in file',
  );
  static const CONVERT_TO_SET_LITERAL = FixKind(
    'dart.fix.convert.toSetLiteral',
    DartFixKindPriority.DEFAULT,
    'Convert to set literal',
  );
  static const CONVERT_TO_SET_LITERAL_MULTI = FixKind(
    'dart.fix.convert.toSetLiteral.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to set literals everywhere in file',
  );
  static const CONVERT_TO_SINGLE_QUOTED_STRING = FixKind(
    'dart.fix.convert.toSingleQuotedString',
    DartFixKindPriority.DEFAULT,
    'Convert to single quoted string',
  );
  static const CONVERT_TO_SINGLE_QUOTED_STRING_MULTI = FixKind(
    'dart.fix.convert.toSingleQuotedString.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to single quoted strings everywhere in file',
  );
  static const CONVERT_TO_SPREAD = FixKind(
    'dart.fix.convert.toSpread',
    DartFixKindPriority.DEFAULT,
    'Convert to a spread',
  );
  static const CONVERT_TO_SPREAD_MULTI = FixKind(
    'dart.fix.convert.toSpread.multi',
    DartFixKindPriority.IN_FILE,
    'Convert to spreads everywhere in file',
  );
  static const CONVERT_TO_SUPER_PARAMETERS = FixKind(
    'dart.fix.convert.toSuperParameters',
    30,
    'Convert to using super parameters',
  );
  static const CONVERT_TO_SUPER_PARAMETERS_MULTI = FixKind(
    'dart.fix.convert.toSuperParameters.multi',
    30,
    'Convert to using super parameters everywhere in file',
  );
  static const CONVERT_TO_WHERE_TYPE = FixKind(
    'dart.fix.convert.toWhereType',
    DartFixKindPriority.DEFAULT,
    "Convert to use 'whereType'",
  );
  static const CONVERT_TO_WHERE_TYPE_MULTI = FixKind(
    'dart.fix.convert.toWhereType.multi',
    DartFixKindPriority.IN_FILE,
    "Convert to using 'whereType' everywhere in file",
  );
  static const CREATE_CLASS = FixKind(
    'dart.fix.create.class',
    DartFixKindPriority.DEFAULT,
    "Create class '{0}'",
  );
  static const CREATE_CONSTRUCTOR = FixKind(
    'dart.fix.create.constructor',
    DartFixKindPriority.DEFAULT,
    "Create constructor '{0}'",
  );
  static const CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS = FixKind(
    'dart.fix.create.constructorForFinalFields',
    DartFixKindPriority.DEFAULT,
    'Create constructor for final fields',
  );
  static const CREATE_CONSTRUCTOR_SUPER = FixKind(
    'dart.fix.create.constructorSuper',
    DartFixKindPriority.DEFAULT,
    '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',
    DartFixKindPriority.DEFAULT,
    "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',
    DartFixKindPriority.DEFAULT,
    "Create getter '{0}'",
  );
  static const CREATE_LOCAL_VARIABLE = FixKind(
    'dart.fix.create.localVariable',
    DartFixKindPriority.DEFAULT,
    "Create local variable '{0}'",
  );
  static const CREATE_METHOD = FixKind(
    'dart.fix.create.method',
    DartFixKindPriority.DEFAULT,
    "Create method '{0}'",
  );

  // todo (pq): used by LintNames.hash_and_equals; consider removing.
  static const CREATE_METHOD_MULTI = FixKind(
    'dart.fix.create.method.multi',
    DartFixKindPriority.IN_FILE,
    'Create methods in file',
  );
  static const CREATE_MISSING_OVERRIDES = FixKind(
    'dart.fix.create.missingOverrides',
    DartFixKindPriority.DEFAULT + 1,
    'Create {0} missing override{1}',
  );
  static const CREATE_MIXIN = FixKind(
    'dart.fix.create.mixin',
    DartFixKindPriority.DEFAULT,
    "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',
    DartFixKindPriority.DEFAULT,
    "Create setter '{0}'",
  );
  static const DATA_DRIVEN = FixKind(
    'dart.fix.dataDriven',
    DartFixKindPriority.DEFAULT,
    '{0}',
  );
  static const EXTEND_CLASS_FOR_MIXIN = FixKind(
    'dart.fix.extendClassForMixin',
    DartFixKindPriority.DEFAULT,
    "Extend the class '{0}'",
  );
  static const EXTRACT_LOCAL_VARIABLE = FixKind(
    'dart.fix.extractLocalVariable',
    DartFixKindPriority.DEFAULT,
    'Extract local variable',
  );
  static const IGNORE_ERROR_LINE = FixKind(
    'dart.fix.ignore.line',
    DartFixKindPriority.IGNORE,
    "Ignore '{0}' for this line",
  );
  static const IGNORE_ERROR_FILE = FixKind(
    'dart.fix.ignore.file',
    DartFixKindPriority.IGNORE - 1,
    "Ignore '{0}' for this file",
  );
  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',
    DartFixKindPriority.DEFAULT + 3,
    "Import library '{0}'",
  );
  static const IMPORT_LIBRARY_PROJECT2 = FixKind(
    'dart.fix.import.libraryProject2',
    DartFixKindPriority.DEFAULT + 2,
    "Import library '{0}'",
  );
  static const IMPORT_LIBRARY_PROJECT3 = FixKind(
    'dart.fix.import.libraryProject3',
    DartFixKindPriority.DEFAULT + 1,
    "Import library '{0}'",
  );
  static const IMPORT_LIBRARY_SDK = FixKind(
    'dart.fix.import.librarySdk',
    DartFixKindPriority.DEFAULT + 4,
    "Import library '{0}'",
  );
  static const IMPORT_LIBRARY_SHOW = FixKind(
    'dart.fix.import.libraryShow',
    DartFixKindPriority.DEFAULT + 5,
    "Update library '{0}' import",
  );
  static const INLINE_INVOCATION = FixKind(
    'dart.fix.inlineInvocation',
    DartFixKindPriority.DEFAULT - 20,
    "Inline invocation of '{0}'",
  );
  static const INLINE_INVOCATION_MULTI = FixKind(
    'dart.fix.inlineInvocation.multi',
    DartFixKindPriority.IN_FILE - 20,
    'Inline invocations everywhere in file',
  );
  static const INLINE_TYPEDEF = FixKind(
    'dart.fix.inlineTypedef',
    DartFixKindPriority.DEFAULT - 20,
    "Inline the definition of '{0}'",
  );
  static const INLINE_TYPEDEF_MULTI = FixKind(
    'dart.fix.inlineTypedef.multi',
    DartFixKindPriority.IN_FILE - 20,
    'Inline type definitions everywhere in file',
  );
  static const INSERT_SEMICOLON = FixKind(
    'dart.fix.insertSemicolon',
    DartFixKindPriority.DEFAULT,
    "Insert ';'",
  );
  static const MAKE_CLASS_ABSTRACT = FixKind(
    'dart.fix.makeClassAbstract',
    DartFixKindPriority.DEFAULT,
    "Make class '{0}' abstract",
  );
  static const MAKE_FIELD_NOT_FINAL = FixKind(
    'dart.fix.makeFieldNotFinal',
    DartFixKindPriority.DEFAULT,
    "Make field '{0}' not final",
  );
  static const MAKE_FIELD_PUBLIC = FixKind(
    'dart.fix.makeFieldPublic',
    DartFixKindPriority.DEFAULT,
    "Make field '{0}' public",
  );
  static const MAKE_FINAL = FixKind(
    'dart.fix.makeFinal',
    DartFixKindPriority.DEFAULT,
    'Make final',
  );

  // todo (pq): consider parameterizing: 'Make {fields} final...'
  static const MAKE_FINAL_MULTI = FixKind(
    'dart.fix.makeFinal.multi',
    DartFixKindPriority.IN_FILE,
    'Make final where possible in file',
  );
  static const MAKE_RETURN_TYPE_NULLABLE = FixKind(
    'dart.fix.makeReturnTypeNullable',
    DartFixKindPriority.DEFAULT,
    'Make the return type nullable',
  );
  static const MOVE_TYPE_ARGUMENTS_TO_CLASS = FixKind(
    'dart.fix.moveTypeArgumentsToClass',
    DartFixKindPriority.DEFAULT,
    'Move type arguments to after class name',
  );
  static const MAKE_CONDITIONAL_ON_DEBUG_MODE = FixKind(
    'dart.fix.flutter.makeConditionalOnDebugMode',
    DartFixKindPriority.DEFAULT,
    "Make conditional on 'kDebugMode'",
  );
  static const MAKE_VARIABLE_NOT_FINAL = FixKind(
    'dart.fix.makeVariableNotFinal',
    DartFixKindPriority.DEFAULT,
    "Make variable '{0}' not final",
  );
  static const MAKE_VARIABLE_NULLABLE = FixKind(
    'dart.fix.makeVariableNullable',
    DartFixKindPriority.DEFAULT,
    "Make '{0}' nullable",
  );
  static const ORGANIZE_IMPORTS = FixKind(
    'dart.fix.organize.imports',
    DartFixKindPriority.DEFAULT,
    'Organize Imports',
  );
  static const QUALIFY_REFERENCE = FixKind(
    'dart.fix.qualifyReference',
    DartFixKindPriority.DEFAULT,
    "Use '{0}'",
  );
  static const REMOVE_ABSTRACT = FixKind(
    'dart.fix.remove.abstract',
    DartFixKindPriority.DEFAULT,
    "Remove the 'abstract' keyword",
  );
  static const REMOVE_ABSTRACT_MULTI = FixKind(
    'dart.fix.remove.abstract.multi',
    DartFixKindPriority.IN_FILE,
    "Remove the 'abstract' keyword everywhere in file",
  );
  static const REMOVE_ANNOTATION = FixKind(
    'dart.fix.remove.annotation',
    DartFixKindPriority.DEFAULT,
    "Remove the '{0}' annotation",
  );
  static const REMOVE_ARGUMENT = FixKind(
    'dart.fix.remove.argument',
    DartFixKindPriority.DEFAULT,
    'Remove argument',
  );

  // todo (pq): used by LintNames.avoid_redundant_argument_values; consider a parameterized message
  static const REMOVE_ARGUMENT_MULTI = FixKind(
    'dart.fix.remove.argument.multi',
    DartFixKindPriority.IN_FILE,
    'Remove arguments in file',
  );
  static const REMOVE_ASSIGNMENT = FixKind(
    'dart.fix.remove.assignment',
    DartFixKindPriority.DEFAULT,
    'Remove assignment',
  );
  static const REMOVE_ASSIGNMENT_MULTI = FixKind(
    'dart.fix.remove.assignment.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary assignments everywhere in file',
  );
  static const REMOVE_AWAIT = FixKind(
    'dart.fix.remove.await',
    DartFixKindPriority.DEFAULT,
    'Remove await',
  );
  static const REMOVE_AWAIT_MULTI = FixKind(
    'dart.fix.remove.await.multi',
    DartFixKindPriority.IN_FILE,
    'Remove awaits in file',
  );
  static const REMOVE_COMPARISON = FixKind(
    'dart.fix.remove.comparison',
    DartFixKindPriority.DEFAULT,
    'Remove comparison',
  );
  static const REMOVE_COMPARISON_MULTI = FixKind(
    'dart.fix.remove.comparison.multi',
    DartFixKindPriority.IN_FILE,
    'Remove comparisons in file',
  );
  static const REMOVE_CONST = FixKind(
    'dart.fix.remove.const',
    DartFixKindPriority.DEFAULT,
    'Remove const',
  );
  static const REMOVE_CONSTRUCTOR_NAME = FixKind(
    'dart.fix.remove.constructorName',
    DartFixKindPriority.DEFAULT,
    "Remove 'new'",
  );
  static const REMOVE_CONSTRUCTOR_NAME_MULTI = FixKind(
    'dart.fix.remove.constructorName.multi',
    DartFixKindPriority.IN_FILE,
    'Remove constructor names in file',
  );
  static const REMOVE_DEAD_CODE = FixKind(
    'dart.fix.remove.deadCode',
    DartFixKindPriority.DEFAULT,
    'Remove dead code',
  );
  static const REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE = FixKind(
    'dart.fix.remove.deprecatedNewInCommentReference',
    DartFixKindPriority.DEFAULT,
    'Remove deprecated new keyword',
  );
  static const REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE_MULTI = FixKind(
    'dart.fix.remove.deprecatedNewInCommentReference.multi',
    DartFixKindPriority.IN_FILE,
    'Remove deprecated new keyword in file',
  );
  static const REMOVE_DUPLICATE_CASE = FixKind(
    'dart.fix.remove.duplicateCase',
    DartFixKindPriority.DEFAULT,
    'Remove duplicate case statement',
  );

  // todo (pq): is this dangerous to bulk apply?  Consider removing.
  static const REMOVE_DUPLICATE_CASE_MULTI = FixKind(
    'dart.fix.remove.duplicateCase.multi',
    DartFixKindPriority.IN_FILE,
    'Remove duplicate case statement',
  );
  static const REMOVE_EMPTY_CATCH = FixKind(
    'dart.fix.remove.emptyCatch',
    DartFixKindPriority.DEFAULT,
    'Remove empty catch clause',
  );
  static const REMOVE_EMPTY_CATCH_MULTI = FixKind(
    'dart.fix.remove.emptyCatch.multi',
    DartFixKindPriority.IN_FILE,
    'Remove empty catch clauses everywhere in file',
  );
  static const REMOVE_EMPTY_CONSTRUCTOR_BODY = FixKind(
    'dart.fix.remove.emptyConstructorBody',
    DartFixKindPriority.DEFAULT,
    'Remove empty constructor body',
  );
  static const REMOVE_EMPTY_CONSTRUCTOR_BODY_MULTI = FixKind(
    'dart.fix.remove.emptyConstructorBody.multi',
    DartFixKindPriority.IN_FILE,
    'Remove empty constructor bodies in file',
  );
  static const REMOVE_EMPTY_ELSE = FixKind(
    'dart.fix.remove.emptyElse',
    DartFixKindPriority.DEFAULT,
    'Remove empty else clause',
  );
  static const REMOVE_EMPTY_ELSE_MULTI = FixKind(
    'dart.fix.remove.emptyElse.multi',
    DartFixKindPriority.IN_FILE,
    'Remove empty else clauses everywhere in file',
  );
  static const REMOVE_EMPTY_STATEMENT = FixKind(
    'dart.fix.remove.emptyStatement',
    DartFixKindPriority.DEFAULT,
    'Remove empty statement',
  );
  static const REMOVE_EMPTY_STATEMENT_MULTI = FixKind(
    'dart.fix.remove.emptyStatement.multi',
    DartFixKindPriority.IN_FILE,
    'Remove empty statements everywhere in file',
  );
  static const REMOVE_IF_NULL_OPERATOR = FixKind(
    'dart.fix.remove.ifNullOperator',
    DartFixKindPriority.DEFAULT,
    "Remove the '??' operator",
  );
  static const REMOVE_IF_NULL_OPERATOR_MULTI = FixKind(
    'dart.fix.remove.ifNullOperator.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unnecessary '??' operators everywhere in file",
  );
  static const REMOVE_INITIALIZER = FixKind(
    'dart.fix.remove.initializer',
    DartFixKindPriority.DEFAULT,
    'Remove initializer',
  );
  static const REMOVE_INITIALIZER_MULTI = FixKind(
    'dart.fix.remove.initializer.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary initializers everywhere in file',
  );
  static const REMOVE_INTERPOLATION_BRACES = FixKind(
    'dart.fix.remove.interpolationBraces',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary interpolation braces',
  );
  static const REMOVE_INTERPOLATION_BRACES_MULTI = FixKind(
    'dart.fix.remove.interpolationBraces.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary interpolation braces everywhere in file',
  );
  static const REMOVE_LEADING_UNDERSCORE = FixKind(
    'dart.fix.remove.leadingUnderscore',
    DartFixKindPriority.DEFAULT,
    'Remove leading underscore',
  );
  static const REMOVE_LEADING_UNDERSCORE_MULTI = FixKind(
    'dart.fix.remove.leadingUnderscore.multi',
    DartFixKindPriority.IN_FILE,
    'Remove leading underscores in file',
  );
  static const REMOVE_METHOD_DECLARATION = FixKind(
    'dart.fix.remove.methodDeclaration',
    DartFixKindPriority.DEFAULT,
    'Remove method declaration',
  );

  // todo (pq): parameterize to make scope explicit
  static const REMOVE_METHOD_DECLARATION_MULTI = FixKind(
    'dart.fix.remove.methodDeclaration.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary method declarations in file',
  );
  static const REMOVE_NAME_FROM_COMBINATOR = FixKind(
    'dart.fix.remove.nameFromCombinator',
    DartFixKindPriority.DEFAULT,
    "Remove name from '{0}'",
  );
  static const REMOVE_NON_NULL_ASSERTION = FixKind(
    'dart.fix.remove.nonNullAssertion',
    DartFixKindPriority.DEFAULT,
    "Remove the '!'",
  );
  static const REMOVE_NON_NULL_ASSERTION_MULTI = FixKind(
    'dart.fix.remove.nonNullAssertion.multi',
    DartFixKindPriority.IN_FILE,
    "Remove '!'s in file",
  );
  static const REMOVE_OPERATOR = FixKind(
    'dart.fix.remove.operator',
    DartFixKindPriority.DEFAULT,
    'Remove the operator',
  );
  static const REMOVE_OPERATOR_MULTI = FixKind(
    'dart.fix.remove.operator.multi.multi',
    DartFixKindPriority.IN_FILE,
    'Remove operators in file',
  );
  static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = FixKind(
    'dart.fix.remove.parametersInGetterDeclaration',
    DartFixKindPriority.DEFAULT,
    'Remove parameters in getter declaration',
  );
  static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = FixKind(
    'dart.fix.remove.parenthesisInGetterInvocation',
    DartFixKindPriority.DEFAULT,
    'Remove parentheses in getter invocation',
  );
  static const REMOVE_QUESTION_MARK = FixKind(
    'dart.fix.remove.questionMark',
    DartFixKindPriority.DEFAULT,
    "Remove the '?'",
  );
  static const REMOVE_QUESTION_MARK_MULTI = FixKind(
    'dart.fix.remove.questionMark.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary question marks in file',
  );
  static const REMOVE_RETURNED_VALUE = FixKind(
    'dart.fix.remove.returnedValue',
    DartFixKindPriority.DEFAULT,
    'Remove invalid returned value',
  );
  static const REMOVE_RETURNED_VALUE_MULTI = FixKind(
    'dart.fix.remove.returnedValue.multi',
    DartFixKindPriority.IN_FILE,
    'Remove invalid returned values in file',
  );
  static const REMOVE_THIS_EXPRESSION = FixKind(
    'dart.fix.remove.thisExpression',
    DartFixKindPriority.DEFAULT,
    "Remove 'this' expression",
  );
  static const REMOVE_THIS_EXPRESSION_MULTI = FixKind(
    'dart.fix.remove.thisExpression.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unnecessary 'this' expressions everywhere in file",
  );
  static const REMOVE_TYPE_ANNOTATION = FixKind(
    'dart.fix.remove.typeAnnotation',
    DartFixKindPriority.DEFAULT,
    'Remove type annotation',
  );
  static const REMOVE_TYPE_ANNOTATION_MULTI = FixKind(
    'dart.fix.remove.typeAnnotation.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary type annotations in file',
  );
  static const REMOVE_TYPE_ARGUMENTS = FixKind(
    'dart.fix.remove.typeArguments',
    49,
    'Remove type arguments',
  );
  static const REMOVE_UNNECESSARY_CAST = FixKind(
    'dart.fix.remove.unnecessaryCast',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary cast',
  );
  static const REMOVE_UNNECESSARY_CAST_MULTI = FixKind(
    'dart.fix.remove.unnecessaryCast.multi',
    DartFixKindPriority.IN_FILE,
    'Remove all unnecessary casts in file',
  );
  static const REMOVE_UNNECESSARY_CONST = FixKind(
    'dart.fix.remove.unnecessaryConst',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary const keyword',
  );
  static const REMOVE_UNNECESSARY_CONST_MULTI = FixKind(
    'dart.fix.remove.unnecessaryConst.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary const keywords everywhere in file',
  );
  static const REMOVE_UNNECESSARY_LATE = FixKind(
    'dart.fix.remove.unnecessaryLate',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary late keyword',
  );
  static const REMOVE_UNNECESSARY_LATE_MULTI = FixKind(
    'dart.fix.remove.unnecessaryLate.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary late keywords everywhere in file',
  );
  static const REMOVE_UNNECESSARY_NEW = FixKind(
    'dart.fix.remove.unnecessaryNew',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary new keyword',
  );
  static const REMOVE_UNNECESSARY_NEW_MULTI = FixKind(
    'dart.fix.remove.unnecessaryNew.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unnecessary new keywords everywhere in file',
  );
  static const REMOVE_UNNECESSARY_CONTAINER = FixKind(
    'dart.fix.remove.unnecessaryContainer',
    DartFixKindPriority.DEFAULT,
    "Remove unnecessary 'Container'",
  );
  static const REMOVE_UNNECESSARY_CONTAINER_MULTI = FixKind(
    'dart.fix.remove.unnecessaryContainer.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unnecessary 'Container's in file",
  );
  static const REMOVE_UNNECESSARY_PARENTHESES = FixKind(
    'dart.fix.remove.unnecessaryParentheses',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary parentheses',
  );
  static const REMOVE_UNNECESSARY_PARENTHESES_MULTI = FixKind(
    'dart.fix.remove.unnecessaryParentheses.multi',
    DartFixKindPriority.IN_FILE,
    'Remove all unnecessary parentheses in file',
  );
  static const REMOVE_UNNECESSARY_RAW_STRING = FixKind(
    'dart.fix.remove.unnecessaryRawString',
    DartFixKindPriority.DEFAULT,
    "Remove unnecessary 'r' in string",
  );
  static const REMOVE_UNNECESSARY_RAW_STRING_MULTI = FixKind(
    'dart.fix.remove.unnecessaryRawString.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unnecessary 'r' in strings in file",
  );
  static const REMOVE_UNNECESSARY_STRING_ESCAPE = FixKind(
    'dart.fix.remove.unnecessaryStringEscape',
    DartFixKindPriority.DEFAULT,
    "Remove unnecessary '\\' in string",
  );
  static const REMOVE_UNNECESSARY_STRING_ESCAPE_MULTI = FixKind(
    'dart.fix.remove.unnecessaryStringEscape.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unnecessary '\\' in strings in file",
  );
  static const REMOVE_UNNECESSARY_STRING_INTERPOLATION = FixKind(
    'dart.fix.remove.unnecessaryStringInterpolation',
    DartFixKindPriority.DEFAULT,
    'Remove unnecessary string interpolation',
  );
  static const REMOVE_UNNECESSARY_STRING_INTERPOLATION_MULTI = FixKind(
    'dart.fix.remove.unnecessaryStringInterpolation.multi',
    DartFixKindPriority.IN_FILE,
    'Remove all unnecessary string interpolations in file',
  );
  static const REMOVE_UNUSED_CATCH_CLAUSE = FixKind(
    'dart.fix.remove.unusedCatchClause',
    DartFixKindPriority.DEFAULT,
    "Remove unused 'catch' clause",
  );
  static const REMOVE_UNUSED_CATCH_CLAUSE_MULTI = FixKind(
    'dart.fix.remove.unusedCatchClause.multi',
    DartFixKindPriority.IN_FILE,
    "Remove unused 'catch' clauses in file",
  );
  static const REMOVE_UNUSED_CATCH_STACK = FixKind(
    'dart.fix.remove.unusedCatchStack',
    DartFixKindPriority.DEFAULT,
    'Remove unused stack trace variable',
  );
  static const REMOVE_UNUSED_CATCH_STACK_MULTI = FixKind(
    'dart.fix.remove.unusedCatchStack.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unused stack trace variables in file',
  );
  static const REMOVE_UNUSED_ELEMENT = FixKind(
    'dart.fix.remove.unusedElement',
    DartFixKindPriority.DEFAULT,
    'Remove unused element',
  );
  static const REMOVE_UNUSED_FIELD = FixKind(
    'dart.fix.remove.unusedField',
    DartFixKindPriority.DEFAULT,
    'Remove unused field',
  );
  static const REMOVE_UNUSED_IMPORT = FixKind(
    'dart.fix.remove.unusedImport',
    DartFixKindPriority.DEFAULT,
    'Remove unused import',
  );
  static const REMOVE_UNUSED_IMPORT_MULTI = FixKind(
    'dart.fix.remove.unusedImport.multi',
    DartFixKindPriority.IN_FILE,
    'Remove all unused imports in file',
  );
  static const REMOVE_UNUSED_LABEL = FixKind(
    'dart.fix.remove.unusedLabel',
    DartFixKindPriority.DEFAULT,
    'Remove unused label',
  );
  static const REMOVE_UNUSED_LOCAL_VARIABLE = FixKind(
    'dart.fix.remove.unusedLocalVariable',
    DartFixKindPriority.DEFAULT,
    'Remove unused local variable',
  );
  static const REMOVE_UNUSED_PARAMETER = FixKind(
    'dart.fix.remove.unusedParameter',
    DartFixKindPriority.DEFAULT,
    'Remove the unused parameter',
  );
  static const REMOVE_UNUSED_PARAMETER_MULTI = FixKind(
    'dart.fix.remove.unusedParameter.multi',
    DartFixKindPriority.IN_FILE,
    'Remove unused parameters everywhere in file',
  );
  static const RENAME_TO_CAMEL_CASE = FixKind(
    'dart.fix.rename.toCamelCase',
    DartFixKindPriority.DEFAULT,
    "Rename to '{0}'",
  );
  static const RENAME_TO_CAMEL_CASE_MULTI = FixKind(
    'dart.fix.rename.toCamelCase.multi',
    DartFixKindPriority.IN_FILE,
    'Rename to camel case everywhere in file',
  );
  static const REPLACE_BOOLEAN_WITH_BOOL = FixKind(
    'dart.fix.replace.booleanWithBool',
    DartFixKindPriority.DEFAULT,
    "Replace 'boolean' with 'bool'",
  );
  static const REPLACE_BOOLEAN_WITH_BOOL_MULTI = FixKind(
    'dart.fix.replace.booleanWithBool.multi',
    DartFixKindPriority.IN_FILE,
    "Replace all 'boolean's with 'bool' in file",
  );
  static const REPLACE_CASCADE_WITH_DOT = FixKind(
    'dart.fix.replace.cascadeWithDot',
    DartFixKindPriority.DEFAULT,
    "Replace '..' with '.'",
  );
  static const REPLACE_CASCADE_WITH_DOT_MULTI = FixKind(
    'dart.fix.replace.cascadeWithDot.multi',
    DartFixKindPriority.IN_FILE,
    "Replace unnecessary '..'s with '.'s everywhere in file",
  );
  static const REPLACE_COLON_WITH_EQUALS = FixKind(
    'dart.fix.replace.colonWithEquals',
    DartFixKindPriority.DEFAULT,
    "Replace ':' with '='",
  );
  static const REPLACE_COLON_WITH_EQUALS_MULTI = FixKind(
    'dart.fix.replace.colonWithEquals.multi',
    DartFixKindPriority.IN_FILE,
    "Replace ':'s with '='s everywhere in file",
  );
  static const REPLACE_WITH_FILLED = FixKind(
    'dart.fix.replace.finalWithListFilled',
    DartFixKindPriority.DEFAULT,
    "Replace with 'List.filled'",
  );
  static const REPLACE_FINAL_WITH_CONST = FixKind(
    'dart.fix.replace.finalWithConst',
    DartFixKindPriority.DEFAULT,
    "Replace 'final' with 'const'",
  );
  static const REPLACE_FINAL_WITH_CONST_MULTI = FixKind(
    'dart.fix.replace.finalWithConst.multi',
    DartFixKindPriority.IN_FILE,
    "Replace 'final' with 'const' where possible in file",
  );
  static const REPLACE_NEW_WITH_CONST = FixKind(
    'dart.fix.replace.newWithConst',
    DartFixKindPriority.DEFAULT,
    "Replace 'new' with 'const'",
  );
  static const REPLACE_NEW_WITH_CONST_MULTI = FixKind(
    'dart.fix.replace.newWithConst.multi',
    DartFixKindPriority.IN_FILE,
    "Replace 'new' with 'const' where possible in file",
  );
  static const REPLACE_NULL_CHECK_WITH_CAST = FixKind(
    'dart.fix.replace.nullCheckWithCast',
    DartFixKindPriority.DEFAULT,
    'Replace null check with a cast',
  );
  static const REPLACE_NULL_CHECK_WITH_CAST_MULTI = FixKind(
    'dart.fix.replace.nullCheckWithCast.multi',
    DartFixKindPriority.IN_FILE,
    'Replace null checks with casts in file',
  );
  static const REPLACE_NULL_WITH_CLOSURE = FixKind(
    'dart.fix.replace.nullWithClosure',
    DartFixKindPriority.DEFAULT,
    "Replace 'null' with a closure",
  );
  static const REPLACE_NULL_WITH_CLOSURE_MULTI = FixKind(
    'dart.fix.replace.nullWithClosure.multi',
    DartFixKindPriority.IN_FILE,
    "Replace 'null's with closures where possible in file",
  );
  static const REPLACE_FINAL_WITH_VAR = FixKind(
    'dart.fix.replace.finalWithVar',
    DartFixKindPriority.DEFAULT,
    "Replace 'final' with 'var'",
  );
  static const REPLACE_FINAL_WITH_VAR_MULTI = FixKind(
    'dart.fix.replace.finalWithVar.multi',
    DartFixKindPriority.IN_FILE,
    "Replace 'final' with 'var' where possible in file",
  );
  static const REPLACE_NULL_WITH_VOID = FixKind(
    'dart.fix.replace.nullWithVoid',
    DartFixKindPriority.DEFAULT,
    "Replace 'Null' with 'void'",
  );
  static const REPLACE_NULL_WITH_VOID_MULTI = FixKind(
    'dart.fix.replace.nullWithVoid.multi',
    DartFixKindPriority.IN_FILE,
    "Replace 'Null' with 'void' everywhere in file",
  );
  static const REPLACE_RETURN_TYPE = FixKind(
    'dart.fix.replace.returnType',
    DartFixKindPriority.DEFAULT,
    "Replace the return type with '{0}'",
  );
  static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
    'dart.fix.replace.returnTypeFuture',
    DartFixKindPriority.DEFAULT,
    "Return 'Future<{0}>'",
  );
  static const REPLACE_RETURN_TYPE_FUTURE_MULTI = FixKind(
    'dart.fix.replace.returnTypeFuture.multi',
    DartFixKindPriority.IN_FILE,
    "Return a 'Future' where required in file.",
  );
  static const REPLACE_RETURN_TYPE_ITERABLE = FixKind(
    'dart.fix.replace.returnTypeIterable',
    DartFixKindPriority.DEFAULT,
    "Return 'Iterable<{0}>'",
  );
  static const REPLACE_RETURN_TYPE_STREAM = FixKind(
    'dart.fix.replace.returnTypeStream',
    DartFixKindPriority.DEFAULT,
    "Return 'Stream<{0}>'",
  );
  static const REPLACE_CONTAINER_WITH_SIZED_BOX = FixKind(
    'dart.fix.replace.containerWithSizedBox',
    DartFixKindPriority.DEFAULT,
    "Replace with 'SizedBox'",
  );
  static const REPLACE_CONTAINER_WITH_SIZED_BOX_MULTI = FixKind(
    'dart.fix.replace.containerWithSizedBox.multi',
    DartFixKindPriority.IN_FILE,
    "Replace with 'SizedBox' everywhere in file",
  );
  static const REPLACE_VAR_WITH_DYNAMIC = FixKind(
    'dart.fix.replace.varWithDynamic',
    DartFixKindPriority.DEFAULT,
    "Replace 'var' with 'dynamic'",
  );
  static const REPLACE_WITH_EIGHT_DIGIT_HEX = FixKind(
    'dart.fix.replace.withEightDigitHex',
    DartFixKindPriority.DEFAULT,
    "Replace with '{0}'",
  );
  static const REPLACE_WITH_EIGHT_DIGIT_HEX_MULTI = FixKind(
    'dart.fix.replace.withEightDigitHex.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with hex digits everywhere in file',
  );
  static const REPLACE_WITH_BRACKETS = FixKind(
    'dart.fix.replace.withBrackets',
    DartFixKindPriority.DEFAULT,
    'Replace with { }',
  );
  static const REPLACE_WITH_BRACKETS_MULTI = FixKind(
    'dart.fix.replace.withBrackets.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with { } everywhere in file',
  );
  static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT = FixKind(
    'dart.fix.replace.withConditionalAssignment',
    DartFixKindPriority.DEFAULT,
    'Replace with ??=',
  );
  static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT_MULTI = FixKind(
    'dart.fix.replace.withConditionalAssignment.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with ??= everywhere in file',
  );
  static const REPLACE_WITH_EXTENSION_NAME = FixKind(
    'dart.fix.replace.withExtensionName',
    DartFixKindPriority.DEFAULT,
    "Replace with '{0}'",
  );
  static const REPLACE_WITH_IDENTIFIER = FixKind(
    'dart.fix.replace.withIdentifier',
    DartFixKindPriority.DEFAULT,
    'Replace with identifier',
  );

  // todo (pq): parameterize message (used by LintNames.avoid_types_on_closure_parameters)
  static const REPLACE_WITH_IDENTIFIER_MULTI = FixKind(
    'dart.fix.replace.withIdentifier.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with identifier everywhere in file',
  );
  static const REPLACE_WITH_INTERPOLATION = FixKind(
    'dart.fix.replace.withInterpolation',
    DartFixKindPriority.DEFAULT,
    'Replace with interpolation',
  );
  static const REPLACE_WITH_INTERPOLATION_MULTI = FixKind(
    'dart.fix.replace.withInterpolation.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with interpolations everywhere in file',
  );
  static const REPLACE_WITH_IS_EMPTY = FixKind(
    'dart.fix.replace.withIsEmpty',
    DartFixKindPriority.DEFAULT,
    "Replace with 'isEmpty'",
  );
  static const REPLACE_WITH_IS_EMPTY_MULTI = FixKind(
    'dart.fix.replace.withIsEmpty.multi',
    DartFixKindPriority.IN_FILE,
    "Replace with 'isEmpty' everywhere in file",
  );
  static const REPLACE_WITH_IS_NOT_EMPTY = FixKind(
    'dart.fix.replace.withIsNotEmpty',
    DartFixKindPriority.DEFAULT,
    "Replace with 'isNotEmpty'",
  );
  static const REPLACE_WITH_IS_NOT_EMPTY_MULTI = FixKind(
    'dart.fix.replace.withIsNotEmpty.multi',
    DartFixKindPriority.IN_FILE,
    "Replace with 'isNotEmpty' everywhere in file",
  );
  static const REPLACE_WITH_NOT_NULL_AWARE = FixKind(
    'dart.fix.replace.withNotNullAware',
    DartFixKindPriority.DEFAULT,
    "Replace with '{0}'",
  );
  static const REPLACE_WITH_NOT_NULL_AWARE_MULTI = FixKind(
    'dart.fix.replace.withNotNullAware.multi',
    DartFixKindPriority.IN_FILE,
    'Replace with non-null-aware operator everywhere in file.',
  );
  static const REPLACE_WITH_NULL_AWARE = FixKind(
    'dart.fix.replace.withNullAware',
    DartFixKindPriority.DEFAULT,
    "Replace the '.' with a '?.' in the invocation",
  );
  static const REPLACE_WITH_TEAR_OFF = FixKind(
    'dart.fix.replace.withTearOff',
    DartFixKindPriority.DEFAULT,
    'Replace function literal with tear-off',
  );
  static const REPLACE_WITH_TEAR_OFF_MULTI = FixKind(
    'dart.fix.replace.withTearOff.multi',
    DartFixKindPriority.IN_FILE,
    'Replace function literals with tear-offs everywhere in file',
  );
  static const REPLACE_WITH_VAR = FixKind(
    'dart.fix.replace.withVar',
    DartFixKindPriority.DEFAULT,
    "Replace type annotation with 'var'",
  );
  static const REPLACE_WITH_VAR_MULTI = FixKind(
    'dart.fix.replace.withVar.multi',
    DartFixKindPriority.IN_FILE,
    "Replace type annotations with 'var' in file",
  );
  static const SORT_CHILD_PROPERTY_LAST = FixKind(
    'dart.fix.sort.childPropertyLast',
    DartFixKindPriority.DEFAULT,
    'Move child property to end of arguments',
  );
  static const SORT_CHILD_PROPERTY_LAST_MULTI = FixKind(
    'dart.fix.sort.childPropertyLast.multi',
    DartFixKindPriority.IN_FILE,
    'Move child properties to ends of arguments everywhere in file',
  );
  static const SORT_CONSTRUCTOR_FIRST = FixKind(
    'dart.fix.sort.sortConstructorFirst',
    DartFixKindPriority.DEFAULT,
    'Move before other members',
  );
  static const SORT_CONSTRUCTOR_FIRST_MULTI = FixKind(
    'dart.fix.sort.sortConstructorFirst.multi',
    DartFixKindPriority.DEFAULT,
    'Move all constructors before other members',
  );
  static const SORT_UNNAMED_CONSTRUCTOR_FIRST = FixKind(
    'dart.fix.sort.sortUnnamedConstructorFirst',
    DartFixKindPriority.DEFAULT,
    'Move before named constructors',
  );
  static const SORT_UNNAMED_CONSTRUCTOR_FIRST_MULTI = FixKind(
    'dart.fix.sort.sortUnnamedConstructorFirst.multi',
    DartFixKindPriority.DEFAULT,
    'Move all unnamed constructors before named constructors',
  );
  static const UPDATE_SDK_CONSTRAINTS = FixKind(
    'dart.fix.updateSdkConstraints',
    DartFixKindPriority.DEFAULT,
    'Update the SDK constraints',
  );
  static const USE_CONST = FixKind(
    'dart.fix.use.const',
    DartFixKindPriority.DEFAULT,
    'Change to constant',
  );
  static const USE_EFFECTIVE_INTEGER_DIVISION = FixKind(
    'dart.fix.use.effectiveIntegerDivision',
    DartFixKindPriority.DEFAULT,
    'Use effective integer division ~/',
  );
  static const USE_EFFECTIVE_INTEGER_DIVISION_MULTI = FixKind(
    'dart.fix.use.effectiveIntegerDivision.multi',
    DartFixKindPriority.IN_FILE,
    'Use effective integer division ~/ everywhere in file',
  );
  static const USE_EQ_EQ_NULL = FixKind(
    'dart.fix.use.eqEqNull',
    DartFixKindPriority.DEFAULT,
    "Use == null instead of 'is Null'",
  );
  static const USE_EQ_EQ_NULL_MULTI = FixKind(
    'dart.fix.use.eqEqNull.multi',
    DartFixKindPriority.IN_FILE,
    "Use == null instead of 'is Null' everywhere in file",
  );
  static const USE_IS_NOT_EMPTY = FixKind(
    'dart.fix.use.isNotEmpty',
    DartFixKindPriority.DEFAULT,
    "Use x.isNotEmpty instead of '!x.isEmpty'",
  );
  static const USE_IS_NOT_EMPTY_MULTI = FixKind(
    'dart.fix.use.isNotEmpty.multi',
    DartFixKindPriority.IN_FILE,
    "Use x.isNotEmpty instead of '!x.isEmpty' everywhere in file",
  );
  static const USE_NOT_EQ_NULL = FixKind(
    'dart.fix.use.notEqNull',
    DartFixKindPriority.DEFAULT,
    "Use != null instead of 'is! Null'",
  );
  static const USE_NOT_EQ_NULL_MULTI = FixKind(
    'dart.fix.use.notEqNull.multi',
    DartFixKindPriority.IN_FILE,
    "Use != null instead of 'is! Null' everywhere in file",
  );
  static const USE_RETHROW = FixKind(
    'dart.fix.use.rethrow',
    DartFixKindPriority.DEFAULT,
    'Replace throw with rethrow',
  );
  static const USE_RETHROW_MULTI = FixKind(
    'dart.fix.use.rethrow.multi',
    DartFixKindPriority.IN_FILE,
    'Replace throw with rethrow where possible in file',
  );
  static const WRAP_IN_FUTURE = FixKind(
    'dart.fix.wrap.future',
    DartFixKindPriority.DEFAULT,
    "Wrap in 'Future.value'",
  );
  static const WRAP_IN_TEXT = FixKind(
    'dart.fix.flutter.wrap.text',
    DartFixKindPriority.DEFAULT,
    "Wrap in a 'Text' widget",
  );
}

class DartFixKindPriority {
  static const int DEFAULT = 50;
  static const int IN_FILE = 40;
  static const int IGNORE = 30;
}
