<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>
<style>img {
max-width: 100%; height: auto;
}
</style>
</head>
<body>
<div class="content">
<h3>
Alan Zimmerman pushed to branch wip/az/exactprint
at <a href="https://gitlab.haskell.org/ghc/ghc">Glasgow Haskell Compiler / GHC</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fd5c8c5f245629c643eda2f573ae4dc762476b98">fd5c8c5f</a></strong>
<div>
<span>by Alan Zimmerman</span>
<i>at 2020-09-29T22:20:46+01:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Proof of Concept implementation of in-tree API Annotations
This MR introduces a possible machinery to introduce API Annotations
into the TTG extension points.
It is intended to be a concrete example for discussion.
It still needs to process comments.
----
Work in progress, adding more TTG extensions for annotations.
And fixing ppr round-trip tests by being able to blank out in-tree
annotations, as done with SrcSpans.
This is needed for the case of
class Foo a where
for which current ppr does not print the "where".
Rename AA to AddApiAnn and AA to AddAnn
Add XConPatIn and XConPatOut
Rebase
----
First pass at bringing in LocatedA for API anns in locations
Treatment of ECP in parsing is provisional at this stage, leads to some
horribly stuff in Parser.y and RdrHsSyn.
It is an extensive but not invasive change. I think (AZ).
Locally it reports some parsing tests using less memory.
Add ApiAnns to the HsExpr data structure.
rebase.
Change HsMatchContext and HsStmtContext to use an id, not a GhcPass
parameter.
Add ApiAnns to Hs/Types
Rebase
Rebased 2020-03-25
WIP on in-tree annotations
Includes updating HsModule
Imports
LocateA ImportDecl so we can hang AnnSemi off it
A whole bunch of stuff more
InjectivityAnn and FamEqn now have annotations in them
Add annotations to context srcspan
----
In-tree annotations: LHsDecl and LHsBind LocatedA
----
WIP on in-tree annotations
----
in-tree annotations: LHsType is now LocatedA
----
FunDeps is now also a HS data type
----
WIP. Added LocatedA to Pat, Expr, Decl
And worked some more through Parser.y
----
LStmt now Located
----
Finished working through Parser.y, tests seem ok
failures relate to annotations.
Adding test infrastructure for check-exact
Like check-ppr, but checking for an exact reproduction of the parsed
source file.
Starting to work on actual exact printer
Bring in ApiAnnName
As an alternative for LocatedA, to be used for names only.
Carrying extra name adornments, such as locations of backticks,
parens, etc.
Working on changing ApiAnnName to accurately reflect actual usage
Get rid of AnnApiName in favour of LocatedN
Working on check-exact. Making progress
Working on the ghc-exact bit
Progress, can reproduce the first Test.hs file.
Move API Annotations out of the extensions to annotations
Remove LHsLocalBinds
Fix up after rebasing to bring in XRec
Main thing is to make
type instance XRec (GhcPass p) a = GenLocated (Anno a) a
type family Anno a = b
But this has massive implications.
</pre>
</li>
</ul>
<h4>19 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#d0d96a6d03668aeab20ebe05e2c4ccb798c7e64c">
compiler/GHC.hs
</a>
</li>
<li class="file-stats">
<a href="#28df9b7ff357d56663fd29efdad1c6b9bad3022f">
compiler/GHC/Data/BooleanFormula.hs
</a>
</li>
<li class="file-stats">
<a href="#29399f07d3320158454cb214d24b4825a7bf4928">
compiler/GHC/Data/OrdList.hs
</a>
</li>
<li class="file-stats">
<a href="#dbce6cb5e8f3d5287103c66d1a56ad63bbbd11a9">
compiler/GHC/Driver/Backpack.hs
</a>
</li>
<li class="file-stats">
<a href="#9a679a2680ef6061397f1987091ea9f96ffe095d">
compiler/GHC/Driver/Main.hs
</a>
</li>
<li class="file-stats">
<a href="#ff068514f65150b5ec069a421b0223fe35f41569">
compiler/GHC/Driver/Types.hs
</a>
</li>
<li class="file-stats">
<a href="#8713274c63262d62e38b64a0736583684d456379">
compiler/GHC/Hs.hs
</a>
</li>
<li class="file-stats">
<a href="#65ca06d51797ebf672a62bde6c00bcb9444e1425">
compiler/GHC/Hs/Binds.hs
</a>
</li>
<li class="file-stats">
<a href="#75bfcd03f3ba9315d33104fcb0424c6bfeb4e334">
compiler/GHC/Hs/Decls.hs
</a>
</li>
<li class="file-stats">
<a href="#6f07df67831f0beddb76d20621fc57d1e45ad2ff">
compiler/GHC/Hs/Dump.hs
</a>
</li>
<li class="file-stats">
<a href="#286aa54304737bc5b412a6eebe7ea2037272043c">
<span class="new-file">
+
compiler/GHC/Hs/Exact.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#cc97d81e7223ad4a3a5e801156ca632f9fa75654">
compiler/GHC/Hs/Expr.hs
</a>
</li>
<li class="file-stats">
<a href="#be192b80f46e4d13d5b723057066f1a0352273d2">
compiler/GHC/Hs/Expr.hs-boot
</a>
</li>
<li class="file-stats">
<a href="#576dff4e64fa03683ffc5dcdd58284acdd70bc8e">
compiler/GHC/Hs/Extension.hs
</a>
</li>
<li class="file-stats">
<a href="#9c30887fc30e3c645fe9705eac50f0d8a5410c6b">
compiler/GHC/Hs/ImpExp.hs
</a>
</li>
<li class="file-stats">
<a href="#9f00edfedb0f969865b049a78de3866545b4a60b">
compiler/GHC/Hs/Instances.hs
</a>
</li>
<li class="file-stats">
<a href="#0bae7e7e67b5f9b6ba2a371f8917cf74423a0c6f">
compiler/GHC/Hs/Pat.hs
</a>
</li>
<li class="file-stats">
<a href="#8eed16ea0ee46b039a6a6f026b12ec27143fd0f6">
compiler/GHC/Hs/Pat.hs-boot
</a>
</li>
<li class="file-stats">
<a href="#9f8f154268a51dc39e1f608e6d9845fdae82d480">
compiler/GHC/Hs/Stats.hs
</a>
</li>
</ul>
<h5>The diff was not included because it is too large.</h5>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #777;">
—
<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fd5c8c5f245629c643eda2f573ae4dc762476b98">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.haskell.org.
If you'd like to receive fewer emails, you can
adjust your notification settings.
<script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","action":{"@type":"ViewAction","name":"View Commit","url":"https://gitlab.haskell.org/ghc/ghc/-/commit/fd5c8c5f245629c643eda2f573ae4dc762476b98"}}</script>
</p>
</div>
</body>
</html>