| |
| <!doctype html> |
| <html lang="en" class="no-js"> |
| <head> |
| |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| |
| |
| |
| <link rel="canonical" href="https://pinterest.github.io/ktlint/1.3.1/api/custom-integration/"> |
| |
| |
| <link rel="prev" href="../overview/"> |
| |
| |
| <link rel="next" href="../custom-rule-set/"> |
| |
| |
| <link rel="icon" href="../../assets/images/favicon.ico"> |
| <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42"> |
| |
| |
| |
| <title>Custom integration - Ktlint</title> |
| |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/main.0253249f.min.css"> |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> |
| <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> |
| |
| |
| |
| <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> |
| |
| |
| |
| |
| |
| |
| </head> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="indigo"> |
| |
| |
| <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
| <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
| <label class="md-overlay" for="__drawer"></label> |
| <div data-md-component="skip"> |
| |
| |
| <a href="#custom-integration" class="md-skip"> |
| Skip to content |
| </a> |
| |
| </div> |
| <div data-md-component="announce"> |
| |
| </div> |
| |
| <div data-md-color-scheme="default" data-md-component="outdated" hidden> |
| |
| <aside class="md-banner md-banner--warning"> |
| <div class="md-banner__inner md-grid md-typeset"> |
| |
| You're not viewing the latest version. |
| <a href="../../.."> |
| <strong>Click here to go to latest.</strong> |
| </a> |
| |
| </div> |
| <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> |
| </aside> |
| |
| </div> |
| |
| |
| |
| |
| |
| |
| <header class="md-header md-header--shadow md-header--lifted" data-md-component="header"> |
| <nav class="md-header__inner md-grid" aria-label="Header"> |
| <a href="../.." title="Ktlint" class="md-header__button md-logo" aria-label="Ktlint" data-md-component="logo"> |
| |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> |
| |
| </a> |
| <label class="md-header__button md-icon" for="__drawer"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> |
| </label> |
| <div class="md-header__title" data-md-component="header-title"> |
| <div class="md-header__ellipsis"> |
| <div class="md-header__topic"> |
| <span class="md-ellipsis"> |
| Ktlint |
| </span> |
| </div> |
| <div class="md-header__topic" data-md-component="header-topic"> |
| <span class="md-ellipsis"> |
| |
| Custom integration |
| |
| </span> |
| </div> |
| </div> |
| </div> |
| |
| |
| <form class="md-header__option" data-md-component="palette"> |
| |
| |
| |
| |
| <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0"> |
| |
| <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> |
| </label> |
| |
| |
| |
| |
| |
| <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="pink" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1"> |
| |
| <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> |
| </label> |
| |
| |
| </form> |
| |
| |
| |
| <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> |
| |
| |
| |
| <label class="md-header__button md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| </label> |
| <div class="md-search" data-md-component="search" role="dialog"> |
| <label class="md-search__overlay" for="__search"></label> |
| <div class="md-search__inner" role="search"> |
| <form class="md-search__form" name="search"> |
| <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> |
| <label class="md-search__icon md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> |
| </label> |
| <nav class="md-search__options" aria-label="Search"> |
| |
| <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> |
| </a> |
| |
| <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> |
| </button> |
| </nav> |
| |
| <div class="md-search__suggest" data-md-component="search-suggest"></div> |
| |
| </form> |
| <div class="md-search__output"> |
| <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> |
| <div class="md-search-result" data-md-component="search-result"> |
| <div class="md-search-result__meta"> |
| Initializing search |
| </div> |
| <ol class="md-search-result__list" role="presentation"></ol> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| <div class="md-header__source"> |
| <a href="https://github.com/pinterest/ktlint" title="Go to repository" class="md-source" data-md-component="source"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg> |
| </div> |
| <div class="md-source__repository"> |
| pinterest/ktlint |
| </div> |
| </a> |
| </div> |
| |
| </nav> |
| |
| |
| |
| <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> |
| <div class="md-grid"> |
| <ul class="md-tabs__list"> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../.." class="md-tabs__link"> |
| |
| |
| Home |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../install/setup/" class="md-tabs__link"> |
| |
| |
| Installation |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../rules/code-styles/" class="md-tabs__link"> |
| |
| |
| Rules |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item md-tabs__item--active"> |
| <a href="../overview/" class="md-tabs__link"> |
| |
| |
| API |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../faq/" class="md-tabs__link"> |
| |
| |
| |
| |
| FAQ |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../contributing/overview/" class="md-tabs__link"> |
| |
| |
| Contributing |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </div> |
| </nav> |
| |
| |
| </header> |
| |
| <div class="md-container" data-md-component="container"> |
| |
| |
| |
| |
| <main class="md-main" data-md-component="main"> |
| <div class="md-main__inner md-grid"> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| |
| |
| |
| |
| <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> |
| <label class="md-nav__title" for="__drawer"> |
| <a href="../.." title="Ktlint" class="md-nav__button md-logo" aria-label="Ktlint" data-md-component="logo"> |
| |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> |
| |
| </a> |
| Ktlint |
| </label> |
| |
| <div class="md-nav__source"> |
| <a href="https://github.com/pinterest/ktlint" title="Go to repository" class="md-source" data-md-component="source"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg> |
| </div> |
| <div class="md-source__repository"> |
| pinterest/ktlint |
| </div> |
| </a> |
| </div> |
| |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| |
| |
| <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Home |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_1"> |
| <span class="md-nav__icon md-icon"></span> |
| Home |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../.." class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Features |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../quick-start/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Quick start |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| |
| |
| <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Installation |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_2"> |
| <span class="md-nav__icon md-icon"></span> |
| Installation |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../install/setup/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Recommended setup |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../install/cli/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Command line |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../install/integrations/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Integrations |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../install/snapshot-build/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Snapshot build |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| |
| |
| <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Rules |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3"> |
| <span class="md-nav__icon md-icon"></span> |
| Rules |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/code-styles/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Code styles |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/standard/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Standard rules |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/experimental/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Experimental rules |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/dependencies/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Dependencies |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/configuration-ktlint/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| KtLint configuration |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../rules/configuration-intellij-idea/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| IntelliJ IDEA configuration |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex=""> |
| |
| |
| <span class="md-ellipsis"> |
| API |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true"> |
| <label class="md-nav__title" for="__nav_4"> |
| <span class="md-nav__icon md-icon"></span> |
| API |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../overview/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Overview |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active"> |
| |
| <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> |
| |
| |
| |
| |
| |
| <label class="md-nav__link md-nav__link--active" for="__toc"> |
| |
| |
| <span class="md-ellipsis"> |
| Custom integration |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <a href="./" class="md-nav__link md-nav__link--active"> |
| |
| |
| <span class="md-ellipsis"> |
| Custom integration |
| </span> |
| |
| |
| </a> |
| |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#ktlint-rule-engine" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Ktlint Rule Engine |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Ktlint Rule Engine"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#rule-provider" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Rule provider |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#editor-config-defaults-overrides" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Editor config: defaults & overrides |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#lint-format" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Lint & format |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#rule-ruleautocorrectapprovehandler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Rule & RuleAutocorrectApproveHandler |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#logging" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Logging |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../custom-rule-set/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Custom rule set |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../custom-reporter/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Custom reporter |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../badge/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Badge |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../faq/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| FAQ |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| |
| |
| <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Contributing |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_6"> |
| <span class="md-nav__icon md-icon"></span> |
| Contributing |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../contributing/overview/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Overview |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../contributing/guidelines/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Guidelines |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../contributing/code-of-conduct/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Code of conduct |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| </ul> |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#ktlint-rule-engine" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Ktlint Rule Engine |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Ktlint Rule Engine"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#rule-provider" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Rule provider |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#editor-config-defaults-overrides" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Editor config: defaults & overrides |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#lint-format" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Lint & format |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#rule-ruleautocorrectapprovehandler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Rule & RuleAutocorrectApproveHandler |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#logging" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Logging |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-content" data-md-component="content"> |
| <article class="md-content__inner md-typeset"> |
| |
| |
| |
| |
| |
| |
| |
| <h1 id="custom-integration">Custom integration<a class="headerlink" href="#custom-integration" title="Permanent link">¶</a></h1> |
| <h2 id="ktlint-rule-engine">Ktlint Rule Engine<a class="headerlink" href="#ktlint-rule-engine" title="Permanent link">¶</a></h2> |
| <p>The <code>Ktlint Rule Engine</code> is the central entry point for custom integrations with the <code>Ktlint API</code>. See <a href="https://github.com/pinterest/ktlint/blob/master/ktlint-api-consumer/src/main/kotlin/com/example/ktlint/api/consumer/KtlintApiConsumer.kt">basic API Consumer</a> for a basic example on how to invoke the <code>Ktlint Rule Engine</code>. This example also explains how the logging of the <code>Ktlint Rule Engine</code> can be configured to your needs.</p> |
| <p>The <code>KtLintRuleEngine</code> instance only needs to be created once for the entire lifetime of your application. Reusing the same instance results in better performance due to caching.</p> |
| <div class="highlight"><span class="filename">Creating the KtLintRuleEngine</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">ktLintRuleEngine</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="n">KtLintRuleEngine</span><span class="p">(</span> |
| <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="n">ruleProviders</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="p">,</span> |
| <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="p">)</span> |
| </code></pre></div> |
| <h3 id="rule-provider">Rule provider<a class="headerlink" href="#rule-provider" title="Permanent link">¶</a></h3> |
| <p>The <code>KtLintRuleEngine</code> must be configured with at least one <code>RuleProvider</code>. A <code>RuleProvider</code> is a lambda which upon request of the <code>KtLintRuleEngine</code> provides a new instance of a specific rule. You can either provide any of the standard rules provided by KtLint, or your own custom rules, or a combination of both. |
| <div class="highlight"><span class="filename">Creating a set of RuleProviders</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="n">setOf</span><span class="p">(</span> |
| <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="c1">// Can provide custom rules</span> |
| <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="n">RuleProvider</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">NoVarRule</span><span class="p">()</span><span class="w"> </span><span class="p">},</span> |
| <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="c1">// but also reuse rules from KtLint rulesets</span> |
| <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="n">RuleProvider</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">IndentationRule</span><span class="p">()</span><span class="w"> </span><span class="p">},</span> |
| <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="p">)</span> |
| </code></pre></div></p> |
| <h3 id="editor-config-defaults-overrides">Editor config: defaults & overrides<a class="headerlink" href="#editor-config-defaults-overrides" title="Permanent link">¶</a></h3> |
| <p>When linting and formatting files, the <code>KtlintRuleEngine</code> takes the <code>.editorconfig</code> file(s) into account which are found on the path to the file. A property which is specified in the <code>editorConfigOverride</code> property of the <code>KtLintRuleEngine</code> takes precedence above the value of that same property in the <code>.editorconfig</code> file. The <code>editorConfigDefaults</code> property of the <code>KtLintRuleEngine</code> can be used to specify the fallback values for properties in case that property is not defined in the <code>.editorconfig</code> file (or in the <code>editorConfigOverride</code> property).</p> |
| <div class="highlight"><span class="filename">Specifying the editorConfigOverride</span><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">ktLintRuleEngine</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="n">KtLintRuleEngine</span><span class="p">(</span> |
| <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="n">ruleProviders</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="p">,</span> |
| <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="n">editorConfigOverride</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">EditorConfigOverride</span><span class="p">.</span><span class="na">from</span><span class="p">(</span> |
| <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="n">INDENT_STYLE_PROPERTY</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">IndentConfig</span><span class="p">.</span><span class="na">IndentStyle</span><span class="p">.</span><span class="na">SPACE</span><span class="p">,</span> |
| <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="n">INDENT_SIZE_PROPERTY</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="m">4</span> |
| <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="p">)</span> |
| <a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="p">)</span> |
| </code></pre></div> |
| <p>The <code>editorConfigOverride</code> property takes an <code>EditorConfigProperty</code> as key. KtLint defines several such properties, but they can also be defined as part of a custom rule.</p> |
| <p>The <code>editorConfigDefaults</code> property is more cumbersome to define as it is based directly on the data format of the <code>ec4j</code> library which is used for parsing the <code>.editorconfig</code> file.</p> |
| <p>The defaults can be loaded from a path or a directory. If a path to a file is specified, the name of the file does not necessarily have to end with <code>.editorconfig</code>. If a path to a directory is specified, the directory should contain a file with name <code>.editorconfig</code>. Note that the <code>propertyTypes</code> have to be derived from the same collection of rule providers that are specified in the <code>ruleProviders</code> property of the <code>KtLintRuleEngine</code>.</p> |
| <p><div class="highlight"><span class="filename">Specifying the editorConfigDefaults using an '.editorconfig' file</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">ktLintRuleEngine</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="n">KtLintRuleEngine</span><span class="p">(</span> |
| <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="n">ruleProviders</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="p">,</span> |
| <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="n">editorConfigDefaults</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">EditorConfigDefaults</span><span class="p">.</span><span class="na">load</span><span class="p">(</span> |
| <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Paths</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="s">"/some/path/to/editorconfig/file/or/directory"</span><span class="p">),</span> |
| <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="w"> </span><span class="n">propertyTypes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="p">.</span><span class="na">propertyTypes</span><span class="p">(),</span> |
| <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a><span class="w"> </span><span class="p">)</span> |
| <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="w"> </span><span class="p">)</span> |
| </code></pre></div> |
| If you want to include all RuleProviders of the Ktlint project than you can easily retrieve the collection using <code>StandardRuleSetProvider().getRuleProviders()</code>.</p> |
| <p>The <code>EditorConfigDefaults</code> property can also be specified programmatically as is shown below:</p> |
| <div class="highlight"><span class="filename">Specifying the editorConfigDefaults programmatically</span><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">ktLintRuleEngine</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="n">KtLintRuleEngine</span><span class="p">(</span> |
| <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="n">ruleProviders</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KTLINT_API_CONSUMER_RULE_PROVIDERS</span><span class="p">,</span> |
| <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="n">editorConfigDefaults</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">EditorConfigDefaults</span><span class="p">(</span> |
| <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="n">org</span><span class="p">.</span><span class="na">ec4j</span><span class="p">.</span><span class="na">core</span><span class="p">.</span><span class="na">model</span><span class="p">.</span><span class="na">EditorConfig</span> |
| <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="w"> </span><span class="p">.</span><span class="na">builder</span><span class="p">()</span> |
| <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="w"> </span><span class="c1">// .. add relevant properties</span> |
| <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="p">.</span><span class="na">build</span><span class="p">()</span> |
| <a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="w"> </span><span class="p">)</span> |
| <a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a><span class="w"> </span><span class="p">)</span> |
| </code></pre></div> |
| <h3 id="lint-format">Lint & format<a class="headerlink" href="#lint-format" title="Permanent link">¶</a></h3> |
| <p>Once the <code>KtLintRuleEngine</code> has been defined, it is ready to be invoked for code that has to be linted or formatted. The <code>lint</code> and <code>format</code> functions take a <code>Code</code> instance as parameter. Such an instance can either be created from a file |
| <div class="highlight"><span class="filename">Code from file</span><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Code</span><span class="p">.</span><span class="na">fromFile</span><span class="p">(</span> |
| <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="s">"/some/path/to/file"</span><span class="p">)</span> |
| <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="p">)</span> |
| </code></pre></div> |
| or a code snippet (set <code>script</code> to <code>true</code> to handle the snippet as Kotlin script): |
| <div class="highlight"><span class="filename">Code from snippet</span><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Code</span><span class="p">.</span><span class="na">fromSnippet</span><span class="p">(</span> |
| <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span><span class="s">"""</span> |
| <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="s"> val code = "some-code"</span> |
| <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="s"> """</span><span class="p">.</span><span class="na">trimIndent</span><span class="p">()</span> |
| <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="p">)</span> |
| </code></pre></div></p> |
| <p>The <code>lint</code> function is invoked with an optional lambda. Once linting is complete, the lambda will be called for each <code>LintError</code> which is found. |
| <div class="highlight"><span class="filename">Invoking lint</span><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="n">ktLintRuleEngine</span> |
| <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="p">.</span><span class="na">lint</span><span class="p">(</span><span class="n">code</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">lintError</span><span class="w"> </span><span class="o">-></span> |
| <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="c1">// handle</span> |
| <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="p">}</span> |
| </code></pre></div></p> |
| <p>The <code>format</code> function is invoked with a lambda. The lambda is called for each <code>LintError</code> which is found. If the <code>LintError</code> can be autocorrected, the return value of the lambda instructs the rule whether this specific <code>LintError</code> is to be autocorrected, or not. If the <code>LintError</code> can not be autocorrected, the return result of the lambda is ignored. The formatted code is returned as result of the function.</p> |
| <p>The new <code>format</code> function allows the API Consumer to decide which LintError is to be autocorrected, or not. This is most interesting for API Consumers that let their user interactively decide per <code>LintError</code> how it has to be handled. For example see the <code>ktlint-intellij-plugin</code> which in 'manual' mode displays all lint violations, which allows the user to decide which <code>LintError</code> is to be autocorrected.</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>The difference with the legacy version of the <code>format</code> is subtle. It takes two parameters (a <code>LintError</code> and <code>Boolean</code> denoting whether the <code>LintError</code> is corrected), and it does not return a value.</p> |
| </div> |
| <div class="highlight"><span class="filename">Invoke format (preferred, starting from Ktlint 1.3)</span><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">formattedCode</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span><span class="n">ktLintRuleEngine</span> |
| <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="n">code</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">lintError</span><span class="w"> </span><span class="o">-></span> |
| <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lintError</span><span class="p">.</span><span class="na">canBeAutoCorrected</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| <a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="w"> </span><span class="c1">// Return AutocorrectDecision.ALLOW_AUTOCORRECT to execute the autocorrect of this lintError if this is supported by the rule.</span> |
| <a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="w"> </span><span class="c1">// Return AutocorrectDecision.NO_AUTOCORRECT if the LintError should not be corrected even if is supported by the rule.</span> |
| <a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> |
| <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a><span class="w"> </span><span class="c1">// In case the LintError can not be autocorrected, the return value of the lambda will be ignored.</span> |
| <a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a><span class="w"> </span><span class="c1">// For clarity reasons it is advised to return AutocorrectDecision.NO_AUTOCORRECT in case the LintError can not be autocorrected.</span> |
| <a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a><span class="w"> </span><span class="n">AutocorrectDecision</span><span class="p">.</span><span class="na">NO_AUTOCORRECT</span> |
| <a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a><span class="w"> </span><span class="p">}</span> |
| <a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a><span class="w"> </span><span class="p">}</span> |
| </code></pre></div> |
| <div class="admonition warning"> |
| <p class="admonition-title">Warning</p> |
| <p>Rules need to implement the interface <code>RuleAutocorrectApproveHandler</code> in order to let the API Consumer decide whether a <code>LintError</code> is to be autocorrected, or not. This interface is implemented for all rules provided via the Ktlint project starting from version 1.3. However, external rulesets may not have implemented this interface on their rulesets though. Contact the maintainer of such a ruleset to implement this interface.</p> |
| </div> |
| <p>The (legacy) <code>format</code> function is invoked with an optional lambda. Once formatting is complete, the lambda will be called for each <code>LintError</code> which is found. The (legacy) <code>format</code> function fixes all <code>LintErrors</code> for which an autocorrect is available. The formatted code is returned as result of the function.</p> |
| <div class="highlight"><span class="filename">Invoke format (deprecated as of Ktlint 1.3, will be removed in Ktlint 2.0)</span><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="c1">// Up until Ktlint 1.2.1 the format was invoked with a lambda having two parameters and not returning a result. This function will be removed in Ktlint 2.0 </span> |
| <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="kd">val</span><span class="w"> </span><span class="nv">formattedCode</span><span class="w"> </span><span class="o">=</span> |
| <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="n">ktLintRuleEngine</span> |
| <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="n">code</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">lintError</span><span class="p">,</span><span class="w"> </span><span class="n">corrected</span><span class="w"> </span><span class="o">-></span> |
| <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="c1">// handle</span> |
| <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="w"> </span><span class="p">}</span> |
| </code></pre></div> |
| <h3 id="rule-ruleautocorrectapprovehandler">Rule & RuleAutocorrectApproveHandler<a class="headerlink" href="#rule-ruleautocorrectapprovehandler" title="Permanent link">¶</a></h3> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Providers of custom rules are strongly encouraged to implement <code>RuleAutocorrectApproveHandler</code> interface as described below. The <code>ktlint-intellij-plugin</code>, which will be updated soon after the 1.3 release of Ktlint, make use of this new functionality. If your ruleset is used by users of the plugin, it is very likely that they want to be able to autocorrect individual <code>LintErrors</code> or to format a block of code (e.g. a selection) in a file. This functionality will only be available for rules that have implemented this interface.</p> |
| </div> |
| <p>In Ktlint 1.3 the <code>RuleAutocorrectApproveHandler</code> interface is added. This interface adds the ability that the API Consumer decides per <code>LintError</code> whether it needs to autocorrected, or not. In Ktlint 2.0 the methods <code>beforeVisitChildNodes</code> and <code>afterVisitChildNodes</code> of the <code>Rule</code> class will be replaced with the new versions which are now added to the <code>RuleAutocorrectApproveHandler</code> interface as is shown below (the signature for <code>afterVisitChildNodes</code> is changed similarly):</p> |
| <table> |
| <tr> |
| <td> |
| |
| <div class="highlight"><span class="filename">Deprecated signature in `Rule` class</span><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kd">public</span><span class="w"> </span><span class="kd">open</span><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">beforeVisitChildNodes</span><span class="p">(</span> |
| <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="w"> </span><span class="n">node</span><span class="p">:</span><span class="w"> </span><span class="n">ASTNode</span><span class="p">,</span> |
| <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="w"> </span><span class="n">autoCorrect</span><span class="p">:</span><span class="w"> </span><span class="kt">Boolean</span><span class="p">,</span> |
| <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a><span class="w"> </span><span class="n">emit</span><span class="p">:</span><span class="w"> </span><span class="p">(</span> |
| <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a><span class="w"> </span><span class="n">offset</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span> |
| <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a><span class="w"> </span><span class="n">errorMessage</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">,</span> |
| <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a><span class="w"> </span><span class="n">canBeAutoCorrected</span><span class="p">:</span><span class="w"> </span><span class="kt">Boolean</span> |
| <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="kt">Unit</span><span class="p">,</span> |
| <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a><span class="p">)</span><span class="w"> </span> |
| </code></pre></div> |
| |
| </td> |
| <td> |
| |
| <div class="highlight"><span class="filename">New signature in `RuleAutocorrectApproveHandler` interface</span><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kd">public</span><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">beforeVisitChildNodes</span><span class="p">(</span> |
| <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="w"> </span><span class="n">node</span><span class="p">:</span><span class="w"> </span><span class="n">ASTNode</span><span class="p">,</span> |
| <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="n">emit</span><span class="p">:</span><span class="w"> </span><span class="p">(</span> |
| <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="n">offset</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span> |
| <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="w"> </span><span class="n">errorMessage</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">,</span> |
| <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="w"> </span><span class="n">canBeAutoCorrected</span><span class="p">:</span><span class="w"> </span><span class="kt">Boolean</span> |
| <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">AutocorrectDecision</span><span class="p">,</span> |
| <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a><span class="p">)</span> |
| </code></pre></div> |
| |
| </td> |
| </tr> |
| </table> |
| |
| <p>The <code>autoCorrect</code> parameter is no longer passed to the method. Instead, the <code>emit</code> lambda now returns the value <code>AutocorrectDecision.ALLOW_AUTOCORRECT</code> or <code>AutocorrectDecision.NO_AUTOCORRECT</code>.</p> |
| <p>In case a <code>LintError</code> is detected, and can be autocorrected, the <code>LintError</code> can be processed as shown below:</p> |
| <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="n">emit</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">startOffset</span><span class="p">,</span><span class="w"> </span><span class="s">"some detail message"</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">)</span> |
| <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="w"> </span><span class="p">.</span><span class="na">ifAutocorrectAllowed</span><span class="w"> </span><span class="p">{</span> |
| <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="w"> </span><span class="c1">// Autocorrect the LintError</span> |
| <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a><span class="w"> </span><span class="p">}</span> |
| </code></pre></div> |
| <p>In case the <code>LintError</code> can not be autocorrected, if suffices to emit the violation only: |
| <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="n">emit</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">startOffset</span><span class="p">,</span><span class="w"> </span><span class="s">"some detail message"</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">)</span> |
| </code></pre></div></p> |
| <h2 id="logging">Logging<a class="headerlink" href="#logging" title="Permanent link">¶</a></h2> |
| <p>Ktlint uses the <code>io.github.oshai:kotlin-logging</code> which is a <code>slf4j</code> wrapper. As API consumer you can choose which logging framework you want to use and configure that framework to your exact needs. The <a href="https://github.com/pinterest/ktlint/blob/master/ktlint-api-consumer/src/main/kotlin/com/example/ktlint/api/consumer/KtlintApiConsumer.kt">basic API Consumer</a> contains an example with <code>org.slf4j:slf4j-simple</code> as logging provider and a customized configuration which shows logging at <code>DEBUG</code> level for all classes except one specific class which only displays logging at <code>WARN</code> level.</p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| |
| <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> |
| </div> |
| |
| </main> |
| |
| <footer class="md-footer"> |
| |
| <div class="md-footer-meta md-typeset"> |
| <div class="md-footer-meta__inner md-grid"> |
| <div class="md-copyright"> |
| |
| |
| Made with |
| <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> |
| Material for MkDocs |
| </a> |
| |
| </div> |
| |
| </div> |
| </div> |
| </footer> |
| |
| </div> |
| <div class="md-dialog" data-md-component="dialog"> |
| <div class="md-dialog__inner md-typeset"></div> |
| </div> |
| |
| |
| <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.expand", "search.suggest", "search.share", "content.code.copy"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> |
| |
| |
| <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script> |
| |
| |
| </body> |
| </html> |