You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Dániel Dékány (Jira)" <ji...@apache.org> on 2020/01/25 14:18:00 UTC
[jira] [Commented] (FREEMARKER-112) Inspect Freimarken Variables in
Template for e.g. Testing
[ https://issues.apache.org/jira/browse/FREEMARKER-112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17023581#comment-17023581 ]
Dániel Dékány commented on FREEMARKER-112:
------------------------------------------
Getting the list of variables accessed by the template is a common request. But it's not possible to do reliably (except in some subset of templates), because what users mostly need is the list of variables that should be present in the data-model. Given the dynamic nature of the template language, it's hard or impossible to tell if on run-time the resolution of a variable will fall back to the data-model, or it will be always already shadowed by an {{#assign}}-ed variable, etc. Also, if you have things like {{.vars[someName]}}, {{?eval}}, etc., static analysis will be even more inaccurate.
But, surely we could provide an API that makes a "best effort", with clear disclaimers in the related API. (I just never got there, with all the stuff in the queue... And BTW, one goal of FM3 is to make such analysis is possible. That's why I want to make variable resolution more "static" there.)
As of exposing the whole AST API, again, there's clearly an user demand for that. Even for transforming templates, or building them with Java API. Problem is, in FM2 that API is a mess. Actually, the syntax itself is somewhat a messy, and then it has a somewhat messy implementation, and so the two together... you get it. And while that API is not publ+ished+, it's partially public, and so I don't even dare to clean it up in FM2. Even if it wasn't a mess, exposing such API can make evolution hard, as it's more likely that backward compatibility requirements will be in your way. So my though back then was to create a nice published API, that internally maps to the internal messy AST... but of course that's a lot of work, and I could find the energy/time. But, here things changed for the better... Given 2.x API is pretty much frozen, and FM3 is wildly incompatible anyway, we might as well expose that awkward AST. Because I don't dare to change it anyway, so what's the point of pretending that we don't guarantee backward compatibility there. We in fact did. (How to do the same in FM3 is a different question, because I don't want to expose the actual AST for reasons stated above. But that's one reason why I think a much more regular syntax is a critical feature of FM3, even if only a planned feature...)
> Inspect Freimarken Variables in Template for e.g. Testing
> ---------------------------------------------------------
>
> Key: FREEMARKER-112
> URL: https://issues.apache.org/jira/browse/FREEMARKER-112
> Project: Apache Freemarker
> Issue Type: Wish
> Components: engine
> Affects Versions: 2.3.28
> Environment: ALL
> Reporter: Yuna Morgenstern
> Assignee: Siegfried Goeschl
> Priority: Critical
> Labels: easyfix
> Fix For: 2.3.29
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> h5. Story
> As tester and backend tool developer
> we wish to inspect variables of a template
> so that we can test template structure before rendering, while testing and can present internally a gui tool which will show all variables, default values and all that stuff
> h5. Description
> FreeMarker already scans the template, so why not giving access to the parsed elements? It would be sad if we have to implement the same parsing logic as FreeMarker already does.
> h5. Acceptance criteria
> * parsed elements like e.g. freemarker.core.* can be accessed by e.g. (freemarker.coreTemplate.getRootTreeNode().getVariables() )
> * Variables are having types like, optional, required, predefined/constant,...
> * Variables are having default parameter which can be reached by another getter
> h5. Links example
> https://stackoverflow.com/questions/1919189/how-can-i-introspect-a-freemarker-template-to-find-out-what-variables-it-uses
--
This message was sent by Atlassian Jira
(v8.3.4#803005)