use crate::editorconfig::KtlintVersion;
use crate::engine::rule_provider_sorter_1_8::get_sorted_rule_providers_1_8;
use crate::rule::{RuleSetId, RuleV2};
use crate::rule_provider::RuleV2Provider;
pub fn get_sorted_rule_providers(rule_providers: &[RuleV2Provider]) -> Vec<RuleV2Provider> {
let mut sorted = rule_providers.to_vec();
sorted.sort_by_key(|p| {
(
p.rule_id().rule_set_id() != RuleSetId::STANDARD,
p.rule_id().value(),
)
});
sorted
}
pub struct VisitorProvider {
rule_providers_sorted: Vec<RuleV2Provider>,
}
impl VisitorProvider {
pub fn new(rule_providers: &[RuleV2Provider]) -> VisitorProvider {
VisitorProvider::for_version(rule_providers, KtlintVersion::V2_0)
}
pub fn for_version(rule_providers: &[RuleV2Provider], ktlint_version: KtlintVersion) -> VisitorProvider {
VisitorProvider {
rule_providers_sorted: if ktlint_version.is_1_8() {
get_sorted_rule_providers_1_8(rule_providers)
} else {
get_sorted_rule_providers(rule_providers)
},
}
}
pub fn rules(&self) -> Vec<Box<dyn RuleV2>> {
self.rule_providers_sorted
.iter()
.map(RuleV2Provider::create_new_rule_instance)
.collect()
}
pub fn rule_ids(&self) -> impl Iterator<Item = &'static str> + '_ {
self.rule_providers_sorted.iter().map(|p| p.rule_id().value())
}
}