[
https://issues.apache.org/jira/browse/VELOCITY-680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12674735#action_12674735
]
Nathan Bubna commented on VELOCITY-680:
---------------------------------------
Continuing my broad tirade about VTL simplicity, i'd like to address this as
well.
Basically, i don't want more directives for #setlocal and #setglobal support.
To my eyes, it's inflexible, non-extensible clutter, especially if we keep
around config options like velocimacro.context.localscope to complicate the
possibilities.
Ideally, i would love to get rid of all such configuration options and extra
directives and just improve #set to allow the scope to be specified in a very
VTL-specific and extensible manner (akin to my suggestion for VELOCITY-703):
#set( $foo = 'bar' ) ## if foo is undefined, set it in the most local scope.
if foo is defined already, set it in the scope it came from
#set[parse]( $foo = 'bar' ) ## sets foo in the current #parse scope
#set[macro]( $foo = 'bar' ) ## sets foo in the current macro's scope
#set[foreach]( $foo = 'bar' ) ## sets foo in the current #foreach scope
etc.
Depending on the implementation, this syntax might be extensible and allow
VelocityView contexts to recognize and handle things like:
#set[request]( $foo = 'bar' )
#set[session]( $foo = 'bar' )
#set[application]( $foo = 'bar' )
Again, this keeps the namespace clear, is easy to extend in the future, removes
the need for quasi-useful scope configuration settings, and is explicitly
VTL-centric.
I really don't know if i have the parser savvy to follow through on this myself
given my current time limitations, but perhaps this vision will inspire someone
to help. :)
> RFC: New #local directive that behaves like #set but puts things into local
> context in macro rendering
> ------------------------------------------------------------------------------------------------------
>
> Key: VELOCITY-680
> URL: https://issues.apache.org/jira/browse/VELOCITY-680
> Project: Velocity
> Issue Type: New Feature
> Affects Versions: 1.7
> Reporter: Jarkko Viinamäki
> Attachments: velocity-local-directive-1.1.patch,
> velocity-local-directive.patch
>
>
> It would be very useful to be able to set variables that are in local macro
> scope. That is, they do not overwrite "global" variables and are thrown away
> after macro rendering. This would allow people to build macro libraries that
> do not clash so easily with each other.
> There is some implementation of a "LocalDirective" in
> experimental/localdirective but I didn't quite get it and it doesn't follow
> the same syntax as #set. I used a few minutes to hack together this
> alternative implementation which behaves exactly like #set but it puts things
> in local context only.
> There's only one test case since this is Request-for-Comments type of patch.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]