register method

  1. @override
void register(
  1. PluginRegistry registry
)
override

Registers analysis rules, quick fixes, and assists.

Implementation

@override
void register(PluginRegistry registry) {
  registry.registerWarningRule(ReduceReturnTypeRule());
  registry.registerFixForRule(ReduceReturnTypeRule.code, ChangeToSyncReturnType.new);
  registry.registerFixForRule(ReduceReturnTypeRule.code, ChangeToAsyncReturnType.new);

  registry.registerWarningRule(BeforeReturnTypeRule());
  registry.registerFixForRule(BeforeReturnTypeRule.code, ChangeToSyncReturnType.new);
  registry.registerFixForRule(BeforeReturnTypeRule.code, ChangeToAsyncReturnType.new);

  registry.registerWarningRule(WrapReduceReturnTypeRule());
  registry.registerFixForRule(
    WrapReduceReturnTypeRule.code,
    ChangeToAsyncReturnType.new,
  );

  registry.registerWarningRule(ReduceWithoutAwaitRule());
  registry.registerFixForRule(ReduceWithoutAwaitRule.code, AddAwaitMicrotask.new);
  registry.registerFixForRule(ReduceWithoutAwaitRule.code, MakeReduceSync.new);

  registry.registerWarningRule(DispatchSyncAsyncActionRule());
  registry.registerFixForRule(
    DispatchSyncAsyncActionRule.code,
    ReplaceWithDispatch.new,
  );
  registry.registerFixForRule(
    DispatchSyncAsyncActionRule.code,
    ReplaceWithDispatchAndWait.new,
  );

  registry.registerWarningRule(IncompatibleMixinsRule());
  registry.registerWarningRule(PollingWithCaveatMixinRule());

  registry.registerWarningRule(WaitFailInvalidArgumentRule());
  registry.registerFixForRule(WaitFailInvalidArgumentRule.code, UseActionType.new);

  registry.registerWarningRule(WaitFailNeverMatchesRule());
  registry.registerFixForRule(WaitFailNeverMatchesRule.code, UseActionType.new);

  registry.registerWarningRule(AvoidContextStateRule());
  registry.registerFixForRule(AvoidContextStateRule.code, UseContextSelect.new);
  registry.registerFixForRule(AvoidContextStateRule.code, UseContextRead.new);
  registry.registerFixForRule(AvoidContextStateRule.code, WrapItemInBuilder.new);
  registry.registerFixForRule(AvoidContextStateRule.code, UseBuilderContext.new);

  registry.registerWarningRule(ContextStateInInitStateRule());
  registry.registerFixForRule(ContextStateInInitStateRule.code, UseContextRead.new);

  registry.registerWarningRule(ContextInDisposeRule());

  registry.registerWarningRule(ContextInSelectorRule());
  registry.registerFixForRule(ContextInSelectorRule.code, UseSelectorParameter.new);

  registry.registerWarningRule(SelectOutsideBuildRule());
  registry.registerFixForRule(SelectOutsideBuildRule.code, ReplaceSelectWithRead.new);
  registry.registerFixForRule(SelectOutsideBuildRule.code, UseBuilderContext.new);
  registry.registerFixForRule(SelectOutsideBuildRule.code, WrapItemInBuilder.new);

  registry.registerWarningRule(VmFieldNotInEqualsRule());
  registry.registerFixForRule(VmFieldNotInEqualsRule.code, AddFieldToVmEquals.new);
  registry.registerFixForRule(VmFieldNotInEqualsRule.code, AddAllFieldsToVmEquals.new);

  registry.registerWarningRule(CopyMissingFieldRule());
  registry.registerFixForRule(CopyMissingFieldRule.code, AddMissingFieldsToCopy.new);

  registry.registerWarningRule(StateClassMissingEqualityRule());

  registry.registerWarningRule(EqualityMissingFieldRule());
  registry.registerFixForRule(
    EqualityMissingFieldRule.code,
    AddMissingFieldsToEquality.new,
  );

  registry.registerWarningRule(EqualityMissingInheritedFieldRule());
  registry.registerFixForRule(
    EqualityMissingInheritedFieldRule.code,
    AddInheritedFieldsToEquality.new,
  );

  registry.registerWarningRule(EquatablePropsMissingFieldRule());
  registry.registerFixForRule(
    EquatablePropsMissingFieldRule.code,
    AddMissingFieldsToProps.new,
  );

  registry.registerWarningRule(StateClassMustBeImmutableRule());

  registry.registerLintRule(ActionNameEndsWithActionRule());
  registry.registerFixForRule(
    ActionNameEndsWithActionRule.code,
    ({required context}) =>
        RenameAction(ActionNameStyle.endsWithAction, context: context),
  );

  registry.registerLintRule(ActionNameEndsWithUnderscoreActionRule());
  registry.registerFixForRule(
    ActionNameEndsWithUnderscoreActionRule.code,
    ({required context}) =>
        RenameAction(ActionNameStyle.endsWithUnderscoreAction, context: context),
  );

  registry.registerLintRule(ActionNameWithoutActionRule());
  registry.registerFixForRule(
    ActionNameWithoutActionRule.code,
    ({required context}) =>
        RenameAction(ActionNameStyle.withoutAction, context: context),
  );

  registry.registerLintRule(ActionFileNameEndsWithActionRule());
  registry.registerLintRule(ActionFileNameStartsWithActionRule());

  registry.registerWarningRule(ExtendBaseActionRule());
  registry.registerWarningRule(DependenciesCastInActionRule());
  // One fix for each base action of the package, up to `UseBaseClass.maxFixes`.
  for (var i = 0; i < UseBaseClass.maxFixes; i++) {
    registry.registerFixForRule(
      ExtendBaseActionRule.code,
      ({required context}) => UseBaseClass(i, context: context),
    );
  }

  registry.registerWarningRule(PreferReturnNullRule());
  registry.registerFixForRule(PreferReturnNullRule.code, ReturnNull.new);

  registry.registerWarningRule(StaleStateAfterAwaitRule());
  registry.registerFixForRule(StaleStateAfterAwaitRule.code, UseCurrentState.new);

  registry.registerWarningRule(AfterThrowsRule());
  registry.registerWarningRule(MissingSuperInMixinOverrideRule());

  registry.registerLintRule(AvoidAbortDispatchRule());
  registry.registerLintRule(AvoidWrapReduceRule());

  registry.registerWarningRule(UserExceptionOutsideActionRule());
  registry.registerFixForRule(
    UserExceptionOutsideActionRule.code,
    DispatchUserExceptionAction.new,
  );

  registry.registerWarningRule(UserExceptionWithoutCauseRule());
  registry.registerFixForRule(UserExceptionWithoutCauseRule.code, AddCause.new);

  registry.registerWarningRule(DispatchInGlobalErrorObserverRule());

  registry.registerWarningRule(ThrowInGlobalErrorObserverRule());
  registry.registerFixForRule(
    ThrowInGlobalErrorObserverRule.code,
    ReturnInsteadOfThrow.new,
  );

  registry.registerLintRule(GlobalErrorObserverWithoutEnvironmentRule());

  registry.registerWarningRule(RetryWithoutNonReentrantRule());
  registry.registerFixForRule(RetryWithoutNonReentrantRule.code, AddNonReentrant.new);

  registry.registerWarningRule(DispatchAndWaitUnlimitedRetriesRule());

  registry.registerWarningRule(SequentialDeadlockRule());
  registry.registerFixForRule(
    SequentialDeadlockRule.code,
    UseDispatchWithoutWaiting.new,
  );

  registry.registerWarningRule(SequentialBeforeSuperNotFirstRule());
  registry.registerWarningRule(SequentialAfterSuperNotInFinallyRule());

  registry.registerWarningRule(PollingActionRestartsPollingRule());
  registry.registerFixForRule(PollingActionRestartsPollingRule.code, UsePollOnce.new);

  registry.registerWarningRule(ServerPushAssociatedActionRule());
  registry.registerWarningRule(InternetSimulationInProductionRule());
  registry.registerLintRule(MissingKeyParamsRule());

  registry.registerWarningRule(PreferImmutableCollectionsRule());
  registry.registerFixForRule(
    PreferImmutableCollectionsRule.code,
    UseImmutableCollection.new,
  );

  registry.registerWarningRule(NonStateObjectInStateRule());
  registry.registerLintRule(RouteInStateRule());
  registry.registerWarningRule(MissingInitialStateRule());

  registry.registerWarningRule(EventNameSuffixRule());
  registry.registerFixForRule(EventNameSuffixRule.code, RenameEvent.new);

  registry.registerWarningRule(EventNotSpentInitiallyRule());
  registry.registerFixForRule(EventNotSpentInitiallyRule.code, UseSpentEvent.new);

  registry.registerWarningRule(EventPersistedRule());

  registry.registerWarningRule(ImplementsPersistorRule());
  registry.registerFixForRule(ImplementsPersistorRule.code, ExtendPersistor.new);

  registry.registerWarningRule(ThrowInReadStateRule());
  registry.registerFixForRule(ThrowInReadStateRule.code, AddErrorAndReturnNull.new);

  registry.registerWarningRule(InitialStateNotSavedRule());
  registry.registerFixForRule(InitialStateNotSavedRule.code, AddSaveInitialState.new);

  registry.registerWarningRule(DispatchInBuildRule());

  // Opposite styles. The first is enabled by default.
  registry.registerWarningRule(PreferDispatchWithoutContextRule());
  registry.registerFixForRule(
    PreferDispatchWithoutContextRule.code,
    RemoveContextFromDispatch.new,
  );
  registry.registerLintRule(PreferDispatchWithContextRule());
  registry.registerFixForRule(
    PreferDispatchWithContextRule.code,
    AddContextToDispatch.new,
  );

  registry.registerWarningRule(ContextReadInBuildRule());
  registry.registerFixForRule(ContextReadInBuildRule.code, UseContextSelect.new);

  registry.registerWarningRule(RefreshIndicatorWithoutWaitRule());
  registry.registerFixForRule(
    RefreshIndicatorWithoutWaitRule.code,
    WaitForDispatch.new,
  );

  registry.registerWarningRule(ThenOnDispatchAndWaitRule());
  registry.registerFixForRule(ThenOnDispatchAndWaitRule.code, UseThenIfCompletedOk.new);

  registry.registerWarningRule(TimerOrStreamNotInPropsRule());

  registry.registerLintRule(ActionWithoutToStringRule());
  registry.registerFixForRule(ActionWithoutToStringRule.code, AddActionToString.new);

  registry.registerWarningRule(UserExceptionDialogPlacementRule());

  registry.registerWarningRule(NavigatorKeyNotSetRule());
  registry.registerFixForRule(NavigatorKeyNotSetRule.code, AddNavigatorKey.new);

  registry.registerWarningRule(DebugObserverInReleaseRule());

  registry.registerWarningRule(ExpectWithoutWaitingRule());
  registry.registerFixForRule(
    ExpectWithoutWaitingRule.code,
    UseAwaitDispatchAndWait.new,
  );

  registry.registerWarningRule(VmCreateFromReusedFactoryRule());
  registry.registerWarningRule(ActionStatusDetailsInProductionRule());
}