/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . ide . intent ions . add Fmt String Argument Ċ Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . rust . ide . intent ions . Rs Element Base Int ention Action Ċ import Ġorg . rust . lang . core . macros . expansion Context Ċ import Ġorg . rust . lang . core . macros . is Expr Or Stmt Context Ċ import Ġorg . rust . lang . core . psi . Rs Element Types . STRING _ LITERAL Ċ import Ġorg . rust . lang . core . psi . Rs Expression Code Fragment Ċ import Ġorg . rust . lang . core . psi . Rs Lit Expr Ċ import Ġorg . rust . lang . core . psi . Rs Macro Call Ċ import Ġorg . rust . lang . core . psi . Rs Psi Factory Ċ import Ġorg . rust . lang . core . psi . ext .* Ċ import Ġorg . rust . openapi ext . is UnitTest Mode Ċ import Ġorg . rust . openapi ext . run Write Command Action Ċ Ċ class ĠAdd Fmt String Argument Int ention Ġ: ĠRs Element Base Int ention Action < Add Fmt String Argument Int ention . Context >() Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString Ġ= Ġ" Add Ġformat Ġstring Ġargument " ĊĠĠĠ Ġoverride Ġfun Ġget Family Name (): ĠString Ġ= Ġtext ĊĊĠĠĠ Ġclass ĠContext ( val Ġliteral : ĠRs Lit Expr , Ġval Ġmacro Call : ĠRs Macro Call ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Applicable Context ( project : ĠProject , Ġeditor : ĠEditor , Ġelement : ĠPsi Element ): ĠContext ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element . elementType Ġ!= ĠSTRING _ LITERAL ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġliteral Ġ= Ġelement . ancestor Or Self < Rs Lit Expr >() Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// ĠCare t Ġmust Ġbe Ġinside Ġa Ġliteral , Ġnot Ġright Ġbefore Ġor Ġright Ġafter Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ(! literal . contains Offset ( editor . caret Model . offset )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġmacro Call Ġ= Ġliteral . ancestor Or Self < Rs Macro Call >() Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! macro Call . is Expr Or Stmt Context Ġ|| Ġmacro Call . macro Name Ġ! in ĠFORMAT _ MAC ROS ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext ( literal , Ġmacro Call ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmacro Call Expr Ġ= Ġctx . macro Call . parent Ġas ? ĠRs Element Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġliteral Ġ= Ġctx . literal ĊĠĠĠĠĠĠĠ Ġif Ġ(! literal . contains Offset ( editor . caret Model . offset )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġcaret Offset In Literal Ġ= Ġeditor . caret Model . offset Ġ- Ġliteral . text Offset Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( caret Offset In Literal Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġold String Ġ= Ġliteral . text . trim (' \" ') ĊĠĠĠĠĠĠĠ Ġval Ġold String Until Caret Ġ= Ġold String . substring ( 0 , Ġcaret Offset In Literal ) ĊĠĠĠĠĠĠĠ Ġval Ġplaceholder Regex Ġ= Ġ""" \{ (: [ a - zA - Z 0 - 9 ., ? ]*) ?} """. to Regex () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplaceholder Regex . findAll ( old String Until Caret ) ĊĠĠĠĠĠĠĠ Ġval Ġplaceholder Number Ġ= Ġresult . count () ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Fragment Ġ= ĠRs Expression Code Fragment ( project , ĠCODE _ FRAGMENT _ TEXT , Ġmacro Call Expr ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is UnitTest Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Fmt String Argument ( project , Ġeditor , Ġctx , Ġcode Fragment , Ġcaret Offset In Literal , Ġplaceholder Number ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRs Add Fmt String Argument Popup . show ( editor , Ġproject , Ġcode Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Fmt String Argument ( project , Ġeditor , Ġctx , Ġcode Fragment , Ġcaret Offset In Literal , Ġplaceholder Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Fmt String Argument ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠ Ġctx : ĠContext , ĊĠĠĠĠĠĠĠ Ġcode Fragment : ĠRs Expression Code Fragment , ĊĠĠĠĠĠĠĠ Ġcaret Offset In Literal : ĠInt , ĊĠĠĠĠĠĠĠ Ġplaceholder Number : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpsi Factory Ġ= ĠRs Psi Factory ( project ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmacro Call Ġ= Ġctx . macro Call ĊĠĠĠĠĠĠĠ Ġval Ġargument Ġ= Ġmacro Call . format Macro Argument Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġargument . format Macro Arg List ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Placeholder Ġ= Ġ"{} " ĊĠĠĠĠĠĠĠ Ġval Ġold String Ġ= Ġctx . literal . text . trim (' \" ') ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġold String . substring ( 0 , Ġcaret Offset In Literal ) ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġold String . substring ( caret Offset In Literal ) ĊĠĠĠĠĠĠĠ Ġval Ġnew String Ġ= Ġ"\" $ prefix $ new Placeholder $ suffix \"" ĊĠĠĠĠĠĠĠ Ġval Ġnew Argument Ġ= Ġcode Fragment . expr ?. text Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Args Ġ= Ġif Ġ( arguments . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġ` println !(" x Ġ= Ġ< caret >") ` ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( new String , Ġnew Argument ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġ` println !(" x Ġ= Ġ{}, Ġy Ġ= Ġ< caret >", Ġx )` Ġor Ġ` write !( f , Ġ" x Ġ= Ġ{}, Ġy Ġ= Ġ< caret >", Ġx )` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġliteral Position Ġ= Ġarguments . indexOf First Ġ{ Ġit . expr Ġ== Ġctx . literal Ġ}. take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Before Literal Ġ= Ġarguments . take ( literal Position ). map Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs After Literal Ġ= Ġarguments . drop ( literal Position Ġ+ Ġ 1 ). map Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Args After Literal Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs After Literal . take ( placeholder Number ) Ġ+ Ġnew Argument Ġ+ Ġargs After Literal . drop ( placeholder Number ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Before Literal Ġ+ Ġnew String Ġ+ Ġnew Args After Literal ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Macro Call Ġ= Ġpsi Factory . create Macro Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmacro Call . expansion Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmacro Call . br aces Kind Ġ?: Ġreturn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmacro Call . macro Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* new Args . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġproject . run Write Command Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmacro Call . replace ( new Macro Call ) Ġas ĠRs Macro Call ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . caret Model . moveTo Offset ( editor . caret Model . offset Ġ+ Ġnew Placeholder . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFORMAT _ MAC ROS : ĠSet < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Set Of (" format ", Ġ" write ", Ġ" writeln ", Ġ" print ", Ġ" println ", Ġ" e print ", Ġ" e println ", Ġ" format _ args ") ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠĠĠĠĠ Ġvar ĠCODE _ FRAGMENT _ TEXT : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ} Ċ } Ċ