package Ġio . gitlab . art urb os ch . de te kt . rules . complexity Ċ Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Th resh ol ded Code S mell Ċ import Ġio . gitlab . art urb os ch . de te kt . rules . Case Ċ import Ġio . gitlab . art urb os ch . de te kt . test . lint Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ /** Ċ Ġ* Ġ@ author ĠArt ur ĠB os ch Ċ Ġ*/ Ċ class ĠNested Block Depth Spec Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġval Ġsubject Ġby Ġmemoized Ġ{ ĠNested Block Depth ( threshold Ġ= Ġ 4 ) Ġ} ĊĊĠĠĠ Ġdescribe (" nested Ġclasses Ġare Ġalso Ġconsidered ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" should Ġdetect Ġonly Ġthe Ġnested Ġlarge Ġclass ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . lint ( Case . Nested Classes . path ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . find ings . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (( subject . find ings [ 0 ] Ġas ĠTh resh ol ded Code S mell ). value ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġdetect Ġtoo Ġnested Ġblock Ġdepth ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ""" Ċĉĉĉ ĉ fun Ġf () Ġ{ Ċĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } """ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . lint ( code )). has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġdetect Ġvalid Ġnested Ġblock Ġdepth ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ""" Ċĉĉĉ ĉ fun Ġf () Ġ{ Ċĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉĉ ĉ if Ġ( true ) Ġ{ Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } """ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . lint ( code )). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġcount Ġelse Ġif Ġas Ġtwo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . lint ( nested Block Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . find ings ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ const Ġval Ġnested Block Code Ġ= Ġ""" Ċ ĉ override Ġfun Ġprocedure ( node : ĠAST Node ) Ġ{ Ċĉ ĉ val Ġpsi Ġ= Ġnode . psi Ċĉ ĉ if Ġ( psi . isNot Part Of Enum () Ġ&& Ġpsi . isNot Part Of String ()) Ġ{ Ċĉĉ ĉ if Ġ( psi . is Double Sem icolon ()) Ġ{ Ċĉĉĉ ĉ add Find ings ( Code S mell ( id , ĠEntity . from ( psi ))) Ċĉĉĉ ĉ with Auto Correct Ġ{ Ċĉĉĉĉ ĉ delete One Or Two Sem icol ons ( node Ġas ĠLeaf Psi Element ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġif Ġ( psi . is Sem icolon ()) Ġ{ Ċĉĉĉ ĉ val Ġnext Leaf Ġ= Ġpsi . next Leaf () Ċĉĉĉ ĉ if Ġ( next Leaf . is Sem icolon Or EOF () Ġ|| Ġnext Token Has Spaces ( next Leaf )) Ġ{ Ċĉĉĉĉ ĉ add Find ings ( Code S mell ( id , ĠEntity . from ( psi ))) Ċĉĉĉĉ ĉ with Auto Correct Ġ{ Ġpsi . delete () Ġ} Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } """ Ċ