File Complexity Overall
  • There are 222 files with units, with 104,965 lines of code.
    • 20 very complex files (McCabe index sum 251+; 46,015 lines of code)
    • 14 complex files (McCabe index sum 126-250; 13,811 lines of code)
    • 41 medium complex files (McCabe index sum 51-125; 19,229 lines of code)
    • 38 slightly complex files (McCabe index sum 26-50; 9,354 lines of code)
    • 109 simple files (McCabe index sum 1-25; 16,556 lines of code)
  • 113 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system43% | 13% | 18% | 8% | 15%
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
hpp44% | 16% | 18% | 10% | 10%
h52% | 14% | 18% | 6% | 8%
cpp35% | 6% | 23% | 10% | 24%
c23% | 0% | 16% | 7% | 53%
cc0% | 0% | 0% | 65% | 34%
py0% | 0% | 0% | 0% | 100%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
lib44% | 13% | 18% | 8% | 14%
experiments0% | 0% | 19% | 12% | 68%
tools0% | 0% | 0% | 0% | 100%
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
abc.hpp
in lib/bill/bill/sat/solver
4221 203 1076 25 48
glucose.hpp
in lib/bill/bill/sat/solver
3797 312 1015 27 52
maple.hpp
in lib/bill/bill/sat/solver
3746 277 1002 27 47
ghack.hpp
in lib/bill/bill/sat/solver
3145 272 912 29 53
watercluster2.c
in lib/nauty
2792 79 789 28 75
format.h
in lib/fmt/fmt
2797 305 593 21 28
phmap.h
in lib/parallel_hashmap/parallel_hashmap
3171 315 560 18 7
btree.h
in lib/parallel_hashmap/parallel_hashmap
3042 254 503 17 17
maj_encoder.hpp
in lib/percy/percy/encoders
1674 60 492 29 68
satSolver.cpp
in lib/abcsat
1838 75 446 24 32
aig_encoder.hpp
in lib/percy/percy/encoders
1518 53 444 29 68
concurrentqueue.h
in lib/percy/percy
2625 99 383 15 44
phmap_base.h
in lib/parallel_hashmap/parallel_hashmap
3129 235 344 11 5
Glucose.cpp
in lib/abcsat
1021 34 311 30 47
verilog.hpp
in lib/lorina/lorina
1252 73 311 25 37
mig_encoder.hpp
in lib/percy/percy/encoders
1299 46 309 24 27
operations.hpp
in lib/kitty/kitty
1495 111 265 18 22
vecInt.h
in lib/bill/bill/sat/solver/abc
1150 93 261 23 7
vecInt.h
in lib/abcsat/abc
1157 93 261 23 7
vecInt.h
in lib/abcesop/eabc
1146 93 260 23 7
format-inl.h
in lib/fmt/fmt
1115 60 239 21 27
constructors.hpp
in lib/kitty/kitty
1077 32 233 22 66
spectral.hpp
in lib/kitty/kitty
924 46 201 22 67
partial_dag_encoder.hpp
in lib/percy/percy/encoders
990 26 199 20 42
matplotlibcpp.h
in lib/matplot/matplot
1844 87 198 11 13
chrono.h
in lib/fmt/fmt
891 106 186 21 10
dag_generation.hpp
in lib/percy/percy
987 55 176 18 24
SimpSolver.cpp
in lib/abcsat
516 22 170 33 26
ditt_maj_encoder.hpp
in lib/percy/percy/encoders
658 22 163 25 22
core.h
in lib/fmt/fmt
1235 112 161 13 21
ssv_encoder.hpp
in lib/percy/percy/encoders
1166 19 155 13 20
zdd.hpp
in lib/bill/bill/dd
763 35 134 18 12
ssv_fence2_encoder.hpp
in lib/percy/percy/encoders
684 23 132 19 22
shift.hpp
in lib/kitty/kitty/detail
961 1 128 13 128
phmap_bits.h
in lib/parallel_hashmap/parallel_hashmap
447 83 123 28 9
printf.h
in lib/fmt/fmt
517 51 120 23 33
partial_dag_generator.hpp
in lib/percy/percy/generators
572 29 117 20 16
partial_dag3_generator.hpp
in lib/percy/percy/generators
536 26 108 20 18
npn.hpp
in lib/kitty/kitty
748 19 107 14 13
percy.hpp
in lib/percy/percy
1651 9 102 6 23
abc_global.h
in lib/bill/bill/sat/solver/abc
291 52 100 34 15
abc_global.h
in lib/abcsat/abc
296 52 100 34 15
vecPtr.h
in lib/abcesop/eabc
518 41 98 19 9
exorList.cpp
in lib/abcesop
631 21 93 15 17
Solver.h
in lib/bill/bill/sat/solver/abc
319 58 92 29 9
Solver.h
in lib/abcsat/abc
319 58 92 29 9
AbcGlucose.cpp
in lib/abcsat
402 58 92 23 9
partial_dag.hpp
in lib/percy/percy
538 16 92 17 15
majority_chain.hpp
in lib/percy/percy
370 11 80 22 50
compile.h
in lib/fmt/fmt
480 49 77 16 12
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...