/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . ide . actions . mo ver Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi WhiteSpace Ċ import Ġorg . rust . ide . actions . mo ver . Rs Line M over . Companion . Range Endpoint Ċ import Ġorg . rust . lang . core . psi .* Ċ import Ġorg . rust . lang . core . psi . ext . ance stors Ċ import Ġorg . rust . lang . core . psi . ext . elementType Ċ import Ġorg . rust . lang . core . psi . ext . is Multi Line Ċ Ċ class ĠRs Statement UpDown M over Ġ: ĠRs Line M over () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmov able Items Ġ= Ġtoken Set Of ( ĊĠĠĠĠĠĠĠ ĠRs Element Types . STMT , ĊĠĠĠĠĠĠĠ ĠRs Element Types . EXPR _ STMT , ĊĠĠĠĠĠĠĠ ĠRs Element Types . EMPTY _ STMT , ĊĠĠĠĠĠĠĠ ĠRs Element Types . LET _ DECL , ĊĠĠĠĠĠĠĠ ĠRs Element Types . EXPR _ STMT _ OR _ LAST _ EXPR ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠPsi Element . is Block Expr : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġis ĠRs Expr Ġ&& Ġparent Ġis ĠRs Block ĊĊĠĠĠ Ġprivate Ġval ĠPsi Element . is Comment : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġelement Type Ġin ĠRS _ COMMENTS ĊĊĠĠĠ Ġoverride Ġfun Ġfind Mov able Ancestor ( psi : ĠPsi Element , Ġendpoint : ĠRange Endpoint ): ĠPsi Element ? Ġ= ĊĠĠĠĠĠĠĠ Ġpsi . ance stors . find Ġ{ Ġit . elementType Ġin Ġmov able Items Ġ|| Ġit . is Block Expr Ġ|| Ġit . is Comment Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Target Element ( sibling : ĠPsi Element , Ġdown : ĠBoolean ): ĠPsi Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Moving OutOf Function Body ( sibling , Ġdown )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUp Down M over Test Marks . move OutOf Body . hit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġget Closest Block ( sibling , Ġdown ) Ġ?: Ġreturn Ġsibling ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( down ) Ġblock . l brace Ġelse Ġblock . r brace ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Target Whitespace ( sibling : ĠPsi Element , Ġdown : ĠBoolean ): ĠPsi WhiteSpace ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwhitespace Ġ= Ġ( if Ġ( down ) Ġsibling . prev Sibling Ġelse Ġsibling . next Sibling ) Ġas ? ĠPsi WhiteSpace Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġthere Ġis Ġmulti - line Ġwhitespace Ġbetween Ġsource Ġand Ġtarget , Ġit Ġshould Ġnot Ġbe Ġjump ed Ġover ĊĠĠĠĠĠĠĠ Ġreturn Ġwhitespace . take If Ġ{ Ġit . is Multi Line () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Closest Block ( element : ĠPsi Element , Ġdown : ĠBoolean ): ĠRs Block ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs While Expr Ġ-> Ġelement . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Loop Expr Ġ-> Ġelement . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs For Expr Ġ-> Ġelement . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Block Expr Ġ-> Ġelement . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs If Expr Ġ-> Ġif Ġ( down ) Ġelement . block Ġelse Ġelement . else Branch ?. block Ġ?: Ġelement . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Lambda Expr Ġ-> Ġelement . expr ?. let Ġ{ Ġget Closest Block ( it , Ġdown ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Expr Stmt Ġ-> Ġget Closest Block ( element . expr , Ġdown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