GHC AST Annotations
Alan & Kim Zimmerman
alan.zimm at gmail.com
Thu Aug 28 14:00:13 UTC 2014
Now that the landmines have hopefully been cleared from the AST via [1] I
would like to propose changing the location information in the AST.
Right now the locations of syntactic markers such as do/let/where/in/of in
the source are discarded from the AST, although they are retained in the
rich token stream.
The haskell-src-exts package deals with this by means of using the
SrcSpanInfo data type [2] which contains the SrcSpan as per the current GHC
Located type but also has a list of SrcSpan s for the syntactic markers,
depending on the particular AST fragment being annotated.
In addition, the annotation type is provided as a parameter to the AST, so
that it can be changed as required, see [3].
The motivation for this change is then
1. Simplify the roundtripping and modification of source by explicitly
capturing the missing location information for the syntactic markers.
2. Allow the annotation to be a parameter so that it can be replaced with a
different one in tools, for example HaRe would include the tokens for the
AST fragment leaves.
3. Aim for some level compatibility with haskell-src-exts so that tools
developed for it could be easily ported to GHC, for example exactprint [4].
I would like feedback as to whether this would be acceptable, or if the
same goals should be achieved a different way.
Regards
Alan
[1] https://phabricator.haskell.org/D157
[2]
http://hackage.haskell.org/package/haskell-src-exts-1.15.0.1/docs/Language-Haskell-Exts-SrcLoc.html#t:SrcSpanInfo
[3]
http://hackage.haskell.org/package/haskell-src-exts-1.15.0.1/docs/Language-Haskell-Exts-Annotated-Syntax.html#t:Annotated
[4]
http://hackage.haskell.org/package/haskell-src-exts-1.15.0.1/docs/Language-Haskell-Exts-Annotated-ExactPrint.html#v:exactPrint
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20140828/e6083a6a/attachment.html>
More information about the ghc-devs
mailing list