📄 metrules.c
字号:
out(csv ? ",%lu,%lu,%lu,%lu" : " Lines: <%lu >%lu ~%lu %lu\n", min_stat(&project.function.lines), max_stat(&project.function.lines), avg_stat(&project.function.lines), tot_stat(&project.function.lines)); if (print_metric(cdl)) out(csv ? ",%lu,%lu,%lu,%lu" : " Code: <%lu >%lu ~%lu %lu\n", min_stat(&project.function.code_lines), max_stat(&project.function.code_lines), avg_stat(&project.function.code_lines), tot_stat(&project.function.code_lines)); if (print_metric(cml)) out(csv ? ",%lu,%lu,%lu,%lu" : " Comment: <%lu >%lu ~%lu %lu\n", min_stat(&project.function.comment_lines), max_stat(&project.function.comment_lines), avg_stat(&project.function.comment_lines), tot_stat(&project.function.comment_lines)); if (print_metric(bll)) out(csv ? ",%lu,%lu,%lu,%lu" : " Blank: <%lu >%lu ~%lu %lu\n", min_stat(&project.function.white_lines), max_stat(&project.function.white_lines), avg_stat(&project.function.white_lines), tot_stat(&project.function.white_lines)); if (print_metric(exs)) out(csv ? ",%lu,%lu,%lu" : " Exec Statements: <%lu >%lu ~%lu\n", min_stat(&project.function.stmnts), max_stat(&project.function.stmnts), avg_stat(&project.function.stmnts)); if (print_metric(dcs)) out(csv ? ",%lu,%lu,%lu,%lu" : " Decl Statements: <%lu >%lu ~%lu %lu\n", min_stat(&project.function.decls), max_stat(&project.function.decls), avg_stat(&project.function.decls), tot_stat(&project.function.decls)); if (print_metric(mcd)) out(csv ? ",%lu,%lu,%lu" : " Max Depth: <%lu >%lu ~%lu\n", min_stat(&project.function.max_depth), max_stat(&project.function.max_depth), avg_stat(&project.function.max_depth)); out(csv ? "" : "\n"); } /* Only print module-related stats if there is at least one module-related metric to print for the project. */ if (print_prj_mod) { out(csv ? "" : " -Module-\n"); if (print_metric(scl)) out(csv ? ",%lu,%lu,%lu" : " Lines: <%lu >%lu ~%lu\n", min_stat(&project.module.lines), max_stat(&project.module.lines), avg_stat(&project.module.lines)); if (print_metric(cdl)) out(csv ? ",%lu,%lu,%lu" : " Code: <%lu >%lu ~%lu\n", min_stat(&project.module.code_lines), max_stat(&project.module.code_lines), avg_stat(&project.module.code_lines)); if (print_metric(cml)) out(csv ? ",%lu,%lu,%lu" : " Comment: <%lu >%lu ~%lu\n", min_stat(&project.module.comment_lines), max_stat(&project.module.comment_lines), avg_stat(&project.module.comment_lines)); if (print_metric(bll)) out(csv ? ",%lu,%lu,%lu" : " Blank: <%lu >%lu ~%lu\n", min_stat(&project.module.white_lines), max_stat(&project.module.white_lines), avg_stat(&project.module.white_lines)); if (print_metric(exs)) out(csv ? ",%lu,%lu,%lu" : " Exec Statements: <%lu >%lu ~%lu\n", min_stat(&project.module.stmnts), max_stat(&project.module.stmnts), avg_stat(&project.module.stmnts)); if (print_metric(dcs)) out(csv ? ",%lu,%lu,%lu" : " Decl Statements: <%lu >%lu ~%lu\n", min_stat(&project.module.decls), max_stat(&project.module.decls), avg_stat(&project.module.decls)); if (print_metric(pps)) out(csv ? ",%lu,%lu,%lu" : " PP Statements: <%lu >%lu ~%lu\n", min_stat(&project.module.pp), max_stat(&project.module.pp), avg_stat(&project.module.pp)); if (print_metric(fnc)) out(csv ? ",%lu,%lu,%lu" : " Functions: <%lu >%lu ~%lu\n", min_stat(&project.module.funcs), max_stat(&project.module.funcs), avg_stat(&project.module.funcs)); out(csv ? "" : "\n"); } /* Only print project-related stats if there is at least one project-related metric to print for the project. */ if (print_prj) { out(csv ? "" : " -Project-\n"); if (print_metric(scl)) out(csv ? ",%lu" : " Lines: %lu\n", tot_stat(&project.module.lines)); if (print_metric(cdl)) out(csv ? ",%lu" : " Code: %lu\n", tot_stat(&project.module.code_lines)); if (print_metric(cml)) out(csv ? ",%lu" : " Comment: %lu\n", tot_stat(&project.module.comment_lines)); if (print_metric(bll)) out(csv ? ",%lu" : " Blank: %lu\n", tot_stat(&project.module.white_lines)); if (print_metric(exs)) out(csv ? ",%lu" : " Exec Statements: %lu\n", tot_stat(&project.function.stmnts)); if (print_metric(dcs)) out(csv ? ",%lu" : " Decl Statements: %lu\n", tot_stat(&project.module.decls)); if (print_metric(pps)) out(csv ? ",%lu" : " PP Statements: %lu\n", tot_stat(&project.module.pp)); total_statements = tot_stat(&project.function.stmnts) + tot_stat(&project.module.decls) + tot_stat(&project.module.pp); function_points = total_statements / STMNT_TO_FP_DIVISOR + ROUND; /* If function(s) and supposed to, adjust function points based on average complexity. */ if (tot_stat(&project.module.funcs) != 0 && adjust_function_points) { function_points /= fp_adjustment_factor( avg_stat(&project.function.decisions) + 1); } if (print_metric(fnp)) out(csv ? ",%u" : " Function Points: %u\n", (unsigned)function_points); if (print_metric(idc)) out(csv ? ",%lu" : " Identifiers: %lu\n", tim_stat(&project.idents)); if (print_metric(idl)) out(csv ? ",%lu,%lu,%lu" : " Length: <%lu >%lu ~%lu\n", tim_stat(&project.idents) == 0 ? 0 : min_stat(&project.idents), tim_stat(&project.idents) == 0 ? 0 : max_stat(&project.idents), tim_stat(&project.idents) == 0 ? 0 : avg_stat(&project.idents)); if (print_metric(fnc)) out(csv ? ",%lu" : " Functions: %lu\n", tot_stat(&project.module.funcs)); if (print_metric(mdc)) out(csv ? ",%lu" : " Modules: %lu\n", project.modules); } out(csv ? "\n" : "");}/* Update project-level statistics. */static void update_project_stats(BOOLEAN do_halstead){ absorb_stat(&project.function.decisions, &module.function.decisions); absorb_stat(&project.function.conditions, &module.function.conditions); if (do_halstead) { absorb_stat(&project.function.length, &module.function.length); absorb_stat(&project.function.vocabulary, &module.function.vocabulary); absorb_stat(&project.function.volume, &module.function.volume); absorb_stat(&project.function.level, &module.function.level); absorb_stat(&project.function.effort, &module.function.effort); absorb_stat(&project.function.intelligence, &module.function.intelligence); absorb_stat(&project.function.lang_level, &module.function.lang_level); } absorb_stat(&project.function.lines, &module.function.lines); absorb_stat(&project.function.code_lines, &module.function.code_lines); absorb_stat(&project.function.comment_lines, &module.function.comment_lines); absorb_stat(&project.function.white_lines, &module.function.white_lines); record_stat(&project.module.lines, mod.lines.total); record_stat(&project.module.code_lines, mod.lines.code); record_stat(&project.module.comment_lines, mod.lines.com); record_stat(&project.module.white_lines, mod.lines.white); absorb_stat(&project.idents, &module.idents); absorb_stat(&project.function.decls, &module.function.decls); absorb_stat(&project.function.stmnts, &module.function.stmnts); absorb_stat(&project.function.max_depth, &module.function.max_depth); record_stat(&project.module.decls, mod.decl); record_stat(&project.module.stmnts, tot_stat(&module.function.stmnts)); record_stat(&project.module.pp, mod.pp); record_stat(&project.module.funcs, mod.functions); ++project.modules;}/* Initialize module-level statistics. */static void init_module_stats(BOOLEAN do_halstead){ init_stat(&module.function.decisions); init_stat(&module.function.conditions); if (do_halstead) { init_stat(&module.function.length); init_stat(&module.function.vocabulary); init_stat(&module.function.volume); init_stat(&module.function.level); init_stat(&module.function.effort); init_stat(&module.function.intelligence); init_stat(&module.function.lang_level); } init_stat(&module.function.lines); init_stat(&module.function.code_lines); init_stat(&module.function.comment_lines); init_stat(&module.function.white_lines); init_stat(&module.function.decls); init_stat(&module.function.stmnts); init_stat(&module.function.max_depth); init_stat(&module.idents); module.lines = 0; module.code_lines = 0; module.comment_lines = 0; module.white_lines = 0;}/* Print module summary. */static void print_module_summary(BOOLEAN csv, BOOLEAN print_mod, BOOLEAN print_mod_fcn, BOOLEAN do_halstead, BOOLEAN adjust_function_points){ /* Executable + declaration + preprocessor statements. For function-point backfiring. */ float total_statements; /* Backfired function points. */ float function_points; out(csv ? "mod,%s" : "\n\n Module Summary\n", mod_name()); /* Only print function-related stats if at least one function and there is at least one function-related metric to print for a module. */ if (mod.functions != 0 && print_mod_fcn) { out(csv ? "" : " -Function-\n"); if (print_metric(cyc)) out(csv ? ",%lu,%lu,%lu" : " Cyclomatic: <%lu >%lu ~%lu\n", min_stat(&module.function.decisions) + 1, max_stat(&module.function.decisions) + 1, avg_stat(&module.function.decisions) + 1); if (print_metric(exc)) out(csv ? ",%lu,%lu,%lu" : " Extended: <%lu >%lu ~%lu\n", min_stat(&module.function.conditions) + 1, max_stat(&module.function.conditions) + 1, avg_stat(&module.function.conditions) + 1); if (do_halstead) { if (print_metric(pln)) out(csv ? ",%lu,%lu,%lu" : " Halstead Length: <%lu >%lu ~%lu\n", min_stat(&module.function.length), max_stat(&module.function.length), avg_stat(&module.function.length)); if (print_metric(pvc)) out(csv ? ",%lu,%lu,%lu" : " Vocabulary: <%lu >%lu ~%lu\n", min_stat(&module.function.vocabulary), max_stat(&module.function.vocabulary), avg_stat(&module.function.vocabulary)); if (print_metric(pvl)) out(csv ? ",%lu,%lu,%lu" : " Volume: <%lu >%lu ~%lu\n", min_stat(&module.function.volume), max_stat(&module.function.volume), avg_stat(&module.function.volume)); if (print_metric(plv)) out(csv ? ",%.3f,%.3f,%.3f" : " Level: <%.3f >%.3f ~%.3f\n", min_stat(&module.function.level) / 1000.0, max_stat(&module.function.level) / 1000.0, avg_stat(&module.function.level) / 1000.0); if (print_metric(pef)) out(csv ? ",%lu,%lu,%lu" : " Effort: <%lu >%lu ~%lu\n", min_stat(&module.function.effort), max_stat(&module.function.effort), avg_stat(&module.function.effort)); if (print_metric(inc)) out(csv ? ",%lu,%lu,%lu" : " Intelligence: <%lu >%lu ~%lu\n", min_stat(&module.function.intelligence), max_stat(&module.function.intelligence), avg_stat(&module.function.intelligence)); if (print_metric(ptm)) out(csv ? ",%.1f,%.1f,%.1f,%.1f" : " Time (hours): <%.1f >%.1f ~%.1f %.1f\n", min_stat(&module.function.effort) / moments_per_hour, max_stat(&module.function.effort) / moments_per_hour, avg_stat(&module.function.effort) / moments_per_hour, tot_stat(&module.function.effort) / moments_per_hour); if (print_metric(llv)) out(csv ? ",%.2f,%.2f,%.2f" : " Lang Level: <%.2f >%.2f ~%.2f\n", min_stat(&module.function.lang_level) / 100.0, max_stat(&module.function.lang_level) / 100.0, avg_stat(&module.function.lang_level) / 100.0); } if (print_metric(scl)) out(csv ? ",%lu,%lu,%lu,%lu" : " Lines: <%lu >%lu ~%lu %lu\n", min_stat(&module.function.lines), max_stat(&module.function.lines), avg_stat(&module.function.lines), tot_stat(&module.function.lines)); if (print_metric(cdl)) out(csv ? ",%lu,%lu,%lu,%lu" : " Code: <%lu >%lu ~%lu %lu\n", min_stat(&module.function.code_lines), max_stat(&module.function.code_lines), avg_stat(&module.function.code_lines), tot_stat(&module.function.code_lines)); if (print_metric(cml)) out(csv ? ",%lu,%lu,%lu,%lu" : " Comment: <%lu >%lu ~%lu %lu\n", min_stat(&module.function.comment_lines), max_stat(&module.function.comment_lines), avg_stat(&module.function.comment_lines), tot_stat(&module.function.comment_lines)); if (print_metric(bll)) out(csv ? ",%lu,%lu,%lu,%lu" : " Blank: <%lu >%lu ~%lu %lu\n", min_stat(&module.function.white_lines), max_stat(&module.function.white_lines), avg_stat(&module.function.white_lines), tot_stat(&module.function.white_lines)); if (print_metric(exs)) out(csv ? ",%lu,%lu,%lu" : " Exec Statements: <%lu >%lu ~%lu\n", min_stat(&module.function.stmnts), max_stat(&module.function.stmnts), avg_stat(&module.function.stmnts)); if (print_metric(dcs)) out(csv ? ",%lu,%lu,%lu,%lu" : " Decl Statements: <%lu >%lu ~%lu %lu\n", min_stat(&module.function.decls), max_stat(&module.function.decls), avg_stat(&module.function.decls), tot_stat(&module.function.decls)); if (print_metric(mcd)) out(csv ? ",%lu,%lu,%lu" : " Max Depth: <%lu >%lu ~%lu\n", min_stat(&module.function.max_depth), max_stat(&module.function.max_depth), avg_stat(&module.function.max_depth)); out(csv ? "" : "\n"); } /* Only print module-related stats if there is at least one module-related metric to print for this module. */ if (print_mod) { out(csv ? "" : " -Module-\n"); if (print_metric(scl)) out(csv ? ",%u" : " Lines: %u\n", mod.lines.total); if (print_metric(cdl)) out(csv ? ",%u" : " Code: %u\n", mod.lines.code); if (print_metric(cml)) out(csv ? ",%u" : " Comment: %u\n", mod.lines.com); if (print_metric(bll)) out(csv ? ",%u" : " Blank: %u\n", mod.lines.white); if (print_metric(exs)) out(csv ? ",%lu" : " Exec Statements: %lu\n", tot_stat(&module.function.stmnts)); if (print_metric(dcs)) out(csv ? ",%u" : " Decl Statements: %u\n", mod.decl); if (print_metric(pps)) out(csv ? ",%u" : " PP Statements: %u\n", mod.pp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -