Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 1x 1x 1x 1x 1x 1x 1x 22904x 22904x 22904x 1x 11453x 11453x 11453x 11453x 11453x 88848x 88848x 88848x 88848x 88848x 88848x 88848x 11453x 11453x 10927x 10927x 11453x 11453x 247x 247x 247x 11453x 11453x 249x 249x 11453x 11453x 332x 332x 332x 332x 332x 59x 1x 1x 1x 1x 59x 332x 332x 11453x 11453x | import {BasicRuleConfig} from "./_basic_rule_config";
import {Issue} from "../issue";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IRegistry} from "../_iregistry";
import {IObject} from "../objects/_iobject";
import {CyclomaticComplexityStats} from "../utils/cyclomatic_complexity_stats";
export class CyclomaticComplexityConf extends BasicRuleConfig {
public max: number = 20;
}
export class CyclomaticComplexity implements IRule {
private conf = new CyclomaticComplexityConf();
public getMetadata(): IRuleMetadata {
return {
key: "cyclomatic_complexity",
title: "Cyclomatic Complexity",
shortDescription: `Cyclomatic complexity, only reported for methods`,
tags: [RuleTag.SingleFile],
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: CyclomaticComplexityConf): void {
this.conf = conf;
if (this.conf.max === undefined) {
this.conf.max = new CyclomaticComplexityConf().max;
}
}
public initialize(_reg: IRegistry) {
return this;
}
public run(obj: IObject): Issue[] {
const issues: Issue[] = [];
const stats = CyclomaticComplexityStats.run(obj);
for (const s of stats) {
if (s.count > this.conf.max) {
const message = "Max cyclomatic complexity reached, " + s.count + ", " + s.name;
const issue = Issue.atPosition(s.file, s.pos, message, this.getMetadata().key, this.conf.severity);
issues.push(issue);
}
}
return issues;
}
} |