[Git][ghc/ghc][wip/az/epa-span-in-delta] EPA: Bring back SrcSpan in EpaDelta

Alan Zimmerman (@alanz) gitlab at gitlab.haskell.org
Fri Jul 5 17:09:46 UTC 2024



Alan Zimmerman pushed to branch wip/az/epa-span-in-delta at Glasgow Haskell Compiler / GHC


Commits:
99612d18 by Alan Zimmerman at 2024-07-05T18:09:22+01:00
EPA: Bring back SrcSpan in EpaDelta

When processing files in ghc-exactprint, the usual workflow is to
first normalise it with makeDeltaAst, and then operate on it.

But we need the original locations to operate on it, in terms of
finding things.

So restore the original SrcSpan for reference in EpaDelta

- - - - -


12 changed files:

- compiler/GHC/Hs/Dump.hs
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Types/SrcLoc.hs
- testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
- testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
- testsuite/tests/parser/should_compile/T14189.stderr
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Main.hs
- utils/check-exact/Transform.hs
- utils/check-exact/Utils.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs


Changes:

=====================================
compiler/GHC/Hs/Dump.hs
=====================================
@@ -147,9 +147,9 @@ showAstData bs ba a0 = blankLine $$ showAstData' a0
 
             epaAnchor :: EpaLocation -> SDoc
             epaAnchor (EpaSpan s) = parens $ text "EpaSpan" <+> srcSpan s
-            epaAnchor (EpaDelta d cs) = case ba of
-              NoBlankEpAnnotations -> parens $ text "EpaDelta" <+> deltaPos d <+> showAstData' cs
-              BlankEpAnnotations -> parens $ text "EpaDelta" <+> deltaPos d <+> text "blanked"
+            epaAnchor (EpaDelta s d cs) = case ba of
+              NoBlankEpAnnotations -> parens $ text "EpaDelta" <+> srcSpan s <+> deltaPos d <+> showAstData' cs
+              BlankEpAnnotations -> parens $ text "EpaDelta" <+> srcSpan s <+> deltaPos d <+> text "blanked"
 
             deltaPos :: DeltaPos -> SDoc
             deltaPos (SameLine c) = parens $ text "SameLine" <+> ppr c


=====================================
compiler/GHC/Parser/Annotation.hs
=====================================
@@ -459,12 +459,12 @@ type EpaLocation = EpaLocation' [LEpaComment]
 
 epaToNoCommentsLocation :: EpaLocation -> NoCommentsLocation
 epaToNoCommentsLocation (EpaSpan ss) = EpaSpan ss
-epaToNoCommentsLocation (EpaDelta dp []) = EpaDelta dp NoComments
-epaToNoCommentsLocation (EpaDelta _ _ ) = panic "epaToNoCommentsLocation"
+epaToNoCommentsLocation (EpaDelta ss dp []) = EpaDelta ss dp NoComments
+epaToNoCommentsLocation (EpaDelta _ _ _ ) = panic "epaToNoCommentsLocation"
 
 noCommentsToEpaLocation :: NoCommentsLocation -> EpaLocation
 noCommentsToEpaLocation (EpaSpan ss) = EpaSpan ss
-noCommentsToEpaLocation (EpaDelta dp NoComments) = EpaDelta dp []
+noCommentsToEpaLocation (EpaDelta ss dp NoComments) = EpaDelta ss dp []
 
 -- | Tokens embedded in the AST have an EpaLocation, unless they come from
 -- generated code (e.g. by TH).
