@@ -13,15 +13,16 @@ module Development.IDE.GHC.ExactPrint.Annotation
1313 , withTrailingComma
1414 , modifyAnns
1515 , addParens
16+ , parenthesizeName
1617 ) where
1718
1819import Data.Bifunctor (first )
1920import Development.IDE.GHC.Compat
2021import Development.IDE.GHC.Orphans ()
22+ import GHC (LocatedN )
2123#if MIN_VERSION_ghc(9,11,0)
2224import GHC (DeltaPos (.. ), EpAnn (.. ),
23- EpToken (.. ),
24- EpaLocation ,
25+ EpToken (.. ), EpaLocation ,
2526 EpaLocation' (.. ),
2627 NameAdornment (.. ),
2728 SrcSpanAnnA , TrailingAnn (.. ))
@@ -33,11 +34,15 @@ import GHC (DeltaPos (..), EpAnn (..),
3334 NameAdornment (.. ),
3435 SrcSpanAnnA , TrailingAnn (.. ))
3536#else
36- import GHC (DeltaPos (.. ), EpAnn (.. ),
37+ import GHC (Anchor (.. ),
38+ AnchorOperation (.. ),
39+ DeltaPos (.. ), EpAnn (.. ),
3740 EpaLocation (.. ),
3841 NameAdornment (NameParens ),
3942 SrcSpanAnn' (.. ), SrcSpanAnnA ,
40- TrailingAnn (.. ))
43+ TrailingAnn (.. ),
44+ emptyComments , realSrcSpan )
45+ import GHC.Types.SrcLoc (generatedSrcSpan )
4146#endif
4247import Language.Haskell.GHC.ExactPrint (addComma )
4348
@@ -112,3 +117,21 @@ addParens True NameAnnTrailing{..} =
112117 NameAnn {nann_adornment = NameParens , nann_open= epl 0 , nann_close= epl 0 , nann_name = epl 0 , .. }
113118#endif
114119addParens _ it = it
120+
121+ -- | Parenthesize an operator name for an export/import item, e.g. @(<|)@.
122+ parenthesizeName :: LocatedN RdrName -> LocatedN RdrName
123+ #if MIN_VERSION_ghc(9,9,0)
124+ parenthesizeName ln = modifyAnns ln (addParens True )
125+ #else
126+ -- A freshly built name carries EpAnnNotUsed pre-9.9, giving 'addParens' no
127+ -- NameAnn to act on, so install a concrete annotation first.
128+ parenthesizeName (L (SrcSpanAnn ann l) rdr) =
129+ L (SrcSpanAnn (EpAnn anc (addParens True nameAnn) cs) l) rdr
130+ where
131+ (anc, nameAnn, cs) = case ann of
132+ EpAnn a n c -> (a, n, c)
133+ EpAnnNotUsed -> (genAnchor0, NameAnnTrailing [] , emptyComments)
134+
135+ genAnchor0 :: Anchor
136+ genAnchor0 = Anchor (realSrcSpan generatedSrcSpan) (MovedAnchor (SameLine 0 ))
137+ #endif
0 commit comments