我想修复This function's cyclomatic complexity is too high
个消息并偶然发现一个只包含switch
语句的简单函数。函数的圈复杂度计算为(5)(W074)。
Configuration.prototype.loadAndParseDataFromStorageFilename = function(cmd) {
var jsonData;
var ext = path.extname(cmd.argumentDatasource.filename).toLowerCase();
var rawData = fs.readFileSync(cmd.argumentDatasource.filename).toString().replace(/\n/g, "").replace(/\r/g, "");
switch(ext) {
case ".config":
jsonData = xml.parseString(rawData);
break;
case ".xml":
jsonData = xml.parseString(rawData);
break;
case ".json":
jsonData = JSON.parse(cmd.argumentDatasource.filename);
break;
case ".js":
jsonData = require(cmd.argumentDatasource.filename);
break;
default:
var msg = colors.bgRed.white(cmd.argumentDatasource.filename + " not supported as data storage");
console.log(msg);
}
return jsonData;
};
在这个简单的情况下,如何将圈复杂度计算为5?
到目前为止,如果不想降低交换机的复杂性。根据我的理解,我会计算最大的复杂度。 3或4 :)。对包含仅switch
语句的方法进行编码的最佳做法是什么?似乎codacy.com将maxcomplexity
设置为4或3。
答案 0 :(得分:1)
该函数可以采用5条路径,因此圈复杂度为5
答案 1 :(得分:0)
刚刚重写了我的代码。那么到目前为止,我可以看到我们应该避免switch
命令进行最佳实践编码?
Configuration.prototype.loadAndParseDataFromStorageFilename = function(cmd) {
var jsonData;
var ext = path.extname(cmd.argumentDatasource.filename).toLowerCase().replace(/\./g,"");
var parserFunction = {
config : xml.parseString,
xml : xml.parseString,
json : JSON.parse,
js : require
};
if (parserFunction[ext]){
var rawData = fs.readFileSync(cmd.argumentDatasource.filename).toString().replace(/\n/g, "").replace(/\r/g, "");
jsonData = parserFunction[ext](rawData);
} else {
var msg = colors.bgRed.white(cmd.argumentDatasource.filename + " not supported as data storage");
console.log(msg);
}
return jsonData;
};