@@ -550,8 +550,8 @@ spanAsAnchor ss  = EpaSpan ss
 realSpanAsAnchor :: RealSrcSpan -> (EpaLocation' a)
 realSpanAsAnchor s = EpaSpan (RealSrcSpan s Strict.Nothing)
 
-noSpanAnchor :: (NoAnn a) => (EpaLocation' a)
-noSpanAnchor =  EpaDelta (SameLine 0) noAnn
+noSpanAnchor :: (NoAnn a) => EpaLocation' a
+noSpanAnchor =  EpaDelta noSrcSpan (SameLine 0) noAnn
 
 -- ---------------------------------------------------------------------
 
@@ -1044,7 +1044,7 @@ instance HasLoc (EpAnn a) where
 
 instance HasLoc EpaLocation where
   getHasLoc (EpaSpan l) = l
-  getHasLoc (EpaDelta _ _) = noSrcSpan
+  getHasLoc (EpaDelta l _ _) = l
 
 getHasLocList :: HasLoc a => [a] -> SrcSpan
 getHasLocList [] = noSrcSpan
@@ -1088,7 +1088,7 @@ widenSpan s as = foldl combineSrcSpans s (go as)
     go [] = []
     go (AddEpAnn _ (EpaSpan (RealSrcSpan s mb)):rest) = RealSrcSpan s mb : go rest
     go (AddEpAnn _ (EpaSpan _):rest) = go rest
-    go (AddEpAnn _ (EpaDelta _ _):rest) = go rest
+    go (AddEpAnn _ (EpaDelta _ _ _):rest) = go rest
 
 -- | The annotations need to all come after the anchor.  Make sure
 -- this is the case.
@@ -1132,7 +1132,7 @@ widenAnchor :: Anchor -> [AddEpAnn] -> Anchor
 widenAnchor (EpaSpan (RealSrcSpan s mb)) as
   = EpaSpan (RealSrcSpan (widenRealSpan s as) (liftA2 combineBufSpans mb  (bufSpanFromAnns as)))
 widenAnchor (EpaSpan us) _ = EpaSpan us
-widenAnchor a@(EpaDelta _ _) as = case (realSpanFromAnns as) of
+widenAnchor a at EpaDelta{} as = case (realSpanFromAnns as) of
                                     Strict.Nothing -> a
                                     Strict.Just r -> EpaSpan (RealSrcSpan r Strict.Nothing)
 
@@ -1140,7 +1140,7 @@ widenAnchorS :: Anchor -> SrcSpan -> Anchor
 widenAnchorS (EpaSpan (RealSrcSpan s mbe)) (RealSrcSpan r mbr)
   = EpaSpan (RealSrcSpan (combineRealSrcSpans s r) (liftA2 combineBufSpans mbe mbr))
 widenAnchorS (EpaSpan us) _ = EpaSpan us
-widenAnchorS (EpaDelta _ _) (RealSrcSpan r mb) = EpaSpan (RealSrcSpan r mb)
+widenAnchorS EpaDelta{} (RealSrcSpan r mb) = EpaSpan (RealSrcSpan r mb)
 widenAnchorS anc _ = anc
 
 widenLocatedAn :: EpAnn an -> [AddEpAnn] -> EpAnn an
@@ -1290,7 +1290,7 @@ instance Semigroup EpaLocation where
   EpaSpan s1       <> EpaSpan s2        = EpaSpan (combineSrcSpans s1 s2)
   EpaSpan s1       <> _                 = EpaSpan s1
   _                <> EpaSpan s2        = EpaSpan s2
-  EpaDelta dp1 cs1 <> EpaDelta _dp2 cs2 = EpaDelta dp1 (cs1<>cs2)
+  EpaDelta s1 dp1 cs1 <> EpaDelta s2 _dp2 cs2 = EpaDelta (combineSrcSpans s1 s2) dp1 (cs1<>cs2)
 
 instance Semigroup EpAnnComments where
   EpaComments cs1 <> EpaComments cs2 = EpaComments (cs1 ++ cs2)
@@ -1314,7 +1314,7 @@ instance Monoid (AnnSortKey tag) where
 -- ---------------------------------------------------------------------
 
 instance NoAnn EpaLocation where
-  noAnn = EpaDelta (SameLine 0) []
+  noAnn = EpaDelta noSrcSpan (SameLine 0) []
 
 instance NoAnn AnnKeywordId where
   noAnn = Annlarrowtail  {- gotta pick one -}


=====================================
compiler/GHC/Parser/PostProcess.hs
=====================================
@@ -482,7 +482,7 @@ valid_anchor _ = False
 -- If the decl list for where binds is empty, the anchor ends up
 -- invalid. In this case, use the parent one
 patch_anchor :: RealSrcSpan -> Anchor -> Anchor
-patch_anchor r (EpaDelta _ _) = EpaSpan (RealSrcSpan r Strict.Nothing)
+patch_anchor r EpaDelta{} = EpaSpan (RealSrcSpan r Strict.Nothing)
 patch_anchor r1 (EpaSpan (RealSrcSpan r0 mb)) = EpaSpan (RealSrcSpan r mb)
   where
     r = if srcSpanStartLine r0 < 0 then r1 else r0
@@ -976,7 +976,7 @@ checkTyVars pp_what equals_or_where tc tparms
     -- Return an AddEpAnn for use in widenLocatedAn. The AnnKeywordId is not used.
     for_widening :: HsBndrVis GhcPs -> AddEpAnn
     for_widening (HsBndrInvisible (EpTok loc)) = AddEpAnn AnnAnyclass loc
-    for_widening  _                            = AddEpAnn AnnAnyclass (EpaDelta (SameLine 0) [])
+    for_widening  _                            = AddEpAnn AnnAnyclass noAnn
 
 
 whereDots, equalsDots :: SDoc
@@ -3277,7 +3277,7 @@ epTokenWidenR :: EpToken tok -> SrcSpan -> EpToken tok'
 epTokenWidenR NoEpTok _ = NoEpTok
 epTokenWidenR (EpTok l) (UnhelpfulSpan _) = EpTok l
 epTokenWidenR (EpTok (EpaSpan s1)) s2 = EpTok (EpaSpan (combineSrcSpans s1 s2))
-epTokenWidenR (EpTok (EpaDelta _ _)) _ =
+epTokenWidenR (EpTok EpaDelta{}) _ =
   -- Never happens because the parser does not produce EpaDelta.
   panic "epTokenWidenR: EpaDelta"
 


=====================================
compiler/GHC/Types/SrcLoc.hs
=====================================
@@ -914,9 +914,12 @@ mkSrcSpanPs (PsSpan r b) = RealSrcSpan r (Strict.Just b)
 -- version, to provide a position for the item relative to the end of
 -- the previous item in the source.  This is useful when editing an
 -- AST prior to exact printing the changed one.
+-- The EpaDelta also contains the original @'SrcSpan'@ for use by
+-- tools wanting to manipulate the AST after converting it using
+-- ghc-exactprint' @'makeDeltaAst'@.
 
 data EpaLocation' a = EpaSpan !SrcSpan
-                    | EpaDelta !DeltaPos !a
+                    | EpaDelta !SrcSpan !DeltaPos !a
                     deriving (Data,Eq,Show)
 
 type NoCommentsLocation = EpaLocation' NoComments
@@ -957,7 +960,7 @@ instance Outputable NoComments where
 
 instance (Outputable a) => Outputable (EpaLocation' a) where
   ppr (EpaSpan r) = text "EpaSpan" <+> ppr r
-  ppr (EpaDelta d cs) = text "EpaDelta" <+> ppr d <+> ppr cs
+  ppr (EpaDelta s d cs) = text "EpaDelta" <+> ppr s <+> ppr d <+> ppr cs
 
 instance Outputable DeltaPos where
   ppr (SameLine c) = text "SameLine" <+> ppr c


=====================================
testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
=====================================
@@ -74,10 +74,10 @@
                     []))
                   (GRHS
                    (EpAnn
-                    (EpaDelta (SameLine 0) [])
+                    (EpaDelta { <no location info> } (SameLine 0) [])
                     (GrhsAnn
                      (Nothing)
-                     (AddEpAnn Annlarrowtail (EpaDelta (SameLine 0) [])))
+                     (AddEpAnn Annlarrowtail (EpaDelta { <no location info> } (SameLine 0) [])))
                     (EpaComments
                      []))
                    []
@@ -276,8 +276,8 @@
                  (HsParTy
                   (AnnParen
                    AnnParens
-                   (EpaDelta (SameLine 0) [])
-                   (EpaDelta (SameLine 0) []))
+                   (EpaDelta { <no location info> } (SameLine 0) [])
+                   (EpaDelta { <no location info> } (SameLine 0) []))
                   (L
                    (EpAnn
                     (EpaSpan { DumpRenamedAst.hs:13:11-16 })
@@ -370,8 +370,8 @@
                  (HsParTy
                   (AnnParen
                    AnnParens
-                   (EpaDelta (SameLine 0) [])
-                   (EpaDelta (SameLine 0) []))
+                   (EpaDelta { <no location info> } (SameLine 0) [])
+                   (EpaDelta { <no location info> } (SameLine 0) []))
                   (L
                    (EpAnn
                     (EpaSpan { DumpRenamedAst.hs:13:27-35 })
@@ -796,8 +796,8 @@
              (HsParTy
               (AnnParen
                AnnParens
-               (EpaDelta (SameLine 0) [])
-               (EpaDelta (SameLine 0) []))
+               (EpaDelta { <no location info> } (SameLine 0) [])
+               (EpaDelta { <no location info> } (SameLine 0) []))
               (L
                (EpAnn
                 (EpaSpan { DumpRenamedAst.hs:19:23-36 })
@@ -899,8 +899,8 @@
                (HsParTy
                 (AnnParen
                  AnnParens
-                 (EpaDelta (SameLine 0) [])
-                 (EpaDelta (SameLine 0) []))
+                 (EpaDelta { <no location info> } (SameLine 0) [])
+                 (EpaDelta { <no location info> } (SameLine 0) []))
                 (L
                  (EpAnn
                   (EpaSpan { DumpRenamedAst.hs:19:43-51 })
@@ -1012,8 +1012,8 @@
                   (HsParTy
                    (AnnParen
                     AnnParens
-                    (EpaDelta (SameLine 0) [])
-                    (EpaDelta (SameLine 0) []))
+                    (EpaDelta { <no location info> } (SameLine 0) [])
+                    (EpaDelta { <no location info> } (SameLine 0) []))
                    (L
                     (EpAnn
                      (EpaSpan { DumpRenamedAst.hs:20:11-33 })
@@ -1025,10 +1025,10 @@
                      (NoExtField)
                      (HsForAllInvis
                       (EpAnn
-                       (EpaDelta (SameLine 0) [])
+                       (EpaDelta { <no location info> } (SameLine 0) [])
                        ((,)
-                        (AddEpAnn Annlarrowtail (EpaDelta (SameLine 0) []))
-                        (AddEpAnn Annlarrowtail (EpaDelta (SameLine 0) [])))
+                        (AddEpAnn Annlarrowtail (EpaDelta { <no location info> } (SameLine 0) []))
+                        (AddEpAnn Annlarrowtail (EpaDelta { <no location info> } (SameLine 0) [])))
                        (EpaComments
                         []))
                       [(L
@@ -1350,8 +1350,8 @@
                  (HsParTy
                   (AnnParen
                    AnnParens
-                   (EpaDelta (SameLine 0) [])
-                   (EpaDelta (SameLine 0) []))
+                   (EpaDelta { <no location info> } (SameLine 0) [])
+                   (EpaDelta { <no location info> } (SameLine 0) []))
                   (L
                    (EpAnn
                     (EpaSpan { DumpRenamedAst.hs:22:26-28 })
@@ -1822,8 +1822,8 @@
                (HsParTy
                 (AnnParen
                  AnnParens
-                 (EpaDelta (SameLine 0) [])
-                 (EpaDelta (SameLine 0) []))
+                 (EpaDelta { <no location info> } (SameLine 0) [])
+                 (EpaDelta { <no location info> } (SameLine 0) []))
                 (L
                  (EpAnn
                   (EpaSpan { DumpRenamedAst.hs:24:18-26 })
@@ -2256,9 +2256,9 @@
     (ImportDecl
      (XImportDeclPass
       (EpAnn
-       (EpaDelta (SameLine 0) [])
+       (EpaDelta { <no location info> } (SameLine 0) [])
        (EpAnnImportDecl
-        (EpaDelta (SameLine 0) [])
+        (EpaDelta { <no location info> } (SameLine 0) [])
         (Nothing)
         (Nothing)
         (Nothing)


=====================================
testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
=====================================
@@ -1975,10 +1975,10 @@
                  []))
                (GRHS
                 (EpAnn
-                 (EpaDelta (SameLine 0) [])
+                 (EpaDelta { <no location info> } (SameLine 0) [])
                  (GrhsAnn
                   (Nothing)
-                  (AddEpAnn Annlarrowtail (EpaDelta (SameLine 0) [])))
+                  (AddEpAnn Annlarrowtail (EpaDelta { <no location info> } (SameLine 0) [])))
                  (EpaComments
                   []))
                 []


=====================================
testsuite/tests/parser/should_compile/T14189.stderr
=====================================
@@ -217,9 +217,9 @@
     (ImportDecl
      (XImportDeclPass
       (EpAnn
-       (EpaDelta (SameLine 0) [])
+       (EpaDelta { <no location info> } (SameLine 0) [])
        (EpAnnImportDecl
-        (EpaDelta (SameLine 0) [])
+        (EpaDelta { <no location info> } (SameLine 0) [])
         (Nothing)
         (Nothing)
         (Nothing)
@@ -318,11 +318,13 @@
        ,{Name: T14189.NT}])])])
   (Nothing)
   (Just
-  (L
+   (L
     (EpAnn
-    (EpaSpan { T14189.hs:1:8-13 })
-    (AnnListItem
+     (EpaSpan { T14189.hs:1:8-13 })
+     (AnnListItem
       [])
-    (EpaComments
+     (EpaComments
       []))
     {ModuleName: T14189}))))
+
+


=====================================
utils/check-exact/ExactPrint.hs
=====================================
@@ -406,8 +406,8 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
   acceptSpan <- getAcceptSpan
   setAcceptSpan False
   case anchor' of
-    EpaDelta _ _ -> setAcceptSpan True
-    _            -> return ()
+    EpaDelta _ _ _ -> setAcceptSpan True
+    _              -> return ()
   p <- getPosP
   pe0 <- getPriorEndD
   debugM $ "enterAnn:starting:(anchor',p,pe,a) =" ++ show (showAst anchor', p, pe0, astId a)
@@ -420,7 +420,7 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
     CanUpdateAnchor -> pushAppliedComments
     _ -> return ()
   case anchor' of
-    EpaDelta _ dcs -> do
+    EpaDelta _ _ dcs -> do
       debugM $ "enterAnn:Printing comments:" ++ showGhc (priorComments cs)
       mapM_ printOneComment (concatMap tokComment $ priorComments cs)
       debugM $ "enterAnn:Printing EpaDelta comments:" ++ showGhc dcs
@@ -433,7 +433,7 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
   priorCs <- cua canUpdateAnchor takeAppliedComments -- no pop
   -- -------------------------
   case anchor' of
-    EpaDelta dp _ -> do
+    EpaDelta _ dp _ -> do
       debugM $ "enterAnn: EpaDelta:" ++ show dp
       -- Set the original anchor as prior end, so the rest of this AST
       -- fragment has a reference
@@ -475,14 +475,14 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
                off (ss2delta priorEndAfterComments curAnchor)
   debugM $ "enterAnn: (edp',off,priorEndAfterComments,curAnchor):" ++ show (edp',off,priorEndAfterComments,rs2range curAnchor)
   let edp'' = case anchor' of
-        EpaDelta dp _ -> dp
+        EpaDelta _ dp _ -> dp
         _ -> edp'
   -- ---------------------------------------------
   med <- getExtraDP
   setExtraDP Nothing
   let edp = case med of
         Nothing -> edp''
-        Just (EpaDelta dp _) -> dp
+        Just (EpaDelta _ dp _) -> dp
                    -- Replace original with desired one. Allows all
                    -- list entry values to be DP (1,0)
         Just (EpaSpan (RealSrcSpan r _)) -> dp
@@ -536,7 +536,7 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
   debugM $ "enterAnn:done:(anchor,p,pe,a) =" ++ show (showAst anchor', p1, pe1, astId a')
 
   case anchor' of
-    EpaDelta _ _ -> return ()
+    EpaDelta _ _ _ -> return ()
     EpaSpan (RealSrcSpan rss _) -> do
       setAcceptSpan False
       setPriorEndD (snd $ rs2range rss)
@@ -554,7 +554,8 @@ enterAnn (Entry anchor' trailing_anns cs flush canUpdateAnchor) a = do
   trailing' <- markTrailing trailing_anns
 
   -- Update original anchor, comments based on the printing process
-  let newAchor = EpaDelta edp []
+  -- TODO:AZ: probably need to put something appropriate in instead of noSrcSpan
+  let newAchor = EpaDelta noSrcSpan edp []
   let r = case canUpdateAnchor of
             CanUpdateAnchor -> setAnnotationAnchor a' newAchor trailing' (mkEpaComments (priorCs ++ postCs) [])
             CanUpdateAnchorOnly -> setAnnotationAnchor a' newAchor [] emptyComments
@@ -653,8 +654,8 @@ printSourceText (NoSourceText) txt   =  printStringAdvance txt >> return ()
 printSourceText (SourceText   txt) _ =  printStringAdvance (unpackFS txt) >> return ()
 
 printSourceTextAA :: (Monad m, Monoid w) => SourceText -> String -> EP w m ()
-printSourceTextAA (NoSourceText) txt   = printStringAtAA (EpaDelta (SameLine 0) []) txt >> return ()
-printSourceTextAA (SourceText   txt) _ =  printStringAtAA (EpaDelta (SameLine 0) []) (unpackFS txt) >> return ()
+printSourceTextAA (NoSourceText) txt   = printStringAtAA noAnn txt >> return ()
+printSourceTextAA (SourceText   txt) _ =  printStringAtAA noAnn (unpackFS txt) >> return ()
 
 -- ---------------------------------------------------------------------
 
@@ -681,9 +682,9 @@ printStringAtRsC capture pa str = do
     NoCaptureComments -> return []
   debugM $ "printStringAtRsC:cs'=" ++ show cs'
   debugM $ "printStringAtRsC:p'=" ++ showAst p'
-  debugM $ "printStringAtRsC: (EpaDelta p' [])=" ++ showAst (EpaDelta p' NoComments)
-  debugM $ "printStringAtRsC: (EpaDelta p' (map comment2LEpaComment cs'))=" ++ showAst (EpaDelta p' (map comment2LEpaComment cs'))
-  return (EpaDelta p' (map comment2LEpaComment cs'))
+  debugM $ "printStringAtRsC: (EpaDelta p' [])=" ++ showAst (EpaDelta noSrcSpan p' NoComments)
+  debugM $ "printStringAtRsC: (EpaDelta p' (map comment2LEpaComment cs'))=" ++ showAst (EpaDelta noSrcSpan p' (map comment2LEpaComment cs'))
+  return (EpaDelta noSrcSpan p' (map comment2LEpaComment cs'))
 
 printStringAtRs' :: (Monad m, Monoid w) => RealSrcSpan -> String -> EP w m ()
 printStringAtRs' pa str = printStringAtRsC NoCaptureComments pa str >> return ()
@@ -695,7 +696,7 @@ printStringAtMLoc' :: (Monad m, Monoid w)
 printStringAtMLoc' (Just aa) s = Just <$> printStringAtAA aa s
 printStringAtMLoc' Nothing s = do
   printStringAtLsDelta (SameLine 1) s
-  return (Just (EpaDelta (SameLine 1) []))
+  return (Just (EpaDelta noSrcSpan (SameLine 1) []))
 
 printStringAtMLocL :: (Monad m, Monoid w)
   => EpAnn a -> Lens a (Maybe EpaLocation) -> String -> EP w m (EpAnn a)
@@ -706,7 +707,7 @@ printStringAtMLocL (EpAnn anc an cs) l s = do
     go (Just aa) str = Just <$> printStringAtAA aa str
     go Nothing str = do
       printStringAtLsDelta (SameLine 1) str
-      return (Just (EpaDelta (SameLine 1) []))
+      return (Just (EpaDelta noSrcSpan (SameLine 1) []))
 
 printStringAtAA :: (Monad m, Monoid w) => EpaLocation -> String -> EP w m EpaLocation
 printStringAtAA el str = printStringAtAAC CaptureComments el str
@@ -726,7 +727,7 @@ printStringAtAAC :: (Monad m, Monoid w)
   => CaptureComments -> EpaLocation -> String -> EP w m EpaLocation
 printStringAtAAC capture (EpaSpan (RealSrcSpan r _)) s = printStringAtRsC capture r s
 printStringAtAAC _capture (EpaSpan ss@(UnhelpfulSpan _)) _s = error $ "printStringAtAAC:ss=" ++ show ss
-printStringAtAAC capture (EpaDelta d cs) s = do
+printStringAtAAC capture (EpaDelta ss d cs) s = do
   mapM_ printOneComment $ concatMap tokComment cs
   pe1 <- getPriorEndD
   p1 <- getPosP
@@ -739,7 +740,7 @@ printStringAtAAC capture (EpaDelta d cs) s = do
     CaptureComments -> takeAppliedComments
     NoCaptureComments -> return []
   debugM $ "printStringAtAA:(pe1,pe2,p1,p2,cs')=" ++ show (pe1,pe2,p1,p2,cs')
-  return (EpaDelta d (map comment2LEpaComment cs'))
+  return (EpaDelta ss d (map comment2LEpaComment cs'))
 
 -- ---------------------------------------------------------------------
 
@@ -1486,7 +1487,7 @@ printOneComment :: (Monad m, Monoid w) => Comment -> EP w m ()
 printOneComment c@(Comment _str loc _r _mo) = do
   debugM $ "printOneComment:c=" ++ showGhc c
   dp <-case loc of
-    EpaDelta dp _ -> return dp
+    EpaDelta _ dp _ -> return dp
     EpaSpan (RealSrcSpan r _) -> do
         pe <- getPriorEndD
         debugM $ "printOneComment:pe=" ++ showGhc pe
@@ -1496,7 +1497,7 @@ printOneComment c@(Comment _str loc _r _mo) = do
     EpaSpan (UnhelpfulSpan _) -> return (SameLine 0)
   mep <- getExtraDP
   dp' <- case mep of
-    Just (EpaDelta edp _) -> do
+    Just (EpaDelta _ edp _) -> do
       debugM $ "printOneComment:edp=" ++ show edp
       adjustDeltaForOffsetM edp
     _ -> return dp
@@ -1513,7 +1514,7 @@ updateAndApplyComment (Comment str anc pp mo) dp = do
   where
     (r,c) = ss2posEnd pp
     dp'' = case anc of
-      EpaDelta dp1 _ -> dp1
+      EpaDelta _ dp1 _ -> dp1
       EpaSpan (RealSrcSpan la _) ->
            if r == 0
              then (ss2delta (r,c+0) la)
@@ -1527,12 +1528,12 @@ updateAndApplyComment (Comment str anc pp mo) dp = do
       _ -> dp''
     op' = case dp' of
             SameLine n -> if n >= 0
-                            then EpaDelta dp' NoComments
-                            else EpaDelta dp NoComments
-            _ -> EpaDelta dp' NoComments
-    anc' = if str == "" && op' == EpaDelta (SameLine 0) NoComments -- EOF comment
-           then EpaDelta dp NoComments
-           else EpaDelta dp NoComments
+                            then EpaDelta noSrcSpan dp' NoComments
+                            else EpaDelta noSrcSpan dp NoComments
+            _ -> EpaDelta noSrcSpan dp' NoComments
+    anc' = if str == "" && op' == EpaDelta noSrcSpan (SameLine 0) NoComments -- EOF comment
+           then EpaDelta noSrcSpan dp NoComments
+           else EpaDelta noSrcSpan dp NoComments
 
 -- ---------------------------------------------------------------------
 
@@ -4265,11 +4266,11 @@ printUnicode anc n = do
             -- TODO: unicode support?
               "forall" -> if spanLength (anchor anc) == 1 then "∀" else "forall"
               s -> s
-  loc <- printStringAtAAC NoCaptureComments (EpaDelta (SameLine 0) []) str
+  loc <- printStringAtAAC NoCaptureComments (EpaDelta noSrcSpan (SameLine 0) []) str
   case loc of
     EpaSpan _ -> return anc
-    EpaDelta dp [] -> return $ EpaDelta dp []
-    EpaDelta _ _cs -> error "printUnicode should not capture comments"
+    EpaDelta ss dp [] -> return $ EpaDelta ss dp []
+    EpaDelta _ _ _cs  -> error "printUnicode should not capture comments"
 
 
 markName :: (Monad m, Monoid w)


=====================================
utils/check-exact/Main.hs
=====================================
@@ -451,9 +451,9 @@ changeLetIn1 _libdir parsed
              [l2,_l1] = map wrapDecl decls
              decls' = concatMap decl2Bind [l2]
              (L _ e) = expr
-             a = EpAnn (EpaDelta (SameLine 1) []) noAnn emptyComments
+             a = EpAnn (EpaDelta noSrcSpan (SameLine 1) []) noAnn emptyComments
              expr' = L a e
-             tkIn' = EpTok (EpaDelta (DifferentLine 1 0) [])
+             tkIn' = EpTok (EpaDelta noSrcSpan (DifferentLine 1 0) [])
          in (HsLet (tkLet, tkIn')
                 (HsValBinds x (ValBinds xv decls' sigs)) expr')
 
@@ -525,7 +525,7 @@ changeLocalDecls libdir (L l p) = do
             os' = setEntryDP os (DifferentLine 2 0)
         let sortKey = captureOrderBinds decls
         let (EpAnn anc (AnnList (Just _) a b c dd) cs) = van
-        let van' = (EpAnn anc (AnnList (Just (EpaDelta (DifferentLine 1 5) [])) a b c dd) cs)
+        let van' = (EpAnn anc (AnnList (Just (EpaDelta noSrcSpan (DifferentLine 1 5) [])) a b c dd) cs)
         -- let (EpAnn anc (AnnList (Just _) a b c dd) cs) = van
         -- let van' = (EpAnn anc (AnnList (Just (EpaDelta (DifferentLine 1 5) [])) a b c dd) cs)
         let binds' = (HsValBinds van'
@@ -551,11 +551,11 @@ changeLocalDecls2 libdir (L l p) = do
       replaceLocalBinds :: LMatch GhcPs (LHsExpr GhcPs)
                         -> Transform (LMatch GhcPs (LHsExpr GhcPs))
       replaceLocalBinds (L lm (Match ma mln pats (GRHSs _ rhs EmptyLocalBinds{}))) = do
-        let anc = (EpaDelta (DifferentLine 1 3) [])
-        let anc2 = (EpaDelta (DifferentLine 1 5) [])
+        let anc = (EpaDelta noSrcSpan (DifferentLine 1 3) [])
+        let anc2 = (EpaDelta noSrcSpan (DifferentLine 1 5) [])
         let an = EpAnn anc
                         (AnnList (Just anc2) Nothing Nothing
-                                 [AddEpAnn AnnWhere (EpaDelta (SameLine 0) [])] [])
+                                 [AddEpAnn AnnWhere (EpaDelta noSrcSpan (SameLine 0) [])] [])
                         emptyComments
         let decls = [s,d]
         let sortKey = captureOrderBinds decls


=====================================
utils/check-exact/Transform.hs
=====================================
@@ -218,8 +218,8 @@ captureTypeSigSpacing (L l (SigD x (TypeSig (AnnSig dc rs') ns (HsWC xw ty))))
     rd = case last ns of
       L (EpAnn anc' _ _) _ -> anchor anc' -- TODO MovedAnchor?
     dc' = case dca of
-      EpaSpan (RealSrcSpan r _) -> AddEpAnn kw (EpaDelta (ss2delta (ss2posEnd rd) r) [])
-      _                         -> AddEpAnn kw dca
+      EpaSpan ss@(RealSrcSpan r _) -> AddEpAnn kw (EpaDelta ss (ss2delta (ss2posEnd rd) r) [])
+      _                            -> AddEpAnn kw dca
 
     -- ---------------------------------
 
@@ -228,10 +228,10 @@ captureTypeSigSpacing (L l (SigD x (TypeSig (AnnSig dc rs') ns (HsWC xw ty))))
       (L (EpAnn anc0 a c) b)
         -> let
               anc' = case anc0 of
-                EpaDelta _ _ -> anc0
+                EpaDelta _ _ _ -> anc0
                 _ -> case dca of
-                  EpaSpan _ -> EpaDelta (SameLine 1) []
-                  EpaDelta _ cs0 -> EpaDelta (SameLine 1) cs0
+                  EpaSpan ss -> EpaDelta ss (SameLine 1) []
+                  EpaDelta ss _ cs0 -> EpaDelta ss (SameLine 1) cs0
            in (L (EpAnn anc' a c) b)
 
 captureTypeSigSpacing s = s
@@ -254,12 +254,12 @@ setEntryDPDecl d dp = setEntryDP d dp
 -- |Set the true entry 'DeltaPos' from the annotation for a given AST
 -- element. This is the 'DeltaPos' ignoring any comments.
 setEntryDP :: NoAnn t => LocatedAn t a -> DeltaPos -> LocatedAn t a
-setEntryDP (L (EpAnn (EpaSpan (UnhelpfulSpan _)) an cs) a) dp
-  = L (EpAnn (EpaDelta dp []) an cs) a
-setEntryDP (L (EpAnn (EpaSpan _) an (EpaComments [])) a) dp
-  = L (EpAnn (EpaDelta dp []) an (EpaComments [])) a
-setEntryDP (L (EpAnn (EpaDelta d csd) an cs) a) dp
-  = L (EpAnn (EpaDelta d' csd') an cs') a
+setEntryDP (L (EpAnn (EpaSpan ss@(UnhelpfulSpan _)) an cs) a) dp
+  = L (EpAnn (EpaDelta ss dp []) an cs) a
+setEntryDP (L (EpAnn (EpaSpan ss) an (EpaComments [])) a) dp
+  = L (EpAnn (EpaDelta ss dp []) an (EpaComments [])) a
+setEntryDP (L (EpAnn (EpaDelta ss d csd) an cs) a) dp
+  = L (EpAnn (EpaDelta ss d' csd') an cs') a
   where
     (d', csd', cs') = case cs of
       EpaComments (h:t) ->
@@ -283,22 +283,22 @@ setEntryDP (L (EpAnn (EpaDelta d csd) an cs) a) dp
                 in
                   (dp0, c':t, EpaCommentsBalanced [] ts)
     go :: GenLocated NoCommentsLocation e -> (DeltaPos, GenLocated NoCommentsLocation e)
-    go (L (EpaDelta _ c0) c) = (d,  L (EpaDelta dp c0) c)
-    go (L (EpaSpan _)     c) = (d,  L (EpaDelta dp NoComments) c)
-setEntryDP (L (EpAnn (EpaSpan (RealSrcSpan r _)) an cs) a) dp
+    go (L (EpaDelta ss0 _ c0) c) = (d,  L (EpaDelta ss0 dp c0) c)
+    go (L (EpaSpan ss0)       c) = (d,  L (EpaDelta ss0 dp NoComments) c)
+setEntryDP (L (EpAnn (EpaSpan ss@(RealSrcSpan r _)) an cs) a) dp
   = case sortEpaComments (priorComments cs) of
       [] ->
-        L (EpAnn (EpaDelta dp []) an cs) a
+        L (EpAnn (EpaDelta ss dp []) an cs) a
       (L ca c:cs') ->
-        L (EpAnn (EpaDelta edp csd) an cs'') a
+        L (EpAnn (EpaDelta ss edp csd) an cs'') a
               where
                 cs'' = setPriorComments cs []
-                csd = L (EpaDelta dp NoComments) c:cs'
+                csd = L (EpaDelta ss dp NoComments) c:cs'
                 lc = last $ (L ca c:cs')
                 delta = case getLoc lc of
                           EpaSpan (RealSrcSpan rr _) -> ss2delta (ss2pos rr) r
                           EpaSpan _ -> (SameLine 0)
-                          EpaDelta _dp _ -> DifferentLine 1 0
+                          EpaDelta _ _dp _ -> DifferentLine 1 0
                 line = getDeltaLine delta
                 col = deltaColumn delta
                 edp' = if line == 0 then SameLine col
@@ -309,27 +309,27 @@ setEntryDP (L (EpAnn (EpaSpan (RealSrcSpan r _)) an cs) a) dp
 -- ---------------------------------------------------------------------
 
 getEntryDP :: LocatedAn t a -> DeltaPos
-getEntryDP (L (EpAnn (EpaDelta dp _) _ _) _) = dp
+getEntryDP (L (EpAnn (EpaDelta _ dp _) _ _) _) = dp
 getEntryDP _ = SameLine 1
 
 -- ---------------------------------------------------------------------
 
 addEpaLocationDelta :: LayoutStartCol -> RealSrcSpan -> EpaLocation -> EpaLocation
-addEpaLocationDelta _off _anc (EpaDelta d cs) = EpaDelta d cs
-addEpaLocationDelta _off _anc (EpaSpan (UnhelpfulSpan _)) = EpaDelta (SameLine 0) []
-addEpaLocationDelta  off  anc (EpaSpan (RealSrcSpan r _))
-  = EpaDelta (adjustDeltaForOffset off (ss2deltaEnd anc r)) []
+addEpaLocationDelta _off _anc (EpaDelta ss d cs) = EpaDelta ss d cs
+addEpaLocationDelta _off _anc (EpaSpan ss@(UnhelpfulSpan _)) = EpaDelta ss (SameLine 0) []
+addEpaLocationDelta  off  anc (EpaSpan ss@(RealSrcSpan r _))
+  = EpaDelta ss (adjustDeltaForOffset off (ss2deltaEnd anc r)) []
 
 -- Set the entry DP for an element coming after an existing keyword annotation
 setEntryDPFromAnchor :: LayoutStartCol -> EpaLocation -> LocatedA t -> LocatedA t
-setEntryDPFromAnchor _off (EpaDelta _ _) (L la a) = L la a
+setEntryDPFromAnchor _off (EpaDelta _ _ _) (L la a) = L la a
 setEntryDPFromAnchor _off (EpaSpan (UnhelpfulSpan _)) (L la a) = L la a
 setEntryDPFromAnchor  off (EpaSpan (RealSrcSpan anc _)) ll@(L la _) = setEntryDP ll dp'
   where
     dp' = case la of
       (EpAnn (EpaSpan (RealSrcSpan r' _)) _ _) -> adjustDeltaForOffset off (ss2deltaEnd anc r')
       (EpAnn (EpaSpan _) _ _)                  -> adjustDeltaForOffset off (SameLine 0)
-      (EpAnn (EpaDelta dp _) _ _)              -> adjustDeltaForOffset off dp
+      (EpAnn (EpaDelta _ dp _) _ _)            -> adjustDeltaForOffset off dp
 
 -- ---------------------------------------------------------------------
 
@@ -559,7 +559,7 @@ balanceComments' la1 la2 = do
 trailingCommentsDeltas :: RealSrcSpan -> [LEpaComment]
                -> [(Int, LEpaComment)]
 trailingCommentsDeltas _ [] = []
-trailingCommentsDeltas r (la@(L (EpaDelta dp _) _):las)
+trailingCommentsDeltas r (la@(L (EpaDelta _ dp _) _):las)
   = (getDeltaLine dp, la): trailingCommentsDeltas r las
 trailingCommentsDeltas r (la@(L l _):las)
   = deltaComment r la : trailingCommentsDeltas (anchor l) las
@@ -576,7 +576,7 @@ priorCommentsDeltas r cs = go r (reverse $ sortEpaComments cs)
   where
     go :: RealSrcSpan -> [LEpaComment] -> [(Int, LEpaComment)]
     go _   [] = []
-    go _   (la@(L l@(EpaDelta dp _) _):las) = (deltaLine dp, la) : go (anchor l) las
+    go _   (la@(L l@(EpaDelta _ dp _) _):las) = (deltaLine dp, la) : go (anchor l) las
     go rs' (la@(L l _):las) = deltaComment rs' la : go (anchor l) las
 
     deltaComment :: RealSrcSpan -> LEpaComment -> (Int, LEpaComment)
@@ -705,7 +705,7 @@ anchorEof (L l m@(HsModule (XModulePs an _lo _ _) _mn _exps _imps _decls)) = L l
 -- | Create a @SrcSpanAnn@ with a @MovedAnchor@ operation using the
 -- given @DeltaPos at .
 noAnnSrcSpanDP :: (NoAnn ann) => DeltaPos -> EpAnn ann
-noAnnSrcSpanDP dp = EpAnn (EpaDelta dp []) noAnn emptyComments
+noAnnSrcSpanDP dp = EpAnn (EpaDelta noSrcSpan dp []) noAnn emptyComments
 
 noAnnSrcSpanDP0 :: (NoAnn ann) => EpAnn ann
 noAnnSrcSpanDP0 = noAnnSrcSpanDP (SameLine 0)
@@ -717,13 +717,13 @@ noAnnSrcSpanDPn :: (NoAnn ann) => Int -> EpAnn ann
 noAnnSrcSpanDPn s = noAnnSrcSpanDP (SameLine s)
 
 d0 :: EpaLocation
-d0 = EpaDelta (SameLine 0) []
+d0 = EpaDelta noSrcSpan (SameLine 0) []
 
 d1 :: EpaLocation
-d1 = EpaDelta (SameLine 1) []
+d1 = EpaDelta noSrcSpan (SameLine 1) []
 
 dn :: Int -> EpaLocation
-dn n = EpaDelta (SameLine n) []
+dn n = EpaDelta noSrcSpan (SameLine n) []
 
 addComma :: SrcSpanAnnA -> SrcSpanAnnA
 addComma (EpAnn anc (AnnListItem as) cs)
@@ -888,8 +888,8 @@ instance HasDecls (LocatedA (HsExpr GhcPs)) where
                   off = case l of
                           (EpaSpan (RealSrcSpan r _)) -> LayoutStartCol $ snd $ ss2pos r
                           (EpaSpan (UnhelpfulSpan _)) -> LayoutStartCol 0
-                          (EpaDelta (SameLine _) _) -> LayoutStartCol 0
-                          (EpaDelta (DifferentLine _ c) _) -> LayoutStartCol c
+                          (EpaDelta _ (SameLine _) _) -> LayoutStartCol 0
+                          (EpaDelta _ (DifferentLine _ c) _) -> LayoutStartCol c
                   ex'' = setEntryDPFromAnchor off i ex
                   newDecls'' = case newDecls of
                     [] -> newDecls
@@ -1095,7 +1095,7 @@ oldWhereAnnotation (EpAnn anc an cs) ww _oldSpan = do
   -- TODO: when we set DP (0,0) for the HsValBinds EpEpaLocation, change the AnnList anchor to have the correct DP too
   let (AnnList ancl o c _r t) = an
   let w = case ww of
-        WithWhere -> [AddEpAnn AnnWhere (EpaDelta (SameLine 0) [])]
+        WithWhere -> [AddEpAnn AnnWhere (EpaDelta noSrcSpan (SameLine 0) [])]
         WithoutWhere -> []
   (anc', ancl') <- do
         case ww of
@@ -1108,10 +1108,10 @@ oldWhereAnnotation (EpAnn anc an cs) ww _oldSpan = do
 
 newWhereAnnotation :: (Monad m) => WithWhere -> TransformT m (EpAnn AnnList)
 newWhereAnnotation ww = do
-  let anc  = EpaDelta (DifferentLine 1 3) []
-  let anc2 = EpaDelta (DifferentLine 1 5) []
+  let anc  = EpaDelta noSrcSpan (DifferentLine 1 3) []
+  let anc2 = EpaDelta noSrcSpan (DifferentLine 1 5) []
   let w = case ww of
-        WithWhere -> [AddEpAnn AnnWhere (EpaDelta (SameLine 0) [])]
+        WithWhere -> [AddEpAnn AnnWhere (EpaDelta noSrcSpan (SameLine 0) [])]
         WithoutWhere -> []
   let an = EpAnn anc
                   (AnnList (Just anc2) Nothing Nothing w [])


=====================================
utils/check-exact/Utils.hs
=====================================
@@ -184,8 +184,8 @@ isPointSrcSpan ss = spanLength ss == 0
 -- `MovedAnchor` operation based on the original location, only if it
 -- does not already have one.
 commentOrigDelta :: LEpaComment -> LEpaComment
-commentOrigDelta (L (EpaSpan (RealSrcSpan la _)) (GHC.EpaComment t pp))
-  = (L (EpaDelta dp NoComments) (GHC.EpaComment t pp))
+commentOrigDelta (L (EpaSpan ss@(RealSrcSpan la _)) (GHC.EpaComment t pp))
+  = (L (EpaDelta ss dp NoComments) (GHC.EpaComment t pp))
                   `debug` ("commentOrigDelta: (la, pp, r,c, dp)=" ++ showAst (la, pp, r,c, dp))
   where
         (r,c) = ss2posEnd pp
@@ -330,10 +330,10 @@ sortEpaComments cs = sortBy cmp cs
 mkKWComment :: AnnKeywordId -> NoCommentsLocation -> Comment
 mkKWComment kw (EpaSpan (RealSrcSpan ss mb))
   = Comment (keywordToString kw) (EpaSpan (RealSrcSpan ss mb)) ss (Just kw)
-mkKWComment kw (EpaSpan (UnhelpfulSpan _))
-  = Comment (keywordToString kw) (EpaDelta (SameLine 0) NoComments) placeholderRealSpan (Just kw)
-mkKWComment kw (EpaDelta dp cs)
-  = Comment (keywordToString kw) (EpaDelta dp cs) placeholderRealSpan (Just kw)
+mkKWComment kw (EpaSpan ss@(UnhelpfulSpan _))
+  = Comment (keywordToString kw) (EpaDelta ss (SameLine 0) NoComments) placeholderRealSpan (Just kw)
+mkKWComment kw (EpaDelta ss dp cs)
+  = Comment (keywordToString kw) (EpaDelta ss dp cs) placeholderRealSpan (Just kw)
 
 -- | Detects a comment which originates from a specific keyword.
 isKWComment :: Comment -> Bool
@@ -434,11 +434,11 @@ To be absolutely sure, we make the delta versions use -ve values.
 
 hackSrcSpanToAnchor :: SrcSpan -> Anchor
 hackSrcSpanToAnchor (UnhelpfulSpan s) = error $ "hackSrcSpanToAnchor : UnhelpfulSpan:" ++ show s
-hackSrcSpanToAnchor (RealSrcSpan r mb)
+hackSrcSpanToAnchor ss@(RealSrcSpan r mb)
   = case mb of
     (Strict.Just (BufSpan (BufPos s) (BufPos e))) ->
       if s <= 0 && e <= 0
-      then EpaDelta (deltaPos (-s) (-e)) []
+      then EpaDelta ss (deltaPos (-s) (-e)) []
         `debug` ("hackSrcSpanToAnchor: (r,s,e)=" ++ showAst (r,s,e) )
       else EpaSpan (RealSrcSpan r mb)
     _ -> EpaSpan (RealSrcSpan r mb)


=====================================
utils/haddock/haddock-api/src/Haddock/Types.hs
=====================================
@@ -1046,7 +1046,7 @@ instance NFData NoComments where
 
 instance NFData a => NFData (EpaLocation' a) where
   rnf (EpaSpan ss) = rnf ss
-  rnf (EpaDelta dp lc) = dp `seq` lc `deepseq` ()
+  rnf (EpaDelta ss dp lc) = ss `seq` dp `seq` lc `deepseq` ()
 
 instance NFData EpAnnComments where
   rnf (EpaComments cs) = rnf cs



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/99612d1871995bf34b8ee53d0afc52aa15eabd1b

-- 
This project does not include diff previews in email notifications.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/99612d1871995bf34b8ee53d0afc52aa15eabd1b
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240705/a3c82b98/attachment-0001.html>


More information about the ghc-commits mailing list