microsoft / pyright
Unit Size

The distribution of size of units (measured in lines of code).

Intro
  • Unit size measurements show the distribution of size of units of code (methods, functions...).
  • Units are classified in four categories based on their size (lines of code): 1-20 (small units), 20-50 (medium size units), 51-100 (long units), 101+ (very long units).
  • You should aim at keeping units small (< 20 lines). Long units may become "bloaters", code that have increased to such gargantuan proportions that they are hard to work with.
Learn more...
Unit Size Overall
  • There are 34,691 units with 113,550 lines of code in units (62.6% of code).
    • 111 very long units (20,185 lines of code)
    • 213 long units (14,790 lines of code)
    • 642 medium size units (19,960 lines of code)
    • 913 small units (13,025 lines of code)
    • 32,812 very small units (45,590 lines of code)
17% | 13% | 17% | 11% | 40%
Legend:
101+
51-100
21-50
11-20
1-10
Unit Size per Extension
101+
51-100
21-50
11-20
1-10
ts30% | 22% | 25% | 11% | 10%
pyi0% | <1% | 6% | 11% | 81%
js0% | 0% | 20% | 49% | 30%
Unit Size per Logical Component
primary logical decomposition
101+
51-100
21-50
11-20
1-10
packages/pyright-internal/src/analyzer37% | 22% | 22% | 8% | 8%
packages/pyright-internal/src/parser13% | 22% | 31% | 21% | 10%
packages/pyright-internal/src/languageService12% | 25% | 40% | 13% | 7%
packages/pyright-internal/src19% | 15% | 25% | 19% | 19%
packages/vscode-pyright/src54% | 0% | 19% | 11% | 14%
packages/pyright-internal/src/common0% | 11% | 22% | 24% | 41%
packages/pyright-internal/typeshed-fallback/stdlib0% | <1% | 11% | 10% | 77%
packages/pyright-internal/typeshed-fallback/stubs0% | 0% | 2% | 11% | 85%
packages/pyright-internal/src/commands0% | 0% | 42% | 43% | 13%
packages/pyright-internal/src/localization0% | 0% | 31% | 32% | 36%
build/lib0% | 0% | 50% | 0% | 50%
build0% | 0% | 0% | 84% | 15%
packages/vscode-pyright/build0% | 0% | 0% | 80% | 19%
Alternative Visuals
Longest Units
Top 20 longest units
Unit# linesMcCabe index# params
function getTypeFromFlowNode()
in packages/pyright-internal/src/analyzer/codeFlowEngine.ts
511 103 5
leftType: printType()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
491 109 1
function canAssignFunction()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
461 110 6
export function getTypeNarrowingCallback()
in packages/pyright-internal/src/analyzer/typeGuards.ts
428 132 4
function getTypeOfClass()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
408 116 1
function matchFunctionArgumentsToParameters()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
361 92 4
export function synthesizeDataClassMethods()
in packages/pyright-internal/src/analyzer/dataClasses.ts
360 84 5
export function getUnescapedString()
in packages/pyright-internal/src/parser/stringTokenUtils.ts
358 90 1
export function printType()
in packages/pyright-internal/src/analyzer/typePrinter.ts
325 87 4
function getTypeOfExpression()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
318 73 3
sourceType: printType()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
296 80 1
function narrowTypeForIsInstance()
in packages/pyright-internal/src/analyzer/typeGuards.ts
291 94 3
sourceType: printType()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
289 65 1
function getTypeOfFunction()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
286 92 1
private _validateBaseClassOverrides()
in packages/pyright-internal/src/analyzer/checker.ts
284 62 1
type: printType()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
281 88 1
export function isTypeSame()
in packages/pyright-internal/src/analyzer/types.ts
275 85 5
function getTypeFromMemberAccessWithBaseType()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
269 73 4
function validateCallArguments()
in packages/pyright-internal/src/analyzer/typeEvaluator.ts
269 71 7
export function printExpression()
in packages/pyright-internal/src/analyzer/parseTreeUtils.ts
261 66 2