Drop support for GHC 8.4
parent
259c949211
commit
e36d9bc465
|
@ -23,9 +23,6 @@ jobs:
|
|||
- os: ubuntu-18.04
|
||||
ghc: 8.6.5
|
||||
cabal: 3.2.0.0
|
||||
- os: ubuntu-18.04
|
||||
ghc: 8.4.4
|
||||
cabal: 3.2.0.0
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
|
|
@ -45,9 +45,6 @@ matrix:
|
|||
|
||||
##### CABAL #####
|
||||
|
||||
- env: BUILD=cabal GHCVER=8.4.4 CABALVER=1.24 HAPPYVER=1.19.5 ALEXVER=3.1.7
|
||||
compiler: ": #cabal 8.4.4"
|
||||
addons: {apt: {packages: [cabal-install-1.24,ghc-8.4.4,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
|
||||
- env: BUILD=cabal GHCVER=8.6.5 CABALVER=1.24 HAPPYVER=1.19.5 ALEXVER=3.1.7
|
||||
compiler: ": #cabal 8.6.5"
|
||||
addons: {apt: {packages: [cabal-install-1.24,ghc-8.6.5,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
|
||||
|
@ -72,9 +69,6 @@ matrix:
|
|||
compiler: ": #stack default"
|
||||
addons: {apt: {packages: [libgmp-dev]}}
|
||||
|
||||
- env: BUILD=stack ARGS="--stack-yaml stack-8.4.3.yaml"
|
||||
compiler: ": #stack 8.4.3"
|
||||
addons: {apt: {packages: [libgmp-dev]}}
|
||||
- env: BUILD=stack ARGS="--stack-yaml stack-8.6.5.yaml"
|
||||
compiler: ": #stack 8.6.5"
|
||||
addons: {apt: {packages: [libgmp-dev]}}
|
||||
|
|
7
Makefile
7
Makefile
|
@ -5,14 +5,9 @@ test:
|
|||
|
||||
.PHONY: test-all
|
||||
test-all:
|
||||
$(MAKE) test test-8.6.5 test-8.4.3
|
||||
$(MAKE) test test-8.6.5
|
||||
|
||||
.PHONY: test-8.6.5
|
||||
test-8.6.5:
|
||||
echo "test 8.6.5"
|
||||
stack test --stack-yaml stack-8.6.5.yaml --work-dir .stack-work-8.6.5
|
||||
|
||||
.PHONY: test-8.4.3
|
||||
test-8.4.3:
|
||||
echo "test 8.4.3"
|
||||
stack test --stack-yaml stack-8.4.3.yaml --work-dir .stack-work-8.4.3
|
||||
|
|
|
@ -48,7 +48,7 @@ log the size of the input, but _not_ the full input/output of requests.)
|
|||
|
||||
# Other usage notes
|
||||
|
||||
- Supports GHC versions `8.4`, `8.6`, `8.8`.
|
||||
- Supports GHC versions `8.6`, `8.8`.
|
||||
- included in stackage with lts>=10.0 (or nightlies dating to >=2017-11-15)
|
||||
- config (file) documentation is lacking.
|
||||
- some config values can not be configured via commandline yet.
|
||||
|
|
|
@ -91,8 +91,8 @@ library {
|
|||
-fno-warn-redundant-constraints
|
||||
}
|
||||
build-depends:
|
||||
{ base >=4.11 && <4.15
|
||||
, ghc >=8.4.1 && <8.11
|
||||
{ base >=4.12 && <4.15
|
||||
, ghc >=8.6.1 && <8.11
|
||||
, ghc-paths >=0.1.0.9 && <0.2
|
||||
, ghc-exactprint >=0.5.8 && <0.6.4
|
||||
, transformers >=0.5.2.0 && <0.6
|
||||
|
@ -118,7 +118,7 @@ library {
|
|||
, semigroups >=0.18.2 && <0.20
|
||||
, cmdargs >=0.10.14 && <0.11
|
||||
, czipwith >=1.0.1.0 && <1.1
|
||||
, ghc-boot-th >=8.4.1 && <8.11
|
||||
, ghc-boot-th >=8.6.1 && <8.11
|
||||
, filepath >=1.4.1.0 && <1.5
|
||||
, random >= 1.1 && <1.2
|
||||
}
|
||||
|
|
|
@ -518,17 +518,10 @@ ppModule lmod@(L _loc _m@(HsModule _name _exports _ decls _ _)) = do
|
|||
_ -> return ()
|
||||
|
||||
getDeclBindingNames :: LHsDecl GhcPs -> [String]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
getDeclBindingNames (L _ decl) = case decl of
|
||||
SigD _ (TypeSig _ ns _) -> ns <&> \(L _ n) -> Text.unpack (rdrNameToText n)
|
||||
ValD _ (FunBind _ (L _ n) _ _ _) -> [Text.unpack $ rdrNameToText n]
|
||||
_ -> []
|
||||
#else
|
||||
getDeclBindingNames (L _ decl) = case decl of
|
||||
SigD (TypeSig ns _) -> ns <&> \(L _ n) -> Text.unpack (rdrNameToText n)
|
||||
ValD (FunBind (L _ n) _ _ _ _) -> [Text.unpack $ rdrNameToText n]
|
||||
_ -> []
|
||||
#endif
|
||||
|
||||
|
||||
-- Prints the information associated with the module annotation
|
||||
|
@ -586,26 +579,15 @@ ppPreamble lmod@(L loc m@(HsModule _ _ _ _ _ _)) = do
|
|||
|
||||
_sigHead :: Sig GhcPs -> String
|
||||
_sigHead = \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
TypeSig _ names _ ->
|
||||
#else
|
||||
TypeSig names _ ->
|
||||
#endif
|
||||
"TypeSig " ++ intercalate "," (Text.unpack . lrdrNameToText <$> names)
|
||||
_ -> "unknown sig"
|
||||
|
||||
_bindHead :: HsBind GhcPs -> String
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
_bindHead = \case
|
||||
FunBind _ fId _ _ [] -> "FunBind " ++ (Text.unpack $ lrdrNameToText $ fId)
|
||||
PatBind _ _pat _ ([], []) -> "PatBind smth"
|
||||
_ -> "unknown bind"
|
||||
#else
|
||||
_bindHead = \case
|
||||
FunBind fId _ _ _ [] -> "FunBind " ++ (Text.unpack $ lrdrNameToText $ fId)
|
||||
PatBind _pat _ _ _ ([], []) -> "PatBind smth"
|
||||
_ -> "unknown bind"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -212,17 +212,9 @@ commentAnnFixTransform modul = SYB.everything (>>) genF modul
|
|||
genF = (\_ -> return ()) `SYB.extQ` exprF
|
||||
exprF :: Located (HsExpr GhcPs) -> ExactPrint.Transform ()
|
||||
exprF lexpr@(L _ expr) = case expr of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
RecordCon _ _ (HsRecFields fs@(_:_) Nothing) ->
|
||||
#else
|
||||
RecordCon _ _ _ (HsRecFields fs@(_:_) Nothing) ->
|
||||
#endif
|
||||
moveTrailingComments lexpr (List.last fs)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
RecordUpd _ _e fs@(_:_) ->
|
||||
#else
|
||||
RecordUpd _e fs@(_:_) _cons _ _ _ ->
|
||||
#endif
|
||||
moveTrailingComments lexpr (List.last fs)
|
||||
_ -> return ()
|
||||
|
||||
|
|
|
@ -44,20 +44,11 @@ layoutDataDecl
|
|||
-> LHsQTyVars GhcPs
|
||||
-> HsDataDefn GhcPs
|
||||
-> ToBriDocM BriDocNumbered
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
layoutDataDecl _ _ (XLHsQTyVars ext) _ = absurdExt ext
|
||||
layoutDataDecl ltycl name (HsQTvs _ bndrs) defn = case defn of
|
||||
#else
|
||||
layoutDataDecl ltycl name (HsQTvs _ bndrs _) defn = case defn of
|
||||
#endif
|
||||
-- newtype MyType a b = MyType ..
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsDataDefn _ext NewType (L _ []) _ctype Nothing [cons] mDerivs -> case cons of
|
||||
(L _ (ConDeclH98 _ext consName (L _ False) _qvars (Just (L _ [])) details _conDoc)) ->
|
||||
#else
|
||||
HsDataDefn NewType (L _ []) _ctype Nothing [cons] mDerivs -> case cons of
|
||||
(L _ (ConDeclH98 consName Nothing (Just (L _ [])) details _conDoc)) ->
|
||||
#endif
|
||||
docWrapNode ltycl $ do
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
consNameStr <- lrdrNameToTextAnn consName
|
||||
|
@ -82,11 +73,7 @@ layoutDataDecl ltycl name (HsQTvs _ bndrs _) defn = case defn of
|
|||
|
||||
-- data MyData a b
|
||||
-- (zero constructors)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsDataDefn _ext DataType (L _ lhsContext) _ctype Nothing [] mDerivs ->
|
||||
#else
|
||||
HsDataDefn DataType (L _ lhsContext) _ctype Nothing [] mDerivs ->
|
||||
#endif
|
||||
docWrapNode ltycl $ do
|
||||
lhsContextDoc <- docSharedWrapper createContextDoc lhsContext
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
|
@ -100,17 +87,9 @@ layoutDataDecl ltycl name (HsQTvs _ bndrs _) defn = case defn of
|
|||
|
||||
-- data MyData = MyData ..
|
||||
-- data MyData = MyData { .. }
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsDataDefn _ext DataType (L _ lhsContext) _ctype Nothing [cons] mDerivs ->
|
||||
#else
|
||||
HsDataDefn DataType (L _ lhsContext) _ctype Nothing [cons] mDerivs ->
|
||||
#endif
|
||||
case cons of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
(L _ (ConDeclH98 _ext consName (L _ _hasExt) qvars mRhsContext details _conDoc)) ->
|
||||
#else
|
||||
(L _ (ConDeclH98 consName (Just (HsQTvs _ qvars _)) mRhsContext details _conDoc)) ->
|
||||
#endif
|
||||
docWrapNode ltycl $ do
|
||||
lhsContextDoc <- docSharedWrapper createContextDoc lhsContext
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
|
@ -266,18 +245,11 @@ createContextDoc (t1 : tR) = do
|
|||
createBndrDoc :: [LHsTyVarBndr GhcPs] -> ToBriDocM BriDocNumbered
|
||||
createBndrDoc bs = do
|
||||
tyVarDocs <- bs `forM` \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
(L _ (UserTyVar _ext vname)) -> return $ (lrdrNameToText vname, Nothing)
|
||||
(L _ (KindedTyVar _ext lrdrName kind)) -> do
|
||||
#else
|
||||
(L _ (UserTyVar vname)) -> return $ (lrdrNameToText vname, Nothing)
|
||||
(L _ (KindedTyVar lrdrName kind)) -> do
|
||||
#endif
|
||||
d <- docSharedWrapper layoutType kind
|
||||
return $ (lrdrNameToText lrdrName, Just $ d)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
(L _ (XTyVarBndr ext)) -> absurdExt ext
|
||||
#endif
|
||||
docSeq
|
||||
$ List.intersperse docSeparator
|
||||
$ tyVarDocs
|
||||
|
@ -307,12 +279,8 @@ createDerivingPar derivs mainDoc = do
|
|||
<$> types
|
||||
|
||||
derivingClauseDoc :: LHsDerivingClause GhcPs -> ToBriDocM BriDocNumbered
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
derivingClauseDoc (L _ (XHsDerivingClause ext)) = absurdExt ext
|
||||
derivingClauseDoc (L _ (HsDerivingClause _ext mStrategy types)) = case types of
|
||||
#else
|
||||
derivingClauseDoc (L _ (HsDerivingClause mStrategy types)) = case types of
|
||||
#endif
|
||||
(L _ []) -> docSeq []
|
||||
(L _ ts) ->
|
||||
let
|
||||
|
@ -330,12 +298,8 @@ derivingClauseDoc (L _ (HsDerivingClause mStrategy types)) = case types of
|
|||
$ docSeq
|
||||
$ List.intersperse docCommaSep
|
||||
$ ts <&> \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsIB _ t -> layoutType t
|
||||
XHsImplicitBndrs x -> absurdExt x
|
||||
#else
|
||||
HsIB _ t _ -> layoutType t
|
||||
#endif
|
||||
, whenMoreThan1Type ")"
|
||||
, rhsStrategy
|
||||
]
|
||||
|
@ -344,7 +308,6 @@ derivingClauseDoc (L _ (HsDerivingClause mStrategy types)) = case types of
|
|||
(L _ StockStrategy ) -> (docLitS " stock", docEmpty)
|
||||
(L _ AnyclassStrategy ) -> (docLitS " anyclass", docEmpty)
|
||||
(L _ NewtypeStrategy ) -> (docLitS " newtype", docEmpty)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
lVia@(L _ (ViaStrategy viaTypes) ) ->
|
||||
( docEmpty
|
||||
, case viaTypes of
|
||||
|
@ -355,7 +318,6 @@ derivingClauseDoc (L _ (HsDerivingClause mStrategy types)) = case types of
|
|||
]
|
||||
XHsImplicitBndrs ext -> absurdExt ext
|
||||
)
|
||||
#endif
|
||||
|
||||
docDeriving :: ToBriDocM BriDocNumbered
|
||||
docDeriving = docLitS "deriving"
|
||||
|
@ -473,12 +435,8 @@ createDetailsDoc consNameStr details = case details of
|
|||
:: [LConDeclField GhcPs]
|
||||
-> [(ToBriDocM BriDocNumbered, ToBriDocM BriDocNumbered)]
|
||||
mkFieldDocs = fmap $ \lField -> case lField of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
L _ (ConDeclField _ext names t _) -> createNamesAndTypeDoc lField names t
|
||||
L _ (XConDeclField x) -> absurdExt x
|
||||
#else
|
||||
L _ (ConDeclField names t _) -> createNamesAndTypeDoc lField names t
|
||||
#endif
|
||||
|
||||
createForallDoc :: [LHsTyVarBndr GhcPs] -> Maybe (ToBriDocM BriDocNumbered)
|
||||
createForallDoc [] = Nothing
|
||||
|
@ -497,12 +455,8 @@ createNamesAndTypeDoc lField names t =
|
|||
$ List.intersperse docCommaSep
|
||||
$ names
|
||||
<&> \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
L _ (XFieldOcc x) -> absurdExt x
|
||||
L _ (FieldOcc _ fieldName) ->
|
||||
#else
|
||||
L _ (FieldOcc fieldName _) ->
|
||||
#endif
|
||||
docLit =<< lrdrNameToTextAnn fieldName
|
||||
]
|
||||
, docWrapNodeRest lField $ layoutType t
|
||||
|
|
|
@ -40,7 +40,7 @@ import qualified FastString
|
|||
#if MIN_VERSION_ghc(8,10,1) /* ghc-8.10.1 */
|
||||
import GHC.Hs
|
||||
import GHC.Hs.Extension (NoExtField (..))
|
||||
#elif MIN_VERSION_ghc(8,6,0)
|
||||
#else
|
||||
import HsSyn
|
||||
import HsExtension (NoExt (..))
|
||||
#endif
|
||||
|
@ -65,7 +65,6 @@ import Data.Char (isUpper)
|
|||
|
||||
|
||||
layoutDecl :: ToBriDoc HsDecl
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
layoutDecl d@(L loc decl) = case decl of
|
||||
SigD _ sig -> withTransformedAnns d $ layoutSig (L loc sig)
|
||||
ValD _ bind -> withTransformedAnns d $ layoutBind (L loc bind) >>= \case
|
||||
|
@ -77,18 +76,6 @@ layoutDecl d@(L loc decl) = case decl of
|
|||
InstD _ (ClsInstD _ inst) ->
|
||||
withTransformedAnns d $ layoutClsInst (L loc inst)
|
||||
_ -> briDocByExactNoComment d
|
||||
#else
|
||||
layoutDecl d@(L loc decl) = case decl of
|
||||
SigD sig -> withTransformedAnns d $ layoutSig (L loc sig)
|
||||
ValD bind -> withTransformedAnns d $ layoutBind (L loc bind) >>= \case
|
||||
Left ns -> docLines $ return <$> ns
|
||||
Right n -> return n
|
||||
TyClD tycl -> withTransformedAnns d $ layoutTyCl (L loc tycl)
|
||||
InstD (TyFamInstD tfid) ->
|
||||
withTransformedAnns d $ layoutTyFamInstDecl False d tfid
|
||||
InstD (ClsInstD inst) -> withTransformedAnns d $ layoutClsInst (L loc inst)
|
||||
_ -> briDocByExactNoComment d
|
||||
#endif
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Sig
|
||||
|
@ -96,16 +83,8 @@ layoutDecl d@(L loc decl) = case decl of
|
|||
|
||||
layoutSig :: ToBriDoc Sig
|
||||
layoutSig lsig@(L _loc sig) = case sig of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
TypeSig _ names (HsWC _ (HsIB _ typ)) -> layoutNamesAndType Nothing names typ
|
||||
#else /* ghc-8.4 */
|
||||
TypeSig names (HsWC _ (HsIB _ typ _)) -> layoutNamesAndType Nothing names typ
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
InlineSig _ name (InlinePragma _ spec _arity phaseAct conlike) ->
|
||||
#else
|
||||
InlineSig name (InlinePragma _ spec _arity phaseAct conlike) ->
|
||||
#endif
|
||||
docWrapNode lsig $ do
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
specStr <- specStringCompat lsig spec
|
||||
|
@ -122,16 +101,8 @@ layoutSig lsig@(L _loc sig) = case sig of
|
|||
$ Text.pack ("{-# " ++ specStr ++ conlikeStr ++ phaseStr)
|
||||
<> nameStr
|
||||
<> Text.pack " #-}"
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
ClassOpSig _ False names (HsIB _ typ) -> layoutNamesAndType Nothing names typ
|
||||
#else /* ghc-8.4 */
|
||||
ClassOpSig False names (HsIB _ typ _) -> layoutNamesAndType Nothing names typ
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
PatSynSig _ names (HsIB _ typ) -> layoutNamesAndType (Just "pattern") names typ
|
||||
#else
|
||||
PatSynSig names (HsIB _ typ _) -> layoutNamesAndType (Just "pattern") names typ
|
||||
#endif
|
||||
_ -> briDocByExactNoComment lsig -- TODO
|
||||
where
|
||||
layoutNamesAndType mKeyword names typ = docWrapNode lsig $ do
|
||||
|
@ -173,16 +144,8 @@ specStringCompat ast = \case
|
|||
|
||||
layoutGuardLStmt :: ToBriDoc' (Stmt GhcPs (LHsExpr GhcPs))
|
||||
layoutGuardLStmt lgstmt@(L _ stmtLR) = docWrapNode lgstmt $ case stmtLR of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
BodyStmt _ body _ _ -> layoutExpr body
|
||||
#else
|
||||
BodyStmt body _ _ _ -> layoutExpr body
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
BindStmt _ lPat expr _ _ -> do
|
||||
#else
|
||||
BindStmt lPat expr _ _ _ -> do
|
||||
#endif
|
||||
patDoc <- docSharedWrapper layoutPat lPat
|
||||
expDoc <- docSharedWrapper layoutExpr expr
|
||||
docCols ColBindStmt
|
||||
|
@ -201,11 +164,7 @@ layoutBind
|
|||
(HsBindLR GhcPs GhcPs)
|
||||
(Either [BriDocNumbered] BriDocNumbered)
|
||||
layoutBind lbind@(L _ bind) = case bind of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
FunBind _ fId (MG _ lmatches@(L _ matches) _) _ [] -> do
|
||||
#else
|
||||
FunBind fId (MG lmatches@(L _ matches) _ _ _) _ _ [] -> do
|
||||
#endif
|
||||
idStr <- lrdrNameToTextAnn fId
|
||||
binderDoc <- docLit $ Text.pack "="
|
||||
funcPatDocs <-
|
||||
|
@ -214,11 +173,7 @@ layoutBind lbind@(L _ bind) = case bind of
|
|||
$ layoutPatternBind (Just idStr) binderDoc
|
||||
`mapM` matches
|
||||
return $ Left $ funcPatDocs
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
PatBind _ pat (GRHSs _ grhss whereBinds) ([], []) -> do
|
||||
#else
|
||||
PatBind pat (GRHSs grhss whereBinds) _ _ ([], []) -> do
|
||||
#endif
|
||||
patDocs <- colsWrapPat =<< layoutPat pat
|
||||
clauseDocs <- layoutGrhs `mapM` grhss
|
||||
mWhereDocs <- layoutLocalBinds whereBinds
|
||||
|
@ -233,10 +188,8 @@ layoutBind lbind@(L _ bind) = case bind of
|
|||
hasComments
|
||||
#if MIN_VERSION_ghc(8,8,0)
|
||||
PatSynBind _ (PSB _ patID lpat rpat dir) -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0)
|
||||
PatSynBind _ (PSB _ patID lpat rpat dir) -> do
|
||||
#else
|
||||
PatSynBind (PSB patID _ lpat rpat dir) -> do
|
||||
PatSynBind _ (PSB _ patID lpat rpat dir) -> do
|
||||
#endif
|
||||
fmap Right $ docWrapNode lbind $ layoutPatSynBind patID
|
||||
lpat
|
||||
|
@ -245,14 +198,9 @@ layoutBind lbind@(L _ bind) = case bind of
|
|||
_ -> Right <$> unknownNodeError "" lbind
|
||||
layoutIPBind :: ToBriDoc IPBind
|
||||
layoutIPBind lipbind@(L _ bind) = case bind of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
XIPBind{} -> unknownNodeError "XIPBind" lipbind
|
||||
IPBind _ (Right _) _ -> error "brittany internal error: IPBind Right"
|
||||
IPBind _ (Left (L _ (HsIPName name))) expr -> do
|
||||
#else
|
||||
IPBind (Right _) _ -> error "brittany internal error: IPBind Right"
|
||||
IPBind (Left (L _ (HsIPName name))) expr -> do
|
||||
#endif
|
||||
ipName <- docLit $ Text.pack $ '?' : FastString.unpackFS name
|
||||
binderDoc <- docLit $ Text.pack "="
|
||||
exprDoc <- layoutExpr expr
|
||||
|
@ -274,11 +222,7 @@ layoutLocalBinds lbinds@(L _ binds) = case binds of
|
|||
-- Just . (>>= either id return) . Data.Foldable.toList <$> mapBagM layoutBind lhsBindsLR -- TODO: fix ordering
|
||||
-- x@(HsValBinds (ValBindsIn{})) ->
|
||||
-- Just . (:[]) <$> unknownNodeError "HsValBinds (ValBindsIn _ (_:_))" x
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsValBinds _ (ValBinds _ bindlrs sigs) -> do
|
||||
#else
|
||||
HsValBinds (ValBindsIn bindlrs sigs) -> do
|
||||
#endif
|
||||
let unordered =
|
||||
[ BagBind b | b <- Data.Foldable.toList bindlrs ]
|
||||
++ [ BagSig s | s <- sigs ]
|
||||
|
@ -287,23 +231,12 @@ layoutLocalBinds lbinds@(L _ binds) = case binds of
|
|||
BagBind b -> either id return <$> layoutBind b
|
||||
BagSig s -> return <$> layoutSig s
|
||||
return $ Just $ docs
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
-- x@(HsValBinds (ValBindsOut _binds _lsigs)) ->
|
||||
HsValBinds _ (XValBindsLR{}) -> error "brittany internal error: XValBindsLR"
|
||||
XHsLocalBindsLR{} -> error "brittany internal error: XHsLocalBindsLR"
|
||||
#else
|
||||
x@(HsValBinds (ValBindsOut _binds _lsigs)) ->
|
||||
-- i _think_ this case never occurs in non-processed ast
|
||||
Just . (: []) <$> unknownNodeError "HsValBinds ValBindsOut{}"
|
||||
(L noSrcSpan x)
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
x@(HsIPBinds _ XHsIPBinds{}) ->
|
||||
Just . (: []) <$> unknownNodeError "XHsIPBinds" (L noSrcSpan x)
|
||||
HsIPBinds _ (IPBinds _ bb) ->
|
||||
#else
|
||||
HsIPBinds (IPBinds bb _) ->
|
||||
#endif
|
||||
Just <$> mapM layoutIPBind bb
|
||||
EmptyLocalBinds{} -> return $ Nothing
|
||||
|
||||
|
@ -312,17 +245,11 @@ layoutLocalBinds lbinds@(L _ binds) = case binds of
|
|||
layoutGrhs
|
||||
:: LGRHS GhcPs (LHsExpr GhcPs)
|
||||
-> ToBriDocM ([BriDocNumbered], BriDocNumbered, LHsExpr GhcPs)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
layoutGrhs lgrhs@(L _ (GRHS _ guards body)) = do
|
||||
#else
|
||||
layoutGrhs lgrhs@(L _ (GRHS guards body)) = do
|
||||
#endif
|
||||
guardDocs <- docWrapNode lgrhs $ layoutStmt `mapM` guards
|
||||
bodyDoc <- layoutExpr body
|
||||
return (guardDocs, bodyDoc, body)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
layoutGrhs (L _ (XGRHS{})) = error "brittany internal error: XGRHS"
|
||||
#endif
|
||||
|
||||
layoutPatternBind
|
||||
:: Maybe Text
|
||||
|
@ -331,19 +258,11 @@ layoutPatternBind
|
|||
-> ToBriDocM BriDocNumbered
|
||||
layoutPatternBind funId binderDoc lmatch@(L _ match) = do
|
||||
let pats = m_pats match
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let (GRHSs _ grhss whereBinds) = m_grhss match
|
||||
#else
|
||||
let (GRHSs grhss whereBinds) = m_grhss match
|
||||
#endif
|
||||
patDocs <- pats `forM` \p -> fmap return $ colsWrapPat =<< layoutPat p
|
||||
let isInfix = isInfixMatch match
|
||||
mIdStr <- case match of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
Match _ (FunRhs matchId _ _) _ _ -> Just <$> lrdrNameToTextAnn matchId
|
||||
#else
|
||||
Match (FunRhs matchId _ _) _ _ -> Just <$> lrdrNameToTextAnn matchId
|
||||
#endif
|
||||
_ -> pure Nothing
|
||||
let mIdStr' = fixPatternBindIdentifier match <$> mIdStr
|
||||
patDoc <- docWrapNodePrior lmatch $ case (mIdStr', patDocs) of
|
||||
|
@ -785,11 +704,7 @@ layoutLPatSyn name (RecCon recArgs) = do
|
|||
-- pattern synonyms
|
||||
layoutPatSynWhere :: HsPatSynDir GhcPs -> ToBriDocM (Maybe [ToBriDocM BriDocNumbered])
|
||||
layoutPatSynWhere hs = case hs of
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
ExplicitBidirectional (MG _ (L _ lbinds) _) -> do
|
||||
#else
|
||||
ExplicitBidirectional (MG (L _ lbinds) _ _ _) -> do
|
||||
#endif
|
||||
binderDoc <- docLit $ Text.pack "="
|
||||
Just <$> mapM (docSharedWrapper $ layoutPatternBind Nothing binderDoc) lbinds
|
||||
_ -> pure Nothing
|
||||
|
@ -800,17 +715,10 @@ layoutPatSynWhere hs = case hs of
|
|||
|
||||
layoutTyCl :: ToBriDoc TyClDecl
|
||||
layoutTyCl ltycl@(L _loc tycl) = case tycl of
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
SynDecl _ name vars fixity typ -> do
|
||||
let isInfix = case fixity of
|
||||
Prefix -> False
|
||||
Infix -> True
|
||||
#else
|
||||
SynDecl name vars fixity typ _ -> do
|
||||
let isInfix = case fixity of
|
||||
Prefix -> False
|
||||
Infix -> True
|
||||
#endif
|
||||
-- hasTrailingParen <- hasAnnKeywordComment ltycl AnnCloseP
|
||||
-- let parenWrapper = if hasTrailingParen
|
||||
-- then appSep . docWrapNodeRest ltycl
|
||||
|
@ -818,11 +726,7 @@ layoutTyCl ltycl@(L _loc tycl) = case tycl of
|
|||
let wrapNodeRest = docWrapNodeRest ltycl
|
||||
docWrapNodePrior ltycl
|
||||
$ layoutSynDecl isInfix wrapNodeRest name (hsq_explicit vars) typ
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
DataDecl _ext name tyVars _ dataDefn ->
|
||||
#else
|
||||
DataDecl name tyVars _ dataDefn _ _ ->
|
||||
#endif
|
||||
layoutDataDecl ltycl name tyVars dataDefn
|
||||
_ -> briDocByExactNoComment ltycl
|
||||
|
||||
|
@ -870,19 +774,11 @@ layoutSynDecl isInfix wrapNodeRest name vars typ = do
|
|||
layoutTyVarBndr :: Bool -> ToBriDoc HsTyVarBndr
|
||||
layoutTyVarBndr needsSep lbndr@(L _ bndr) = do
|
||||
docWrapNodePrior lbndr $ case bndr of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* 8.6 */
|
||||
XTyVarBndr{} -> error "brittany internal error: XTyVarBndr"
|
||||
UserTyVar _ name -> do
|
||||
#else /* 8.4 */
|
||||
UserTyVar name -> do
|
||||
#endif
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
docSeq $ [docSeparator | needsSep] ++ [docLit nameStr]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* 8.6 */
|
||||
KindedTyVar _ name kind -> do
|
||||
#else /* 8.4 */
|
||||
KindedTyVar name kind -> do
|
||||
#endif
|
||||
nameStr <- lrdrNameToTextAnn name
|
||||
docSeq
|
||||
$ [ docSeparator | needsSep ]
|
||||
|
@ -913,12 +809,8 @@ layoutTyFamInstDecl inClass outerNode tfid = do
|
|||
-- bndrsMay isJust e.g. with
|
||||
-- type instance forall a . MyType (Maybe a) = Either () a
|
||||
innerNode = outerNode
|
||||
#elif MIN_VERSION_ghc(8,6,0)
|
||||
FamEqn _ name pats _fixity typ = hsib_body $ tfid_eqn tfid
|
||||
bndrsMay = Nothing
|
||||
innerNode = outerNode
|
||||
#else
|
||||
FamEqn name pats _fixity typ = hsib_body $ tfid_eqn tfid
|
||||
FamEqn _ name pats _fixity typ = hsib_body $ tfid_eqn tfid
|
||||
bndrsMay = Nothing
|
||||
innerNode = outerNode
|
||||
#endif
|
||||
|
@ -996,20 +888,13 @@ layoutClsInst lcid@(L _ cid) = docLines
|
|||
. ClsInstD NoExtField
|
||||
. removeChildren
|
||||
<$> lcid
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* 8.6 */
|
||||
#else
|
||||
layoutInstanceHead =
|
||||
briDocByExactNoComment
|
||||
$ InstD NoExt
|
||||
. ClsInstD NoExt
|
||||
. removeChildren
|
||||
<$> lcid
|
||||
#else
|
||||
layoutInstanceHead =
|
||||
briDocByExactNoComment
|
||||
$ InstD
|
||||
. ClsInstD
|
||||
. removeChildren
|
||||
<$> lcid
|
||||
#endif
|
||||
|
||||
removeChildren :: ClsInstDecl p -> ClsInstDecl p
|
||||
|
|
|
@ -44,65 +44,29 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
.> confUnpack
|
||||
let allowFreeIndent = indentPolicy == IndentPolicyFree
|
||||
docWrapNode lexpr $ case expr of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsVar _ vname -> do
|
||||
#else
|
||||
HsVar vname -> do
|
||||
#endif
|
||||
docLit =<< lrdrNameToTextAnn vname
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsUnboundVar _ var -> case var of
|
||||
#else
|
||||
HsUnboundVar var -> case var of
|
||||
#endif
|
||||
OutOfScope oname _ -> docLit $ Text.pack $ occNameString oname
|
||||
TrueExprHole oname -> docLit $ Text.pack $ occNameString oname
|
||||
HsRecFld{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "HsRecFld" lexpr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsOverLabel _ext _reboundFromLabel name ->
|
||||
#else /* ghc-8.4 */
|
||||
HsOverLabel _reboundFromLabel name ->
|
||||
#endif
|
||||
let label = FastString.unpackFS name
|
||||
in docLit . Text.pack $ '#' : label
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsIPVar _ext (HsIPName name) ->
|
||||
#else
|
||||
HsIPVar (HsIPName name) ->
|
||||
#endif
|
||||
let label = FastString.unpackFS name
|
||||
in docLit . Text.pack $ '?' : label
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsOverLit _ olit -> do
|
||||
#else
|
||||
HsOverLit olit -> do
|
||||
#endif
|
||||
allocateNode $ overLitValBriDoc $ ol_val olit
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLit _ lit -> do
|
||||
#else
|
||||
HsLit lit -> do
|
||||
#endif
|
||||
allocateNode $ litBriDoc lit
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLam _ (MG _ (L _ [lmatch@(L _ match)]) _)
|
||||
#else
|
||||
HsLam (MG (L _ [lmatch@(L _ match)]) _ _ _)
|
||||
#endif
|
||||
| pats <- m_pats match
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
, GRHSs _ [lgrhs] llocals <- m_grhss match
|
||||
#else
|
||||
, GRHSs [lgrhs] llocals <- m_grhss match
|
||||
#endif
|
||||
, L _ EmptyLocalBinds {} <- llocals
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
, L _ (GRHS _ [] body) <- lgrhs
|
||||
#else
|
||||
, L _ (GRHS [] body) <- lgrhs
|
||||
#endif
|
||||
-> do
|
||||
patDocs <- zip (True : repeat False) pats `forM` \(isFirst, p) ->
|
||||
fmap return $ do
|
||||
|
@ -168,48 +132,26 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
]
|
||||
HsLam{} ->
|
||||
unknownNodeError "HsLam too complex" lexpr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLamCase _ XMatchGroup{} ->
|
||||
error "brittany internal error: HsLamCase XMatchGroup"
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLamCase _ (MG _ (L _ []) _) -> do
|
||||
#else /* ghc-8.4 */
|
||||
HsLamCase (MG (L _ []) _ _ _) -> do
|
||||
#endif
|
||||
docSetParSpacing $ docAddBaseY BrIndentRegular $
|
||||
(docLit $ Text.pack "\\case {}")
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLamCase _ (MG _ lmatches@(L _ matches) _) -> do
|
||||
#else /* ghc-8.4 */
|
||||
HsLamCase (MG lmatches@(L _ matches) _ _ _) -> do
|
||||
#endif
|
||||
binderDoc <- docLit $ Text.pack "->"
|
||||
funcPatDocs <- docWrapNode lmatches
|
||||
$ layoutPatternBind Nothing binderDoc `mapM` matches
|
||||
docSetParSpacing $ docAddBaseY BrIndentRegular $ docPar
|
||||
(docLit $ Text.pack "\\case")
|
||||
(docSetBaseAndIndent $ docNonBottomSpacing $ docLines $ return <$> funcPatDocs)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsApp _ exp1@(L _ HsApp{}) exp2 -> do
|
||||
#else
|
||||
HsApp exp1@(L _ HsApp{}) exp2 -> do
|
||||
#endif
|
||||
let gather :: [LHsExpr GhcPs] -> LHsExpr GhcPs -> (LHsExpr GhcPs, [LHsExpr GhcPs])
|
||||
gather list = \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
L _ (HsApp _ l r) -> gather (r:list) l
|
||||
#else
|
||||
L _ (HsApp l r) -> gather (r:list) l
|
||||
#endif
|
||||
x -> (x, list)
|
||||
let (headE, paramEs) = gather [exp2] exp1
|
||||
let colsOrSequence = case headE of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
L _ (HsVar _ (L _ (Unqual occname))) ->
|
||||
#else
|
||||
L _ (HsVar (L _ (Unqual occname))) ->
|
||||
#endif
|
||||
docCols (ColApp $ Text.pack $ occNameString occname)
|
||||
_ -> docSeq
|
||||
headDoc <- docSharedWrapper layoutExpr headE
|
||||
|
@ -255,11 +197,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
( docNonBottomSpacing
|
||||
$ docLines paramDocs
|
||||
)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsApp _ exp1 exp2 -> do
|
||||
#else
|
||||
HsApp exp1 exp2 -> do
|
||||
#endif
|
||||
-- TODO: if expDoc1 is some literal, we may want to create a docCols here.
|
||||
expDoc1 <- docSharedWrapper layoutExpr exp1
|
||||
expDoc2 <- docSharedWrapper layoutExpr exp2
|
||||
|
@ -301,12 +239,10 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
HsAppType _ _ XHsWildCardBndrs{} ->
|
||||
error "brittany internal error: HsAppType XHsWildCardBndrs"
|
||||
HsAppType _ exp1 (HsWC _ ty1) -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
HsAppType XHsWildCardBndrs{} _ ->
|
||||
error "brittany internal error: HsAppType XHsWildCardBndrs"
|
||||
HsAppType (HsWC _ ty1) exp1 -> do
|
||||
#else /* ghc-8.4 */
|
||||
HsAppType exp1 (HsWC _ ty1) -> do
|
||||
#endif
|
||||
t <- docSharedWrapper layoutType ty1
|
||||
e <- docSharedWrapper layoutExpr exp1
|
||||
|
@ -321,23 +257,10 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
e
|
||||
(docSeq [docLit $ Text.pack "@", t ])
|
||||
]
|
||||
#if !MIN_VERSION_ghc(8,6,0) /* ghc-8.4 */
|
||||
HsAppTypeOut{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "HsAppTypeOut{}" lexpr
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
OpApp _ expLeft@(L _ OpApp{}) expOp expRight -> do
|
||||
#else
|
||||
OpApp expLeft@(L _ OpApp{}) expOp _ expRight -> do
|
||||
#endif
|
||||
let gather :: [(LHsExpr GhcPs, LHsExpr GhcPs)] -> LHsExpr GhcPs -> (LHsExpr GhcPs, [(LHsExpr GhcPs, LHsExpr GhcPs)])
|
||||
gather opExprList = \case
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
(L _ (OpApp _ l1 op1 r1)) -> gather ((op1, r1): opExprList) l1
|
||||
#else
|
||||
(L _ (OpApp l1 op1 _ r1)) -> gather ((op1, r1): opExprList) l1
|
||||
#endif
|
||||
final -> (final, opExprList)
|
||||
(leftOperand, appList) = gather [] expLeft
|
||||
leftOperandDoc <- docSharedWrapper layoutExpr leftOperand
|
||||
|
@ -351,19 +274,11 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
hasComLeft <- hasAnyCommentsConnected expLeft
|
||||
hasComOp <- hasAnyCommentsConnected expOp
|
||||
pure $ not hasComLeft && not hasComOp
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let allowPar = case (expOp, expRight) of
|
||||
(L _ (HsVar _ (L _ (Unqual occname))), _)
|
||||
| occNameString occname == "$" -> True
|
||||
(_, L _ (HsApp _ _ (L _ HsVar{}))) -> False
|
||||
_ -> True
|
||||
#else
|
||||
let allowPar = case (expOp, expRight) of
|
||||
(L _ (HsVar (L _ (Unqual occname))), _)
|
||||
| occNameString occname == "$" -> True
|
||||
(_, L _ (HsApp _ (L _ HsVar{}))) -> False
|
||||
_ -> True
|
||||
#endif
|
||||
runFilteredAlternative $ do
|
||||
-- > one + two + three
|
||||
-- or
|
||||
|
@ -401,27 +316,15 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
$ (appListDocs <&> \(od, ed) -> docCols ColOpPrefix [appSep od, docSetBaseY ed])
|
||||
++ [docCols ColOpPrefix [appSep opLastDoc, docSetBaseY expLastDoc]]
|
||||
)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
OpApp _ expLeft expOp expRight -> do
|
||||
#else
|
||||
OpApp expLeft expOp _ expRight -> do
|
||||
#endif
|
||||
expDocLeft <- docSharedWrapper layoutExpr expLeft
|
||||
expDocOp <- docSharedWrapper layoutExpr expOp
|
||||
expDocRight <- docSharedWrapper layoutExpr expRight
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let allowPar = case (expOp, expRight) of
|
||||
(L _ (HsVar _ (L _ (Unqual occname))), _)
|
||||
| occNameString occname == "$" -> True
|
||||
(_, L _ (HsApp _ _ (L _ HsVar{}))) -> False
|
||||
_ -> True
|
||||
#else
|
||||
let allowPar = case (expOp, expRight) of
|
||||
(L _ (HsVar (L _ (Unqual occname))), _)
|
||||
| occNameString occname == "$" -> True
|
||||
(_, L _ (HsApp _ (L _ HsVar{}))) -> False
|
||||
_ -> True
|
||||
#endif
|
||||
let leftIsDoBlock = case expLeft of
|
||||
L _ HsDo{} -> True
|
||||
_ -> False
|
||||
|
@ -467,20 +370,12 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
then docLines [expDocLeft, expDocOpAndRight]
|
||||
else docAddBaseY BrIndentRegular
|
||||
$ docPar expDocLeft expDocOpAndRight
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
NegApp _ op _ -> do
|
||||
#else
|
||||
NegApp op _ -> do
|
||||
#endif
|
||||
opDoc <- docSharedWrapper layoutExpr op
|
||||
docSeq [ docLit $ Text.pack "-"
|
||||
, opDoc
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsPar _ innerExp -> do
|
||||
#else
|
||||
HsPar innerExp -> do
|
||||
#endif
|
||||
innerExpDoc <- docSharedWrapper (docWrapNode lexpr . layoutExpr) innerExp
|
||||
docAlt
|
||||
[ docSeq
|
||||
|
@ -496,41 +391,25 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
, docLit $ Text.pack ")"
|
||||
]
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
SectionL _ left op -> do -- TODO: add to testsuite
|
||||
#else
|
||||
SectionL left op -> do -- TODO: add to testsuite
|
||||
#endif
|
||||
leftDoc <- docSharedWrapper layoutExpr left
|
||||
opDoc <- docSharedWrapper layoutExpr op
|
||||
docSeq [leftDoc, docSeparator, opDoc]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
SectionR _ op right -> do -- TODO: add to testsuite
|
||||
#else
|
||||
SectionR op right -> do -- TODO: add to testsuite
|
||||
#endif
|
||||
opDoc <- docSharedWrapper layoutExpr op
|
||||
rightDoc <- docSharedWrapper layoutExpr right
|
||||
docSeq [opDoc, docSeparator, rightDoc]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
ExplicitTuple _ args boxity -> do
|
||||
#else
|
||||
ExplicitTuple args boxity -> do
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,10,1) /* ghc-8.10.1 */
|
||||
let argExprs = args <&> \arg -> case arg of
|
||||
(L _ (Present _ e)) -> (arg, Just e);
|
||||
(L _ (Missing NoExtField)) -> (arg, Nothing)
|
||||
(L _ XTupArg{}) -> error "brittany internal error: XTupArg"
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
let argExprs = args <&> \arg -> case arg of
|
||||
(L _ (Present _ e)) -> (arg, Just e);
|
||||
(L _ (Missing NoExt)) -> (arg, Nothing)
|
||||
(L _ XTupArg{}) -> error "brittany internal error: XTupArg"
|
||||
#else
|
||||
let argExprs = args <&> \arg -> case arg of
|
||||
(L _ (Present e)) -> (arg, Just e);
|
||||
(L _ (Missing PlaceHolder)) -> (arg, Nothing)
|
||||
#endif
|
||||
argDocs <- forM argExprs
|
||||
$ docSharedWrapper
|
||||
|
@ -576,15 +455,9 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
lineN = docCols ColTuples [docCommaSep, docNodeAnnKW lexpr (Just AnnOpenP) eN]
|
||||
end = closeLit
|
||||
in docSetBaseY $ docLines $ [start] ++ linesM ++ [lineN, end]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsCase _ _ XMatchGroup{} ->
|
||||
error "brittany internal error: HsCase XMatchGroup"
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsCase _ cExp (MG _ (L _ []) _) -> do
|
||||
#else
|
||||
HsCase cExp (MG (L _ []) _ _ _) -> do
|
||||
#endif
|
||||
cExpDoc <- docSharedWrapper layoutExpr cExp
|
||||
docAlt
|
||||
[ docAddBaseY BrIndentRegular
|
||||
|
@ -599,11 +472,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
)
|
||||
(docLit $ Text.pack "of {}")
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsCase _ cExp (MG _ lmatches@(L _ matches) _) -> do
|
||||
#else
|
||||
HsCase cExp (MG lmatches@(L _ matches) _ _ _) -> do
|
||||
#endif
|
||||
cExpDoc <- docSharedWrapper layoutExpr cExp
|
||||
binderDoc <- docLit $ Text.pack "->"
|
||||
funcPatDocs <- docWrapNode lmatches
|
||||
|
@ -627,11 +496,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
(docSetBaseAndIndent $ docNonBottomSpacing $ docLines $ return <$> funcPatDocs)
|
||||
)
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsIf _ _ ifExpr thenExpr elseExpr -> do
|
||||
#else
|
||||
HsIf _ ifExpr thenExpr elseExpr -> do
|
||||
#endif
|
||||
ifExprDoc <- docSharedWrapper layoutExpr ifExpr
|
||||
thenExprDoc <- docSharedWrapper layoutExpr thenExpr
|
||||
elseExprDoc <- docSharedWrapper layoutExpr elseExpr
|
||||
|
@ -751,11 +616,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
docSetParSpacing $ docAddBaseY BrIndentRegular $ docPar
|
||||
(docLit $ Text.pack "if")
|
||||
(layoutPatternBindFinal Nothing binderDoc Nothing clauseDocs Nothing hasComments)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsLet _ binds exp1 -> do
|
||||
#else
|
||||
HsLet binds exp1 -> do
|
||||
#endif
|
||||
expDoc1 <- docSharedWrapper layoutExpr exp1
|
||||
-- We jump through some ugly hoops here to ensure proper sharing.
|
||||
hasComments <- hasAnyCommentsBelow lexpr
|
||||
|
@ -861,11 +722,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
]
|
||||
_ -> docSeq [appSep $ docLit $ Text.pack "let in", expDoc1]
|
||||
-- docSeq [appSep $ docLit "let in", expDoc1]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsDo _ stmtCtx (L _ stmts) -> case stmtCtx of
|
||||
#else
|
||||
HsDo stmtCtx (L _ stmts) _ -> case stmtCtx of
|
||||
#endif
|
||||
DoExpr -> do
|
||||
stmtDocs <- docSharedWrapper layoutStmt `mapM` stmts
|
||||
docSetParSpacing
|
||||
|
@ -960,26 +817,13 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
in docSetBaseY $ docLines $ [start] ++ linesM ++ [lineN] ++ [end]
|
||||
ExplicitList _ _ [] ->
|
||||
docLit $ Text.pack "[]"
|
||||
#if !MIN_VERSION_ghc(8,6,0) /* ghc-8.4 */
|
||||
ExplicitPArr{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "ExplicitPArr{}" lexpr
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
RecordCon _ lname fields ->
|
||||
#else
|
||||
RecordCon lname _ _ fields ->
|
||||
#endif
|
||||
case fields of
|
||||
HsRecFields fs Nothing -> do
|
||||
let nameDoc = docWrapNode lname $ docLit $ lrdrNameToText lname
|
||||
rFs <- fs
|
||||
`forM` \lfield@(L _ (HsRecField (L _ fieldOcc) rFExpr pun)) -> do
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let FieldOcc _ lnameF = fieldOcc
|
||||
#else
|
||||
let FieldOcc lnameF _ = fieldOcc
|
||||
#endif
|
||||
rFExpDoc <- if pun
|
||||
then return Nothing
|
||||
else Just <$> docSharedWrapper layoutExpr rFExpr
|
||||
|
@ -999,22 +843,14 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
#endif
|
||||
let nameDoc = docWrapNode lname $ docLit $ lrdrNameToText lname
|
||||
fieldDocs <- fs `forM` \fieldl@(L _ (HsRecField (L _ fieldOcc) fExpr pun)) -> do
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let FieldOcc _ lnameF = fieldOcc
|
||||
#else
|
||||
let FieldOcc lnameF _ = fieldOcc
|
||||
#endif
|
||||
fExpDoc <- if pun
|
||||
then return Nothing
|
||||
else Just <$> docSharedWrapper layoutExpr fExpr
|
||||
return (fieldl, lrdrNameToText lnameF, fExpDoc)
|
||||
recordExpression True indentPolicy lexpr nameDoc fieldDocs
|
||||
_ -> unknownNodeError "RecordCon with puns" lexpr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
RecordUpd _ rExpr fields -> do
|
||||
#else
|
||||
RecordUpd rExpr fields _ _ _ _ -> do
|
||||
#endif
|
||||
rExprDoc <- docSharedWrapper layoutExpr rExpr
|
||||
rFs <- fields
|
||||
`forM` \lfield@(L _ (HsRecField (L _ ambName) rFExpr pun)) -> do
|
||||
|
@ -1022,15 +858,10 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
then return Nothing
|
||||
else Just <$> docSharedWrapper layoutExpr rFExpr
|
||||
return $ case ambName of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
Unambiguous _ n -> (lfield, lrdrNameToText n, rFExpDoc)
|
||||
Ambiguous _ n -> (lfield, lrdrNameToText n, rFExpDoc)
|
||||
XAmbiguousFieldOcc{} ->
|
||||
error "brittany internal error: XAmbiguousFieldOcc"
|
||||
#else
|
||||
Unambiguous n _ -> (lfield, lrdrNameToText n, rFExpDoc)
|
||||
Ambiguous n _ -> (lfield, lrdrNameToText n, rFExpDoc)
|
||||
#endif
|
||||
recordExpression False indentPolicy lexpr rExprDoc rFs
|
||||
#if MIN_VERSION_ghc(8,8,0) /* ghc-8.6 */
|
||||
ExprWithTySig _ _ (HsWC _ XHsImplicitBndrs{}) ->
|
||||
|
@ -1038,14 +869,12 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
ExprWithTySig _ _ XHsWildCardBndrs{} ->
|
||||
error "brittany internal error: ExprWithTySig XHsWildCardBndrs"
|
||||
ExprWithTySig _ exp1 (HsWC _ (HsIB _ typ1)) -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
ExprWithTySig (HsWC _ XHsImplicitBndrs{}) _ ->
|
||||
error "brittany internal error: ExprWithTySig HsWC XHsImplicitBndrs"
|
||||
ExprWithTySig XHsWildCardBndrs{} _ ->
|
||||
error "brittany internal error: ExprWithTySig XHsWildCardBndrs"
|
||||
ExprWithTySig (HsWC _ (HsIB _ typ1)) exp1 -> do
|
||||
#else /* ghc-8.4 */
|
||||
ExprWithTySig exp1 (HsWC _ (HsIB _ typ1 _)) -> do
|
||||
#endif
|
||||
expDoc <- docSharedWrapper layoutExpr exp1
|
||||
typDoc <- docSharedWrapper layoutType typ1
|
||||
|
@ -1054,11 +883,6 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
, appSep $ docLit $ Text.pack "::"
|
||||
, typDoc
|
||||
]
|
||||
#if !MIN_VERSION_ghc(8,6,0) /* ghc-8.4 */
|
||||
ExprWithTySigOut{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "ExprWithTySigOut{}" lexpr
|
||||
#endif
|
||||
ArithSeq _ Nothing info ->
|
||||
case info of
|
||||
From e1 -> do
|
||||
|
@ -1103,11 +927,6 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
]
|
||||
ArithSeq{} ->
|
||||
briDocByExactInlineOnly "ArithSeq" lexpr
|
||||
#if !MIN_VERSION_ghc(8,6,0) /* ghc-8.4 */
|
||||
PArrSeq{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "PArrSeq{}" lexpr
|
||||
#endif
|
||||
HsSCC{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "HsSCC{}" lexpr
|
||||
|
@ -1123,11 +942,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
HsTcBracketOut{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "HsTcBracketOut{}" lexpr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsSpliceE _ (HsQuasiQuote _ _ quoter _loc content) -> do
|
||||
#else
|
||||
HsSpliceE (HsQuasiQuote _ quoter _loc content) -> do
|
||||
#endif
|
||||
allocateNode $ BDFPlain
|
||||
(Text.pack
|
||||
$ "["
|
||||
|
@ -1166,11 +981,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
#else
|
||||
EWildPat{} -> do
|
||||
docLit $ Text.pack "_"
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
EAsPat _ asName asExpr -> do
|
||||
#else
|
||||
EAsPat asName asExpr -> do
|
||||
#endif
|
||||
docSeq
|
||||
[ docLit $ lrdrNameToText asName <> Text.pack "@"
|
||||
, layoutExpr asExpr
|
||||
|
@ -1191,9 +1002,7 @@ layoutExpr lexpr@(L _ expr) = do
|
|||
ExplicitSum{} -> do
|
||||
-- TODO
|
||||
briDocByExactInlineOnly "ExplicitSum{}" lexpr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
XExpr{} -> error "brittany internal error: XExpr"
|
||||
#endif
|
||||
|
||||
recordExpression
|
||||
:: (Data.Data.Data lExpr, Data.Data.Data name)
|
||||
|
|
|
@ -39,32 +39,12 @@ prepareName = ieLWrappedName
|
|||
|
||||
layoutIE :: ToBriDoc IE
|
||||
layoutIE lie@(L _ ie) = docWrapNode lie $ case ie of
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEVar _ x -> layoutWrapped lie x
|
||||
#else
|
||||
IEVar x -> layoutWrapped lie x
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEThingAbs _ x -> layoutWrapped lie x
|
||||
#else
|
||||
IEThingAbs x -> layoutWrapped lie x
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEThingAll _ x -> docSeq [layoutWrapped lie x, docLit $ Text.pack "(..)"]
|
||||
#else
|
||||
IEThingAll x -> docSeq [layoutWrapped lie x, docLit $ Text.pack "(..)"]
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEThingWith _ x (IEWildcard _) _ _ ->
|
||||
#else
|
||||
IEThingWith x (IEWildcard _) _ _ ->
|
||||
#endif
|
||||
docSeq [layoutWrapped lie x, docLit $ Text.pack "(..)"]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEThingWith _ x _ ns _ -> do
|
||||
#else
|
||||
IEThingWith x _ ns _ -> do
|
||||
#endif
|
||||
hasComments <- orM
|
||||
( hasCommentsBetween lie AnnOpenP AnnCloseP
|
||||
: hasAnyCommentsBelow x
|
||||
|
@ -95,11 +75,7 @@ layoutIE lie@(L _ ie) = docWrapNode lie $ case ie of
|
|||
$ [docSeq [docParenLSep, docWrapNode n1 $ nameDoc n1]]
|
||||
++ map layoutItem nMs
|
||||
++ [docSeq [docCommaSep, docNodeAnnKW lie (Just AnnOpenP) $ nameDoc nN], docParenR]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
IEModuleContents _ n -> docSeq
|
||||
#else
|
||||
IEModuleContents n -> docSeq
|
||||
#endif
|
||||
[ docLit $ Text.pack "module"
|
||||
, docSeparator
|
||||
, docLit . Text.pack . moduleNameString $ unLoc n
|
||||
|
|
|
@ -37,11 +37,7 @@ prepModName = unLoc
|
|||
|
||||
layoutImport :: ToBriDoc ImportDecl
|
||||
layoutImport limportD@(L _ importD) = docWrapNode limportD $ case importD of
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
ImportDecl _ _ (L _ modName) pkg src safe q False mas mllies -> do
|
||||
#else
|
||||
ImportDecl _ (L _ modName) pkg src safe q False mas mllies -> do
|
||||
#endif
|
||||
importCol <- mAsk <&> _conf_layout .> _lconfig_importColumn .> confUnpack
|
||||
importAsCol <- mAsk <&> _conf_layout .> _lconfig_importAsColumn .> confUnpack
|
||||
indentPolicy <- mAsk <&> _conf_layout .> _lconfig_indentPolicy .> confUnpack
|
||||
|
|
|
@ -48,26 +48,16 @@ layoutPat :: LPat GhcPs -> ToBriDocM (Seq BriDocNumbered)
|
|||
layoutPat (ghcDL -> lpat@(L _ pat)) = docWrapNode lpat $ case pat of
|
||||
WildPat _ -> fmap Seq.singleton $ docLit $ Text.pack "_"
|
||||
-- _ -> expr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
VarPat _ n ->
|
||||
#else /* ghc-8.4 */
|
||||
VarPat n ->
|
||||
#endif
|
||||
fmap Seq.singleton $ docLit $ lrdrNameToText n
|
||||
-- abc -> expr
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
LitPat _ lit ->
|
||||
#else /* ghc-8.4 */
|
||||
LitPat lit ->
|
||||
#endif
|
||||
fmap Seq.singleton $ allocateNode $ litBriDoc lit
|
||||
-- 0 -> expr
|
||||
#if MIN_VERSION_ghc(8,8,0) /* ghc-8.8 */
|
||||
ParPat _ inner -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
ParPat _ inner -> do
|
||||
#else /* ghc-8.4 */
|
||||
ParPat inner -> do
|
||||
#endif
|
||||
-- (nestedpat) -> expr
|
||||
left <- docLit $ Text.pack "("
|
||||
|
@ -117,11 +107,7 @@ layoutPat (ghcDL -> lpat@(L _ pat)) = docWrapNode lpat $ case pat of
|
|||
-- Abc { a, b, c } -> expr2
|
||||
let t = lrdrNameToText lname
|
||||
fds <- fs `forM` \(L _ (HsRecField (L _ fieldOcc) fPat pun)) -> do
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let FieldOcc _ lnameF = fieldOcc
|
||||
#else
|
||||
let FieldOcc lnameF _ = fieldOcc
|
||||
#endif
|
||||
fExpDoc <- if pun
|
||||
then return Nothing
|
||||
else Just <$> docSharedWrapper layoutPat fPat
|
||||
|
@ -159,11 +145,7 @@ layoutPat (ghcDL -> lpat@(L _ pat)) = docWrapNode lpat $ case pat of
|
|||
-- Abc { a = locA, .. }
|
||||
let t = lrdrNameToText lname
|
||||
fds <- fs `forM` \(L _ (HsRecField (L _ fieldOcc) fPat pun)) -> do
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
let FieldOcc _ lnameF = fieldOcc
|
||||
#else
|
||||
let FieldOcc lnameF _ = fieldOcc
|
||||
#endif
|
||||
fExpDoc <- if pun
|
||||
then return Nothing
|
||||
else Just <$> docSharedWrapper layoutPat fPat
|
||||
|
@ -181,29 +163,19 @@ layoutPat (ghcDL -> lpat@(L _ pat)) = docWrapNode lpat $ case pat of
|
|||
(fieldName, Nothing) -> [docLit fieldName, docCommaSep]
|
||||
, docLit $ Text.pack "..}"
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
TuplePat _ args boxity -> do
|
||||
#else
|
||||
TuplePat args boxity _ -> do
|
||||
#endif
|
||||
-- (nestedpat1, nestedpat2, nestedpat3) -> expr
|
||||
-- (#nestedpat1, nestedpat2, nestedpat3#) -> expr
|
||||
case boxity of
|
||||
Boxed -> wrapPatListy args "()" docParenL docParenR
|
||||
Unboxed -> wrapPatListy args "(##)" docParenHashLSep docParenHashRSep
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
AsPat _ asName asPat -> do
|
||||
#else
|
||||
AsPat asName asPat -> do
|
||||
#endif
|
||||
-- bind@nestedpat -> expr
|
||||
wrapPatPrepend asPat (docLit $ lrdrNameToText asName <> Text.pack "@")
|
||||
#if MIN_VERSION_ghc(8,8,0) /* ghc-8.8 */
|
||||
SigPat _ pat1 (HsWC _ (HsIB _ ty1)) -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
SigPat (HsWC _ (HsIB _ ty1)) pat1 -> do
|
||||
#else /* ghc-8.4 */
|
||||
SigPatIn pat1 (HsWC _ (HsIB _ ty1 _)) -> do
|
||||
#endif
|
||||
-- i :: Int -> expr
|
||||
patDocs <- layoutPat pat1
|
||||
|
@ -224,33 +196,17 @@ layoutPat (ghcDL -> lpat@(L _ pat)) = docWrapNode lpat $ case pat of
|
|||
, docForceSingleline tyDoc
|
||||
]
|
||||
return $ xR Seq.|> xN'
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
ListPat _ elems ->
|
||||
#else
|
||||
ListPat elems _ _ ->
|
||||
#endif
|
||||
-- [] -> expr1
|
||||
-- [nestedpat1, nestedpat2, nestedpat3] -> expr2
|
||||
wrapPatListy elems "[]" docBracketL docBracketR
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
BangPat _ pat1 -> do
|
||||
#else
|
||||
BangPat pat1 -> do
|
||||
#endif
|
||||
-- !nestedpat -> expr
|
||||
wrapPatPrepend pat1 (docLit $ Text.pack "!")
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
LazyPat _ pat1 -> do
|
||||
#else
|
||||
LazyPat pat1 -> do
|
||||
#endif
|
||||
-- ~nestedpat -> expr
|
||||
wrapPatPrepend pat1 (docLit $ Text.pack "~")
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
NPat _ llit@(L _ ol) mNegative _ -> do
|
||||
#else
|
||||
NPat llit@(L _ ol) mNegative _ _ -> do
|
||||
#endif
|
||||
-- -13 -> expr
|
||||
litDoc <- docWrapNode llit $ allocateNode $ overLitValBriDoc $ GHC.ol_val ol
|
||||
negDoc <- docLit $ Text.pack "-"
|
||||
|
|
|
@ -38,17 +38,9 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
indentAmount :: Int <-
|
||||
mAsk <&> _conf_layout .> _lconfig_indentAmount .> confUnpack
|
||||
docWrapNode lstmt $ case stmt of
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
LastStmt _ body False _ -> do
|
||||
#else
|
||||
LastStmt body False _ -> do
|
||||
#endif
|
||||
layoutExpr body
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
BindStmt _ lPat expr _ _ -> do
|
||||
#else
|
||||
BindStmt lPat expr _ _ _ -> do
|
||||
#endif
|
||||
patDoc <- fmap return $ colsWrapPat =<< layoutPat lPat
|
||||
expDoc <- docSharedWrapper layoutExpr expr
|
||||
docAlt
|
||||
|
@ -67,11 +59,7 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
$ docPar (docLit $ Text.pack "<-") (expDoc)
|
||||
]
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
LetStmt _ binds -> do
|
||||
#else
|
||||
LetStmt binds -> do
|
||||
#endif
|
||||
let isFree = indentPolicy == IndentPolicyFree
|
||||
let indentFourPlus = indentAmount >= 4
|
||||
layoutLocalBinds binds >>= \case
|
||||
|
@ -116,11 +104,7 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
$ docAddBaseY BrIndentRegular
|
||||
$ docPar (docLit $ Text.pack "let")
|
||||
(docSetBaseAndIndent $ docLines $ return <$> bindDocs)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
RecStmt _ stmts _ _ _ _ _ -> runFilteredAlternative $ do
|
||||
#else
|
||||
RecStmt stmts _ _ _ _ _ _ _ _ _ -> runFilteredAlternative $ do
|
||||
#endif
|
||||
-- rec stmt1
|
||||
-- stmt2
|
||||
-- stmt3
|
||||
|
@ -136,11 +120,7 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
addAlternative $ docAddBaseY BrIndentRegular $ docPar
|
||||
(docLit (Text.pack "rec"))
|
||||
(docLines $ layoutStmt <$> stmts)
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
BodyStmt _ expr _ _ -> do
|
||||
#else
|
||||
BodyStmt expr _ _ _ -> do
|
||||
#endif
|
||||
expDoc <- docSharedWrapper layoutExpr expr
|
||||
docAddBaseY BrIndentRegular $ expDoc
|
||||
_ -> briDocByExactInlineOnly "some unknown statement" lstmt
|
||||
|
|
|
@ -42,16 +42,12 @@ import DataTreePrint
|
|||
layoutType :: ToBriDoc HsType
|
||||
layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
||||
-- _ | traceShow (ExactPrint.Types.mkAnnKey ltype) False -> error "impossible"
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsTyVar _ promoted name -> do
|
||||
#else /* ghc-8.4 */
|
||||
HsTyVar promoted name -> do
|
||||
#endif
|
||||
t <- lrdrNameToTextAnnTypeEqualityIsSpecial name
|
||||
case promoted of
|
||||
#if MIN_VERSION_ghc(8,8,0)
|
||||
IsPromoted -> docSeq
|
||||
#else /* ghc-8.4 8.6 */
|
||||
#else /* ghc-8.6 */
|
||||
Promoted -> docSeq
|
||||
#endif
|
||||
[ docSeparator
|
||||
|
@ -61,10 +57,8 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
NotPromoted -> docWrapNode name $ docLit t
|
||||
#if MIN_VERSION_ghc(8,10,1)
|
||||
HsForAllTy _ _ bndrs (L _ (HsQualTy _ (L _ cntxts) typ2)) -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0)
|
||||
HsForAllTy _ bndrs (L _ (HsQualTy _ (L _ cntxts) typ2)) -> do
|
||||
#else
|
||||
HsForAllTy bndrs (L _ (HsQualTy (L _ cntxts) typ2)) -> do
|
||||
HsForAllTy _ bndrs (L _ (HsQualTy _ (L _ cntxts) typ2)) -> do
|
||||
#endif
|
||||
typeDoc <- docSharedWrapper layoutType typ2
|
||||
tyVarDocs <- layoutTyVarBndrs bndrs
|
||||
|
@ -153,10 +147,8 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
]
|
||||
#if MIN_VERSION_ghc(8,10,1)
|
||||
HsForAllTy _ _ bndrs typ2 -> do
|
||||
#elif MIN_VERSION_ghc(8,6,0)
|
||||
HsForAllTy _ bndrs typ2 -> do
|
||||
#else
|
||||
HsForAllTy bndrs typ2 -> do
|
||||
HsForAllTy _ bndrs typ2 -> do
|
||||
#endif
|
||||
typeDoc <- layoutType typ2
|
||||
tyVarDocs <- layoutTyVarBndrs bndrs
|
||||
|
@ -212,11 +204,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
]
|
||||
)
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsQualTy _ lcntxts@(L _ cntxts) typ1 -> do
|
||||
#else
|
||||
HsQualTy lcntxts@(L _ cntxts) typ1 -> do
|
||||
#endif
|
||||
typeDoc <- docSharedWrapper layoutType typ1
|
||||
cntxtDocs <- cntxts `forM` docSharedWrapper layoutType
|
||||
let
|
||||
|
@ -266,11 +254,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
]
|
||||
)
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsFunTy _ typ1 typ2 -> do
|
||||
#else
|
||||
HsFunTy typ1 typ2 -> do
|
||||
#endif
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
typeDoc2 <- docSharedWrapper layoutType typ2
|
||||
let maybeForceML = case typ2 of
|
||||
|
@ -294,11 +278,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
]
|
||||
)
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsParTy _ typ1 -> do
|
||||
#else
|
||||
HsParTy typ1 -> do
|
||||
#endif
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
docAlt
|
||||
[ docSeq
|
||||
|
@ -313,7 +293,6 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
])
|
||||
(docLit $ Text.pack ")")
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsAppTy _ typ1@(L _ HsAppTy{}) typ2 -> do
|
||||
let gather :: [LHsType GhcPs] -> LHsType GhcPs -> (LHsType GhcPs, [LHsType GhcPs])
|
||||
gather list = \case
|
||||
|
@ -341,65 +320,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
typeDoc1
|
||||
(docEnsureIndent BrIndentRegular typeDoc2)
|
||||
]
|
||||
#else
|
||||
HsAppTy typ1 typ2 -> do
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
typeDoc2 <- docSharedWrapper layoutType typ2
|
||||
docAlt
|
||||
[ docSeq
|
||||
[ docForceSingleline typeDoc1
|
||||
, docSeparator
|
||||
, docForceSingleline typeDoc2
|
||||
]
|
||||
, docPar
|
||||
typeDoc1
|
||||
(docEnsureIndent BrIndentRegular typeDoc2)
|
||||
]
|
||||
HsAppsTy [] -> error "HsAppsTy []"
|
||||
HsAppsTy [L _ (HsAppPrefix typ1)] -> do
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
typeDoc1
|
||||
HsAppsTy [lname@(L _ (HsAppInfix name))] -> do
|
||||
-- this redirection is somewhat hacky, but whatever.
|
||||
-- TODO: a general problem when doing deep inspections on
|
||||
-- the type (and this is not the only instance)
|
||||
-- is that we potentially omit annotations on some of
|
||||
-- the middle constructors. i have no idea under which
|
||||
-- circumstances exactly important annotations (comments)
|
||||
-- would be assigned to such constructors.
|
||||
typeDoc1 <- -- docSharedWrapper layoutType $ (L l $ HsTyVar name)
|
||||
lrdrNameToTextAnnTypeEqualityIsSpecialAndRespectTick lname name
|
||||
docLit typeDoc1
|
||||
HsAppsTy (L _ (HsAppPrefix typHead):typRestA)
|
||||
| Just typRest <- mapM (\case L _ (HsAppPrefix t) -> Just t
|
||||
_ -> Nothing) typRestA -> do
|
||||
docHead <- docSharedWrapper layoutType typHead
|
||||
docRest <- docSharedWrapper layoutType `mapM` typRest
|
||||
docAlt
|
||||
[ docSeq
|
||||
$ docForceSingleline docHead : (docRest >>= \d ->
|
||||
[ docSeparator, docForceSingleline d ])
|
||||
, docPar docHead (docLines $ docEnsureIndent BrIndentRegular <$> docRest)
|
||||
]
|
||||
HsAppsTy (typHead:typRest) -> do
|
||||
docHead <- docSharedWrapper layoutAppType typHead
|
||||
docRest <- docSharedWrapper layoutAppType `mapM` typRest
|
||||
docAlt
|
||||
[ docSeq
|
||||
$ docForceSingleline docHead : (docRest >>= \d ->
|
||||
[ docSeparator, docForceSingleline d ])
|
||||
, docPar docHead (docLines $ docEnsureIndent BrIndentRegular <$> docRest)
|
||||
]
|
||||
where
|
||||
layoutAppType (L _ (HsAppPrefix t)) = layoutType t
|
||||
layoutAppType lt@(L _ (HsAppInfix t)) =
|
||||
docLit =<< lrdrNameToTextAnnTypeEqualityIsSpecialAndRespectTick lt t
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsListTy _ typ1 -> do
|
||||
#else
|
||||
HsListTy typ1 -> do
|
||||
#endif
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
docAlt
|
||||
[ docSeq
|
||||
|
@ -414,29 +335,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
])
|
||||
(docLit $ Text.pack "]")
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
#else
|
||||
HsPArrTy typ1 -> do
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
docAlt
|
||||
[ docSeq
|
||||
[ docWrapNodeRest ltype $ docLit $ Text.pack "[:"
|
||||
, docForceSingleline typeDoc1
|
||||
, docLit $ Text.pack ":]"
|
||||
]
|
||||
, docPar
|
||||
( docCols ColTyOpPrefix
|
||||
[ docWrapNodeRest ltype $ docLit $ Text.pack "[:"
|
||||
, docAddBaseY (BrIndentSpecial 2) $ typeDoc1
|
||||
])
|
||||
(docLit $ Text.pack ":]")
|
||||
]
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsTupleTy _ tupleSort typs -> case tupleSort of
|
||||
#else
|
||||
HsTupleTy tupleSort typs -> case tupleSort of
|
||||
#endif
|
||||
HsUnboxedTuple -> unboxed
|
||||
HsBoxedTuple -> simple
|
||||
HsConstraintTuple -> simple
|
||||
|
@ -539,11 +438,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
-- }
|
||||
-- , _layouter_ast = ltype
|
||||
-- }
|
||||
#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
HsIParamTy _ (L _ (HsIPName ipName)) typ1 -> do
|
||||
#else /* ghc-8.4 */
|
||||
HsIParamTy (L _ (HsIPName ipName)) typ1 -> do
|
||||
#endif
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
docAlt
|
||||
[ docSeq
|
||||
|
@ -562,33 +457,8 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
, docAddBaseY (BrIndentSpecial 2) typeDoc1
|
||||
])
|
||||
]
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
#else
|
||||
HsEqTy typ1 typ2 -> do
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
typeDoc2 <- docSharedWrapper layoutType typ2
|
||||
docAlt
|
||||
[ docSeq
|
||||
[ docForceSingleline typeDoc1
|
||||
, docWrapNodeRest ltype
|
||||
$ docLit $ Text.pack " ~ "
|
||||
, docForceSingleline typeDoc2
|
||||
]
|
||||
, docPar
|
||||
typeDoc1
|
||||
( docCols ColTyOpPrefix
|
||||
[ docWrapNodeRest ltype
|
||||
$ docLit $ Text.pack "~ "
|
||||
, docAddBaseY (BrIndentSpecial 2) typeDoc2
|
||||
])
|
||||
]
|
||||
#endif
|
||||
-- TODO: test KindSig
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsKindSig _ typ1 kind1 -> do
|
||||
#else
|
||||
HsKindSig typ1 kind1 -> do
|
||||
#endif
|
||||
typeDoc1 <- docSharedWrapper layoutType typ1
|
||||
kindDoc1 <- docSharedWrapper layoutType kind1
|
||||
hasParens <- hasAnnKeyword ltype AnnOpenP
|
||||
|
@ -738,32 +608,22 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of
|
|||
]
|
||||
HsExplicitTupleTy{} -> -- TODO
|
||||
briDocByExactInlineOnly "HsExplicitTupleTy{}" ltype
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsTyLit _ lit -> case lit of
|
||||
#else
|
||||
HsTyLit lit -> case lit of
|
||||
#endif
|
||||
HsNumTy (SourceText srctext) _ -> docLit $ Text.pack srctext
|
||||
HsNumTy NoSourceText _ ->
|
||||
error "overLitValBriDoc: literal with no SourceText"
|
||||
HsStrTy (SourceText srctext) _ -> docLit $ Text.pack srctext
|
||||
HsStrTy NoSourceText _ ->
|
||||
error "overLitValBriDoc: literal with no SourceText"
|
||||
#if !MIN_VERSION_ghc(8,6,0)
|
||||
HsCoreTy{} -> -- TODO
|
||||
briDocByExactInlineOnly "HsCoreTy{}" ltype
|
||||
#endif
|
||||
HsWildCardTy _ ->
|
||||
docLit $ Text.pack "_"
|
||||
HsSumTy{} -> -- TODO
|
||||
briDocByExactInlineOnly "HsSumTy{}" ltype
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
HsStarTy _ isUnicode -> do
|
||||
if isUnicode
|
||||
then docLit $ Text.pack "\x2605" -- Unicode star
|
||||
else docLit $ Text.pack "*"
|
||||
XHsType{} -> error "brittany internal error: XHsType"
|
||||
#endif
|
||||
#if MIN_VERSION_ghc(8,8,0)
|
||||
HsAppKindTy _ ty kind -> do
|
||||
t <- docSharedWrapper layoutType ty
|
||||
|
@ -785,18 +645,11 @@ layoutTyVarBndrs
|
|||
:: [LHsTyVarBndr GhcPs]
|
||||
-> ToBriDocM [(Text, Maybe (ToBriDocM BriDocNumbered))]
|
||||
layoutTyVarBndrs = mapM $ \case
|
||||
#if MIN_VERSION_ghc(8,6,0)
|
||||
(L _ (UserTyVar _ name)) -> return $ (lrdrNameToText name, Nothing)
|
||||
(L _ (KindedTyVar _ lrdrName kind)) -> do
|
||||
d <- docSharedWrapper layoutType kind
|
||||
return $ (lrdrNameToText lrdrName, Just $ d)
|
||||
(L _ (XTyVarBndr{})) -> error "brittany internal error: XTyVarBndr"
|
||||
#else
|
||||
(L _ (UserTyVar name)) -> return $ (lrdrNameToText name, Nothing)
|
||||
(L _ (KindedTyVar lrdrName kind)) -> do
|
||||
d <- docSharedWrapper layoutType kind
|
||||
return $ (lrdrNameToText lrdrName, Just $ d)
|
||||
#endif
|
||||
|
||||
-- there is no specific reason this returns a list instead of a single
|
||||
-- BriDoc node.
|
||||
|
|
|
@ -407,7 +407,7 @@ todo = error "todo"
|
|||
#if MIN_VERSION_ghc(8,8,0)
|
||||
ghcDL :: GHC.HasSrcSpan a => a -> GHC.Located (GHC.SrcSpanLess a)
|
||||
ghcDL = GHC.dL
|
||||
#else /* ghc-8.4 8.6 */
|
||||
#else /* ghc-8.6 */
|
||||
ghcDL :: GHC.Located a -> GHC.Located a
|
||||
ghcDL x = x
|
||||
#endif
|
||||
|
|
|
@ -304,11 +304,8 @@ lines' s = case break (== '\n') s of
|
|||
#if MIN_VERSION_ghc(8,10,1) /* ghc-8.10.1 */
|
||||
absurdExt :: HsExtension.NoExtCon -> a
|
||||
absurdExt = HsExtension.noExtCon
|
||||
#elif MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */
|
||||
#else
|
||||
-- | A method to dismiss NoExt patterns for total matches
|
||||
absurdExt :: HsExtension.NoExt -> a
|
||||
absurdExt = error "cannot construct NoExt"
|
||||
#else
|
||||
absurdExt :: ()
|
||||
absurdExt = ()
|
||||
#endif
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
resolver: lts-12.12
|
||||
|
||||
extra-deps:
|
||||
- ghc-exactprint-0.5.8.1
|
|
@ -1,19 +0,0 @@
|
|||
# This file was autogenerated by Stack.
|
||||
# You should not edit this file by hand.
|
||||
# For more information, please see the documentation at:
|
||||
# https://docs.haskellstack.org/en/stable/lock_files
|
||||
|
||||
packages:
|
||||
- completed:
|
||||
hackage: ghc-exactprint-0.5.8.1@sha256:f76eed0976b854ce03928796e9cff97769e304618ca99bc0f6cdccab31e539d0,7728
|
||||
pantry-tree:
|
||||
size: 83871
|
||||
sha256: 14febc191ef8b0d1f218d13e8db9ed20395f10a5b3d8aa2c0d45869a037420a2
|
||||
original:
|
||||
hackage: ghc-exactprint-0.5.8.1
|
||||
snapshots:
|
||||
- completed:
|
||||
size: 504336
|
||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/12/12.yaml
|
||||
sha256: 11db5c37144d13fe6b56cd511050b4e6ffe988f6edb8e439c2432fc9fcdf50c3
|
||||
original: lts-12.12
|
Loading…
Reference in New Issue