CINXE.COM
<!doctype html> <html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-1.23.8 docs-doc-page docs-doc-id-rules/complexity" data-has-hydrated="false"> <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.7.0"> <title data-rh="true">Complexity Rule Set | detekt</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://detekt.dev/docs/rules/complexity"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="1.23.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-1.23.8"><meta data-rh="true" name="docsearch:version" content="1.23.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-1.23.8"><meta data-rh="true" property="og:title" content="Complexity Rule Set | detekt"><meta data-rh="true" name="description" content="This rule set contains rules that report complex code."><meta data-rh="true" property="og:description" content="This rule set contains rules that report complex code."><meta data-rh="true" name="keywords" content="rules,complexity"><link data-rh="true" rel="icon" href="/img/favicon.svg"><link data-rh="true" rel="canonical" href="https://detekt.dev/docs/rules/complexity"><link data-rh="true" rel="alternate" href="https://detekt.dev/docs/rules/complexity" hreflang="en"><link data-rh="true" rel="alternate" href="https://detekt.dev/docs/rules/complexity" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://5PZNXB7M3G-dsn.algolia.net" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="detekt RSS Feed"> <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="detekt Atom Feed"> <link rel="search" type="application/opensearchdescription+xml" title="detekt" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.80918a2e.css"> <script src="/assets/js/runtime~main.bf91fd30.js" defer="defer"></script> <script src="/assets/js/main.8ff3ed71.js" defer="defer"></script> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/favicon.svg"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/favicon.svg" alt="detekt logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/favicon.svg" alt="detekt logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">detekt</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/intro">Docs</a><a class="navbar__item navbar__link" href="/blog">Blog</a><a href="https://detekt.dev/kdoc/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">APIs</a><a class="navbar__item navbar__link" href="/marketplace">Marketplace</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/rules/complexity">1.23.8</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/rules/complexity">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/rules/complexity">1.23.8</a></li><li><a class="dropdown__link" href="/docs/1.23.7/rules/complexity">1.23.7</a></li><li><a class="dropdown__link" href="/docs/1.23.6/rules/complexity">1.23.6</a></li><li><a class="dropdown__link" href="/docs/1.23.5/rules/complexity">1.23.5</a></li><li><a class="dropdown__link" href="/docs/1.23.4/rules/complexity">1.23.4</a></li><li><a class="dropdown__link" href="/docs/1.23.3/rules/complexity">1.23.3</a></li><li><a class="dropdown__link" href="/docs/1.23.1/rules/complexity">1.23.1</a></li><li><a class="dropdown__link" href="/docs/1.23.0/rules/complexity">1.23.0</a></li><li><a class="dropdown__link" href="/docs/1.22.0/rules/complexity">1.22.0</a></li><li><a class="dropdown__link" href="/docs/1.21.0/rules/complexity">1.21.0</a></li><li><a class="dropdown__link" href="/changelog">All changelogs</a></li></ul></div><a href="https://github.com/detekt/detekt" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite" aria-pressed="false"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Welcome</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/introduction/configurations">Introduction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/gettingstarted/cli">Getting Started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/docs/rules/comments">Rules Documentation</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/comments">Comments Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/rules/complexity">Complexity Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/coroutines">Coroutines Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/empty-blocks">Empty-blocks Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/exceptions">Exceptions Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/formatting">Formatting Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/libraries">Libraries Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/naming">Naming Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/performance">Performance Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/potential-bugs">Potential-bugs Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/ruleauthors">Ruleauthors Rule Set</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/rules/style">Style Rule Set</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/changelog">Changelogs</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Rules Documentation</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Complexity Rule Set</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.23.8</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Complexity Rule Set</h1></header><p>This rule set contains rules that report complex code.</p> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="cognitivecomplexmethod">CognitiveComplexMethod<a href="#cognitivecomplexmethod" class="hash-link" aria-label="Direct link to CognitiveComplexMethod" title="Direct link to CognitiveComplexMethod"></a></h3> <p>Complex methods are hard to understand and read. It might not be obvious what side-effects a complex method has. Prefer splitting up complex methods into smaller methods that are in turn easier to understand. Smaller methods can also be named much clearer which leads to improved readability of the code.</p> <p>This rule measures and restricts the complexity of the method through the <a href="https://www.sonarsource.com/docs/CognitiveComplexity.pdf" target="_blank" rel="noopener noreferrer">Cognitive Complexity metric of Sonasource</a>. Which improves McCabe's Cyclomatic Complexity (see <a href="/docs/rules/complexity#cyclomaticcomplexmethod">CyclomaticComplexMethod</a>) considering the programmer's mental model.</p> <p>Similar to cyclomatic complexity, it is a mathematical model that increases +1 complexity for flow control statements, but increases additional complexity when the statements are deeply nested.</p> <p>The statements that increase the complexity or the nesting level are as follows.</p> <ul> <li><strong>Complexity Increments</strong> - <code>if</code>, <code>when</code>, <code>for</code>, <code>while</code>, <code>do while</code>, <code>catch</code>, <code>labeled break</code>, <code>labeled continue</code>, <code>labeled return</code>, <code>recursion call</code>, <code>&&</code>, <code>||</code></li> <li><strong>Nesting Level Increments</strong> - <code>if</code>, <code>when</code>, <code>for</code>, <code>while</code>, <code>do while</code>, <code>catch</code>, <code>nested function</code></li> <li><strong>Additional Complexity Increments by Nesting Level</strong> - <code>if</code>, <code>when</code>, <code>for</code>, <code>while</code>, <code>do while</code>, <code>catch</code></li> </ul> <p><strong>Active by default</strong>: No</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options">Configuration options:<a href="#configuration-options" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>15</code>)</p> <p>Cognitive Complexity number for a method.</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="complexcondition">ComplexCondition<a href="#complexcondition" class="hash-link" aria-label="Direct link to ComplexCondition" title="Direct link to ComplexCondition"></a></h3> <p>Complex conditions make it hard to understand which cases lead to the condition being true or false. To improve readability and understanding of complex conditions consider extracting them into well-named functions or variables and call those instead.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-1">Configuration options:<a href="#configuration-options-1" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>4</code>)</p> <p>the number of conditions which will trigger the rule</p> </li> </ul> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code">Noncompliant Code:<a href="#noncompliant-code" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> str </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> isFoo </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">startsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"_"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code">Compliant Code:<a href="#compliant-code" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> str </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> isFoo </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">startsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">hasCorrectEnding</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">hasCorrectEnding</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&&</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">str</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">endsWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"_"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="complexinterface">ComplexInterface<a href="#complexinterface" class="hash-link" aria-label="Direct link to ComplexInterface" title="Direct link to ComplexInterface"></a></h3> <p>Complex interfaces which contain too many functions and/or properties indicate that this interface is handling too many things at once. Interfaces should follow the single-responsibility principle to also encourage implementations of this interface to not handle too many things at once.</p> <p>Large interfaces should be split into smaller interfaces which have a clear responsibility and are easier to understand and implement.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-2">Configuration options:<a href="#configuration-options-2" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>10</code>)</p> <p>the amount of definitions in an interface to trigger the rule</p> </li> <li> <p><code>includeStaticDeclarations</code> (default: <code>false</code>)</p> <p>whether static declarations should be included</p> </li> <li> <p><code>includePrivateDeclarations</code> (default: <code>false</code>)</p> <p>whether private declarations should be included</p> </li> <li> <p><code>ignoreOverloaded</code> (default: <code>false</code>)</p> <p>ignore overloaded methods - only count once</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="cyclomaticcomplexmethod">CyclomaticComplexMethod<a href="#cyclomaticcomplexmethod" class="hash-link" aria-label="Direct link to CyclomaticComplexMethod" title="Direct link to CyclomaticComplexMethod"></a></h3> <p>Complex methods are hard to understand and read. It might not be obvious what side-effects a complex method has. Prefer splitting up complex methods into smaller methods that are in turn easier to understand. Smaller methods can also be named much clearer which leads to improved readability of the code.</p> <p>This rule uses McCabe's Cyclomatic Complexity (MCC) metric to measure the number of linearly independent paths through a function's source code (<a href="https://www.ndepend.com/docs/code-metrics#CC" target="_blank" rel="noopener noreferrer">https://www.ndepend.com/docs/code-metrics#CC</a>). The higher the number of independent paths, the more complex a method is. Complex methods use too many of the following statements. Each one of them adds one to the complexity count.</p> <ul> <li><strong>Conditional statements</strong> - <code>if</code>, <code>else if</code>, <code>when</code></li> <li><strong>Jump statements</strong> - <code>continue</code>, <code>break</code></li> <li><strong>Loops</strong> - <code>for</code>, <code>while</code>, <code>do-while</code>, <code>forEach</code></li> <li><strong>Operators</strong> <code>&&</code>, <code>||</code>, <code>?:</code></li> <li><strong>Exceptions</strong> - <code>catch</code>, <code>use</code></li> <li><strong>Scope Functions</strong> - <code>let</code>, <code>run</code>, <code>with</code>, <code>apply</code>, and <code>also</code> -> <a href="https://kotlinlang.org/docs/scope-functions.html" target="_blank" rel="noopener noreferrer">Reference</a></li> </ul> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <p><strong>Aliases</strong>: ComplexMethod</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-3">Configuration options:<a href="#configuration-options-3" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>15</code>)</p> <p>McCabe's Cyclomatic Complexity (MCC) number for a method.</p> </li> <li> <p><code>ignoreSingleWhenExpression</code> (default: <code>false</code>)</p> <p>Ignores a complex method if it only contains a single when expression.</p> </li> <li> <p><code>ignoreSimpleWhenEntries</code> (default: <code>false</code>)</p> <p>Whether to ignore simple (braceless) when entries.</p> </li> <li> <p><code>ignoreNestingFunctions</code> (default: <code>false</code>)</p> <p>Whether to ignore functions which are often used instead of an <code>if</code> or <code>for</code> statement.</p> </li> <li> <p><code>nestingFunctions</code> (default: <code>['also', 'apply', 'forEach', 'isNotNull', 'ifNull', 'let', 'run', 'use', 'with']</code>)</p> <p>Comma separated list of function names which add complexity.</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="labeledexpression">LabeledExpression<a href="#labeledexpression" class="hash-link" aria-label="Direct link to LabeledExpression" title="Direct link to LabeledExpression"></a></h3> <p>This rule reports labeled expressions. Expressions with labels generally increase complexity and worsen the maintainability of the code. Refactor the violating code to not use labels instead. Labeled expressions referencing an outer class with a label from an inner class are allowed, because there is no way to get the instance of an outer class from an inner class in Kotlin.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-4">Configuration options:<a href="#configuration-options-4" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>ignoredLabels</code> (default: <code>[]</code>)</p> <p>allows to provide a list of label names which should be ignored by this rule</p> </li> </ul> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code-1">Noncompliant Code:<a href="#noncompliant-code-1" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> range </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> listOf</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">String</span><span class="token operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token label symbol" style="color:#36acaa">loop@</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> range</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">break</span><span class="token label symbol" style="color:#36acaa">@loop</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Outer </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">inner</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Inner </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token label symbol" style="color:#36acaa">@Inner</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// referencing itself, use `this instead</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code-1">Compliant Code:<a href="#compliant-code-1" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> range </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> listOf</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">String</span><span class="token operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> range</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"bar"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">break</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Outer </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">inner</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Inner </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> outer </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token label symbol" style="color:#36acaa">@Outer</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">extend</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">inner</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token label symbol" style="color:#36acaa">@Inner</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// this would reference Int and not Inner</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="largeclass">LargeClass<a href="#largeclass" class="hash-link" aria-label="Direct link to LargeClass" title="Direct link to LargeClass"></a></h3> <p>This rule reports large classes. Classes should generally have one responsibility. Large classes can indicate that the class does instead handle multiple responsibilities. Instead of doing many things at once prefer to split up large classes into smaller classes. These smaller classes are then easier to understand and handle less things.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-5">Configuration options:<a href="#configuration-options-5" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>600</code>)</p> <p>the size of class required to trigger the rule</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="longmethod">LongMethod<a href="#longmethod" class="hash-link" aria-label="Direct link to LongMethod" title="Direct link to LongMethod"></a></h3> <p>Methods should have one responsibility. Long methods can indicate that a method handles too many cases at once. Prefer smaller methods with clear names that describe their functionality clearly.</p> <p>Extract parts of the functionality of long methods into separate, smaller methods.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-6">Configuration options:<a href="#configuration-options-6" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>60</code>)</p> <p>number of lines in a method to trigger the rule</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="longparameterlist">LongParameterList<a href="#longparameterlist" class="hash-link" aria-label="Direct link to LongParameterList" title="Direct link to LongParameterList"></a></h3> <p>Reports functions and constructors which have more parameters than a certain threshold.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-7">Configuration options:<a href="#configuration-options-7" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><del><code>threshold</code></del> (default: <code>6</code>)</p> <p><strong>Deprecated</strong>: Use <code>functionThreshold</code> and <code>constructorThreshold</code> instead</p> <p>number of parameters required to trigger the rule</p> </li> <li> <p><code>functionThreshold</code> (default: <code>6</code>)</p> <p>number of function parameters required to trigger the rule</p> </li> <li> <p><code>constructorThreshold</code> (default: <code>7</code>)</p> <p>number of constructor parameters required to trigger the rule</p> </li> <li> <p><code>ignoreDefaultParameters</code> (default: <code>false</code>)</p> <p>ignore parameters that have a default value</p> </li> <li> <p><code>ignoreDataClasses</code> (default: <code>true</code>)</p> <p>ignore long constructor parameters list for data classes</p> </li> <li> <p><code>ignoreAnnotatedParameter</code> (default: <code>[]</code>)</p> <p>ignore the annotated parameters for the count (e.g. <code>fun foo(@Value bar: Int)</code> would not be counted</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="methodoverloading">MethodOverloading<a href="#methodoverloading" class="hash-link" aria-label="Direct link to MethodOverloading" title="Direct link to MethodOverloading"></a></h3> <p>This rule reports methods which are overloaded often. Method overloading tightly couples these methods together which might make the code harder to understand.</p> <p>Refactor these methods and try to use optional parameters instead to prevent some of the overloading.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-8">Configuration options:<a href="#configuration-options-8" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>6</code>)</p> <p>number of overloads which will trigger the rule</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="namedarguments">NamedArguments<a href="#namedarguments" class="hash-link" aria-label="Direct link to NamedArguments" title="Direct link to NamedArguments"></a></h3> <p>Reports function invocations which have more arguments than a certain threshold and are all not named. Calls with too many arguments are more difficult to understand so a named arguments help.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Requires Type Resolution</strong></p> <p><strong>Debt</strong>: 5min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-9">Configuration options:<a href="#configuration-options-9" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>3</code>)</p> <p>number of arguments that triggers this inspection</p> </li> <li> <p><code>ignoreArgumentsMatchingNames</code> (default: <code>false</code>)</p> <p>ignores when argument values are the same as the parameter names</p> </li> </ul> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code-2">Noncompliant Code:<a href="#noncompliant-code-2" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sum</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">a</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> c</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> d</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sum</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code-2">Compliant Code:<a href="#compliant-code-2" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sum</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">a</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> c</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> d</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sum</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">a </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> c </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> d </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="nestedblockdepth">NestedBlockDepth<a href="#nestedblockdepth" class="hash-link" aria-label="Direct link to NestedBlockDepth" title="Direct link to NestedBlockDepth"></a></h3> <p>This rule reports excessive nesting depth in functions. Excessively nested code becomes harder to read and increases its hidden complexity. It might become harder to understand edge-cases of the function.</p> <p>Prefer extracting the nested code into well-named functions to make it easier to understand.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-10">Configuration options:<a href="#configuration-options-10" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>4</code>)</p> <p>the nested depth required to trigger rule</p> </li> </ul> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="nestedscopefunctions">NestedScopeFunctions<a href="#nestedscopefunctions" class="hash-link" aria-label="Direct link to NestedScopeFunctions" title="Direct link to NestedScopeFunctions"></a></h3> <p>Although the scope functions are a way of making the code more concise, avoid overusing them: it can decrease your code readability and lead to errors. Avoid nesting scope functions and be careful when chaining them: it's easy to get confused about the current context object and the value of this or it.</p> <p><a href="https://kotlinlang.org/docs/scope-functions.html" target="_blank" rel="noopener noreferrer">Reference</a></p> <p><strong>Active by default</strong>: No</p> <p><strong>Requires Type Resolution</strong></p> <p><strong>Debt</strong>: 5min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-11">Configuration options:<a href="#configuration-options-11" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>1</code>)</p> <p>Number of nested scope functions allowed.</p> </li> <li> <p><code>functions</code> (default: <code>['kotlin.apply', 'kotlin.run', 'kotlin.with', 'kotlin.let', 'kotlin.also']</code>)</p> <p>Set of scope function names which add complexity. Function names have to be fully qualified. For example 'kotlin.apply'.</p> </li> </ul> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code-3">Noncompliant Code:<a href="#noncompliant-code-3" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Try to figure out, what changed, without knowing the details</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">first</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">apply</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> second</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">apply</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> b </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> a</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> c </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code-3">Compliant Code:<a href="#compliant-code-3" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// 'a' is a property of current class</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 'b' is a property of class 'first'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 'c' is a property of class 'second'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">first</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">a</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">second</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">c </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> first</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="replacesafecallchainwithrun">ReplaceSafeCallChainWithRun<a href="#replacesafecallchainwithrun" class="hash-link" aria-label="Direct link to ReplaceSafeCallChainWithRun" title="Direct link to ReplaceSafeCallChainWithRun"></a></h3> <p>Chains of safe calls on non-nullable types are redundant and can be removed by enclosing the redundant safe calls in a <code>run {}</code> block. This improves code coverage and reduces cyclomatic complexity as redundant null checks are removed.</p> <p>This rule only checks from the end of a chain and works backwards, so it won't recommend inserting run blocks in the middle of a safe call chain as that is likely to make the code more difficult to understand.</p> <p>The rule will check for every opportunity to replace a safe call when it sits at the end of a chain, even if there's only one, as that will still improve code coverage and reduce cyclomatic complexity.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Requires Type Resolution</strong></p> <p><strong>Debt</strong>: 10min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code-4">Noncompliant Code:<a href="#noncompliant-code-4" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getenv</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"HOME"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toLowerCase</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">split</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"/"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">?:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">emptyList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code-4">Compliant Code:<a href="#compliant-code-4" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getenv</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">run</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">getValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"HOME"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toLowerCase</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">split</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"/"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">?:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">emptyList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="stringliteralduplication">StringLiteralDuplication<a href="#stringliteralduplication" class="hash-link" aria-label="Direct link to StringLiteralDuplication" title="Direct link to StringLiteralDuplication"></a></h3> <p>This rule detects and reports duplicated String literals. Repeatedly typing out the same String literal across the codebase makes it harder to change and maintain.</p> <p>Instead, prefer extracting the String literal into a property or constant.</p> <p><strong>Active by default</strong>: No</p> <p><strong>Debt</strong>: 5min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-12">Configuration options:<a href="#configuration-options-12" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>threshold</code> (default: <code>3</code>)</p> <p>amount of duplications to trigger rule</p> </li> <li> <p><code>ignoreAnnotation</code> (default: <code>true</code>)</p> <p>if values in Annotations should be ignored</p> </li> <li> <p><code>excludeStringsWithLessThan5Characters</code> (default: <code>true</code>)</p> <p>if short strings should be excluded</p> </li> <li> <p><code>ignoreStringsRegex</code> (default: <code>'$^'</code>)</p> <p>RegEx of Strings that should be ignored</p> </li> </ul> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="noncompliant-code-5">Noncompliant Code:<a href="#noncompliant-code-5" class="hash-link" aria-label="Direct link to Noncompliant Code:" title="Direct link to Noncompliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Foo </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> s1 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"lorem"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">s</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"lorem"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> s1</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">equals</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"lorem"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="compliant-code-5">Compliant Code:<a href="#compliant-code-5" class="hash-link" aria-label="Direct link to Compliant Code:" title="Direct link to Compliant Code:"></a></h4> <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Foo </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> lorem </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"lorem"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> s1 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> lorem</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">s</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> lorem</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> s1</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">equals</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">lorem</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="toomanyfunctions">TooManyFunctions<a href="#toomanyfunctions" class="hash-link" aria-label="Direct link to TooManyFunctions" title="Direct link to TooManyFunctions"></a></h3> <p>This rule reports files, classes, interfaces, objects and enums which contain too many functions. Each element can be configured with different thresholds.</p> <p>Too many functions indicate a violation of the single responsibility principle. Prefer extracting functionality which clearly belongs together in separate parts of the code.</p> <p><strong>Active by default</strong>: Yes - Since v1.0.0</p> <p><strong>Debt</strong>: 20min</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-options-13">Configuration options:<a href="#configuration-options-13" class="hash-link" aria-label="Direct link to Configuration options:" title="Direct link to Configuration options:"></a></h4> <ul> <li> <p><code>thresholdInFiles</code> (default: <code>11</code>)</p> <p>threshold in files</p> </li> <li> <p><code>thresholdInClasses</code> (default: <code>11</code>)</p> <p>threshold in classes</p> </li> <li> <p><code>thresholdInInterfaces</code> (default: <code>11</code>)</p> <p>threshold in interfaces</p> </li> <li> <p><code>thresholdInObjects</code> (default: <code>11</code>)</p> <p>threshold in objects</p> </li> <li> <p><code>thresholdInEnums</code> (default: <code>11</code>)</p> <p>threshold in enums</p> </li> <li> <p><code>ignoreDeprecated</code> (default: <code>false</code>)</p> <p>ignore deprecated functions</p> </li> <li> <p><code>ignorePrivate</code> (default: <code>false</code>)</p> <p>ignore private functions</p> </li> <li> <p><code>ignoreOverridden</code> (default: <code>false</code>)</p> <p>ignore overridden functions</p> </li> <li> <p><code>ignoreAnnotatedFunctions</code> (default: <code>[]</code>)</p> <p>ignore functions annotated with these annotations</p> </li> </ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/detekt/detekt/edit/main/website/versioned_docs/version-1.23.8/rules/complexity.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/rules/comments"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Comments Rule Set</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/rules/coroutines"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Coroutines Rule Set</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#cognitivecomplexmethod" class="table-of-contents__link toc-highlight">CognitiveComplexMethod</a></li><li><a href="#complexcondition" class="table-of-contents__link toc-highlight">ComplexCondition</a></li><li><a href="#complexinterface" class="table-of-contents__link toc-highlight">ComplexInterface</a></li><li><a href="#cyclomaticcomplexmethod" class="table-of-contents__link toc-highlight">CyclomaticComplexMethod</a></li><li><a href="#labeledexpression" class="table-of-contents__link toc-highlight">LabeledExpression</a></li><li><a href="#largeclass" class="table-of-contents__link toc-highlight">LargeClass</a></li><li><a href="#longmethod" class="table-of-contents__link toc-highlight">LongMethod</a></li><li><a href="#longparameterlist" class="table-of-contents__link toc-highlight">LongParameterList</a></li><li><a href="#methodoverloading" class="table-of-contents__link toc-highlight">MethodOverloading</a></li><li><a href="#namedarguments" class="table-of-contents__link toc-highlight">NamedArguments</a></li><li><a href="#nestedblockdepth" class="table-of-contents__link toc-highlight">NestedBlockDepth</a></li><li><a href="#nestedscopefunctions" class="table-of-contents__link toc-highlight">NestedScopeFunctions</a></li><li><a href="#replacesafecallchainwithrun" class="table-of-contents__link toc-highlight">ReplaceSafeCallChainWithRun</a></li><li><a href="#stringliteralduplication" class="table-of-contents__link toc-highlight">StringLiteralDuplication</a></li><li><a href="#toomanyfunctions" class="table-of-contents__link toc-highlight">TooManyFunctions</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/gettingstarted/gradle">Getting Started with Gradle</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/gettingstarted/cli">Getting Started with the CLI</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/rules/comments">Rules Documentation</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://kotlinlang.slack.com/archives/C88E12QH4" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/detekt" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/blog">Blog</a></li><li class="footer__item"><a href="https://github.com/detekt/detekt" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://detekt.dev/kdoc" target="_blank" rel="noopener noreferrer" class="footer__link-item">KDoc<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2025 detekt team - Built with Docusaurus.</div></div></div></footer></div> </body> </html>