File Complexity Overall
  • There are 200 files with units, with 117,797 lines of code.
    • 12 very complex files (McCabe index sum 251+; 19,648 lines of code)
    • 21 complex files (McCabe index sum 126-250; 22,321 lines of code)
    • 52 medium complex files (McCabe index sum 51-125; 35,478 lines of code)
    • 31 slightly complex files (McCabe index sum 26-50; 16,076 lines of code)
    • 84 simple files (McCabe index sum 1-25; 24,274 lines of code)
  • 164 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system16% | 18% | 30% | 13% | 20%
Legend:
251+
126-250
51-125
26-50
1-25


explore: grouped by folders | grouped by complexity
File Complexity per Extension
251+
126-250
51-125
26-50
1-25
rs15% | 16% | 31% | 14% | 21%
h30% | 49% | 12% | 2% | 5%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
src15% | 16% | 31% | 14% | 21%
include30% | 49% | 12% | 2% | 5%
Most Complex Files (Top 50)

The McCabe index of a file grows with its size: per 100 lines tells a large but plain file from a dense one, and most complex unit whether the complexity sits in one unit or is spread over many.

File# lines# unitsMcCabe index
(sum)
per 100
lines
most complex
unit
parser.rs
in src/backend/arm/assembler
2104 48 560 27 51
peephole.rs
in src/backend/i686/codegen
1541 58 462 30 65
arm_neon.h
in include
2409 279 450 19 6
long_double.rs
in src/common
2467 148 442 18 55
parser.rs
in src/backend/x86/assembler
1738 51 418 24 85
simplify.rs
in src/passes
2325 131 332 14 62
scan.rs
in src/frontend/lexer
992 28 331 33 30
macro_defs.rs
in src/frontend/preprocessor
1165 25 302 26 59
elf_writer_common.rs
in src/backend
1420 38 295 21 39
global_init.rs
in src/ir/lowering
1592 49 270 17 23
peephole.rs
in src/backend/riscv/codegen
946 48 263 28 92
peephole.rs
in src/backend/arm/codegen
949 47 255 27 72
emmintrin.h
in include
1250 172 245 20 5
generation.rs
in src/backend
1045 23 243 23 33
analysis.rs
in src/frontend/sema
1547 42 235 15 40
xmmintrin.h
in include
991 127 214 22 9
cfg_simplify.rs
in src/passes
1126 42 210 19 18
avx2intrin.h
in include
966 80 202 21 13
inline.rs
in src/passes
1264 21 196 16 43
elf_writer.rs
in src/backend/riscv/assembler
1170 20 190 16 30
conditionals.rs
in src/frontend/preprocessor
686 20 184 27 51
asm_preprocess.rs
in src/backend
1134 46 182 16 32
liveness.rs
in src/backend
912 26 178 20 30
expr_types.rs
in src/ir/lowering
1197 19 174 15 30
stmt_init.rs
in src/ir/lowering
901 18 174 19 46
805 13 151 19 22
common.rs
in src/backend
1352 31 150 11 25
parser.rs
in src/backend/riscv/assembler
774 20 145 19 31
licm.rs
in src/passes
1053 19 144 14 55
mmintrin.h
in include
730 59 133 18 7
traits.rs
in src/backend
1038 68 130 13 25
constant_fold.rs
in src/passes
829 49 129 16 24
div_by_const.rs
in src/passes
1551 35 127 8 8
narrow.rs
in src/passes
753 19 121 16 26
inline_asm.rs
in src/backend
786 12 120 15 22
promote.rs
in src/ir/mem2reg
974 19 118 12 36
stmt.rs
in src/ir/lowering
1100 13 116 11 23
const_eval.rs
in src/frontend/sema
982 25 115 12 24
asm_emitter.rs
in src/backend/i686/codegen
594 17 114 19 21
func_lowering.rs
in src/ir/lowering
551 17 112 20 24
pipeline.rs
in src/driver
736 11 110 15 38
pipeline.rs
in src/frontend/preprocessor
614 12 106 17 58
emit.rs
in src/backend/i686/codegen
1847 44 105 6 12
if_convert.rs
in src/passes
599 11 104 17 27
asm_emitter.rs
in src/backend/x86/codegen
514 10 103 20 23
struct_init.rs
in src/ir/lowering
771 16 102 13 17
dead_statics.rs
in src/passes
344 10 101 29 44
asm_emitter.rs
in src/backend/arm/codegen
386 16 97 25 12
asm_expr.rs
in src/backend
341 18 95 28 43
types.rs
in src/common
1391 15 93 7 18
About This Analysis
  • File complexity is the sum of the McCabe indexes (conditional complexity) of the units (methods, functions...) in a file.
  • Files are classified in five categories based on that sum: 1-25 (simple files), 26-50 (slightly complex files), 51-125 (medium complex files), 126-250 (complex files), 251+ (very complex files). The default bands are five times the unit complexity bands, as a file is a group of units.
  • Only main code files with units are classified. Files without units (languages without unit analysis, or files without functions) have no complexity to measure and are left out rather than counted as simple.
  • A very complex file holds many decisions, which often means it has too many responsibilities: a candidate to split, and a place where changes need more testing.
Learn more...