def detectUnnAbsInDefine(fileObj, outputFile): defineList = fileObj.getDefineDeclarationList() for aDefine in defineList: lineCount, textSizeCount = aDefine.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.DEFINE_RES)
def detectUnnAbsInClasses(fileObj, outputFile): classList = fileObj.getClassDeclarationList() for aClass in classList: lineCount, textSizeCount = aClass.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.CLASS_RES)
def detectMulAbsInClass(fileObj, outputFile): classList = fileObj.getClassDeclarationList() for aClass in classList: lcom = aClass.getLCOM() if lcom < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.CLASS_RES)
def detectMissingModules(folder, outputFile): #print("%s" % (inspect.stack()[0][3])) classNamesSet = set() includeClassSet = set() for abspath, dirs, files in os.walk(folder): for file in files: #print(file) if file.endswith(".pp") and not os.path.islink(os.path.join(abspath, file)): #print(file) fileObj = SourceModel.SM_File.SM_File(os.path.join(abspath, file)) classNames, fileIncludes = detectMissingClassesByInclude(fileObj, outputFile) #print("Classes: %s" % ','.join(n for n in classNames)) classNamesSet = classNamesSet.union(classNames) #print("Union with %s: %s" % (','.join(n for n in classNames), ','.join(n for n in classNamesSet))) includeClassSet = includeClassSet.union(fileIncludes) #print("%s: Classes: %s" % (inspect.stack()[0][3], ','.join(n for n in classNamesSet))) #print("%s: Class includes: %s" % (inspect.stack()[0][3], ','.join(i for i in includeClassSet))) missingDependencySet = includeClassSet.difference(classNamesSet) #print(includeClassSet) #print(classNamesSet) #print(missingDependencySet) Utilities.myPrint("Missing dependency set: %s" % ','.join(c for c in missingDependencySet)) #for md in missingDependencySet: #Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_MIS_DEP, CONSTS.FILE_RES) with open('missDependencies.puppeteer.txt', 'a+') as f: for md in missingDependencySet: f.write("%s\n" % md) Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_MIS_DEP, CONSTS.FILE_RES)
def detectBroHierarchy(folder, outputFile): classNames, superClassNames = collectClassNames(folder) #print("classNames: " + str(classNames)) #print("superClassNames: " + str(superClassNames)) for superClass in superClassNames: if not classNames.__contains__(superClass): Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_BRO_HIE, CONSTS.MODULE_RES)
def detectTCMod(fileObj, outputFile): if not (fileObj.fileName.__contains__("param") or fileObj.fileName.__contains__("init") or fileObj.fileName.__contains__("site")): if len(fileObj.getHardCodedStatments()) > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_TC_MOD, CONSTS.FILE_RES)
def detectMisAbs(fileObj, outputFile): classAndDefineCount = len(fileObj.getOuterClassList() + fileObj.getOuterDefineList()) outerElementCount = len(fileObj.getOuterElementList()) if outerElementCount - classAndDefineCount > CONSTS.MISABS_MAX_NON_ABS_COUNT: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MIS_ABS, CONSTS.FILE_RES)
def detectImpAbs(fileObj, outputFile): execDecls = fileObj.getNoOfExecDeclarations() totalDeclarations = fileObj.getNoOfClassDeclarations() + fileObj.getNoOfDefineDeclarations() + \ fileObj.getNoOfFileDeclarations() + fileObj.getNoOfPackageDeclarations() + \ fileObj.getNoOfServiceDeclarations() + execDecls if float(totalDeclarations * CONSTS.IMPABS_THRESHOLD) <= float( execDecls) and execDecls > CONSTS.IMPABS_MAXEXECCOUNT: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_IMP_ABS, CONSTS.FILE_RES)
def detectDuplicateAbs(folder, outputFile): cpdXmlFile = getCpdXmlFile(folder) if cpdXmlFile: file = open(os.path.join(folder, cpdXmlFile), 'r', errors='ignore') fileContent = file.read() compiledRE = re.compile("<duplication lines=") for i in re.findall(compiledRE, fileContent): Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_DUP_ABS, CONSTS.FILE_RES)
def detectUnstructuredModForm1(folder, outputFile): if isModulesExists(folder): return manifestsFolder = getManifestsFolder(folder) #repo-level manifests folder if manifestsFolder == "": Utilities.reportSmell(outputFile, manifestsFolder, CONSTS.SMELL_UNS_MOD_1, CONSTS.REPO_MANIFEST) return if FileOperations.countPuppetFiles(manifestsFolder) > CONSTS.MAX_MANIFESTS_PUPPET_FILES: Utilities.reportSmell(outputFile, manifestsFolder, CONSTS.SMELL_UNS_MOD_1, CONSTS.REPO_MANIFEST)
def detectUnsModForm3(folder, outputFile): counter = 0 if os.path.isdir(folder): for dir in os.listdir(folder): if not (dir == "files" or dir == "manifests" or dir == "templates" or dir == "lib" or dir == "tests" or dir == "spec" or dir.__contains__("readme") or dir.__contains__("README") or dir.__contains__("license") or dir.__contains__("LICENSE") or dir.__contains__("metadata")): counter += 1 if counter > CONSTS.MAX_ALLOWED_NONSTANDARD_FILES: Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_UNS_MOD_3, CONSTS.OTHERFILES)
def detectInsModForm2(fileObj, outputFile): for aClass in fileObj.getOuterClassList(): if aClass.getLocWithoutComments() > CONSTS.MAX_CLASS_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.CLASS_RES) for aDefine in fileObj.getOuterDefineList(): if aDefine.getLocWithoutComments() > CONSTS.MAX_DEFINE_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.DEFINE_RES) if fileObj.getLinesOfCodeWithoutComments() > CONSTS.MAX_MODULE_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.FILE_RES)
def detectInsModForm3(fileobj, outputFile): if fileobj.getMaxNestingDepth() > CONSTS.MAX_NESTING_DEPTH: Utilities.reportSmell(outputFile, fileobj.fileName, CONSTS.SMELL_INS_MOD_3, CONSTS.FILE_RES)
def detectUnsModForm2(folder, outputFile): if not getManifestsFolder(folder): Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_UNS_MOD_2, CONSTS.MODULE_MANIFEST)
def detectInsModForm1(fileObj, outputFile): classDefineDeclCount = len(fileObj.getOuterClassList()) + len(fileObj.getOuterDefineList()) if classDefineDeclCount > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_1, CONSTS.FILE_RES)
def checkWithPackageResource(fileObj, outputFile): packageResourceList = fileObj.getPackageResourceList() for packageRes in packageResourceList: if packageRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.PACKAGE_RES)
def detectDefEnc(fileObj, outputFile): for nodeDecl in fileObj.getNodeDeclarations(): if nodeDecl.getGlobalVariableCount() > 0: Utilities.reportSmell(outputFile, CONSTS.SMELL_DEF_ENC, fileObj.fileName, CONSTS.NODES_RES)
def detectWeakendMod(graph, folder, outputFile): for node in graph.getNodes(): if node.getModularityRatio() < CONSTS.MODULARITY_THRESHOLD: Utilities.reportSmell(outputFile, str(node.getId()), CONSTS.SMELL_WEA_MOD, CONSTS.MODULE_RES)
def detectUnnAbsInModules(fileObj, outputFile): lineCount, textSizeCount = fileObj.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.DEFINE_RES)
def detectMulAbsInModule(fileObj, outputFile): if fileObj.getLCOM() < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.FILE_RES)
def detectMulAbsInDefine(fileObj, outputFile): defineList = fileObj.getDefineDeclarationList() for aDefine in defineList: if aDefine.getLCOM() < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.DEFINE_RES)
def detectHaiStr(graph, folder, outputFile): if graph.getAverageDegree() > CONSTS.MAX_GRAPH_DEGREE_THRESHOLD: Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_HAI_STR, CONSTS.REPO_RES)
def detectInsModForm1(fileObj, outputFile): classDefineDeclCount = len(fileObj.getOuterClassList()) + len( fileObj.getOuterDefineList()) if classDefineDeclCount > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_1, CONSTS.FILE_RES)
def checkWithServiceResource(fileObj, outputFile): serviceResourceList = fileObj.getServiceResourceList() for serviceRes in serviceResourceList: if serviceRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.SERVICE_RES)
def checkWithFileResource(fileObj, outputFile): fileResourceList = fileObj.getFileResourceList() for fileRes in fileResourceList: if fileRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.FILE_RES)