package Ġcom . github . sh y iko . kt lint . rule set . standard Ċ Ċ import Ġcom . github . sh y iko . kt lint . core . Kt Lint Ċ import Ġcom . github . sh y iko . kt lint . core . Rule Ċ import Ġorg . jetbrains . kotlin . Kt Node Types Ċ import Ġorg . jetbrains . kotlin . com . intellij . lang . AST Node Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi Comment Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi WhiteSpace Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . util . Psi Tree Util Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi . Kt Binary Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Dot Qualified Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parameter Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parameter List Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parent hesized Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Safe Qualified Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Secondary Constructor Ċ import Ġorg . jetbrains . kotlin . psi . Kt Super TypeList Ċ import Ġorg . jetbrains . kotlin . psi . Kt Super TypeList Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Type Projection Ċ import Ġorg . jetbrains . kotlin . psi . Kt Value ArgumentList Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Non Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Prev Sibling Ign oring Whitespace And Comments Ċ import Ġorg . jetbrains . kotlin . psi . stubs . elements . Kt Stub Element Types Ċ Ċ class ĠInd ent ation Rule Ġ: ĠRule (" indent ") Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġindentation Ġsize Ġrecommended Ġby ĠJetBrains ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ IND ENT Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CONT IN UATION _ IND ENT Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// ĠAndroid ĠKotlin ĠStyle ĠGuide ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CONT IN UATION _ IND ENT _ ANDROID Ġ= Ġ 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġindent Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġcontinuation Indent Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( node : ĠAST Node , Ġauto Correct : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit : Ġ( offset : ĠInt , ĠerrorMessage : ĠString , Ġcan Be Auto Correct ed : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node . elementType Ġ== ĠK t Stub Element Types . FILE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Ġ= Ġnode . getUser Data ( Kt Lint . ANDROID _ USER _ DATA _ KEY ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Config Ġ= Ġnode . getUser Data ( Kt Lint . EDITOR _ CONFIG _ USER _ DATA _ KEY ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindent Size Ġ= Ġeditor Config . get (" indent _ size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontinuation Indent Size Ġ= Ġeditor Config . get (" continu ation _ indent _ size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindent Ġ= Ġindent Size ?. toInt OrNull () Ġ?: Ġif Ġ( indent Size ?. toLowerCase () Ġ== Ġ" unset ") Ġ- 1 Ġelse ĠDEFAULT _ IND ENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation Indent Ġ= Ġcontinuation Indent Size ?. toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ( android ) ĠDEFAULT _ CONT IN UATION _ IND ENT _ ANDROID Ġelse ĠDEFAULT _ CONT IN UATION _ IND ENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( indent Ġ<= Ġ 0 Ġ|| Ġcontinuation Indent Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġis ĠPsi WhiteSpace Ġ&& Ġ! node . is Part Of ( Psi Comment :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġnode . getText (). split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lines . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġnode . start Offset Ġ+ Ġlines . first (). length Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Parameter Ġ= Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Tree Util . find Child OfType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . get Non Strict Parent OfType ( Kt Parameter List :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Parameter :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Parameter Column Ġ= Ġlazy Ġ{ Ġfirst Parameter . value ?. column Ġ?: Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Indent Ġ= Ġcalculate Previous Indent ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Indent Size Ġ= Ġif Ġ( continu ation Indent Ġ== Ġindent Ġ|| Ġshould Use Continuation Indent ( node )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation Indent Ġelse Ġindent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . tail (). forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . isNotEmpty () Ġ&& Ġ( line . length Ġ- Ġprevious Indent ) Ġ% Ġexpected Indent Size Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . is Part Of ( Kt Parameter List :: class ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Parameter Column . value Ġ!= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġnot Ġthe Ġfirst Ġparameter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . parent . node . find Child ByType ( Kt Stub Element Types . VALUE _ PARAMETER ) Ġ!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Parameter . value ?. node Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... Ġor Ġis Ġnext Ġto Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Parameter . value ?. let Ġ{ ĠPsi Tree Util . prev Leaf ( it , Ġtrue ) Ġ} ?. node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . elementType Ġ== ĠK t Tokens . L PAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Parameter Column . value Ġ- Ġ 1 Ġ!= Ġline . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( offset , Ġ" Unexpected Ġindentation Ġ(${ line . length }) Ġ(" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" parameters Ġshould Ġbe Ġeither Ġvert ically Ġaligned Ġor Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" indent ed Ġby Ġthe Ġmultiple Ġof Ġ$ indent " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" )", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġindentation Ġ(${ line . length Ġ- Ġprevious Indent }) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( it Ġshould Ġbe Ġ$ expected Indent Size )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġline . length Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠPsi Element . column : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleaf Ġ= ĠPsi Tree Util . prev Leaf ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset To The Left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( leaf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( leaf . node . elementType Ġ== ĠK t Tokens . WHITE _ SPACE Ġ&& Ġleaf . text Contains ('\ n ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset To The Left Ġ+= Ġleaf . text Length Ġ- Ġ 1 Ġ- Ġleaf . text . lastIndexOf ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset To The Left Ġ+= Ġleaf . text Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Ġ= ĠPsi Tree Util . prev Leaf ( leaf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoffset To The Left Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Use Continuation Indent ( node : ĠPsi WhiteSpace ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Node Ġ= Ġnode . parent ĊĠĠĠĠĠĠĠ Ġval Ġprev Node Ġ= Ġnode . get Prev Sibling Ign oring Whitespace And Comments ()?. node ?. elementType ĊĠĠĠĠĠĠĠ Ġval Ġnext Node Ġ= Ġnode . next Sibling ?. node ?. elementType ĊĠĠĠĠĠĠĠ Ġreturn Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Node Ġin ĠK t Tokens . ALL _ ASSIGN MENTS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Secondary Constructor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġnext Node Ġ== ĠK t Stub Element Types . TYPE _ REFERENCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġnode . next Sibling Ġis ĠK t Super TypeList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġnode . next Sibling Ġis ĠK t Super TypeList Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġnode . next Sibling Ġis ĠK t Type Projection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Value ArgumentList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Binary Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Dot Qualified Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Safe Qualified Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġparent Node Ġis ĠK t Parent hesized Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Previous Indent ( node : ĠAST Node ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Node Ġ= Ġnode . tree Parent ?. psi ĊĠĠĠĠĠĠĠ Ġvar Ġprev Indent Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġprev Sibling Ġ= Ġparent Node ĊĠĠĠĠĠĠĠ Ġvar Ġprev Space Is Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prev Sibling Ġ!= Ġnull Ġ&& Ġ! prev Space Is Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Node Ġ= Ġprev Sibling . next Sibling ?. node ?. elementType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Sibling Ġis ĠPsi WhiteSpace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġnext Node Ġ!= ĠK t Stub Element Types . TYPE _ REFERENCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġnext Node Ġ!= ĠK t Stub Element Types . SUPER _ TYPE _ LIST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġnext Node Ġ!= ĠK t Node Types . CON STRUCTOR _ DE LEG ATION _ CALL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Lines Ġ= Ġprev Sibling . text . split ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Lines . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Indent Ġ= Ġprev Lines . last (). length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Space Is Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Sibling Ġ= Ġif Ġ( prev Space Is Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Sibling . prev Sibling Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Sibling . prev Sibling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Sibling . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprev Indent ĊĠĠĠ Ġ} Ċ } Ċ