Visual Studio Code
Conditional Complexity

Intro
  • Conditional complexity (also called cyclomatic complexity) is a term used to measure the complexity of software. The term refers to the number of possible paths through a program function. A higher value ofter means higher maintenance and testing costs (infosecinstitute.com).
  • Conditional complexity is calculated by counting all conditions in the program that can affect the execution path (e.g. if statement, loops, switches, and/or operators, try and catch blocks...).
  • Conditional complexity is measured at the unit level (methods, functions...).
  • Units are classified in four categories based on the measured McCabe index: 1-5 (simple units), 6-10 (medium complex units), 11-25 (complex units), 26+ (very complex units).
Learn more...
Conditional Complexity Overall
  • There are 22,035 units with 268,738 lines of code in units (43.6% of code).
    • 18 very complex units (3,407 lines of code)
    • 130 complex units (13,936 lines of code)
    • 973 medium complex units (46,549 lines of code)
    • 2,223 simple units (54,963 lines of code)
    • 18,691 very simple units (149,883 lines of code)
1% | 5% | 17% | 20% | 55%
Legend:
51+
26-50
11-25
6-10
1-5
Alternative Visuals
Conditional Complexity per Extension
ts1% | 5% | 17% | 20% | 55%
js8% | 4% | 11% | 17% | 57%
Legend:
51+
26-50
11-25
6-10
1-5
Conditional Complexity per Logical Component
primary logical decomposition
src1% | 5% | 17% | 20% | 55%
extensions2% | 3% | 16% | 21% | 56%
Legend:
51+
26-50
11-25
6-10
1-5
src logical decomposition
src/vs/workbench1% | 4% | 16% | 20% | 56%
extensions/html-language-features/server17% | 0% | 25% | 12% | 43%
extensions/emmet/src11% | 7% | 24% | 30% | 25%
src/vs/base<1% | 7% | 18% | 20% | 52%
extensions/json-language-features/server39% | 0% | 11% | 15% | 33%
src/vs/editor<1% | 6% | 18% | 18% | 55%
src/vs/platform<1% | 4% | 15% | 22% | 56%
src/vs/code0% | 7% | 25% | 26% | 40%
extensions/git/src0% | 5% | 21% | 23% | 49%
extensions/css-language-features/server0% | 34% | 11% | 13% | 41%
extensions/vscode-web-playground/src0% | 6% | 2% | 16% | 75%
extensions/extension-editing/src0% | 23% | 11% | 20% | 43%
extensions/php-language-features/src0% | 13% | 35% | 16% | 34%
src0% | 11% | 15% | 12% | 61%
extensions/typescript-language-features/src0% | <1% | 13% | 19% | 66%
extensions/json-language-features/client0% | 0% | 58% | 6% | 35%
extensions/npm/src0% | 0% | 15% | 26% | 57%
src/vs0% | 0% | 9% | 21% | 69%
extensions/microsoft-authentication/src0% | 0% | 18% | 20% | 61%
extensions/merge-conflict/src0% | 0% | 17% | 30% | 52%
extensions/github/src0% | 0% | 43% | 0% | 56%
extensions/github-browser/src0% | 0% | 7% | 20% | 72%
extensions/search-result/src0% | 0% | 49% | 47% | 3%
extensions/grunt/src0% | 0% | 24% | 23% | 51%
extensions/jake/src0% | 0% | 22% | 25% | 52%
extensions/gulp/src0% | 0% | 21% | 26% | 52%
extensions/html-language-features/client0% | 0% | 11% | 32% | 55%
extensions/debug-server-ready/src0% | 0% | 21% | 40% | 37%
extensions/configuration-editing/src0% | 0% | 10% | 40% | 49%
extensions/css-language-features/client0% | 0% | 5% | 28% | 66%
extensions/markdown-language-features/src0% | 0% | 0% | 18% | 81%
extensions/debug-auto-launch/src0% | 0% | 0% | 28% | 71%
extensions/github-authentication/src0% | 0% | 0% | 10% | 89%
extensions/image-preview/media0% | 0% | 0% | 35% | 64%
extensions/markdown-language-features/preview-src0% | 0% | 0% | 13% | 86%
extensions0% | 0% | 0% | 64% | 35%
extensions/image-preview/src0% | 0% | 0% | 7% | 92%
extensions/git-ui/src0% | 0% | 0% | 0% | 100%
extensions/python/src0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
src/workbench logical decomposition
workbench/contrib2% | 4% | 17% | 20% | 55%
workbench/services1% | 3% | 20% | 19% | 53%
workbench/browser<1% | 8% | 15% | 22% | 52%
workbench/api0% | 4% | 11% | 18% | 65%
workbench/electron-browser0% | 0% | 28% | 36% | 34%
workbench/common0% | 0% | 11% | 24% | 64%
workbench/electron-sandbox0% | 0% | 18% | 20% | 61%
workbench0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
src/editor logical decomposition
editor/standalone6% | 2% | 12% | 11% | 66%
editor/common0% | 8% | 19% | 18% | 53%
editor/contrib0% | 5% | 18% | 22% | 52%
editor/browser0% | 4% | 19% | 14% | 61%
editor0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
src/base logical decomposition
common2% | 8% | 17% | 23% | 48%
browser0% | 5% | 20% | 19% | 54%
parts0% | 7% | 15% | 15% | 61%
node0% | 6% | 28% | 16% | 48%
worker0% | 0% | 0% | 17% | 82%
Legend:
51+
26-50
11-25
6-10
1-5
extensions logical decomposition
src/vs1% | 5% | 17% | 20% | 55%
extensions/html-language-features14% | 0% | 22% | 16% | 46%
extensions/emmet11% | 7% | 24% | 30% | 25%
extensions/json-language-features21% | 0% | 32% | 11% | 34%
extensions/git0% | 5% | 21% | 23% | 49%
extensions/css-language-features0% | 21% | 8% | 19% | 50%
extensions/vscode-web-playground0% | 6% | 2% | 16% | 75%
extensions/extension-editing0% | 23% | 11% | 20% | 43%
extensions/php-language-features0% | 13% | 35% | 16% | 34%
extensions/typescript-language-features0% | <1% | 13% | 19% | 66%
extensions/npm0% | 0% | 15% | 26% | 57%
extensions/microsoft-authentication0% | 0% | 18% | 20% | 61%
extensions/merge-conflict0% | 0% | 17% | 30% | 52%
extensions/github0% | 0% | 43% | 0% | 56%
extensions/github-browser0% | 0% | 7% | 20% | 72%
extensions/search-result0% | 0% | 49% | 47% | 3%
extensions/grunt0% | 0% | 24% | 23% | 51%
extensions/jake0% | 0% | 22% | 25% | 52%
extensions/gulp0% | 0% | 21% | 26% | 52%
extensions/debug-server-ready0% | 0% | 21% | 40% | 37%
extensions/configuration-editing0% | 0% | 10% | 40% | 49%
extensions/markdown-language-features0% | 0% | 0% | 18% | 81%
extensions/image-preview0% | 0% | 0% | 15% | 84%
extensions/debug-auto-launch0% | 0% | 0% | 28% | 71%
extensions/github-authentication0% | 0% | 0% | 10% | 89%
extensions0% | 0% | 0% | 64% | 35%
extensions/git-ui0% | 0% | 0% | 0% | 100%
extensions/python0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
Most Complex Units
Top 50 most complex units
Unit# linesMcCabe index# params
export function startServer()
in extensions/html-language-features/server/src/htmlServer.ts
356 113 2
private _myTokenize()
in src/vs/editor/standalone/common/monarch/monarchLexer.ts
224 71 4
export function attachQuickInputStyler()
in src/vs/platform/theme/common/styler.ts
38 69 3
export function isValidLocationForEmmetAbbreviation()
in extensions/emmet/src/abbreviationActions.ts
134 66 6
private async queryLocal()
in src/vs/workbench/contrib/extensions/browser/extensionsViews.ts
127 65 2
private provideCompletionItemsInternal()
in extensions/emmet/src/defaultCompletionProvider.ts
140 63 3
Lexer.prototype.token = function()
in src/vs/base/common/marked/marked.js
261 61 2
private shouldRunExperiment()
in src/vs/workbench/contrib/experiments/common/experimentService.ts
129 61 2
private resolveWorkspaceTags()
in src/vs/workbench/contrib/tags/electron-browser/workspaceTagsService.ts
121 61 2
function createWebviewManager()
in src/vs/workbench/contrib/webview/browser/pre/main.js
213 61 1
private async executeInTerminal()
in src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts
237 60 4
export function registerCommands()
in src/vs/workbench/contrib/debug/browser/debugCommands.ts
412 58 0
private registerListeners()
in src/vs/workbench/contrib/debug/browser/debugSession.ts
204 58 0
private addPane()
in src/vs/workbench/browser/parts/views/viewPaneContainer.ts
129 55 3
constructor()
in src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts
244 54 3
private evaluateSingleVariable()
in src/vs/workbench/services/configurationResolver/common/variableResolver.ts
145 53 4
export function startServer()
in extensions/json-language-features/server/src/jsonServer.ts
235 51 2
private _scanCodeToKeyCode()
in src/vs/workbench/services/keybinding/common/macLinuxFallbackKeyboardMapper.ts
58 51 1
public getEditOperations()
in src/vs/editor/common/commands/shiftCommand.ts
111 50 2
function webviewPreloads()
in src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts
249 50 0
InlineLexer.prototype.output = function()
in src/vs/base/common/marked/marked.js
150 48 1
private applyDefaultLayout()
in src/vs/workbench/browser/layout.ts
153 48 2
private async createShellLaunchConfig()
in src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts
118 48 8
function createLineBreaksFromPreviousLineBreaks()
in src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts
204 47 7
private getGroupedTasks()
in src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
179 47 1
private createProblemMatcher()
in src/vs/workbench/contrib/tasks/common/problemMatcher.ts
90 45 1
export function startServer()
in extensions/css-language-features/server/src/cssServer.ts
215 44 2
protected dispatchRequest()
in extensions/vscode-web-playground/src/extension.ts
101 44 1
export async function main()
in src/vs/code/node/cli.ts
185 44 1
public getActiveIndentGuide()
in src/vs/editor/common/model/textModel.ts
166 44 3
private _watch()
in src/vs/platform/files/node/watcher/unix/chokidarWatcherService.ts
136 44 2
export function compareItemsByFuzzyScore()
in src/vs/base/common/fuzzyScorer.ts
69 43 6
show()
in src/vs/base/parts/quickinput/browser/quickInput.ts
132 43 0
function _applyRenderWhitespace()
in src/vs/editor/common/viewLayout/viewLineRenderer.ts
125 43 4
function scanNext()
in src/vs/base/common/json.ts
122 42 0
private async createSession()
in src/vs/workbench/contrib/debug/browser/debugService.ts
75 42 3
export function format()
in src/vs/base/common/jsonFormatter.ts
117 41 3
parse()
in src/vs/base/common/path.ts
109 40 1
public applyEdits()
in src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts
139 40 3
private ComputeRecursionPoint()
in src/vs/base/common/diff/diff.ts
152 39 7
private static _computeMinimapLayout()
in src/vs/editor/common/config/editorOptions.ts
140 39 2
private registerListeners()
in src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.ts
97 39 0
private async smartCommit()
in extensions/git/src/commands.ts
100 38 2
async show()
in src/vs/base/browser/ui/dialog/dialog.ts
110 38 0
export function merge()
in src/vs/platform/userDataSync/common/settingsMerge.ts
110 38 7
private doOpen()
in src/vs/platform/windows/electron-main/windowsMainService.ts
138 38 7
private setEventHandlers()
in src/vs/code/electron-browser/issue/issueReporterMain.ts
134 37 0
private registerTabListeners()
in src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
168 37 4
async startDebugging()
in src/vs/workbench/contrib/debug/browser/debugService.ts
85 37 3
constructor()
in src/vs/editor/browser/controller/textAreaInput.ts
162 36 2