blob: 1205d40a991e8ceb3c6a8a5581df03a49de48fda [file] [log] [blame] [edit]
// Copyright (c) 2024, 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/dart/correction_producer.dart';
import 'package:analysis_server_plugin/registry.dart';
import 'package:analysis_server_plugin/src/correction/assist_generators.dart';
import 'package:analysis_server_plugin/src/correction/fix_generators.dart';
import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/analysis_rule/rule_context.dart';
import 'package:analyzer/src/lint/registry.dart';
final class PluginRegistryImpl implements PluginRegistry {
/// Returns currently registered rules.
Iterable<AbstractAnalysisRule> get registeredRules => Registry.ruleRegistry;
@override
void registerAssist(ProducerGenerator generator) {
var producer = generator(context: StubCorrectionProducerContext.instance);
if (producer.assistKind == null) {
throw ArgumentError.value(
generator,
'generator',
"Assist producer '${producer.runtimeType}' must declare a non-null "
"'assistKind'.",
);
}
registeredAssistGenerators.registerGenerator(generator);
}
@override
void registerFixForRule(LintCode code, ProducerGenerator generator) {
var producer = generator(context: StubCorrectionProducerContext.instance);
if (producer.fixKind == null) {
throw ArgumentError.value(
generator,
'generator',
"Fix producer '${producer.runtimeType}' must declare a non-null "
"'fixKind'.",
);
}
registeredFixGenerators.registerFixForLint(code, generator);
}
/// Registers the "ignore diagnostic" producer generators.
void registerIgnoreProducerGenerators() {
registeredFixGenerators.ignoreProducerGenerators.addAll([
IgnoreDiagnosticOnLine.new,
IgnoreDiagnosticInFile.new,
IgnoreDiagnosticInAnalysisOptionsFile.new,
]);
}
@override
void registerLintRule(AbstractAnalysisRule rule) {
Registry.ruleRegistry.registerLintRule(rule);
}
@override
void registerWarningRule(AbstractAnalysisRule rule) {
Registry.ruleRegistry.registerWarningRule(rule);
}
AbstractAnalysisRule? ruleNamed(String name) => Registry.ruleRegistry[name];
}