In general I’m fine with this direction of travel. Some specifics:

·        You’d have to be careful to document, for every data constructor in 
HsSyn, what the association between the [SrcSpan] in the SrcSpanInfo and the 
“sub-entities”

·        Many of the sub-entities will have their own SrcSpanInfo wrapped 
around them, so there’s some unhelpful duplication. Maybe you only want the 
SrcSpanInfo to list the [SrcSpan]s for the sub-entities (like the syntactic 
keywords) that do not show up as children in the syntax tree?
Anyway do by all means create a GHC Trac wiki page to describe your proposed 
design, concretely.

Simon

From: ghc-devs [mailto:[email protected]] On Behalf Of Alan & Kim 
Zimmerman
Sent: 28 August 2014 15:00
To: [email protected]
Subject: GHC AST Annotations

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
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to