use crate::abc::Abc;
use crate::alterator::Alterator;
use crate::checker::Checker;
use crate::cognitive::Cognitive;
use crate::cyclomatic::Cyclomatic;
use crate::getter::Getter;
use crate::halstead::Halstead;
use crate::loc::Loc;
use crate::mi::Mi;
use crate::nargs::NArgs;
use crate::nexits::Exit;
use crate::nom::Nom;
use crate::npa::Npa;
use crate::npm::Npm;
use crate::parser::Parser;
use crate::tokens::Tokens;
use crate::traits::{LanguageInfo, ParserTrait};
use crate::wmc::Wmc;
pub(crate) trait MetricSuite: ParserTrait {
type Cognitive: Cognitive;
type Cyclomatic: Cyclomatic;
type Halstead: Halstead;
type Loc: Loc;
type Nom: Nom;
type Mi: Mi;
type NArgs: NArgs;
type Exit: Exit;
type Wmc: Wmc;
type Abc: Abc;
type Npm: Npm;
type Npa: Npa;
type Tokens: Tokens;
}
impl<T> MetricSuite for Parser<T>
where
T: 'static
+ LanguageInfo
+ Alterator
+ Checker
+ Getter
+ Abc
+ Cognitive
+ Cyclomatic
+ Exit
+ Halstead
+ Loc
+ Mi
+ NArgs
+ Nom
+ Npa
+ Npm
+ Tokens
+ Wmc,
{
type Cognitive = T;
type Cyclomatic = T;
type Halstead = T;
type Loc = T;
type Nom = T;
type Mi = T;
type NArgs = T;
type Exit = T;
type Wmc = T;
type Abc = T;
type Npm = T;
type Npa = T;
type Tokens = T;
}