Almost, I'm think to use an AST to convert a GStringExpression to ConstantExpression, in which all $ placeholders are escaped. Then use a custom TemplateEngine to interpolate variables prefixed with a % character.
p On Sun, May 3, 2015 at 8:11 PM, Dinko Srkoč <[email protected]> wrote: > On 3 May 2015 at 19:53, Paolo Di Tommaso <[email protected]> > wrote: > > I think that AST cannot work here because the string has been already > > parsed. > > Perhaps, but here's the idea - find all ConstantExpressions with > String values and parse them again. If you find '%DONE' inside, try > all VariableExpressions in scope with name 'DONE'. If found, replace > the ConstantExpression with another one, having a GString that you > assembled as a value. > > My AST skills are a bit rusty, does this seem feasible? > > Cheers, > Dinko > > > > > > > p > > > > > > On Sun, May 3, 2015 at 7:30 PM, Dinko Srkoč <[email protected]> > wrote: > >> > >> On 3 May 2015 at 18:01, Paolo Di Tommaso <[email protected]> > >> wrote: > >> > Hi, > >> > > >> > I would need to implement a string literal in which the dollar char is > >> > not > >> > interpreted as variable placeholder, indeed to use a custom character > to > >> > interpolate variables. > >> > > >> > For example I would like define a string like this: > >> > > >> > > >> > def DONE = 'Task completed' > >> > > >> > > >> > def script = /% > >> > > >> > mv file_name $HOME > >> > echo %DONE > >> > /% > >> > > >> > > >> > > >> > In which the $HOME string is ignored while %DONE is interpolated as a > >> > groovy variable. > >> > > >> > Is there any way to do that ? > >> > >> Probably not ... although, I imagine it might be possible using AST > >> transformations. > >> > >> On a related note, it would be interesting to have the ability to use > >> a different GString implementation, instead of GStringImpl. > >> > >> Cheers, > >> Dinko > >> > >> > > >> > > >> > Cheers, > >> > Paolo > >> > > >> > > >> > > > > > >
