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 21556x 21556x 21556x 1x 10779x 10779x 10779x 10779x 10779x 32180x 32180x 32180x 32180x 32180x 32180x 32180x 10779x 10779x 10267x 10267x 10779x 10779x 240x 240x 240x 10779x 10779x 242x 242x 10779x 10779x 316x 316x 316x 316x 316x 56x 1x 1x 1x 1x 56x 316x 316x 10779x 10779x | 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;
}
} |