/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . ide . comment er Ċ Ċ import Ġcom . intellij . application . options . Code Style Ċ import Ġcom . intellij . code Insight . generation . Comment er Data Holder Ċ import Ġcom . intellij . code Insight . generation . Self Man aging Comment er Ċ import Ġcom . intellij . code Insight . generation . Self Man aging Comment er Util Ċ import Ġcom . intellij . lang . Code Documentation Aware Comment er Ċ import Ġcom . intellij . lang . Comment er Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi Comment Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ import Ġcom . intellij . util . text . CharArray Util Ċ import Ġorg . rust . lang . Rs Language Ċ import Ġorg . rust . lang . core . parser . Rust Parser Definition . Companion . BLOCK _ COMMENT Ċ import Ġorg . rust . lang . doc . psi . Rs Doc Kind Ċ Ċ data Ġclass ĠComment Holder ( val Ġfile : ĠPsi File ) Ġ: ĠComment er Data Holder () Ġ{ ĊĠĠĠ Ġfun Ġuse Space After Line Comment (): ĠBoolean Ġ= ĠCode Style . get Language Settings ( file , ĠRs Language ). LINE _ COMMENT _ ADD _ SPACE Ċ } Ċ Ċ class ĠRs Comment er Ġ: ĠComment er , ĠCode Documentation Aware Comment er , ĠSelf Man aging Comment er < Comment Holder > Ġ{ ĊĠĠĠ Ġ// Ġact Ġlike Ġthere Ġare Ġno Ġdoc Ġcomments , Ġthese Ġare Ġhandled Ġin Ġ` Rs Enter In Line Comment Handler ` ĊĠĠĠ Ġoverride Ġfun Ġis Documentation Comment ( element : ĠPsi Comment ?) Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġget Documentation Comment TokenType (): ĠI ElementType ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Documentation Comment Line Prefix (): ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Documentation Comment Prefix (): ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Documentation Comment Suffix (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Line Comment TokenType (): ĠI ElementType ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Block Comment TokenType (): ĠI ElementType Ġ= ĠBLOCK _ COMMENT ĊĊĠĠĠ Ġoverride Ġfun Ġget Line Comment Prefix (): ĠString Ġ= Ġ"// " ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Comment Prefix (): ĠString Ġ= Ġ" /* " ĊĠĠĠ Ġoverride Ġfun Ġget Block Comment Suffix (): ĠString Ġ= Ġ" */ " ĊĊĠĠĠ Ġ// Ġunused Ġbecause Ġwe Ġimplement ĠSelf Man aging Comment er ĊĠĠĠ Ġoverride Ġfun Ġget Comment ed Block Comment Prefix (): ĠString Ġ= Ġ"* //* " ĊĠĠĠ Ġoverride Ġfun Ġget Comment ed Block Comment Suffix (): ĠString Ġ= Ġ"* //* " ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Comment Prefix ( ĊĠĠĠĠĠĠĠ Ġselection Start : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġdata : ĠComment Holder ĊĠĠĠ Ġ): ĠString Ġ= Ġblock Comment Prefix ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Comment Suffix ( ĊĠĠĠĠĠĠĠ Ġselection End : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġdata : ĠComment Holder ĊĠĠĠ Ġ): ĠString Ġ= Ġblock Comment Suffix ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Comment Range ( ĊĠĠĠĠĠĠĠ Ġselection Start : ĠInt , ĊĠĠĠĠĠĠĠ Ġselection End : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġdata : ĠComment Holder ĊĠĠĠ Ġ): ĠText Range ? Ġ= ĠSelf Man aging Comment er Util . getBlock Comment Range ( ĊĠĠĠĠĠĠĠ Ġselection Start , ĊĠĠĠĠĠĠĠ Ġselection End , ĊĠĠĠĠĠĠĠ Ġdocument , ĊĠĠĠĠĠĠĠ Ġblock Comment Prefix , ĊĠĠĠĠĠĠĠ Ġblock Comment Suffix ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġinsert Block Comment ( ĊĠĠĠĠĠĠĠ Ġstart Offset : ĠInt , ĊĠĠĠĠĠĠĠ Ġend Offset : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġdata : ĠComment Holder ? ĊĠĠĠ Ġ): ĠText Range Ġ= ĠSelf Man aging Comment er Util . insert Block Comment ( ĊĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠ Ġend Offset , ĊĠĠĠĠĠĠĠ Ġdocument , ĊĠĠĠĠĠĠĠ Ġblock Comment Prefix , ĊĠĠĠĠĠĠĠ Ġblock Comment Suffix ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġuncomment Block Comment ( ĊĠĠĠĠĠĠĠ Ġstart Offset : ĠInt , ĊĠĠĠĠĠĠĠ Ġend Offset : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġdata : ĠComment Holder ? ĊĠĠĠ Ġ) Ġ= ĠSelf Man aging Comment er Util . un comment Block Comment ( ĊĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠ Ġend Offset , ĊĠĠĠĠĠĠĠ Ġdocument , ĊĠĠĠĠĠĠĠ Ġblock Comment Prefix , ĊĠĠĠĠĠĠĠ Ġblock Comment Suffix ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġis Line Comment ed ( line : ĠInt , Ġoffset : ĠInt , Ġdocument : ĠDocument , Ġdata : ĠComment Holder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLINE _ PREFIX ES . any Ġ{ ĠChar Array Util . region Matches ( document . chars Sequence , Ġoffset , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcomment Line ( line : ĠInt , Ġoffset : ĠInt , Ġdocument : ĠDocument , Ġdata : ĠComment Holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadd Space Ġ= Ġdata . use Space After Line Comment () ĊĠĠĠĠĠĠĠ Ġdocument . insert String ( offset , Ġ"// " Ġ+ Ġif Ġ( add Space ) Ġ" Ġ" Ġelse Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġuncomment Line ( line : ĠInt , Ġoffset : ĠInt , Ġdocument : ĠDocument , Ġdata : ĠComment Holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Len Ġ= ĠLINE _ PREFIX ES . find Ġ{ ĠChar Array Util . region Matches ( document . chars Sequence , Ġoffset , Ġit ) Ġ} ?. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġhas Space Ġ= Ġdata . use Space After Line Comment () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChar Array Util . region Matches ( document . chars Sequence , Ġoffset Ġ+ Ġprefix Len , Ġ" Ġ") ĊĠĠĠĠĠĠĠ Ġdocument . delete String ( offset , Ġoffset Ġ+ Ġprefix Len Ġ+ Ġif Ġ( has Space ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Comment Prefix ( line : ĠInt , Ġdocument : ĠDocument , Ġdata : ĠComment Holder ): ĠString Ġ= Ġline Comment Prefix ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Block Comment ing State ( ĊĠĠĠĠĠĠĠ Ġselection Start : ĠInt , ĊĠĠĠĠĠĠĠ Ġselection End : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġfile : ĠPsi File ĊĠĠĠ Ġ): ĠComment Holder Ġ= ĠComment Holder ( file ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Line Comment ing State ( ĊĠĠĠĠĠĠĠ Ġstart Line : ĠInt , ĊĠĠĠĠĠĠĠ Ġend Line : ĠInt , ĊĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠ Ġfile : ĠPsi File ĊĠĠĠ Ġ): ĠComment Holder Ġ= ĠComment Holder ( file ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLINE _ PREFIX ES : ĠList < String > Ġ= ĠlistOf ( Rs Doc Kind . Outer E ol . prefix , ĠRs Doc Kind . Inner E ol . prefix , Ġ"// ") ĊĠĠĠ Ġ} Ċ } Ċ