// 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/completion/dart/extension_cache.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/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;

  @override
  final ExtensionCache extensionCache;

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

  DartFixContextImpl(this.instrumentationService, this.workspace,
      this.resolveResult, this.error, this.getTopLevelDeclarationsFunction,
      {ExtensionCache? extensionCache})
      : extensionCache = extensionCache ?? ExtensionCache();

  @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',
      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_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_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, '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_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_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_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_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_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_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_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_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_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(s)');
  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 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_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_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_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_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_CONST = FixKind(
      'dart.fix.remove.const', DartFixKindPriority.DEFAULT, 'Remove const');
  static const REMOVE_DEAD_CODE = FixKind('dart.fix.remove.deadCode',
      DartFixKindPriority.DEFAULT, 'Remove dead code');
  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_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_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_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_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.DEFAULT,
      "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_STACK = FixKind(
      'dart.fix.remove.unusedCatchStack',
      DartFixKindPriority.DEFAULT,
      'Remove unused stack trace variable');
  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_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.DEFAULT,
      "Replace 'Null' with 'void' everywhere in file");
  static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
      'dart.fix.replace.returnTypeFuture',
      DartFixKindPriority.DEFAULT,
      "Return 'Future' from 'async' function");
  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 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_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;
}
