From 907f362ab59cc03c81f6fbcb41657dad6dd5b15d Mon Sep 17 00:00:00 2001 From: Evan Rutledge Borden Date: Sun, 23 Jun 2019 12:06:06 -0500 Subject: [PATCH 1/5] Add support for OverloadedLabels `OverloadedLabels` is a simple enough extension to parse and format. It is becoming more common with use of `generic-lens`. Since it can be treated as a `HsVar` its implementation only requires using `docLit`, along with some marshalling for dealing with `FastString`. --- src-literatetests/14-extensions.blt | 10 ++++++++++ .../Haskell/Brittany/Internal/Layouters/Expr.hs | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src-literatetests/14-extensions.blt b/src-literatetests/14-extensions.blt index e403568..12facda 100644 --- a/src-literatetests/14-extensions.blt +++ b/src-literatetests/14-extensions.blt @@ -130,3 +130,13 @@ func = do hello |] pure True + +############################################################################### +## OverloadedLabels +#test bare label +{-# LANGUAGE OverloadedLabels #-} +foo = #bar + +#test applied and composed label +{-# LANGUAGE OverloadedLabels #-} +foo = #bar . #baz $ fmap #foo xs diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 74a87af..8a499f2 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -55,9 +55,9 @@ layoutExpr lexpr@(L _ expr) = do HsRecFld{} -> do -- TODO briDocByExactInlineOnly "HsRecFld" lexpr - HsOverLabel{} -> do - -- TODO - briDocByExactInlineOnly "HsOverLabel{}" lexpr + HsOverLabel NoExt _reboundFromLabel name -> + let label = FastString.unpackFS name + in docLit . Text.pack $ '#' : label HsIPVar{} -> do -- TODO briDocByExactInlineOnly "HsOverLabel{}" lexpr -- 2.30.2 From d071534cad3484f2864e9b3925aa434a3cd968a5 Mon Sep 17 00:00:00 2001 From: Evan Rutledge Borden Date: Sun, 23 Jun 2019 13:32:21 -0500 Subject: [PATCH 2/5] Remove NoExt --- src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 8a499f2..0d4c63d 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -55,7 +55,7 @@ layoutExpr lexpr@(L _ expr) = do HsRecFld{} -> do -- TODO briDocByExactInlineOnly "HsRecFld" lexpr - HsOverLabel NoExt _reboundFromLabel name -> + HsOverLabel _ext _reboundFromLabel name -> let label = FastString.unpackFS name in docLit . Text.pack $ '#' : label HsIPVar{} -> do -- 2.30.2 From f6dae9ed0fda99a0f3ea45111274c4eeb7ebc39a Mon Sep 17 00:00:00 2001 From: Evan Rutledge Borden Date: Sun, 23 Jun 2019 13:47:14 -0500 Subject: [PATCH 3/5] Add CPP for pre 8.6 HsOverLabel --- src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 0d4c63d..2d9ec67 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -55,7 +55,11 @@ layoutExpr lexpr@(L _ expr) = do HsRecFld{} -> do -- TODO briDocByExactInlineOnly "HsRecFld" lexpr +#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */ HsOverLabel _ext _reboundFromLabel name -> +#else + HsOverLabel _reboundFromLabel name -> +#endif let label = FastString.unpackFS name in docLit . Text.pack $ '#' : label HsIPVar{} -> do -- 2.30.2 From 1b02393a9df1702cb9c6c9267943a2f2bb99f7d6 Mon Sep 17 00:00:00 2001 From: Evan Rutledge Borden Date: Sun, 23 Jun 2019 14:27:58 -0500 Subject: [PATCH 4/5] Support version 8.0 of OverloadedLabels --- src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 2d9ec67..c1c0e5a 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -57,8 +57,10 @@ layoutExpr lexpr@(L _ expr) = do briDocByExactInlineOnly "HsRecFld" lexpr #if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */ HsOverLabel _ext _reboundFromLabel name -> -#else +#elif MIN_VERSION_ghc(8,2,0) /* ghc-8.2 */ HsOverLabel _reboundFromLabel name -> +#else + HsOverLabel name -> #endif let label = FastString.unpackFS name in docLit . Text.pack $ '#' : label -- 2.30.2 From 1608163b278361361c07a180a91d5e7fec0d8325 Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Sun, 23 Jun 2019 23:02:41 +0200 Subject: [PATCH 5/5] Fixup CPP comments --- src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index c1c0e5a..d08824b 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -57,9 +57,9 @@ layoutExpr lexpr@(L _ expr) = do briDocByExactInlineOnly "HsRecFld" lexpr #if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */ HsOverLabel _ext _reboundFromLabel name -> -#elif MIN_VERSION_ghc(8,2,0) /* ghc-8.2 */ +#elif MIN_VERSION_ghc(8,2,0) /* ghc-8.2 8.4 */ HsOverLabel _reboundFromLabel name -> -#else +#else /* ghc-8.0 */ HsOverLabel name -> #endif let label = FastString.unpackFS name -- 2.30.2