[Git][ghc/ghc][master] EPA Some tweaks to annotations

Marge Bot (@marge-bot) gitlab at gitlab.haskell.org
Mon Oct 23 13:10:08 UTC 2023



Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC


Commits:
de78b32a by Alan Zimmerman at 2023-10-23T09:09:41-04:00
EPA Some tweaks to annotations

- Fix span for GRHS
- Move TrailingAnns from last match to FunBind
- Fix GADT 'where' clause span
- Capture full range for a CaseAlt Match

- - - - -


6 changed files:

- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- testsuite/tests/parser/should_compile/DumpSemis.stderr
- testsuite/tests/parser/should_compile/T15323.stderr
- testsuite/tests/printer/Test20297.stdout


Changes:

=====================================
compiler/GHC/Parser.y
=====================================
@@ -2269,7 +2269,7 @@ atype :: { LHsType GhcPs }
         | PREFIX_TILDE atype             {% acsA (\cs -> sLL $1 $> (mkBangTy (EpAnn (glR $1) [mj AnnTilde $1] cs) SrcLazy $2)) }
         | PREFIX_BANG  atype             {% acsA (\cs -> sLL $1 $> (mkBangTy (EpAnn (glR $1) [mj AnnBang $1] cs) SrcStrict $2)) }
 
-        | '{' fielddecls '}'             {% do { decls <- acsA (\cs -> (sLL $1 $> $ HsRecTy (EpAnn (glR $1) (AnnList (Just $ listAsAnchor $2) (Just $ moc $1) (Just $ mcc $3) [] []) cs) $2))
+        | '{' fielddecls '}'             {% do { decls <- acsA (\cs -> (sLL $1 $> $ HsRecTy (EpAnn (glR $1) (AnnList (listAsAnchorM $2) (Just $ moc $1) (Just $ mcc $3) [] []) cs) $2))
                                                ; checkRecordSyntax decls }}
                                                         -- Constructor sigs only
         | '(' ')'                        {% acsA (\cs -> sLL $1 $> $ HsTupleTy (EpAnn (glR $1) (AnnParen AnnParens (glAA $1) (glAA $2)) cs)
@@ -2407,7 +2407,7 @@ gadt_constrlist :: { Located ([AddEpAnn]
                           ,[LConDecl GhcPs]) } -- Returned in order
 
         : 'where' '{'        gadt_constrs '}'    {% checkEmptyGADTs $
-                                                      L (comb2 $1 $3)
+                                                      L (comb2 $1 $4)
                                                         ([mj AnnWhere $1
                                                          ,moc $2
                                                          ,mcc $4]
@@ -2588,8 +2588,9 @@ rhs     :: { Located (GRHSs GhcPs (LHsExpr GhcPs)) }
         : '=' exp wherebinds    {% runPV (unECP $2) >>= \ $2 ->
                                   do { let L l (bs, csw) = adaptWhereBinds $3
                                      ; let loc = (comb3 $1 $2 (L l bs))
+                                     ; let locg = (comb2 $1 $2)
                                      ; acs (\cs ->
-                                       sL loc (GRHSs csw (unguardedRHS (EpAnn (anc $ rs loc) (GrhsAnn Nothing (mj AnnEqual $1)) cs) loc $2)
+                                       sL loc (GRHSs csw (unguardedRHS (EpAnn (anc $ rs locg) (GrhsAnn Nothing (mj AnnEqual $1)) cs) locg $2)
                                                       bs)) } }
         | gdrhs wherebinds      {% do { let {L l (bs, csw) = adaptWhereBinds $2}
                                       ; acs (\cs -> sL (comb2 $1 (L l bs))
@@ -3324,7 +3325,7 @@ alts1(PATS) :: { forall b. DisambECP b => PV (Located ([AddEpAnn],[LMatch GhcPs
 alt(PATS) :: { forall b. DisambECP b => PV (LMatch GhcPs (LocatedA b)) }
         : PATS alt_rhs { $2 >>= \ $2 ->
                          acsA (\cs -> sLLAsl $1 $>
-                                         (Match { m_ext = EpAnn (listAsAnchor $1) [] cs
+                                         (Match { m_ext = EpAnn (listAsAnchor $1 $>) [] cs
                                                 , m_ctxt = CaseAlt -- for \case and \cases, this will be changed during post-processing
                                                 , m_pats = $1
                                                 , m_grhss = unLoc $2 }))}
@@ -3336,7 +3337,7 @@ alt_rhs :: { forall b. DisambECP b => PV (Located (GRHSs GhcPs (LocatedA b))) }
 
 ralt :: { forall b. DisambECP b => PV (Located [LGRHS GhcPs (LocatedA b)]) }
         : '->' exp            { unECP $2 >>= \ $2 ->
-                                acs (\cs -> sLL $1 $> (unguardedRHS (EpAnn (glR $1) (GrhsAnn Nothing (mu AnnRarrow $1)) cs) (comb2 $1 $2) $2)) }
+                                acs (\cs -> sLL $1 $> (unguardedRHS (EpAnn (spanAsAnchor $ comb2 $1 (reLoc $2)) (GrhsAnn Nothing (mu AnnRarrow $1)) cs) (comb2 $1 (reLoc $2)) $2)) }
         | gdpats              { $1 >>= \gdpats ->
                                 return $ sL1 gdpats (reverse (unLoc gdpats)) }
 
@@ -4465,9 +4466,16 @@ hsDoAnn :: Located a -> LocatedAn t b -> AnnKeywordId -> AnnList
 hsDoAnn (L l _) (L ll _) kw
   = AnnList (Just $ spanAsAnchor (locA ll)) Nothing Nothing [AddEpAnn kw (srcSpan2e l)] []
 
-listAsAnchor :: [LocatedAn t a] -> Anchor
-listAsAnchor [] = spanAsAnchor noSrcSpan
-listAsAnchor (L l _:_) = spanAsAnchor (locA l)
+listAsAnchor :: [LocatedAn t a] -> Located b -> Anchor
+listAsAnchor [] (L l _) = spanAsAnchor l
+listAsAnchor (h:_) s = spanAsAnchor (comb2 (reLoc h) s)
+
+listAsAnchorM :: [LocatedAn t a] -> Maybe Anchor
+listAsAnchorM [] = Nothing
+listAsAnchorM (L l _:_) =
+  case locA l of
+    RealSrcSpan ll _ -> Just $ realSpanAsAnchor ll
+    _                -> Nothing
 
 hsTok :: Located Token -> LHsToken tok GhcPs
 hsTok (L l _) = L (mkTokenLocation l) HsTok
@@ -4528,7 +4536,6 @@ addTrailingAnnL (L (SrcSpanAnn anns l) a) ta = do
 -- Mostly use to add AnnComma, special case it to NOP if adding a zero-width annotation
 addTrailingCommaN :: MonadP m => LocatedN a -> SrcSpan -> m (LocatedN a)
 addTrailingCommaN (L (SrcSpanAnn anns l) a) span = do
-  -- cs <- getCommentsFor l
   let cs = emptyComments
   -- AZ:TODO: generalise updating comments into an annotation
   let anns' = if isZeroWidthSpan span


=====================================
compiler/GHC/Parser/Annotation.hs
=====================================
@@ -19,8 +19,8 @@ module GHC.Parser.Annotation (
   DeltaPos(..), deltaPos, getDeltaLine,
 
   EpAnn(..), Anchor(..), AnchorOperation(..),
-  spanAsAnchor, realSpanAsAnchor,
   NoAnn(..),
+  spanAsAnchor, realSpanAsAnchor, spanFromAnchor,
 
   -- ** Comments in Annotations
 
@@ -549,6 +549,9 @@ spanAsAnchor s  = Anchor (realSrcSpan s) UnchangedAnchor
 realSpanAsAnchor :: RealSrcSpan -> Anchor
 realSpanAsAnchor s  = Anchor s UnchangedAnchor
 
+spanFromAnchor :: Anchor -> SrcSpan
+spanFromAnchor a = RealSrcSpan (anchor a) Strict.Nothing
+
 -- ---------------------------------------------------------------------
 
 -- | When we are parsing we add comments that belong a particular AST


=====================================
compiler/GHC/Parser/PostProcess.hs
=====================================
@@ -831,11 +831,18 @@ mkGadtDecl loc names dcol ty = do
 
   let an = EpAnn (spanAsAnchor loc) annsa (cs Semi.<> csa)
 
+  let bndrs_loc = case outer_bndrs of
+        HsOuterImplicit{} -> getLoc ty
+        HsOuterExplicit an _ ->
+          case an of
+            EpAnnNotUsed -> getLoc ty
+            an' -> SrcSpanAnn (EpAnn (entry an') noAnn emptyComments) (spanFromAnchor (entry an'))
+
   pure $ L l ConDeclGADT
                      { con_g_ext  = an
                      , con_names  = names
                      , con_dcolon = dcol
-                     , con_bndrs  = L (getLoc ty) outer_bndrs
+                     , con_bndrs  = L bndrs_loc outer_bndrs
                      , con_mb_cxt = mcxt
                      , con_g_args = args
                      , con_res_ty = res_ty


=====================================
testsuite/tests/parser/should_compile/DumpSemis.stderr
=====================================
@@ -1829,7 +1829,7 @@
                      (Match
                       (EpAnn
                        (Anchor
-                        { DumpSemis.hs:39:6 }
+                        { DumpSemis.hs:39:6-13 }
                         (UnchangedAnchor))
                        []
                        (EpaComments
@@ -1862,7 +1862,7 @@
                          (GRHS
                           (EpAnn
                            (Anchor
-                            { DumpSemis.hs:39:8-9 }
+                            { DumpSemis.hs:39:8-13 }
                             (UnchangedAnchor))
                            (GrhsAnn
                             (Nothing)
@@ -1898,7 +1898,7 @@
                      (Match
                       (EpAnn
                        (Anchor
-                        { DumpSemis.hs:40:6 }
+                        { DumpSemis.hs:40:6-13 }
                         (UnchangedAnchor))
                        []
                        (EpaComments
@@ -1931,7 +1931,7 @@
                          (GRHS
                           (EpAnn
                            (Anchor
-                            { DumpSemis.hs:40:8-9 }
+                            { DumpSemis.hs:40:8-13 }
                             (UnchangedAnchor))
                            (GrhsAnn
                             (Nothing)
@@ -1969,7 +1969,7 @@
                      (Match
                       (EpAnn
                        (Anchor
-                        { DumpSemis.hs:41:6 }
+                        { DumpSemis.hs:41:6-13 }
                         (UnchangedAnchor))
                        []
                        (EpaComments
@@ -2002,7 +2002,7 @@
                          (GRHS
                           (EpAnn
                            (Anchor
-                            { DumpSemis.hs:41:8-9 }
+                            { DumpSemis.hs:41:8-13 }
                             (UnchangedAnchor))
                            (GrhsAnn
                             (Nothing)
@@ -2042,7 +2042,7 @@
                      (Match
                       (EpAnn
                        (Anchor
-                        { DumpSemis.hs:42:6 }
+                        { DumpSemis.hs:42:6-13 }
                         (UnchangedAnchor))
                        []
                        (EpaComments
@@ -2075,7 +2075,7 @@
                          (GRHS
                           (EpAnn
                            (Anchor
-                            { DumpSemis.hs:42:8-9 }
+                            { DumpSemis.hs:42:8-13 }
                             (UnchangedAnchor))
                            (GrhsAnn
                             (Nothing)
@@ -2100,3 +2100,5 @@
                         (NoExtField)))))]))))))]
             (EmptyLocalBinds
              (NoExtField)))))])))))]))
+
+


=====================================
testsuite/tests/parser/should_compile/T15323.stderr
=====================================
@@ -100,7 +100,14 @@
              (EpaSpan { T15323.hs:6:17-18 }))
             (HsNormalTok))
            (L
-            (SrcSpanAnn (EpAnnNotUsed) { T15323.hs:6:20-54 })
+            (SrcSpanAnn (EpAnn
+                         (Anchor
+                          { T15323.hs:6:20-25 }
+                          (UnchangedAnchor))
+                         (AnnListItem
+                          [])
+                         (EpaComments
+                          [])) { T15323.hs:6:20-25 })
             (HsOuterExplicit
              (EpAnn
               (Anchor


=====================================
testsuite/tests/printer/Test20297.stdout
=====================================
@@ -82,11 +82,11 @@
             [(L
               (SrcSpanAnn
                (EpAnnNotUsed)
-               { Test20297.hs:(5,5)-(7,7) })
+               { Test20297.hs:5:5-7 })
               (GRHS
                (EpAnn
                 (Anchor
-                 { Test20297.hs:(5,5)-(7,7) }
+                 { Test20297.hs:5:5-7 }
                  (UnchangedAnchor))
                 (GrhsAnn
                  (Nothing)
@@ -182,11 +182,11 @@
             [(L
               (SrcSpanAnn
                (EpAnnNotUsed)
-               { Test20297.hs:(9,5)-(11,26) })
+               { Test20297.hs:9:5-7 })
               (GRHS
                (EpAnn
                 (Anchor
-                 { Test20297.hs:(9,5)-(11,26) }
+                 { Test20297.hs:9:5-7 }
                  (UnchangedAnchor))
                 (GrhsAnn
                  (Nothing)
@@ -422,11 +422,11 @@
             [(L
               (SrcSpanAnn
                (EpAnnNotUsed)
-               { Test20297.ppr.hs:(4,3)-(5,7) })
+               { Test20297.ppr.hs:4:3-5 })
               (GRHS
                (EpAnn
                 (Anchor
-                 { Test20297.ppr.hs:(4,3)-(5,7) }
+                 { Test20297.ppr.hs:4:3-5 }
                  (UnchangedAnchor))
                 (GrhsAnn
                  (Nothing)
@@ -508,11 +508,11 @@
             [(L
               (SrcSpanAnn
                (EpAnnNotUsed)
-               { Test20297.ppr.hs:(7,3)-(9,24) })
+               { Test20297.ppr.hs:7:3-5 })
               (GRHS
                (EpAnn
                 (Anchor
-                 { Test20297.ppr.hs:(7,3)-(9,24) }
+                 { Test20297.ppr.hs:7:3-5 }
                  (UnchangedAnchor))
                 (GrhsAnn
                  (Nothing)
@@ -655,4 +655,3 @@
                         (EmptyLocalBinds
                          (NoExtField)))))]))))]}
               [])))))])))))]))
-



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

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/de78b32a611b764a077ea70b02068f7d9cfa535a
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/20231023/d41de28e/attachment-0001.html>


More information about the ghc-commits mailing list