Compare commits
45 Commits
3ad71ce83c
...
3f9e9d9bcb
Author | SHA1 | Date |
---|---|---|
|
3f9e9d9bcb | |
|
414baca643 | |
|
884c7da97c | |
|
ab67a794db | |
|
b6001e9ecc | |
|
52bde7910f | |
|
e11188eb16 | |
|
556bc896a6 | |
|
d2a48ba559 | |
|
7ab6a207ae | |
|
99e5aacb5e | |
|
52e4658314 | |
|
56e7d6b5b9 | |
|
156b5cf407 | |
|
d29303d4cd | |
|
5563cd4d93 | |
|
09ec59eaf9 | |
|
b24379d104 | |
|
2fef44559e | |
|
ebe85a5949 | |
|
736c2a8d46 | |
|
0a76fe952c | |
|
dc4e59f2a1 | |
|
412c5460aa | |
|
dd4367c6e8 | |
|
676695a609 | |
|
75d17b961c | |
|
f13a82964a | |
|
05270ecb45 | |
|
7c329d391b | |
|
5bee3fa93d | |
|
83b13d61a0 | |
|
3121ccacfe | |
|
d9373ec80e | |
|
72c9e4c3ab | |
|
b116529005 | |
|
ee2814e3a8 | |
|
7d3490b80a | |
|
847e01cc30 | |
|
d11141d34d | |
|
dedeab61e2 | |
|
84669034b5 | |
|
7f4730858e | |
|
bff9bfb312 | |
|
4e397441b9 |
100
brittany.cabal
100
brittany.cabal
|
@ -1,7 +1,7 @@
|
|||
cabal-version: 2.2
|
||||
|
||||
name: brittany
|
||||
version: 0.14.0.2
|
||||
version: 92.1.0.0
|
||||
synopsis: Haskell source code formatter
|
||||
description:
|
||||
See <https://github.com/lspitzner/brittany/blob/master/README.md the README>.
|
||||
|
@ -24,8 +24,7 @@ extra-doc-files:
|
|||
README.md
|
||||
doc/implementation/*.md
|
||||
extra-source-files:
|
||||
data/brittany.yaml
|
||||
data/*.hs
|
||||
data/*.blt
|
||||
|
||||
source-repository head
|
||||
type: git
|
||||
|
@ -39,9 +38,9 @@ flag pedantic
|
|||
common library
|
||||
build-depends:
|
||||
, aeson ^>= 2.0.1
|
||||
, base ^>= 4.15.0
|
||||
, base >= 4.15.0 && < 4.17
|
||||
, butcher ^>= 2.0.0
|
||||
, bytestring ^>= 0.10.12
|
||||
, bytestring >= 0.10.12 && < 0.12
|
||||
, cmdargs ^>= 0.10.21
|
||||
, containers ^>= 0.6.4
|
||||
, czipwith ^>= 1.0.1
|
||||
|
@ -50,17 +49,17 @@ common library
|
|||
, directory ^>= 1.3.6
|
||||
, extra ^>= 1.7.10
|
||||
, filepath ^>= 1.4.2
|
||||
, ghc ^>= 9.0.1
|
||||
, ghc-boot ^>= 9.0.1
|
||||
, ghc-boot-th ^>= 9.0.1
|
||||
, ghc-exactprint ^>= 0.6.4
|
||||
, ghc >= 9.0.1 && < 9.3
|
||||
, ghc-boot >= 9.0.1 && < 9.3
|
||||
, ghc-boot-th >= 9.0.1 && < 9.3
|
||||
, ghc-exactprint >= 0.6.4 && < 1.6
|
||||
, monad-memo ^>= 0.5.3
|
||||
, mtl ^>= 2.2.2
|
||||
, multistate ^>= 0.8.0
|
||||
, pretty ^>= 1.1.3
|
||||
, random ^>= 1.2.1
|
||||
, safe ^>= 0.3.19
|
||||
, semigroups ^>= 0.19.2
|
||||
, semigroups >= 0.19.2 && < 0.21
|
||||
, strict ^>= 0.4.0
|
||||
, syb ^>= 0.7.2
|
||||
, text ^>= 1.2.5
|
||||
|
@ -71,7 +70,6 @@ common library
|
|||
ghc-options:
|
||||
-Weverything
|
||||
-Wno-all-missed-specialisations
|
||||
-Wno-incomplete-uni-patterns
|
||||
-Wno-missing-deriving-strategies
|
||||
-Wno-missing-export-lists
|
||||
-Wno-missing-import-lists
|
||||
|
@ -81,10 +79,28 @@ common library
|
|||
-Wno-prepositive-qualified-module
|
||||
-Wno-safe
|
||||
-Wno-unsafe
|
||||
-Wno-missing-kind-signatures
|
||||
-Wunused-imports
|
||||
-fhide-source-paths
|
||||
|
||||
if flag(pedantic)
|
||||
ghc-options: -Werror
|
||||
|
||||
default-extensions: {
|
||||
FlexibleContexts
|
||||
FlexibleInstances
|
||||
ScopedTypeVariables
|
||||
MonadComprehensions
|
||||
LambdaCase
|
||||
MultiWayIf
|
||||
KindSignatures
|
||||
MultiParamTypeClasses
|
||||
TypeApplications
|
||||
RankNTypes
|
||||
GADTs
|
||||
BangPatterns
|
||||
}
|
||||
|
||||
common executable
|
||||
import: library
|
||||
|
||||
|
@ -94,6 +110,7 @@ common executable
|
|||
-threaded
|
||||
-Wno-implicit-prelude
|
||||
-Wno-unused-packages
|
||||
-fhide-source-paths
|
||||
|
||||
library
|
||||
import: library
|
||||
|
@ -101,36 +118,45 @@ library
|
|||
autogen-modules: Paths_brittany
|
||||
hs-source-dirs: source/library
|
||||
exposed-modules:
|
||||
Language.Haskell.Brittany.Main
|
||||
Language.Haskell.Brittany
|
||||
Language.Haskell.Brittany.Internal
|
||||
Language.Haskell.Brittany.Internal.Backend
|
||||
Language.Haskell.Brittany.Internal.BackendUtils
|
||||
Language.Haskell.Brittany.Internal.Config
|
||||
Language.Haskell.Brittany.Internal.Config.Config
|
||||
Language.Haskell.Brittany.Internal.Config.InlineParsing
|
||||
Language.Haskell.Brittany.Internal.Config.Types
|
||||
Language.Haskell.Brittany.Internal.Config.Types.Instances
|
||||
Language.Haskell.Brittany.Internal.ExactPrintUtils
|
||||
Language.Haskell.Brittany.Internal.LayouterBasics
|
||||
Language.Haskell.Brittany.Internal.Layouters.DataDecl
|
||||
Language.Haskell.Brittany.Internal.Layouters.Decl
|
||||
Language.Haskell.Brittany.Internal.Layouters.Expr
|
||||
Language.Haskell.Brittany.Internal.Layouters.IE
|
||||
Language.Haskell.Brittany.Internal.Layouters.Import
|
||||
Language.Haskell.Brittany.Internal.Layouters.Module
|
||||
Language.Haskell.Brittany.Internal.Layouters.Pattern
|
||||
Language.Haskell.Brittany.Internal.Layouters.Stmt
|
||||
Language.Haskell.Brittany.Internal.Layouters.Type
|
||||
Language.Haskell.Brittany.Internal.Obfuscation
|
||||
Language.Haskell.Brittany.Internal.ParseModule
|
||||
Language.Haskell.Brittany.Internal.Config.Types.Instances1
|
||||
Language.Haskell.Brittany.Internal.Config.Types.Instances2
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.DataDecl
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Decl
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Expr
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.OpTree
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.IE
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Import
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Module
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Pattern
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Stmt
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc.Type
|
||||
Language.Haskell.Brittany.Internal.ToBriDoc
|
||||
Language.Haskell.Brittany.Internal.Components.BriDoc
|
||||
Language.Haskell.Brittany.Internal.Components.Obfuscation
|
||||
Language.Haskell.Brittany.Internal.Components.OpTree
|
||||
Language.Haskell.Brittany.Internal.S1_Parsing
|
||||
Language.Haskell.Brittany.Internal.S2_SplitModule
|
||||
Language.Haskell.Brittany.Internal.S3_ToBriDocTools
|
||||
Language.Haskell.Brittany.Internal.S4_WriteBriDoc
|
||||
Language.Haskell.Brittany.Internal.StepOrchestrate
|
||||
Language.Haskell.Brittany.Internal.Prelude
|
||||
Language.Haskell.Brittany.Internal.PreludeUtils
|
||||
Language.Haskell.Brittany.Internal.Transformations.Alt
|
||||
Language.Haskell.Brittany.Internal.Transformations.Columns
|
||||
Language.Haskell.Brittany.Internal.Transformations.Floating
|
||||
Language.Haskell.Brittany.Internal.Transformations.Indent
|
||||
Language.Haskell.Brittany.Internal.Transformations.Par
|
||||
Language.Haskell.Brittany.Internal.Transformations.T1_Alt
|
||||
Language.Haskell.Brittany.Internal.Transformations.T2_Floating
|
||||
Language.Haskell.Brittany.Internal.Transformations.T3_Par
|
||||
Language.Haskell.Brittany.Internal.Transformations.T4_Columns
|
||||
Language.Haskell.Brittany.Internal.Transformations.T5_Indent
|
||||
Language.Haskell.Brittany.Internal.WriteBriDoc.AlignmentAlgo
|
||||
Language.Haskell.Brittany.Internal.WriteBriDoc.Operators
|
||||
Language.Haskell.Brittany.Internal.WriteBriDoc.Types
|
||||
Language.Haskell.Brittany.Internal.Types
|
||||
Language.Haskell.Brittany.Internal.Utils
|
||||
Language.Haskell.Brittany.Main
|
||||
Language.Haskell.Brittany.Internal.Util.AST
|
||||
Paths_brittany
|
||||
|
||||
executable brittany
|
||||
|
@ -143,7 +169,9 @@ test-suite brittany-test-suite
|
|||
import: executable
|
||||
|
||||
build-depends:
|
||||
, hspec ^>= 2.8.3
|
||||
, hspec >= 2.8.3 && < 2.10
|
||||
, parsec ^>= 3.1.14
|
||||
, these ^>= 1.1
|
||||
hs-source-dirs: source/test-suite
|
||||
main-is: Main.hs
|
||||
type: exitcode-stdio-1.0
|
||||
|
|
|
@ -0,0 +1,288 @@
|
|||
#group data type declarations
|
||||
|
||||
|
||||
#test nullary data type
|
||||
data Foo = Bar {}
|
||||
|
||||
data Biz = Baz
|
||||
|
||||
#test single record
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
}
|
||||
|
||||
#test record multiple names
|
||||
data Foo = Bar
|
||||
{ foo, bar :: Baz
|
||||
}
|
||||
|
||||
#test record multiple types
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
|
||||
#test record multiple types and names
|
||||
data Foo = Bar
|
||||
{ foo, biz :: Baz
|
||||
, bar :: Bizzz
|
||||
}
|
||||
|
||||
#test record multiple types deriving
|
||||
data Foo = Bar
|
||||
{ fooz :: Baz
|
||||
, bar :: Bizzz
|
||||
}
|
||||
deriving Show
|
||||
|
||||
#test record long field names
|
||||
data MyRecord = MyConstructor
|
||||
{ bar1, bar2
|
||||
:: Loooooooooooooooooooooooooooooooong
|
||||
-> Loooooooooooooooooooooooooooooooong
|
||||
, foo1, foo2
|
||||
:: Loooooooooooooooooooooooooooooooonger
|
||||
-> Loooooooooooooooooooooooooooooooonger
|
||||
}
|
||||
|
||||
#test record with DataTypeContexts
|
||||
{-# LANGUAGE DatatypeContexts #-}
|
||||
data
|
||||
( LooooooooooooooooooooongConstraint a
|
||||
, LooooooooooooooooooooongConstraint b
|
||||
) =>
|
||||
MyRecord a b
|
||||
= MyConstructor
|
||||
{ foo1, foo2
|
||||
:: loooooooooooooooooooooooooooooooong
|
||||
-> loooooooooooooooooooooooooooooooong
|
||||
, bar :: a
|
||||
, bazz :: b
|
||||
}
|
||||
|
||||
#test record single line layout
|
||||
#pending config flag is disabled for now
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
-- brittany { lconfig_allowSinglelineRecord: true }
|
||||
data MyRecord = forall a . Show a => MyCons { foo :: a -> a, i :: Int }
|
||||
|
||||
#test record no matching single line layout
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
-- brittany { lconfig_allowSinglelineRecord: true }
|
||||
data MyRecord = forall a . Show a => Bar
|
||||
{ foo :: abittoolongbutnotvery -> abittoolongbutnotvery
|
||||
}
|
||||
|
||||
#test record forall constraint multiline
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
data MyRecord
|
||||
= forall a
|
||||
. LooooooooooooooooooooongConstraint a =>
|
||||
LoooooooooooongConstructor
|
||||
{ foo :: abittoolongbutnotvery -> abittoolongbutnotvery
|
||||
}
|
||||
|
||||
#test record forall constraint multiline more
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
data MyRecord
|
||||
= forall a b
|
||||
. ( Loooooooooooooooooooooooooooooooong a
|
||||
, Loooooooooooooooooooooooooooooooong b
|
||||
) =>
|
||||
MyConstructor
|
||||
{ a :: a
|
||||
, b :: b
|
||||
}
|
||||
|
||||
#test plain with forall and constraint
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
data MyStruct
|
||||
= forall a b
|
||||
. ( Loooooooooooooooooooooooooooooooong a
|
||||
, Loooooooooooooooooooooooooooooooong b
|
||||
) =>
|
||||
MyConstructor (ToBriDocM BriDocNumbered)
|
||||
(ToBriDocM BriDocNumbered)
|
||||
(ToBriDocM BriDocNumbered)
|
||||
|
||||
#test record with many features
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
data MyRecord
|
||||
= forall a b
|
||||
. ( Loooooooooooooooooooooooooooooooong a
|
||||
, Loooooooooooooooooooooooooooooooong b
|
||||
) =>
|
||||
MyConstructor
|
||||
{ foo, foo2
|
||||
:: loooooooooooooooooooooooooooooooong
|
||||
-> loooooooooooooooooooooooooooooooong
|
||||
, bar :: a
|
||||
, bazz :: b
|
||||
}
|
||||
deriving Show
|
||||
|
||||
#test record multiple types deriving
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
deriving (Show, Eq, Monad, Functor, Traversable, Foldable)
|
||||
|
||||
#test record multiple deriving strategies
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
deriving Show
|
||||
deriving (Eq, Ord)
|
||||
deriving stock Show
|
||||
deriving stock (Eq, Ord)
|
||||
deriving anyclass Show
|
||||
deriving anyclass (Show, Eq, Monad, Functor)
|
||||
deriving newtype Show
|
||||
deriving newtype (Traversable, Foldable)
|
||||
|
||||
#test record deriving via
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
deriving ToJSON via (SomeType)
|
||||
deriving (ToJSON, FromJSON) via (SomeType)
|
||||
|
||||
#test single record existential
|
||||
{-# LANGUAGE ExistentialQuantification #-}
|
||||
|
||||
data Foo = forall a . Show a => Bar
|
||||
{ foo :: a
|
||||
}
|
||||
|
||||
#test record multiple types existential
|
||||
{-# LANGUAGE ExistentialQuantification #-}
|
||||
|
||||
data Foo = forall a b . (Show a, Eq b) => Bar
|
||||
{ foo :: a
|
||||
, bars :: b
|
||||
}
|
||||
|
||||
#test plain comment simple
|
||||
-- before
|
||||
data MyData = MyData Int
|
||||
-- after
|
||||
|
||||
#test record newline comment
|
||||
data MyRecord = MyRecord
|
||||
{ a :: Int
|
||||
-- comment
|
||||
, b :: Int
|
||||
}
|
||||
|
||||
#test record comments simple
|
||||
data Foo = Bar -- a
|
||||
{ foo :: Baz -- b
|
||||
, bars :: Bizzz -- c
|
||||
} -- d
|
||||
deriving (Show, Eq, Monad, Functor, Traversable, Foldable) -- e
|
||||
|
||||
#test record comments strange inline
|
||||
data Foo = Bar
|
||||
{ -- a
|
||||
foo -- b
|
||||
:: -- c
|
||||
Baz -- d
|
||||
, -- e
|
||||
bars :: Bizzz
|
||||
}
|
||||
deriving (Show, Eq, Monad, Functor, Traversable, Foldable)
|
||||
|
||||
#test record comments in deriving
|
||||
## maybe we want to switch to a differnt layout when there are such comments.
|
||||
## Don't hesitate to modify this testcase, it clearly is not the ideal layout
|
||||
## for this.
|
||||
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
-- a
|
||||
deriving --b
|
||||
( -- c
|
||||
ToJSON -- d
|
||||
, -- e
|
||||
FromJSON --f
|
||||
) -- g
|
||||
|
||||
#test record comments in deriving via
|
||||
## maybe we want to switch to a differnt layout when there are such comments.
|
||||
## Don't hesitate to modify this testcase, it clearly is not the ideal layout
|
||||
## for this.
|
||||
|
||||
data Foo = Bar
|
||||
{ foo :: Baz
|
||||
, bars :: Bizzz
|
||||
}
|
||||
-- a
|
||||
deriving --a
|
||||
ToJSON --b
|
||||
via -- c
|
||||
( -- d
|
||||
SomeType --e
|
||||
, -- f
|
||||
ABC --g
|
||||
)
|
||||
|
||||
#test comment before equal sign
|
||||
{-# LANGUAGE ExistentialQuantification #-}
|
||||
data MyRecord
|
||||
-- test comment
|
||||
= forall a b
|
||||
. ( Loooooooooooooooooooooooooooooooong a
|
||||
, Loooooooooooooooooooooooooooooooong b
|
||||
) =>
|
||||
MyConstructor a b
|
||||
|
||||
#test normal records on multi line indent policy left
|
||||
-- brittany {lconfig_indentPolicy: IndentPolicyLeft }
|
||||
data EnterpriseGrantsForCompanyResponse = EnterpriseGrantsForCompanyResponse
|
||||
Types.Company
|
||||
[EnterpriseGrantResponse]
|
||||
|
||||
#test normal records on multi line indent policy free
|
||||
-- brittany {lconfig_indentPolicy: IndentPolicyFree }
|
||||
data GrantsForCompanyResp = GrantsForCompanyResp Types.Company
|
||||
[EnterpriseGrantResponse]
|
||||
|
||||
#test normal records on multi line indent policy free 2
|
||||
-- brittany {lconfig_indentPolicy: IndentPolicyFree }
|
||||
data EnterpriseGrantsForCompanyResponse = EnterpriseGrantsForCompanyResponse
|
||||
Types.Company
|
||||
[EnterpriseGrantResponse]
|
||||
|
||||
#test normal records on multi line indent policy multiple
|
||||
-- brittany {lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
data GrantsForCompanyResp = GrantsForCompanyResp Types.Company
|
||||
[EnterpriseGrantResponse]
|
||||
|
||||
#test large record with a comment
|
||||
data XIILqcacwiuNiu = XIILqcacwiuNiu
|
||||
{ oyyFtvbepgbOge_pebzVmuftEijwuj :: Jgtoyuh HessJvNlo
|
||||
, wloQsiskdoxJop_xatiKrwedOxtu :: Jgtoyuh [Inotg]
|
||||
, mmmJjcqtemyIyo_ovosDoreKeeoyamvove :: Jgtoyuh Eujo
|
||||
, mbiIatelofxOzr_uluxNngiiMjah :: Jgtoyuh HessJvNlo
|
||||
, obxIskfcxpkIkb_uuviTuevcSkrgo :: Jgtoyuh Int
|
||||
, wqrAtuvuecoHwr_ilotNxbuPleo :: Jgtoyuh Ufaxdeq
|
||||
, lofAfuebdhpLuv_cnekPoyFxmg :: Jgtoyuh Ufaxdeq
|
||||
, ouoFugtawzvUpk_oupiLzptugy :: Jgtoyuh Eujo
|
||||
, iqiXjtziwogNsa_uiyvSunaTtgUsf3 :: Jgtoyuh Oaivn
|
||||
, odbIriaqnojUlz_onotoWuunehIpuy :: Jgtoyuh Eujo
|
||||
, opjUxtkxzkiKse_luqjuZazt
|
||||
:: Jgtoyuh [(Eujo, Int, Int, Int, Int, Int, NELUxro)]
|
||||
-- , jcqRaqznxfhIpa_ywevMezmoYkutuwa :: Jgtoyuh ()
|
||||
, vayOmuasyphOfd_bcsVljmvt :: Jgtoyuh Eujo
|
||||
, rifArahilooRax_ufikecqdImsv :: Jgtoyuh Oaivn
|
||||
, raqKtopcpszDwb_oqocubasZuqjcryoDojGkw :: Jgtoyuh Oaivn
|
||||
, mluJiilpcijUtt_gaisklifVekfeyagRmfbyzz :: Jgtoyuh Oaivn
|
||||
, oqhPaahjupaSmi_gamwwoovKyxznecvEayluc :: Jgtoyuh Oaivn
|
||||
, mazFubimwebZpa_itidehDodiDlboz :: Jgtoyuh Vrep
|
||||
, jeyOcuesexaYoy_vpqn :: Jgtoyuh ()
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
#group decl/instance
|
||||
|
||||
|
||||
#test simple-instance
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod x = x + 1
|
||||
|
||||
#test simple-method-comment
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod x =
|
||||
-- insightful comment
|
||||
x + 1
|
||||
|
||||
#test simple-method-signature
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod :: Int -> Int
|
||||
myMethod x = x + 1
|
||||
|
||||
#test simple-long-method-signature
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod
|
||||
:: Int
|
||||
-> Int
|
||||
-> AReallyLongType
|
||||
-> AReallyLongType
|
||||
-> AReallyLongType
|
||||
-> Int
|
||||
myMethod x = x + 1
|
||||
|
||||
#test simple-two-methods
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod x = x + 1
|
||||
myMethod2 x = x + 1
|
||||
|
||||
#test simple-two-signatures
|
||||
|
||||
instance MyClass Int where
|
||||
myMethod
|
||||
:: Int
|
||||
-> Int
|
||||
-> AReallyLongType
|
||||
-> AReallyLongType
|
||||
-> AReallyLongType
|
||||
-> Int
|
||||
myMethod x = x + 1
|
||||
|
||||
myMethod2 :: Int -> Int
|
||||
myMethod2 x = x + 1
|
||||
|
||||
#test simple-instance-comment
|
||||
|
||||
-- | This instance should be commented on
|
||||
instance MyClass Int where
|
||||
|
||||
-- | This method is also comment-worthy
|
||||
myMethod x = x + 1
|
||||
|
||||
#test instance-with-type-family
|
||||
|
||||
instance MyClass Int where
|
||||
type MyType = Int
|
||||
|
||||
myMethod :: MyType -> Int
|
||||
myMethod x = x + 1
|
||||
|
||||
#test instance-with-type-family-below-method
|
||||
|
||||
instance MyClass Int where
|
||||
|
||||
type MyType = String
|
||||
|
||||
myMethod :: MyType -> Int
|
||||
myMethod x = x + 1
|
||||
|
||||
type MyType = Int
|
||||
|
||||
#test instance-with-data-family
|
||||
|
||||
instance MyClass Int where
|
||||
|
||||
-- | This data is very important
|
||||
data MyData = IntData
|
||||
{ intData :: String
|
||||
, intData2 :: Int
|
||||
}
|
||||
|
||||
myMethod :: MyData -> Int
|
||||
myMethod = intData2
|
||||
|
||||
#test instance-with-data-family-below-method
|
||||
|
||||
instance MyClass Int where
|
||||
-- | This data is important
|
||||
data MyData = Test Int Int
|
||||
|
||||
myMethod :: MyData -> Int
|
||||
myMethod = intData2
|
||||
|
||||
-- | This data is also important
|
||||
data MyData2 = IntData
|
||||
{ intData :: String
|
||||
-- ^ Interesting field
|
||||
, intData2 :: Int
|
||||
}
|
||||
|
||||
#test instance-with-newtype-family-and-deriving
|
||||
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
|
||||
module Lib where
|
||||
|
||||
instance Foo () where
|
||||
newtype Bar () = Baz ()
|
||||
deriving (Eq, Ord, Show)
|
||||
bar = Baz
|
||||
|
||||
#test instance-with-newtype-family-and-record
|
||||
|
||||
instance Foo Int where
|
||||
newtype Bar Int = BarInt
|
||||
{ unBarInt :: Int
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
#group decl/typefam/ghc9-support
|
||||
|
||||
|
||||
#test type-instance-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
type family F a
|
||||
type instance F Int = IO Int
|
||||
|
||||
#test type-instance-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
type family F a
|
||||
type instance F Int = IO Int -- x
|
||||
|
||||
#test type-instance-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
type family F a
|
||||
type instance F Int = IO Int
|
||||
|
||||
#test newtype-instance-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
data family F a
|
||||
newtype instance F Int = N Int
|
||||
|
||||
#test newtype-instance-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
data family F a
|
||||
newtype instance F Int = N Int -- x
|
||||
|
||||
#test newtype-instance-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
data family F a
|
||||
newtype instance F Int = N Int
|
||||
|
||||
#test data-instance-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
data family F a
|
||||
data instance F Int = D Int
|
||||
|
||||
#test data-instance-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
data family F a
|
||||
data instance F Int = D Int -- x
|
||||
|
||||
#test data-instance-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
data family F a
|
||||
data instance F Int = D Int
|
||||
|
||||
#test instance-type-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
type family F a
|
||||
instance C Int where
|
||||
type F Int = IO Int
|
||||
|
||||
#test instance-type-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
type family F a
|
||||
instance C Int where
|
||||
type F Int = IO Int -- x
|
||||
|
||||
#test instance-type-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
class C a where
|
||||
type family F a
|
||||
instance C Int where
|
||||
type F Int = IO Int
|
||||
|
||||
#test instance-newtype-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
newtype F Int = N Int
|
||||
|
||||
#test instance-newtype-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
newtype F Int = N Int -- x
|
||||
|
||||
#test instance-newtype-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
newtype F Int = N Int
|
||||
|
||||
#test instance-data-without-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
data F Int = D Int
|
||||
|
||||
#test instance-data-with-comment
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
data F Int = D Int -- x
|
||||
|
||||
#test instance-data-with-module-header
|
||||
|
||||
{-# language TypeFamilies #-}
|
||||
module M where
|
||||
class C a where
|
||||
data family F a
|
||||
instance C Int where
|
||||
data F Int = D Int
|
|
@ -0,0 +1,36 @@
|
|||
#group decl/typefam/instance
|
||||
|
||||
|
||||
#test simple-typefam-instance
|
||||
|
||||
type instance MyFam Bool = String
|
||||
|
||||
#test simple-typefam-instance-param-type
|
||||
|
||||
type instance MyFam (Maybe a) = a -> Bool
|
||||
|
||||
#test simple-typefam-instance-parens
|
||||
#pending the parens cause problems since ghc-8.8
|
||||
|
||||
type instance (MyFam (String -> Int)) = String
|
||||
|
||||
#test simple-typefam-instance-overflow
|
||||
|
||||
type instance MyFam ALongishType
|
||||
= AMuchLongerTypeThanThat
|
||||
-> AnEvenLongerTypeThanTheLastOne
|
||||
-> ShouldDefinitelyOverflow
|
||||
|
||||
#test simple-typefam-instance-comments
|
||||
|
||||
-- | A happy family
|
||||
type instance MyFam Bool -- This is an odd one
|
||||
= AnotherType -- Here's another
|
||||
|
||||
#test simple-typefam-instance-parens-comment
|
||||
#pending the parens cause problems since ghc-8.8
|
||||
|
||||
-- | A happy family
|
||||
type instance (MyFam Bool) -- This is an odd one
|
||||
= -- Here's another
|
||||
AnotherType
|
|
@ -0,0 +1,150 @@
|
|||
#group expression/basic
|
||||
|
||||
|
||||
#test var
|
||||
func = x
|
||||
|
||||
describe "infix op" $ do
|
||||
#test 1
|
||||
func = x + x
|
||||
|
||||
#test long
|
||||
func =
|
||||
mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
+ mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
|
||||
#test long keep linemode 1
|
||||
func =
|
||||
mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
+ mweroiuxlskdfjlksj
|
||||
+ mweroiuxlskdfjlksj
|
||||
|
||||
#test long keep linemode 2
|
||||
func =
|
||||
mweroiuxlskdfjlksj
|
||||
+ mweroiuxlskdfjlksj
|
||||
+ mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
|
||||
#test literals
|
||||
func = 1
|
||||
func = "abc"
|
||||
func = 1.1e5
|
||||
func = 'x'
|
||||
func = 981409823458910394810928414192837123987123987123
|
||||
|
||||
#test lambda
|
||||
func = \x -> abc
|
||||
|
||||
describe "app" $ do
|
||||
#test 1
|
||||
func = klajsdas klajsdas klajsdas
|
||||
|
||||
#test 2
|
||||
func =
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
|
||||
#test 3
|
||||
func =
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd lakjsdlajsdljas
|
||||
lakjsdlajsdljas
|
||||
lakjsdlajsdljas
|
||||
|
||||
###
|
||||
#group expression.basic.sections
|
||||
###
|
||||
|
||||
#test left
|
||||
func = (1 +)
|
||||
|
||||
#test right
|
||||
func = (+ 1)
|
||||
|
||||
#test left inf
|
||||
func = (1 `abc`)
|
||||
|
||||
#test right inf
|
||||
func = (`abc` 1)
|
||||
|
||||
###
|
||||
#group tuples
|
||||
###
|
||||
|
||||
#test pair
|
||||
func = (abc, def)
|
||||
|
||||
#test pair section left
|
||||
func = (abc, )
|
||||
|
||||
#test pair section right
|
||||
func = (, abc)
|
||||
|
||||
#test quintuple section long
|
||||
myTupleSection =
|
||||
( verylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargefirstelement
|
||||
,
|
||||
, verylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargethirdelement
|
||||
,
|
||||
)
|
||||
|
||||
#test 2
|
||||
func =
|
||||
( lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
, lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
)
|
||||
|
||||
#test comment-after-then
|
||||
foo = if True
|
||||
then
|
||||
-- iiiiii
|
||||
"a "
|
||||
else
|
||||
"b "
|
||||
|
||||
#test comment-after-if-else-do
|
||||
func = if cond
|
||||
then pure 42
|
||||
else do
|
||||
-- test
|
||||
abc
|
||||
|
||||
#test nonempty-case-short
|
||||
func = case x of
|
||||
False -> False
|
||||
True -> True
|
||||
|
||||
#test nonempty-case-long
|
||||
func =
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of
|
||||
False -> False
|
||||
True -> True
|
||||
|
||||
#test nonempty-case-long-do
|
||||
func = do
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of
|
||||
False -> False
|
||||
True -> True
|
||||
|
||||
#test empty-case-short
|
||||
func = case x of {}
|
||||
|
||||
#test empty-case-long
|
||||
func =
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of {}
|
||||
|
||||
#test empty-case-long-do
|
||||
func = do
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of {}
|
|
@ -0,0 +1,26 @@
|
|||
#group expression/do
|
||||
|
||||
|
||||
#test simple
|
||||
func = do
|
||||
stmt
|
||||
stmt
|
||||
|
||||
#test bind
|
||||
func = do
|
||||
x <- stmt
|
||||
stmt x
|
||||
|
||||
#test let
|
||||
func = do
|
||||
let x = 13
|
||||
stmt x
|
||||
|
||||
#test do empty lines
|
||||
func = do
|
||||
<BLANKLINE>
|
||||
let x = 13
|
||||
<BLANKLINE>
|
||||
y <- monadic
|
||||
<BLANKLINE>
|
||||
stmt (x + y)
|
|
@ -0,0 +1,27 @@
|
|||
#group expression/let
|
||||
|
||||
|
||||
#test single-bind-comment-long
|
||||
testMethod foo bar baz qux =
|
||||
let x = undefined foo bar baz qux qux baz bar :: String
|
||||
-- some comment explaining the in expression
|
||||
in undefined foo x :: String
|
||||
|
||||
#test single-bind-comment-short
|
||||
testMethod foo bar baz qux =
|
||||
let x = undefined :: String
|
||||
-- some comment explaining the in expression
|
||||
in undefined :: String
|
||||
|
||||
#test single-bind-comment-before
|
||||
testMethod foo bar baz qux =
|
||||
-- some comment explaining the in expression
|
||||
let x = undefined :: String in undefined :: String
|
||||
|
||||
#test multiple-binds-comment
|
||||
foo foo bar baz qux =
|
||||
let a = 1
|
||||
b = 2
|
||||
c = 3
|
||||
-- some comment explaining the in expression
|
||||
in undefined :: String
|
|
@ -0,0 +1,16 @@
|
|||
#group expression.special
|
||||
|
||||
|
||||
#test monad-comprehension-case-of
|
||||
func = foooooo
|
||||
$ [ case foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo of
|
||||
_ -> True
|
||||
]
|
||||
|
||||
#test operatorprefixalignment-even-with-multiline-alignbreak
|
||||
func =
|
||||
foo
|
||||
$ [ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
]
|
||||
++ [ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]
|
|
@ -0,0 +1,92 @@
|
|||
###############################################################################
|
||||
#group decl/binding/basic
|
||||
###############################################################################
|
||||
|
||||
#test basic 1
|
||||
func x = x
|
||||
|
||||
#test infix 1
|
||||
x *** y = x
|
||||
|
||||
#test symbol prefix
|
||||
(***) x y = x
|
||||
|
||||
#test infix more args simple
|
||||
(f >=> g) k = f k >>= g
|
||||
|
||||
#test infix more args alignment
|
||||
(Left a <$$> Left dd) e f = True
|
||||
(Left a <$$> Right d ) e f = True
|
||||
(Right a <$$> Left d ) e f = False
|
||||
(Right a <$$> Right dd) e f = True
|
||||
|
||||
|
||||
###############################################################################
|
||||
#group decl/binding/patterns
|
||||
###############################################################################
|
||||
|
||||
#test wildcard
|
||||
func _ = x
|
||||
|
||||
#test simple long pattern
|
||||
func reallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvariable =
|
||||
x
|
||||
|
||||
#test simple multiline pattern
|
||||
func reallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvariable reallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvariable
|
||||
= x
|
||||
|
||||
#test another multiline pattern
|
||||
func reallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvariable a b
|
||||
= x
|
||||
|
||||
#test simple constructor
|
||||
func (A a) = a
|
||||
|
||||
#test list constructor
|
||||
func (x : xr) = x
|
||||
|
||||
#test some other constructor symbol
|
||||
func (x :+: xr) = x
|
||||
|
||||
#test normal infix constructor
|
||||
func (x `Foo` xr) = x
|
||||
|
||||
|
||||
###############################################################################
|
||||
#group decl/binding/guards
|
||||
###############################################################################
|
||||
|
||||
#test simple guard
|
||||
func | True = x
|
||||
|
||||
#test multiple-clauses-1
|
||||
func x | x = simple expression
|
||||
| otherwise = 0
|
||||
|
||||
#test multiple-clauses-2
|
||||
func x
|
||||
| a somewhat longer guard x = "and a somewhat longer expession that does not"
|
||||
| otherwise = "fit without putting the guards in new lines"
|
||||
|
||||
#test multiple-clauses-3
|
||||
func x
|
||||
| very long guard, another rather long guard that refers to x
|
||||
= nontrivial expression foo bar alsdkjlasdjlasj
|
||||
| otherwise
|
||||
= 0
|
||||
|
||||
#test multiple-clauses-4
|
||||
func x
|
||||
| very long guard, another rather long guard that refers to x
|
||||
= nontrivialexpression foo bar alsdkjlasdjlasj
|
||||
| otherwise
|
||||
= 0
|
||||
|
||||
#test multiple-clauses-5
|
||||
func x
|
||||
| very loooooooooooooooooooooooooooooong guard
|
||||
, another rather long guard that refers to x
|
||||
= nontrivial expression foo bar alsdkjlasdjlasj
|
||||
| otherwise
|
||||
= 0
|
|
@ -0,0 +1,271 @@
|
|||
#group module/imports
|
||||
|
||||
|
||||
#test simple-import
|
||||
import Data.List
|
||||
|
||||
#test simple-import-alias
|
||||
import Data.List as L
|
||||
|
||||
#test simple-qualified-import
|
||||
import qualified Data.List
|
||||
|
||||
#test simple-qualified-import-alias
|
||||
import qualified Data.List as L
|
||||
|
||||
#test simple-safe
|
||||
import safe Data.List as L
|
||||
|
||||
#test simple-source
|
||||
import {-# SOURCE #-} Data.List ( )
|
||||
|
||||
#test simple-safe-qualified
|
||||
import safe qualified Data.List
|
||||
|
||||
#test simple-safe-qualified-source
|
||||
import {-# SOURCE #-} safe qualified Data.List
|
||||
|
||||
#test simple-qualified-package
|
||||
import qualified "base" Data.List
|
||||
|
||||
#test qualifier-effect
|
||||
import {-# SOURCE #-} safe qualified "base" Data.List as L
|
||||
import {-# SOURCE #-} safe qualified "base" Data.List ( )
|
||||
import {-# SOURCE #-} safe qualified Data.List hiding ( )
|
||||
|
||||
#test instances-only
|
||||
import qualified Data.List ( )
|
||||
|
||||
#test one-element
|
||||
import Data.List ( nub )
|
||||
|
||||
#test several-elements
|
||||
import Data.List ( foldl'
|
||||
, indexElem
|
||||
, nub
|
||||
)
|
||||
|
||||
#test a-ridiculous-amount-of-elements
|
||||
import Test ( Long
|
||||
, anymore
|
||||
, fit
|
||||
, items
|
||||
, line
|
||||
, list
|
||||
, not
|
||||
, onA
|
||||
, quite
|
||||
, single
|
||||
, that
|
||||
, will
|
||||
, with
|
||||
)
|
||||
|
||||
#test with-things
|
||||
import Test ( (+)
|
||||
, (:!)(..)
|
||||
, (:*)((:.), T7, t7)
|
||||
, (:.)
|
||||
, T
|
||||
, T2()
|
||||
, T3(..)
|
||||
, T4(T4)
|
||||
, T5(T5, t5)
|
||||
, T6((<|>))
|
||||
)
|
||||
|
||||
#test hiding
|
||||
import Test hiding ( )
|
||||
import Test as T
|
||||
hiding ( )
|
||||
|
||||
#test import-hiding-many
|
||||
import Prelude as X
|
||||
hiding ( head
|
||||
, init
|
||||
, last
|
||||
, maximum
|
||||
, minimum
|
||||
, pred
|
||||
, read
|
||||
, readFile
|
||||
, succ
|
||||
, tail
|
||||
, undefined
|
||||
)
|
||||
|
||||
#test long-module-name-simple
|
||||
import TestJustAbitToLongModuleNameLikeThisOneIs
|
||||
( )
|
||||
import TestJustShortEnoughModuleNameLikeThisOne ( )
|
||||
|
||||
#test long-module-name-as
|
||||
import TestJustAbitToLongModuleNameLikeThisOneI
|
||||
as T
|
||||
import TestJustShortEnoughModuleNameLikeThisOn as T
|
||||
|
||||
#test long-module-name-hiding
|
||||
import TestJustAbitToLongModuleNameLikeTh
|
||||
hiding ( )
|
||||
import TestJustShortEnoughModuleNameLike hiding ( )
|
||||
|
||||
#test long-module-name-simple-items
|
||||
import MoreThanSufficientlyLongModuleNameWithSome
|
||||
( compact
|
||||
, fit
|
||||
, inA
|
||||
, items
|
||||
, layout
|
||||
, not
|
||||
, that
|
||||
, will
|
||||
)
|
||||
|
||||
#test long-module-name-hiding-items
|
||||
import TestJustAbitToLongModuleNameLikeTh
|
||||
hiding ( abc
|
||||
, def
|
||||
, ghci
|
||||
, jklm
|
||||
)
|
||||
import TestJustShortEnoughModuleNameLike hiding ( abc
|
||||
, def
|
||||
, ghci
|
||||
, jklm
|
||||
)
|
||||
|
||||
#test long-module-name-other
|
||||
import {-# SOURCE #-} safe qualified "qualifier" A hiding ( )
|
||||
import {-# SOURCE #-} safe qualified "qualifiers" A
|
||||
hiding ( )
|
||||
import {-# SOURCE #-} safe qualified "qualifiers" AlsoAf as T
|
||||
import {-# SOURCE #-} safe qualified "qualifiers" AlsoAff ( )
|
||||
import {-# SOURCE #-} safe qualified "qualifiers" AlsoAff
|
||||
as T
|
||||
import {-# SOURCE #-} safe qualified "qualifiers" AlsoAffe
|
||||
( )
|
||||
|
||||
#test import-with-comments
|
||||
-- Test
|
||||
import Data.List ( nub ) -- Test
|
||||
{- Test -}
|
||||
import qualified Data.List as L
|
||||
( foldl' ) {- Test -}
|
||||
|
||||
-- Test
|
||||
import Test ( test )
|
||||
|
||||
#test import-with-comments-2
|
||||
|
||||
import Test ( abc
|
||||
, def
|
||||
-- comment
|
||||
)
|
||||
|
||||
#test import-with-comments-3
|
||||
|
||||
import Test ( abc
|
||||
-- comment
|
||||
)
|
||||
|
||||
#test import-with-comments-4
|
||||
import Test ( abc
|
||||
-- comment
|
||||
, def
|
||||
, ghi
|
||||
{- comment -}
|
||||
, jkl
|
||||
-- comment
|
||||
)
|
||||
|
||||
#test import-with-comments-5
|
||||
import Test ( -- comment
|
||||
)
|
||||
|
||||
#test long-bindings
|
||||
import Test ( longbindingNameThatoverflowsColum
|
||||
)
|
||||
import Test ( Long
|
||||
( List
|
||||
, Of
|
||||
, Things
|
||||
)
|
||||
)
|
||||
|
||||
#test things-with-with-comments
|
||||
import Test ( Thing
|
||||
( -- Comments
|
||||
)
|
||||
)
|
||||
import Test ( Thing
|
||||
( Item
|
||||
-- and Comment
|
||||
)
|
||||
)
|
||||
import Test ( Thing
|
||||
( With
|
||||
-- Comments
|
||||
, and
|
||||
-- also
|
||||
, items
|
||||
-- !
|
||||
)
|
||||
)
|
||||
#test prefer-dense-empty-list
|
||||
import VeryLongModuleNameThatCouldEvenCauseAnEmptyBindingListToExpandIntoMultipleLine
|
||||
( )
|
||||
|
||||
#test preamble full-preamble
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
|
||||
{-
|
||||
- Test module
|
||||
-}
|
||||
module Test
|
||||
( test1
|
||||
-- ^ test
|
||||
, test2
|
||||
-- | test
|
||||
, test3
|
||||
, test4
|
||||
, test5
|
||||
, test6
|
||||
, test7
|
||||
, test8
|
||||
, test9
|
||||
, test10
|
||||
-- Test 10
|
||||
) where
|
||||
|
||||
-- Test
|
||||
import Data.List ( nub ) -- Test
|
||||
{- Test -}
|
||||
import qualified Data.List as L
|
||||
( foldl' ) {- Test -}
|
||||
|
||||
-- Test
|
||||
import Test ( test )
|
||||
|
||||
#test sorted-imports
|
||||
import Aaa
|
||||
import Baa
|
||||
|
||||
#test sorted-import-groups
|
||||
import Zaa
|
||||
import Zab
|
||||
<BLANKLINE>
|
||||
import Aaa
|
||||
import Baa
|
||||
|
||||
#test sorted-qualified-imports
|
||||
import Boo
|
||||
import qualified Zoo
|
||||
|
||||
#test imports-groups-same-module
|
||||
import Boo ( a )
|
||||
<BLANKLINE>
|
||||
import Boo ( b )
|
||||
|
||||
#test sorted-imports-nested
|
||||
import A.B.C
|
||||
import A.B.D
|
|
@ -0,0 +1,66 @@
|
|||
#group module/top
|
||||
|
||||
|
||||
#test simple
|
||||
module Main where
|
||||
|
||||
#test no-exports
|
||||
module Main () where
|
||||
|
||||
#test one-export
|
||||
module Main (main) where
|
||||
|
||||
#test several-exports
|
||||
module Main (main, test1, test2) where
|
||||
|
||||
#test many-exports
|
||||
module Main
|
||||
( main
|
||||
, test1
|
||||
, test2
|
||||
, test3
|
||||
, test4
|
||||
, test5
|
||||
, test6
|
||||
, test7
|
||||
, test8
|
||||
, test9
|
||||
) where
|
||||
|
||||
#test exports-with-comments
|
||||
module Main
|
||||
( main
|
||||
-- main
|
||||
, test1
|
||||
, test2
|
||||
-- Test 3
|
||||
, test3
|
||||
, test4
|
||||
-- Test 5
|
||||
, test5
|
||||
-- Test 6
|
||||
) where
|
||||
|
||||
#test simple-export-with-things
|
||||
module Main (Test(..)) where
|
||||
|
||||
#test simple-export-with-module-contents
|
||||
module Main (module Main) where
|
||||
|
||||
#test export-with-things
|
||||
module Main (Test(Test, a, b)) where
|
||||
|
||||
#test export-with-things-comment
|
||||
-- comment1
|
||||
|
||||
module Main
|
||||
( Test(Test, a, b)
|
||||
, foo -- comment2
|
||||
) -- comment3
|
||||
where
|
||||
|
||||
#test export-with-empty-thing
|
||||
module Main (Test()) where
|
||||
|
||||
#test empty-with-comment
|
||||
-- Intentionally left empty
|
|
@ -0,0 +1,234 @@
|
|||
#group expression/op-precedence
|
||||
|
||||
|
||||
|
||||
#test basic precedence-aware layouting
|
||||
operatorExpr1 =
|
||||
( foo1 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ foo2 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ foo3 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ foo4 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
+ foo5 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5
|
||||
+ foo6 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr6
|
||||
+ foo7 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr7
|
||||
+ foo8 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8
|
||||
+ foo9 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr9
|
||||
)
|
||||
|
||||
#test nested different precedences
|
||||
operatorExpr2 =
|
||||
( foo1 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ foo2 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ foo3 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ foo4 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
== foo5 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5
|
||||
+ foo6 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr6
|
||||
+ foo7 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr7
|
||||
+ foo8 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8
|
||||
+ foo9 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr9
|
||||
)
|
||||
|
||||
#test simple comment respecting
|
||||
alternatives = -- a
|
||||
( -- b
|
||||
alternativeOne -- c
|
||||
<|> alterantiveTwo -- d
|
||||
<|> alternativeThree -- e
|
||||
) -- f
|
||||
|
||||
#golden retaining comments while minimizing duplicated parens
|
||||
#pending
|
||||
-- brittany { lconfig_operatorParenthesisRefactorMode: PRMMinimize }
|
||||
alternatives = -- a
|
||||
x
|
||||
+ ( -- b
|
||||
( -- c
|
||||
alternativeOne -- c
|
||||
<|> alterantiveTwo -- d
|
||||
<|> alternativeThree -- e
|
||||
) -- f
|
||||
) -- g
|
||||
#expected
|
||||
-- brittany { lconfig_operatorParenthesisRefactorMode: PRMMinimize }
|
||||
alternatives = -- a
|
||||
x
|
||||
+ -- b
|
||||
( -- c
|
||||
alternativeOne -- c
|
||||
<|> alterantiveTwo -- d
|
||||
<|> alternativeThree -- e
|
||||
) -- f -- g
|
||||
|
||||
#golden refactoring unnecessary parens basic example
|
||||
-- brittany { lconfig_operatorParenthesisRefactorMode: PRMMinimize }
|
||||
operatorExpr1 =
|
||||
( (goo1 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1)
|
||||
+ goo2 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ goo3 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ goo4 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
)
|
||||
#expected
|
||||
-- brittany { lconfig_operatorParenthesisRefactorMode: PRMMinimize }
|
||||
operatorExpr1 =
|
||||
( goo1 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ goo2 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ goo3 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ goo4 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
)
|
||||
|
||||
#test feature flag fixityAwareOps works
|
||||
-- brittany { lconfig_fixityAwareOps: False }
|
||||
operatorExpr1 =
|
||||
( goo1
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ goo2
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ goo3
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ goo4
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
+ goo5
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5
|
||||
+ goo6
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr6
|
||||
+ goo7
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr7
|
||||
+ goo8
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8
|
||||
+ goo9
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr9
|
||||
)
|
||||
|
||||
#golden op-app simple golden test
|
||||
operatorExpr1 =
|
||||
( goo1
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ goo2
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ goo3
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ goo4
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
+ goo5
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5
|
||||
+ goo6
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr6
|
||||
+ goo7
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr7
|
||||
+ goo8
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8
|
||||
+ goo9
|
||||
* barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr9
|
||||
)
|
||||
#expected
|
||||
operatorExpr1 =
|
||||
( goo1 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr1
|
||||
+ goo2 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2
|
||||
+ goo3 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3
|
||||
+ goo4 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr4
|
||||
+ goo5 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5
|
||||
+ goo6 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr6
|
||||
+ goo7 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr7
|
||||
+ goo8 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8
|
||||
+ goo9 * barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr9
|
||||
)
|
||||
|
||||
#golden op-app mixed golden
|
||||
doop =
|
||||
some long invocation ==
|
||||
loooooooooongman + (third nested expression)
|
||||
- 4 && {- meow -} 5
|
||||
- 6
|
||||
> 7
|
||||
`mod` loooooooooongwoman || ill just invoke a function with these args
|
||||
|| foo && dooasdoiaosdoi ** oaisdoioasido <= asduiuaisduiasdu + asdahjsd + ahsjdhjhasd
|
||||
#expected
|
||||
doop =
|
||||
some long invocation == loooooooooongman + (third nested expression) - 4
|
||||
&& {- meow -} 5 - 6 > 7 `mod` loooooooooongwoman
|
||||
|| ill just invoke a function with these args
|
||||
|| foo
|
||||
&& dooasdoiaosdoi ** oaisdoioasido
|
||||
<= asduiuaisduiasdu + asdahjsd + ahsjdhjhasd
|
||||
|
||||
#golden op-app mixed golden with added parens
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
doop =
|
||||
some long invocation ==
|
||||
loooooooooongman + (third nested expression)
|
||||
- 4 && {- meow -} 5
|
||||
- 6
|
||||
> 7
|
||||
`mod` loooooooooongwoman || ill just invoke a function with these args
|
||||
|| foo && dooasdoiaosdoi ** oaisdoioasido <= asduiuaisduiasdu + asdahjsd + ahsjdhjhasd
|
||||
#expected
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
doop =
|
||||
( ( some long invocation == loooooooooongman + (third nested expression) - 4
|
||||
&& {- meow -} 5 - 6 > 7 `mod` loooooooooongwoman
|
||||
)
|
||||
|| ill just invoke a function with these args
|
||||
|| ( foo
|
||||
&& ( dooasdoiaosdoi ** oaisdoioasido
|
||||
<= asduiuaisduiasdu + asdahjsd + ahsjdhjhasd
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
#golden multiline mixed op expression 1
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
meow =
|
||||
[docSeparator, docForceSL od1, docSeparator, docForceSL ed1]
|
||||
++ join
|
||||
[ [docSeparator, docForceSingleline od, docSeparator, docForceSingleline ed]
|
||||
| (od, ed) <- ems
|
||||
]
|
||||
++ [docSeparator, docForceSingleline odN, docSeparator, lastWrap edN]
|
||||
#expected
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
meow =
|
||||
( [docSeparator, docForceSL od1, docSeparator, docForceSL ed1]
|
||||
++ join
|
||||
[ [ docSeparator
|
||||
, docForceSingleline od
|
||||
, docSeparator
|
||||
, docForceSingleline ed
|
||||
]
|
||||
| (od, ed) <- ems
|
||||
]
|
||||
++ [docSeparator, docForceSingleline odN, docSeparator, lastWrap edN]
|
||||
)
|
||||
|
||||
#golden multiline mixed op expression 2
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
meow =
|
||||
[docSeparator, docForceSingleline od1, docSeparator, docForceSingleline ed1, something]
|
||||
++ join
|
||||
[ [docSeparator, docForceSingleline od, docSeparator, docForceSingleline ed]
|
||||
| (od, ed) <- ems
|
||||
]
|
||||
++ [docSeparator, docForceSingleline odN, docSeparator, lastWrap edN, something]
|
||||
#expected
|
||||
-- brittany { lconfig_fixityBasedAddAlignParens: True }
|
||||
meow =
|
||||
( [ docSeparator
|
||||
, docForceSingleline od1
|
||||
, docSeparator
|
||||
, docForceSingleline ed1
|
||||
, something
|
||||
]
|
||||
++ join
|
||||
[ [ docSeparator
|
||||
, docForceSingleline od
|
||||
, docSeparator
|
||||
, docForceSingleline ed
|
||||
]
|
||||
| (od, ed) <- ems
|
||||
]
|
||||
++ [ docSeparator
|
||||
, docForceSingleline odN
|
||||
, docSeparator
|
||||
, lastWrap edN
|
||||
, something
|
||||
]
|
||||
)
|
|
@ -0,0 +1,29 @@
|
|||
#group type signatures/pragmas
|
||||
|
||||
#test inline pragma 1
|
||||
func = f
|
||||
where
|
||||
{-# INLINE f #-}
|
||||
f = id
|
||||
|
||||
#test inline pragma 2
|
||||
func = ($)
|
||||
where
|
||||
{-# INLINE ($) #-}
|
||||
($) = id
|
||||
|
||||
#test inline pragma 3
|
||||
func = f
|
||||
where
|
||||
{-# INLINE CONLIKE [1] f #-}
|
||||
f = id
|
||||
|
||||
#test noinline pragma 1
|
||||
{-# NOINLINE func #-}
|
||||
func :: Int
|
||||
|
||||
#test inline pragma 4
|
||||
func = f
|
||||
where
|
||||
{-# INLINE [~1] f #-}
|
||||
f = id
|
|
@ -0,0 +1,265 @@
|
|||
#group type signatures
|
||||
|
||||
|
||||
#test simple001
|
||||
func :: a -> a
|
||||
|
||||
#test long typeVar
|
||||
func
|
||||
:: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
|
||||
#test keep linebreak mode
|
||||
func
|
||||
:: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lakjsdlkjasldkj
|
||||
-> lakjsdlkjasldkj
|
||||
|
||||
#test simple parens 1
|
||||
func :: ((a))
|
||||
|
||||
#test simple parens 2
|
||||
func :: (a -> a) -> a
|
||||
|
||||
#test simple parens 3
|
||||
func :: a -> (a -> a)
|
||||
|
||||
#test did anyone say parentheses?
|
||||
func :: (((((((((())))))))))
|
||||
|
||||
-- current output is.. funny. wonder if that can/needs to be improved..
|
||||
#test give me more!
|
||||
#pending nested tuples over line length
|
||||
func :: ((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))
|
||||
|
||||
#test unit
|
||||
func :: ()
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
||||
#test paren'd func 1
|
||||
func
|
||||
:: ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lakjsdlkjasldkj
|
||||
-> lakjsdlkjasldkj
|
||||
)
|
||||
|
||||
#test paren'd func 2
|
||||
func
|
||||
:: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> (lakjsdlkjasldkj -> lakjsdlkjasldkj)
|
||||
|
||||
#test paren'd func 3
|
||||
func
|
||||
:: (lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd -> lakjsdlkjasldkj)
|
||||
-> lakjsdlkjasldkj
|
||||
|
||||
#test paren'd func 4
|
||||
func
|
||||
:: ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
-> lakjsdlkjasldkj
|
||||
|
||||
#test paren'd func 5
|
||||
func
|
||||
:: ( ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
)
|
||||
|
||||
###############################################################################
|
||||
|
||||
#test type application 1
|
||||
func :: asd -> Either a b
|
||||
|
||||
#test type application 2
|
||||
func
|
||||
:: asd
|
||||
-> Either
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
|
||||
#test type application 3
|
||||
func
|
||||
:: asd
|
||||
-> Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
|
||||
#test type application 4
|
||||
func
|
||||
:: Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> asd
|
||||
|
||||
#test type application 5
|
||||
func
|
||||
:: Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
(lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd -> asd)
|
||||
|
||||
#test type application 6
|
||||
func
|
||||
:: Trither
|
||||
asd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
|
||||
#test type application paren 1
|
||||
func
|
||||
:: asd
|
||||
-> ( Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
|
||||
#test type application paren 2
|
||||
func
|
||||
:: asd
|
||||
-> ( Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
|
||||
#test type application paren 3
|
||||
func
|
||||
:: ( Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> asd
|
||||
|
||||
###############################################################################
|
||||
|
||||
#test list simple
|
||||
func :: [a -> b]
|
||||
|
||||
#test list func
|
||||
func
|
||||
:: [ lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
]
|
||||
|
||||
#test list paren
|
||||
func
|
||||
:: [ ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
]
|
||||
|
||||
################################################################## -- #############
|
||||
|
||||
#test tuple type 1
|
||||
func :: (a, b, c)
|
||||
|
||||
#test tuple type 2
|
||||
func :: ((a, b, c), (a, b, c), (a, b, c))
|
||||
|
||||
#test tuple type long
|
||||
func
|
||||
:: ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
|
||||
#test tuple type nested
|
||||
func
|
||||
:: ( ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, (lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd)
|
||||
, lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
)
|
||||
|
||||
#test tuple type function
|
||||
func
|
||||
:: [ ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
]
|
||||
###############################################################################
|
||||
#test type operator stuff
|
||||
#pending HsOpTy
|
||||
test050 :: a :+: b
|
||||
test051 :: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
:+: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
test052 :: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
:+: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
|
||||
###############################################################################
|
||||
|
||||
#test forall oneliner
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
func :: forall (a :: *) b . a -> b
|
||||
|
||||
#test forall context multiline
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
func
|
||||
:: forall m
|
||||
. Foo
|
||||
=> ColMap2
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> m ()
|
||||
|
||||
#test forall no-context multiline
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
func
|
||||
:: forall m
|
||||
. ColMap2
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> ColInfo
|
||||
-> m ()
|
||||
|
||||
#test forall context multiline with comments
|
||||
{-# LANGUAGE RankNTypes #-}
|
||||
addFlagStringParam
|
||||
:: forall f out
|
||||
. (Applicative f)
|
||||
=> String -- ^ short flag chars, i.e. "v" for -v
|
||||
-> [String] -- ^ list of long names, i.e. ["verbose"]
|
||||
-> String -- ^ param name
|
||||
-> Flag String -- ^ properties
|
||||
-> CmdParser f out String
|
||||
|
||||
#test language pragma issue
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
func :: forall (a :: *) b . a -> b
|
||||
|
||||
#test comments 1
|
||||
func :: a -> b -- comment
|
||||
|
||||
#test comments 2
|
||||
funcA :: a -> b -- comment A
|
||||
funcB :: a -> b -- comment B
|
||||
|
||||
#test comments all
|
||||
-- a
|
||||
func -- b
|
||||
:: -- c
|
||||
a -- d
|
||||
-> -- e
|
||||
( -- f
|
||||
c -- g
|
||||
, -- h
|
||||
d -- i
|
||||
) -- j
|
||||
-- k
|
|
@ -0,0 +1,94 @@
|
|||
#group decl/type synonyms
|
||||
|
||||
|
||||
#test simple-synonym
|
||||
|
||||
type MySynonym = String
|
||||
|
||||
#test parameterised-synonym
|
||||
|
||||
type MySynonym a = [a]
|
||||
|
||||
#test long-function-synonym
|
||||
|
||||
-- | Important comment thrown in
|
||||
type MySynonym b a
|
||||
= MySynonym a b -> MySynonym a b -> MyParamType a b -> MyParamType a b
|
||||
|
||||
#test overflowing-function-synonym
|
||||
|
||||
type MySynonym3 b a
|
||||
= MySynonym a b
|
||||
-> MySynonym a b
|
||||
-- ^ RandomComment
|
||||
-> MyParamType a b
|
||||
-> MyParamType a b
|
||||
-> MySynonym2 b a
|
||||
|
||||
#test synonym-with-kind-sig
|
||||
|
||||
{-# LANGUAGE StarIsType #-}
|
||||
|
||||
type MySynonym (a :: * -> *)
|
||||
= MySynonym a b
|
||||
-> MySynonym a b
|
||||
-> MyParamType a b
|
||||
-> MyParamType a b
|
||||
-> MySynonym2 b a
|
||||
|
||||
#test synonym-with-constraint
|
||||
|
||||
type MySynonym a = Num a => a -> Int
|
||||
|
||||
#test synonym-overflowing-with-constraint
|
||||
|
||||
type MySynonym a
|
||||
= Num a
|
||||
=> AReallyLongTypeName
|
||||
-> AnotherReallyLongTypeName
|
||||
-> AThirdTypeNameToOverflow
|
||||
|
||||
#test synonym-forall
|
||||
|
||||
{-# LANGUAGE RankNTypes #-}
|
||||
|
||||
type MySynonym = forall a . [a]
|
||||
|
||||
#test synonym-operator
|
||||
|
||||
type (:+:) a b = (a, b)
|
||||
|
||||
#test synonym-infix
|
||||
|
||||
type a `MySynonym` b = a -> b
|
||||
|
||||
#test synonym-infix-operator
|
||||
|
||||
type a :+: b = (a, b)
|
||||
|
||||
#test synonym-infix-parens
|
||||
|
||||
type (a `Foo` b) c = (a, b, c)
|
||||
|
||||
#test synonym-comments
|
||||
|
||||
type Foo a -- fancy type comment
|
||||
= -- strange comment
|
||||
Int
|
||||
|
||||
#test synonym-type-operators
|
||||
type (a :+: b) = (a, b)
|
||||
|
||||
#test synonym-multi-parens
|
||||
#pending loses extra parens
|
||||
|
||||
type ((a :+: b) c) = (a, c)
|
||||
|
||||
#test synonym-tuple-type-many-comments
|
||||
|
||||
type Foo
|
||||
= ( -- t1
|
||||
A -- t2
|
||||
, -- t3
|
||||
B -- t4
|
||||
) -- t5
|
|
@ -0,0 +1,74 @@
|
|||
#group extensions/datakinds-promoted-types
|
||||
|
||||
### The spaces before commas are undesirable
|
||||
#test 1
|
||||
test :: Proxy '[ 'True ]
|
||||
test = Proxy @'[ 'True ]
|
||||
#test 2
|
||||
test :: Proxy '[True]
|
||||
test = Proxy @'[True]
|
||||
#test 3
|
||||
test :: Proxy '[ 'True , False ]
|
||||
test = Proxy @'[ 'True , False ]
|
||||
#test 4
|
||||
test :: Proxy '[True , False]
|
||||
test = Proxy @'[True , False]
|
||||
#test 5
|
||||
test :: Proxy '[True , 'False]
|
||||
test = Proxy @'[True , 'False]
|
||||
#test 6
|
||||
test :: Proxy '[ 'True , 'False ]
|
||||
test = Proxy @'[ 'True , 'False ]
|
||||
#test 7
|
||||
test :: Proxy '[ 'Just 'True , False ]
|
||||
test = Proxy @'[ 'Just 'True , False ]
|
||||
#test 8
|
||||
test :: Proxy '[Just True , False]
|
||||
test = Proxy @'[Just True , False]
|
||||
#test 9
|
||||
test :: Proxy '[('True)]
|
||||
test = Proxy @'[('True)]
|
||||
#test 10
|
||||
test :: Proxy ('Just 'True)
|
||||
test = Proxy @('Just 'True)
|
||||
#test 11
|
||||
test :: Proxy ('True)
|
||||
test = Proxy @('True)
|
||||
|
||||
#test with-comment-1
|
||||
test
|
||||
:: Proxy '[-- comment
|
||||
'True ]
|
||||
test = Proxy @'[-- comment
|
||||
'True ]
|
||||
|
||||
#test with-comment-2
|
||||
test
|
||||
:: Proxy '[-- comment
|
||||
True]
|
||||
test = Proxy @'[-- comment
|
||||
True]
|
||||
|
||||
#test with-comment-3
|
||||
test
|
||||
:: Proxy '[{- comment -} 'True ]
|
||||
test = Proxy @'[{- comment -} 'True ]
|
||||
|
||||
#test with-comment-4
|
||||
test
|
||||
:: Proxy '[{- comment -}
|
||||
'True ]
|
||||
test = Proxy @'[{- comment -}
|
||||
'True ]
|
||||
|
||||
#test with-comment-5
|
||||
test
|
||||
:: Proxy '[{- comment -} True]
|
||||
test = Proxy @'[{- comment -} True]
|
||||
|
||||
#test with-comment-6
|
||||
test
|
||||
:: Proxy '[{- comment -}
|
||||
True]
|
||||
test = Proxy @'[{- comment -}
|
||||
True]
|
|
@ -0,0 +1,28 @@
|
|||
#group extensions/implicitparams
|
||||
|
||||
|
||||
#test ImplicitParams 1
|
||||
{-# LANGUAGE ImplicitParams #-}
|
||||
func :: (?asd::Int) -> ()
|
||||
|
||||
#test ImplicitParams 2
|
||||
{-# LANGUAGE ImplicitParams #-}
|
||||
func
|
||||
:: ( ?asd
|
||||
:: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
-> ()
|
||||
|
||||
#test IP usage
|
||||
{-# LANGUAGE ImplicitParams #-}
|
||||
foo = ?bar
|
||||
|
||||
#test IP binding
|
||||
{-# LANGUAGE ImplicitParams #-}
|
||||
foo = let ?bar = Foo in value
|
||||
|
||||
#test IP type signature
|
||||
{-# LANGUAGE ImplicitParams #-}
|
||||
foo :: (?bar::Bool) => ()
|
||||
foo = ()
|
|
@ -1,3 +1,7 @@
|
|||
#group extensions/lambdacase
|
||||
|
||||
|
||||
#test lambdacase 1
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
func = \case
|
||||
FooBar -> x
|
|
@ -0,0 +1,16 @@
|
|||
#group extensions/multiwayif
|
||||
|
||||
|
||||
#test multiwayif 1
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
func = if
|
||||
| cond1 -> loooooooooooooooooooooooooooooong expr1
|
||||
| cond2 -> loooooooooooooooooooooooooooooong expr2
|
||||
|
||||
#test multiwayif 2
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
func = do
|
||||
foo
|
||||
bar $ if
|
||||
| cond1 -> loooooooooooooooooooooooooooooong expr1
|
||||
| cond2 -> loooooooooooooooooooooooooooooong expr2
|
|
@ -0,0 +1,10 @@
|
|||
#group extensions/overloadedlabels
|
||||
|
||||
|
||||
#test bare label
|
||||
{-# LANGUAGE OverloadedLabels #-}
|
||||
foo = #bar
|
||||
|
||||
#test applied and composed label
|
||||
{-# LANGUAGE OverloadedLabels #-}
|
||||
foo = #bar . #baz $ fmap #foo xs
|
|
@ -0,0 +1,24 @@
|
|||
#group extensions/overloadedrecorddot
|
||||
|
||||
#test getfield
|
||||
{-# LANGUAGE OverloadedRecordDot #-}
|
||||
recorddot1 = a.b.c
|
||||
|
||||
#test getfield
|
||||
{-# LANGUAGE OverloadedRecordDot #-}
|
||||
recorddot2 =
|
||||
{-before-} a.b.c {-after-}
|
||||
|
||||
#test projection
|
||||
{-# LANGUAGE OverloadedRecordDot #-}
|
||||
recorddot3 =
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
& (.bbbbbbbbbbbbbbbbbbbbbbbbbbb)
|
||||
& (.ccccccccccccccccccccccccccccccccccccc)
|
||||
& (.ddddddddddddddddddddddddddddddddddddddddddddddddddd)
|
||||
|
||||
#test projection too long
|
||||
{-# LANGUAGE OverloadedRecordDot #-}
|
||||
recorddot4 =
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
& (.bbbbbbbbbbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc.ddddddddddddddddddddddddddddddddddddddddddddddddddd)
|
|
@ -0,0 +1,100 @@
|
|||
#group extensions/patternsynonyms
|
||||
|
||||
|
||||
#test bidirectional pattern
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern J x = Just x
|
||||
|
||||
#test unidirection pattern
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern F x <- (x, _)
|
||||
|
||||
#test explicitly bidirectional pattern
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern HeadC x <- x : xs where
|
||||
HeadC x = [x]
|
||||
|
||||
#test Multiple arguments
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern Head2 x y <- x : y : xs where
|
||||
Head2 x y = [x, y]
|
||||
|
||||
#test Infix argument
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern x :> y = [x, y]
|
||||
|
||||
#test Record argument
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern MyData { a, b, c } = [a, b, c]
|
||||
|
||||
#test long pattern match
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern myLongLeftVariableName `MyLongInfixPatternMatcher` myLongRightVariableName =
|
||||
[myLongLeftVariableName, myLongRightVariableName]
|
||||
|
||||
#test long explicitly bidirectional match
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern myLeftVariableName `MyInfixPatternMatcher` myRightVariableName <-
|
||||
[myLongLeftVariableName, myLongRightVariableName] where
|
||||
MyInfixPatternMatcher x y = [x, x, y]
|
||||
|
||||
#test Pattern synonym types
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern J :: a -> Maybe a
|
||||
pattern J x = Just x
|
||||
|
||||
#test pattern synonym bidirectional multiple cases
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
{-# LANGUAGE ViewPatterns #-}
|
||||
pattern Signed x <- (asSigned -> x) where
|
||||
Signed (Neg x) = -x
|
||||
Signed Zero = 0
|
||||
Signed (Pos x) = x
|
||||
|
||||
#test pattern synonym bidirectional multiple cases long
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
{-# LANGUAGE ViewPatterns #-}
|
||||
pattern Signed xxxxxxxxxxxxxxxxxxxxxxxx <-
|
||||
(asSigned -> xxxxxxxxxxxxxxxxxxxxxxxx) where
|
||||
Signed (Neg x) = -x
|
||||
Signed Zero = 0
|
||||
Signed (Pos x) = x
|
||||
|
||||
#test pattern synonym bidirectional multiple cases with comments
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
{-# LANGUAGE ViewPatterns #-}
|
||||
pattern Signed x <- (asSigned -> x) where
|
||||
Signed (Neg x) = -x -- negative comment
|
||||
Signed Zero = 0 -- zero comment
|
||||
Signed (Pos x) = x -- positive comment
|
||||
|
||||
#test Pattern synonym types multiple names
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern J, K :: a -> Maybe a
|
||||
|
||||
#test Pattern synonym type sig wrapped
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
pattern LongMatcher
|
||||
:: longlongtypevar
|
||||
-> longlongtypevar
|
||||
-> longlongtypevar
|
||||
-> Maybe [longlongtypevar]
|
||||
pattern LongMatcher x y z = Just [x, y, z]
|
||||
|
||||
|
||||
#group extensions/patternsynonyms+explicitnamespaces
|
||||
|
||||
|
||||
#test explicitnamespaces_patternsynonyms export
|
||||
{-# LANGUAGE ExplicitNamespaces #-}
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
module Test (type (++), (++), pattern Foo) where
|
||||
|
||||
#test explicitnamespaces_patternsynonyms import
|
||||
{-# LANGUAGE ExplicitNamespaces #-}
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
import Test ( type (++)
|
||||
, (++)
|
||||
, pattern (:.)
|
||||
, pattern Foo
|
||||
)
|
|
@ -0,0 +1,34 @@
|
|||
#group extensions/quasiquotes
|
||||
|
||||
|
||||
#test quasi-quotes simple 1
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
func = [blub|
|
||||
asd
|
||||
qwe
|
||||
|]
|
||||
|
||||
#test quasi-quotes simple 2
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
func = [blub|
|
||||
asd
|
||||
qwe|]
|
||||
|
||||
#test quasi-quotes ignoring layouting
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
func = do
|
||||
let body = [json|
|
||||
hello
|
||||
|]
|
||||
pure True
|
||||
|
||||
#test quasi-quotes ignoring layouting, strict mode
|
||||
-- brittany { lconfig_allowHangingQuasiQuotes: False }
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
func = do
|
||||
let
|
||||
body =
|
||||
[json|
|
||||
hello
|
||||
|]
|
||||
pure True
|
|
@ -0,0 +1,17 @@
|
|||
#group extensions/recursivedo
|
||||
|
||||
|
||||
#test recursivedo 1
|
||||
{-# LANGUAGE RecursiveDo #-}
|
||||
foo = do
|
||||
rec a <- f b
|
||||
b <- g a
|
||||
return (a, b)
|
||||
|
||||
#test recursivedo 2
|
||||
{-# LANGUAGE RecursiveDo #-}
|
||||
foo = do
|
||||
rec -- comment
|
||||
a <- f b
|
||||
b <- g a
|
||||
return (a, b)
|
|
@ -0,0 +1,14 @@
|
|||
#group extensions/unboxedtuples
|
||||
|
||||
|
||||
#test unboxed-tuple and vanilla names
|
||||
{-# LANGUAGE UnboxedTuples #-}
|
||||
spanKey :: (# Int, Int #) -> (# Int, Int #)
|
||||
spanKey = case foo of
|
||||
(# bar, baz #) -> (# baz, bar #)
|
||||
|
||||
#test unboxed-tuple and hashed name
|
||||
{-# LANGUAGE MagicHash, UnboxedTuples #-}
|
||||
spanKey :: (# Int#, Int# #) -> (# Int#, Int# #)
|
||||
spanKey = case foo of
|
||||
(# bar#, baz# #) -> (# baz# +# bar#, bar# #)
|
|
@ -0,0 +1,27 @@
|
|||
#group other/whitespace-newlines
|
||||
|
||||
#test module-import-newlines
|
||||
|
||||
module Main where
|
||||
|
||||
import Prelude
|
||||
|
||||
firstDecl = True
|
||||
|
||||
#test function-where-newlines
|
||||
|
||||
func = do
|
||||
|
||||
-- complex first step
|
||||
aaa
|
||||
|
||||
-- complex second step
|
||||
bbb
|
||||
|
||||
where
|
||||
|
||||
helper :: Helper
|
||||
helper = helpful
|
||||
|
||||
other :: Other
|
||||
other = True
|
|
@ -0,0 +1,958 @@
|
|||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
#group regression
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
|
||||
#test newlines-comment
|
||||
func = do
|
||||
abc <- foo
|
||||
|
||||
--abc
|
||||
return ()
|
||||
|
||||
#test parenthesis-around-unit
|
||||
func = (())
|
||||
|
||||
#test let-defs indentation
|
||||
func = do
|
||||
let foo True = True
|
||||
foo _ = False
|
||||
return ()
|
||||
|
||||
#test record update indentation 1
|
||||
func = do
|
||||
s <- mGet
|
||||
mSet $ s { _lstate_indent = _lstate_indent state }
|
||||
|
||||
#test record update indentation 2
|
||||
func = do
|
||||
s <- mGet
|
||||
mSet $ s { _lstate_indent = _lstate_indent state
|
||||
, _lstate_foo = _lstate_foo state
|
||||
}
|
||||
|
||||
#test record update indentation 3
|
||||
func = do
|
||||
s <- mGet
|
||||
mSet $ s
|
||||
{ _lstate_indent = _lstate_indent lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, _lstate_foo = _lstate_foo lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
}
|
||||
|
||||
#test record construction 1
|
||||
func = Foo { _lstate_indent = _lstate_indent state }
|
||||
|
||||
#test record construction 2
|
||||
func = Foo
|
||||
{ _lstate_indent = _lstate_indent lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, _lstate_fooo = _lstate_foo lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
}
|
||||
|
||||
#test record construction 3
|
||||
func = do
|
||||
Foo { _lstate_indent = _lstate_indent lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
, _lstate_foo = _lstate_foo lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
}
|
||||
|
||||
#test post-indent comment
|
||||
func = do
|
||||
-- abc
|
||||
-- def
|
||||
return ()
|
||||
|
||||
#test post-unindent comment
|
||||
func = do
|
||||
do
|
||||
return ()
|
||||
-- abc
|
||||
-- def
|
||||
return ()
|
||||
|
||||
#test CPP empty comment case
|
||||
#pending CPP parsing needs fixing for roundTripEqual
|
||||
{-# LANGUAGE CPP #-}
|
||||
module Test where
|
||||
func = do
|
||||
#if FOO
|
||||
let x = 13
|
||||
#endif
|
||||
stmt x
|
||||
|
||||
## really, the following should be handled by forcing the Alt to multiline
|
||||
## because there are comments. as long as this is not implemented though,
|
||||
## we should ensure the trivial solution works.
|
||||
#test comment inline placement (temporary)
|
||||
func
|
||||
:: Int -- basic indentation amount
|
||||
-> Int -- currently used width in current line (after indent)
|
||||
-- used to accurately calc placing of the current-line
|
||||
-> LayoutDesc
|
||||
-> Int
|
||||
|
||||
#test some indentation thingy
|
||||
func =
|
||||
( lkjadljasldjalskdjaldjalsdjkalsdjlaksdjlasjdlajsaldskj
|
||||
$ abc
|
||||
$ def
|
||||
$ ghi
|
||||
$ jkl
|
||||
)
|
||||
|
||||
#test parenthesized operator
|
||||
buildG bounds0 edges0 = accumArray (flip (:)) [] bounds0 (map reassoc edges0)
|
||||
where reassoc (v, e, w) = (v, (e, w))
|
||||
|
||||
#test record pattern matching stuff
|
||||
downloadRepoPackage = case repo of
|
||||
RepoLocal {..} -> return ()
|
||||
RepoLocal { abc } -> return ()
|
||||
RepoLocal{} -> return ()
|
||||
|
||||
#test do let comment indentation level problem
|
||||
func = do
|
||||
let (primaryPkg, otherPkgs) = selectPrimaryLocalPackage pwd pkgs'
|
||||
(bproblems, x) = resolveBuildTargets primaryPkg otherPkgs utargets''
|
||||
-- default local dir target if there's no given target
|
||||
utargets'' = "foo"
|
||||
asd = True
|
||||
return ()
|
||||
|
||||
#test list comprehension comment placement
|
||||
func =
|
||||
[ (thing, take 10 alts) --TODO: select best ones
|
||||
| (thing, _got, alts@(_ : _)) <- nosuchFooThing
|
||||
, gast <- award
|
||||
]
|
||||
|
||||
#test if-then-else comment placement
|
||||
func = if x
|
||||
then if y -- y is important
|
||||
then foo
|
||||
else bar
|
||||
else Nothing
|
||||
|
||||
#test qualified infix pattern
|
||||
wrapPatPrepend pat prepElem = do
|
||||
patDocs <- layoutPat pat
|
||||
case Seq.viewl patDocs of
|
||||
Seq.EmptyL -> return $ Seq.empty
|
||||
x1 Seq.:< xR -> do
|
||||
x1' <- docSeq [prepElem, return x1]
|
||||
return $ x1' Seq.<| xR
|
||||
|
||||
#test type signature multiline forcing issue
|
||||
layoutWriteNewlineBlock
|
||||
:: ( MonadMultiWriter Text.Builder.Builder m
|
||||
, MonadMultiState LayoutState m
|
||||
, MonadMultiWriter (Seq String) m
|
||||
)
|
||||
=> m ()
|
||||
|
||||
#test multiwayif proper indentation
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
readMergePersConfig path shouldCreate conf = do
|
||||
exists <- liftIO $ System.Directory.doesFileExist path
|
||||
if
|
||||
| exists -> do
|
||||
contents <- liftIO $ ByteString.readFile path -- no lazy IO, tyvm.
|
||||
fileConf <- case Data.Yaml.decodeEither contents of
|
||||
Left e -> do
|
||||
liftIO
|
||||
$ putStrErrLn
|
||||
$ "error reading in brittany config from " ++ path ++ ":"
|
||||
liftIO $ putStrErrLn e
|
||||
mzero
|
||||
Right x -> return x
|
||||
return $ fileConf Semigroup.<> conf
|
||||
| shouldCreate -> do
|
||||
liftIO
|
||||
$ ByteString.writeFile path
|
||||
$ Data.Yaml.encode
|
||||
$ cMap (Option . Just . runIdentity) staticDefaultConfig
|
||||
return $ conf
|
||||
| otherwise -> do
|
||||
return conf
|
||||
|
||||
#test nested pattern alignment issue"
|
||||
func = BuildReport
|
||||
where
|
||||
convertInstallOutcome = case result of
|
||||
Left BR.PlanningFailed -> PlanningFailed
|
||||
Left (BR.DependentFailed p) -> DependencyFailed p
|
||||
Left (BR.DownloadFailed _) -> DownloadFailed
|
||||
Left (BR.UnpackFailed _) -> UnpackFailed
|
||||
Left (BR.ConfigureFailed _) -> ConfigureFailed
|
||||
Left (BR.BuildFailed _) -> BuildFailed
|
||||
Left (BR.TestsFailed _) -> TestsFailed
|
||||
Left (BR.InstallFailed _) -> InstallFailed
|
||||
Right (BR.BuildOk _ _ _ ) -> InstallOk
|
||||
|
||||
#test nested pattern alignment issue"
|
||||
func = BuildReport
|
||||
where
|
||||
convertInstallOutcome = case result of
|
||||
Left BR.PlanningFailed -> PlanningFailed
|
||||
Left (BR.DependentFailed p) -> DependencyFailed p
|
||||
Left (BR.DownloadFailed _) -> DownloadFailed
|
||||
Left (BR.UnpackFailed _) -> UnpackFailed
|
||||
Left (BR.ConfigureFailed _) -> ConfigureFailed
|
||||
Left (BR.BuildFailed _) -> BuildFailed
|
||||
Left (BR.TestsFailed _) -> TestsFailed
|
||||
Left (BR.InstallFailed _) -> InstallFailed
|
||||
Right (BR.BuildOk _ _ _ ) -> InstallOk
|
||||
|
||||
#test partially overflowing alignment issue"
|
||||
showPackageDetailedInfo pkginfo =
|
||||
renderStyle (style { lineLength = 80, ribbonsPerLine = 1 })
|
||||
$ char '*'
|
||||
$+$ something
|
||||
[ entry "Synopsis" synopsis hideIfNull reflowParagraphs
|
||||
, entry "Versions available"
|
||||
sourceVersions
|
||||
(altText null "[ Not available from server ]")
|
||||
(dispTopVersions 9 (preferredVersions pkginfo))
|
||||
, entry
|
||||
"Versions installed"
|
||||
installedVersions
|
||||
(altText
|
||||
null
|
||||
(if hasLib pkginfo then "[ Not installed ]" else "[ Unknown ]")
|
||||
)
|
||||
(dispTopVersions 4 (preferredVersions pkginfo))
|
||||
, entry "Homepage" homepage orNotSpecified text
|
||||
, entry "Bug reports" bugReports orNotSpecified text
|
||||
, entry "Description" description hideIfNull reflowParagraphs
|
||||
, entry "Category" category hideIfNull text
|
||||
, entry "License" license alwaysShow disp
|
||||
, entry "Author" author hideIfNull reflowLines
|
||||
, entry "Maintainer" maintainer hideIfNull reflowLines
|
||||
, entry "Source repo" sourceRepo orNotSpecified text
|
||||
, entry "Executables" executables hideIfNull (commaSep text)
|
||||
, entry "Flags" flags hideIfNull (commaSep dispFlag)
|
||||
, entry "Dependencies" dependencies hideIfNull (commaSep dispExtDep)
|
||||
, entry "Documentation" haddockHtml showIfInstalled text
|
||||
, entry "Cached" haveTarball alwaysShow dispYesNo
|
||||
, if not (hasLib pkginfo)
|
||||
then empty
|
||||
else
|
||||
text "Modules:"
|
||||
$+$ nest 4 (vcat (map disp . sort . modules $ pkginfo))
|
||||
]
|
||||
|
||||
#test issue 7a
|
||||
isValidPosition position | validX && validY = Just position
|
||||
| otherwise = Nothing
|
||||
|
||||
#test issue-6-pattern-linebreak-validity
|
||||
## this is ugly, but at least syntactically valid.
|
||||
foo = Reflex.runSpiderHost $ ReflexHost.hostApp $ do
|
||||
(inputEvent :: Reflex.Event Reflex.Spider String, inputFire :: String
|
||||
-> IO Bool ) <-
|
||||
ReflexHost.newExternalEvent
|
||||
liftIO . forkIO . forever $ getLine >>= inputFire
|
||||
ReflexHost.performEvent_ $ fmap (liftIO . putStrLn) inputEvent
|
||||
|
||||
#test issue 16
|
||||
foldrDesc f z = unSwitchQueue $ \q ->
|
||||
switch (Min.foldrDesc (f unTaggedF) z q) (Min.foldrAsc (f unTaggedF) z q)
|
||||
|
||||
#test issue 18
|
||||
autocheckCases =
|
||||
[ ("Never Deadlocks" , representative deadlocksNever)
|
||||
, ("No Exceptions" , representative exceptionsNever)
|
||||
, ("Consistent Result", alwaysSame) -- already representative
|
||||
]
|
||||
|
||||
#test issue 18b
|
||||
autocheckCases =
|
||||
[ ("Never Deadlocks", representative deadlocksNever)
|
||||
, ("No Exceptions" , representative exceptionsNever)
|
||||
, ( "Consistent Result"
|
||||
, alwaysSame -- already representative
|
||||
)
|
||||
]
|
||||
|
||||
#test issue 18c
|
||||
func =
|
||||
[ (abc, (1111, 1111))
|
||||
, (def, (2, 2))
|
||||
, foo -- comment
|
||||
]
|
||||
|
||||
#test issue 26
|
||||
foo a b = g a b -- fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
|
||||
where g a b = b + b * a
|
||||
|
||||
#test issue 26b
|
||||
foo a b = g a b where g a b = b + b * a -- fooooooooooooooooooooooooooooooooooo
|
||||
|
||||
#test aggressive alignment 1
|
||||
func = do
|
||||
abc <- expr
|
||||
abcccccccccccccccccc <- expr
|
||||
abcccccccccccccccccccccccccccccccccccccccccc <- expr
|
||||
abccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc <- expr
|
||||
|
||||
#test example alignment 1
|
||||
func (MyLongFoo abc def) = 1
|
||||
func (Bar a d ) = 2
|
||||
func _ = 3
|
||||
|
||||
#test listcomprehension-case-of
|
||||
parserCompactLocation =
|
||||
[ try
|
||||
$ [ ParseRelAbs (Text.Read.read digits) _ _
|
||||
| digits <- many1 digit
|
||||
, rel1 :: Maybe (Either Int (Ratio Int)) <- optionMaybe
|
||||
[ case divPart of
|
||||
Nothing -> Left $ Text.Read.read digits
|
||||
Just ddigits ->
|
||||
Right $ Text.Read.read digits % Text.Read.read ddigits
|
||||
| digits <- many1 digit
|
||||
, divPart <- optionMaybe (string "/" *> many1 digit)
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
#test opapp-specialcasing-1
|
||||
func = fooooooooooooooooooooooooooooooooo
|
||||
$ foooooooooooooooooooooooooooooooo foooooooooooooooooooooooooooooooo
|
||||
foooooooooooooooooooooooooooooooo
|
||||
|
||||
#test opapp-specialcasing-2
|
||||
func =
|
||||
fooooooooooooooooooooooooooooooooo
|
||||
+ foooooooooooooooooooooooooooooooo foooooooooooooooooooooooooooooooo
|
||||
foooooooooooooooooooooooooooooooo
|
||||
|
||||
#test opapp-specialcasing-3
|
||||
func = fooooooooooooooooooooooooooooooooo + foooooooooooooooooooooooooooooooo
|
||||
[ foooooooooooooooooooooooooooooooo
|
||||
, foooooooooooooooooooooooooooooooo
|
||||
, foooooooooooooooooooooooooooooooo
|
||||
]
|
||||
|
||||
#test opapp-indenting
|
||||
parserPrim =
|
||||
[ r
|
||||
| r <-
|
||||
[ SGPPrimFloat
|
||||
$ bool id (0 -) minus
|
||||
$ readGnok "parserPrim" (d1 ++ d2 ++ d3 ++ d4)
|
||||
| d2 <- string "."
|
||||
, d3 <- many1 (oneOf "0123456789")
|
||||
, _ <- string "f"
|
||||
]
|
||||
<|> [ SGPPrimFloat $ bool id (0 -) minus $ fromIntegral
|
||||
(readGnok "parserPrim" d1 :: Integer)
|
||||
| _ <- string "f"
|
||||
]
|
||||
<|> [ SGPPrimInt $ bool id (0 -) minus $ fromIntegral
|
||||
(readGnok "parserPrim" d1 :: Integer)
|
||||
| _ <- string "i"
|
||||
]
|
||||
]
|
||||
|
||||
#test another-parspacing-testcase
|
||||
|
||||
samples = (SV.unpackaaaaadat) <&> \f ->
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
#test recordupd-singleline-bug
|
||||
|
||||
runBrittany tabSize text = do
|
||||
let config' = staticDefaultConfig
|
||||
config = config'
|
||||
{ _conf_layout = (_conf_layout config')
|
||||
{ _lconfig_indentAmount = coerce tabSize
|
||||
}
|
||||
, _conf_forward = forwardOptionsSyntaxExtsEnabled
|
||||
}
|
||||
parsePrintModule config text
|
||||
|
||||
#test recordupd-singleline-bug-left
|
||||
|
||||
-- brittany { lconfig_indentPolicy: IndentPolicyLeft }
|
||||
runBrittany tabSize text = do
|
||||
let
|
||||
config' = staticDefaultConfig
|
||||
config = config'
|
||||
{ _conf_layout = (_conf_layout config')
|
||||
{ _lconfig_indentAmount = coerce tabSize
|
||||
}
|
||||
, _conf_forward = forwardOptionsSyntaxExtsEnabled
|
||||
}
|
||||
parsePrintModule config text
|
||||
|
||||
#test issue 37
|
||||
|
||||
foo =
|
||||
( a
|
||||
, -- comment1
|
||||
b
|
||||
-- comment2
|
||||
, c
|
||||
)
|
||||
|
||||
#test issue 38
|
||||
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
foo = bar @Baz
|
||||
|
||||
#test comment-before-BDCols
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
layoutPatternBindFinal alignmentToken binderDoc mPatDoc clauseDocs = do
|
||||
docAlt
|
||||
$ -- one-line solution
|
||||
[ docCols
|
||||
(ColBindingLine alignmentToken)
|
||||
[ docSeq (patPartInline ++ [guardPart])
|
||||
, docSeq
|
||||
[ appSep $ return binderDoc
|
||||
, docForceSingleline $ return body
|
||||
, wherePart
|
||||
]
|
||||
]
|
||||
| not hasComments
|
||||
, [(guards, body, _bodyRaw)] <- [clauseDocs]
|
||||
, let guardPart = singleLineGuardsDoc guards
|
||||
, wherePart <- case mWhereDocs of
|
||||
Nothing -> return @[] $ docEmpty
|
||||
Just [w] -> return @[] $ docSeq
|
||||
[ docSeparator
|
||||
, appSep $ docLit $ Text.pack "where"
|
||||
, docSetIndentLevel $ docForceSingleline $ return w
|
||||
]
|
||||
_ -> []
|
||||
]
|
||||
++ -- one-line solution + where in next line(s)
|
||||
[ docLines
|
||||
$ [ docCols
|
||||
(ColBindingLine alignmentToken)
|
||||
[ docSeq (patPartInline ++ [guardPart])
|
||||
, docSeq
|
||||
[appSep $ return binderDoc, docForceParSpacing $ return body]
|
||||
]
|
||||
]
|
||||
++ wherePartMultiLine
|
||||
| [(guards, body, _bodyRaw)] <- [clauseDocs]
|
||||
, let guardPart = singleLineGuardsDoc guards
|
||||
, Data.Maybe.isJust mWhereDocs
|
||||
]
|
||||
++ -- two-line solution + where in next line(s)
|
||||
[ docLines
|
||||
$ [ docForceSingleline $ docSeq
|
||||
(patPartInline ++ [guardPart, return binderDoc])
|
||||
, docEnsureIndent BrIndentRegular
|
||||
$ docForceSingleline
|
||||
$ return body
|
||||
]
|
||||
++ wherePartMultiLine
|
||||
| [(guards, body, _bodyRaw)] <- [clauseDocs]
|
||||
, let guardPart = singleLineGuardsDoc guards
|
||||
]
|
||||
|
||||
#test comment-testcase-17
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
func = do
|
||||
let foo = if
|
||||
| Constuctoooooooooooooooooooooooooooooooooooor `elem` artics -- TODO
|
||||
-> max (defLen - 0.2) -- TODO
|
||||
(defLen * 0.8)
|
||||
| otherwise
|
||||
-> max (defLen - 0.05) (defLen * 0.95) -- TODO
|
||||
return True
|
||||
|
||||
#test issue 49
|
||||
|
||||
foo n = case n of
|
||||
1 -> True
|
||||
-1 -> False
|
||||
|
||||
bar n = case n of
|
||||
(-2, -2) -> (-2, -2)
|
||||
|
||||
#test issue 48 b
|
||||
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
foo =
|
||||
let a = b @1
|
||||
cccc = ()
|
||||
in foo
|
||||
|
||||
#test issue 52 a
|
||||
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
v = A { a = 1, .. } where b = 2
|
||||
|
||||
#test issue 52 b
|
||||
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
v = A { .. } where b = 2
|
||||
|
||||
#test issue 52 c
|
||||
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
v = A { a = 1, b = 2, c = 3 }
|
||||
|
||||
#test issue 63 a
|
||||
test :: Proxy 'Int
|
||||
|
||||
#test issue 63 b
|
||||
test :: Proxy '[ 'True ]
|
||||
|
||||
#test issue 63 c
|
||||
test :: Proxy '[Bool]
|
||||
|
||||
#test issue 64
|
||||
{-# LANGUAGE RankNTypes, KindSignatures #-}
|
||||
func
|
||||
:: forall m str
|
||||
. (Str str, Monad m)
|
||||
=> Int
|
||||
-> Proxy (str :: [*])
|
||||
-> m (Tagged str String)
|
||||
|
||||
#test issue 65
|
||||
widgetsDyn =
|
||||
[ [ vBox
|
||||
[ padTop Max outputLinesWidget
|
||||
, padRight Max wid1 <+> flowWidget -- alignment here is strange/buggy
|
||||
, padBottom (Pad 5) help
|
||||
]
|
||||
]
|
||||
| wid1 <- promptDyn
|
||||
, (flowWidget, _) <- flowResultD
|
||||
, outputLinesWidget <- outputLinesWidgetD
|
||||
, help <- suggestionHelpBox
|
||||
, parser <- cmdParserD
|
||||
]
|
||||
|
||||
#test issue 67
|
||||
fmapuv :: U.Unbox a => (a -> b) -> U.Vector a -> V.Vector b
|
||||
fmapuv f xs = G.generate (G.length xs) (f . (xs G.!))
|
||||
|
||||
|
||||
#test parallellistcomp-workaround
|
||||
cs0 = 0 : [ c / Interval n | c <- cs | n <- [1..] ]
|
||||
|
||||
#test issue 70
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
deriveFromJSON (unPrefix "assignPost") ''AssignmentPost
|
||||
|
||||
#test issue 110
|
||||
main = -- a
|
||||
let --b
|
||||
x = 1 -- x
|
||||
y = 2 -- y
|
||||
in do
|
||||
print x
|
||||
print y
|
||||
|
||||
#test issue 111
|
||||
alternatives :: Parser (Maybe Text)
|
||||
alternatives =
|
||||
alternativeOne -- first try this one
|
||||
<|> alterantiveTwo -- then this one
|
||||
<|> alternativeThree -- then this one
|
||||
where
|
||||
alternativeOne = purer "one"
|
||||
alternativeTwo = purer "two"
|
||||
alterantiveThree = purer "three"
|
||||
|
||||
#test issue 116
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
func = do
|
||||
let !forced = some
|
||||
pure ()
|
||||
|
||||
#test let-in-hanging
|
||||
spanKey p q = case minViewWithKey q of
|
||||
Just ((k, _), q') | p k ->
|
||||
let (kas, q'') = spanKey p q' in ((k, a) : kas, q'')
|
||||
_ -> ([], q)
|
||||
|
||||
#test issue 125
|
||||
a :: () ':- ()
|
||||
|
||||
#test issue 128
|
||||
func = do
|
||||
createDirectoryIfMissing True path
|
||||
openFile fileName AppendMode
|
||||
|
||||
#test hspar-comments
|
||||
|
||||
alternatives :: Parser (Maybe Text)
|
||||
alternatives = -- a
|
||||
( -- b
|
||||
alternativeOne -- c
|
||||
<|> alterantiveTwo -- d
|
||||
<|> alternativeThree -- e
|
||||
) -- f
|
||||
|
||||
#test issue 133
|
||||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
func
|
||||
:: forall a
|
||||
. ()
|
||||
=> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
-> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
func
|
||||
:: ()
|
||||
=> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
-> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
#test alignment-potential-overflow
|
||||
go l [] = Right l
|
||||
go l ((IRType, _a) : eqr) = go l eqr
|
||||
go l ((_, IRType) : eqr) = go l eqr
|
||||
go _ ((IRTypeError ps t1 t2, _) : _) = Left $ makeError ps t1 t2
|
||||
go _ ((_, IRTypeError ps t1 t2) : _) = Left $ makeError ps t1 t2
|
||||
|
||||
#test issue 89 - type-family-instance
|
||||
type instance XPure StageParse = ()
|
||||
type Pair a = (a, a)
|
||||
|
||||
#test issue 144
|
||||
-- brittany { lconfig_indentAmount: 4, lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
dsfnjKeekbwwbosbOfakxqRsiyix cnehokzozwbVaguvu migbnaRwutbz =
|
||||
let
|
||||
eyuAfrarIso'
|
||||
:: (RveoexdxunuAafalm -> Axlau (Axlau (a, OinejrdCplle)))
|
||||
-> Gbodoy
|
||||
-> Axlau (Axlau OinejrdCplle, Gbodoy)
|
||||
eyuAfrarIso' = ulcPaaekBst cnehokzozwbVaguvu
|
||||
amkgoxEhalazJjxunecCuIfaw
|
||||
:: Axlau (Axlau OinejrdCplle, Gbodoy) -> Axlau RqlnrluYqednbCiggxi
|
||||
amkgoxEhalazJjxunecCuIfaw uKqviuBisjtn = do
|
||||
(sEmo, quc) <- uKqviuBisjtn
|
||||
pure (xoheccewfWoeyiagOkfodiq sEmo quc)
|
||||
xoheccewfWoeyiagOkfodiq
|
||||
:: Axlau OinejrdCplle -> Gbodoy -> RqlnrluYqednbCiggxi
|
||||
xoheccewfWoeyiagOkfodiq sEmo quc = case migbnaRwutbz of
|
||||
Afogmf -> xgeqe (OfBkkuih quc) (Ciitog quc) sEmo
|
||||
in QabqyilexuiNizzhsQuxxac migbnaRwutbz (hwaTihhjt lhowvscIiozgqe)
|
||||
|
||||
#test issue 159
|
||||
spec = do
|
||||
it "creates a snapshot at the given level" . withGraph runDB $ do
|
||||
lift $ do
|
||||
studentDiagnosticReadingLevel updatedStudent `shouldBe` Just 10 -- x
|
||||
elaSnapshotReadingLevel snapshot `shouldBe` 12
|
||||
|
||||
#test non-bottom-specialcase-altsearch
|
||||
jaicyhHumzo btrKpeyiFej mava = do
|
||||
m :: VtohxeRgpmgsu <- qloxIfiq mava
|
||||
case m of
|
||||
ZumnaoFujayerIswadabo kkecm chlixxag -> do
|
||||
imomue <- ozisduRaqiseSBAob btrKpeyiFej $ \s ->
|
||||
case MizA.pigevo kkecm (_tc_gulawulu s) of
|
||||
Ebocaba ->
|
||||
( s { _tc_gulawulu = MizA.jxariu kkecm rwuRqxzhjo (_tc_gulawulu s) }
|
||||
, Gtzvonm
|
||||
)
|
||||
Xcde{} -> (s, Pioemav)
|
||||
pure imomue
|
||||
|
||||
#test issue 214
|
||||
-- brittany { lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
foo =
|
||||
bar
|
||||
arg1 -- this is the first argument
|
||||
arg2 -- this is the second argument
|
||||
arg3 -- this is the third argument, now I'll skip one comment
|
||||
arg4
|
||||
arg5 -- this is the fifth argument
|
||||
arg6 -- this is the sixth argument
|
||||
|
||||
#test issue 234
|
||||
|
||||
True `nand` True = False
|
||||
nand _ _ = True
|
||||
|
||||
nor False False = True
|
||||
_ `nor` _ = False
|
||||
|
||||
#test issue 256 prefix operator match
|
||||
|
||||
f ((:) a as) = undefined
|
||||
|
||||
#test issue 228 lambda plus lazy or bang pattern
|
||||
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
a = \x -> x
|
||||
b = \ ~x -> x
|
||||
c = \ !x -> x
|
||||
d = \(~x) -> x
|
||||
|
||||
#test type signature with forall and constraint
|
||||
{-# LANGUAGE RankNTypes #-}
|
||||
func :: forall b . Show b => b -> String
|
||||
|
||||
#test issue 267
|
||||
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
f :: ((~) a b) => a -> b
|
||||
f = id
|
||||
|
||||
#test large record update
|
||||
-- brittany { lconfig_indentPolicy: IndentPolicyLeft }
|
||||
vakjkeSulxudbFokvir = Duotpo
|
||||
{ _ekku_gcrpbze = xgonae (1 :: Int)
|
||||
, _oola_louwu = FoqsiYcuidx
|
||||
{ _xxagu_umea_iaztoj = xgonae False
|
||||
, _tuktg_tizo_kfikacygsqf = xgonae False
|
||||
, _ahzbo_xpow_otq_nzeyufq = xgonae False
|
||||
, _uagpi_lzps_luy_xcjn = xgonae False
|
||||
, _dxono_qjef_aqtafq_bes = xgonae False
|
||||
, _yzuaf_nviy_vuhwxe_ihnbo_uhw = xgonae False
|
||||
, _iwcit_fzjs_yerakt_dicox_mtryitko = xgonae False
|
||||
, _ehjim_ucfe_dewarp_newrt_gso = xgonae False
|
||||
, _ogtxb_ivoj_amqgai_rttui_xuwhetb = xgonae False
|
||||
, _bhycb_iexz_megaug_qunoa_ohaked = xgonae False
|
||||
, _nnmbe_uqgt_ewsuga_vaiis = xgonae False
|
||||
, _otzil_ucvugaiyj_aosoiatunx_asir = xgonae False
|
||||
}
|
||||
, _iwsc_lalojz = XqspaiDainqw
|
||||
{ _uajznac_ugah = xgonae (80 :: Int)
|
||||
, _qayziku_gazibzDejipj = xgonae DewizeCxwgyiKjig
|
||||
, _auhebll_fiqjxyArfxia = xgonae (2 :: Int)
|
||||
, _zubfuhq_dupiwnIoophXameeet = xgonae True
|
||||
, _oavnuqg_opkreyOufuIkifiin = xgonae True
|
||||
, _ufojfwy_fhuzcePeqwfu = xgonae (50 :: Int)
|
||||
, _mlosikq_zajdxxSeRoelpf = xgonae (50 :: Int)
|
||||
, _heemavf_fjgOfoaikh = xgonae (FyoVfvdygaZuzuvbeWarwuq 3)
|
||||
, _ohxmeoq_ogtbfoPtqezVseu = xgonae (EdjotoLcbapUdiuMmytwoig 0.7)
|
||||
, _omupuiu_ituamexjuLccwu = xgonae (30 :: Int)
|
||||
, _xoseksf_atvwwdwaoHanofMyUvujjopoz = xgonae True
|
||||
, _umuuuat_nuamezwWeqfUqzrnaxwp = xgonae False
|
||||
, _uuriguz_wixhutbuKecigaFiwosret = xgonae True
|
||||
, _betohxp_scixaLsvcesErtwItxrnaJmuz = xgonae False
|
||||
, _lchxgee_olaetGcqzuqxVujenCzexub = xgonae True
|
||||
, _egeibao_imamkuigqikhZdcbpidokVcixiqew = xgonae False
|
||||
}
|
||||
, _nloo_cfmrgZcisiugk = YuwodSavxwnicBekuel
|
||||
{ _oebew_rrtpvthUzlizjAqIwesly = xgonae False
|
||||
, _blkff_Acxoid = xgonae False
|
||||
, _datei_YewolAowoqOpunvpgu = xgonae BeekgUzojaPnixxaruJehyPmnnfu
|
||||
, _ejfrj_eheb_justvh_pumcp_ismya = xgonae False
|
||||
}
|
||||
, _kena_uzeddovosoki = NyoRvshullezUpauud
|
||||
{ _mtfuwi_TUVEmoi = xgonae RZXKoytUtogx
|
||||
, _larqam_adaxPehaylZafeqgpc = xgonae False
|
||||
}
|
||||
, _spob_qipaarx = KaxavsmOtoyeaq { _rusrirw_okx = Tajemkix [] }
|
||||
, _vmah_uivucnfka_ikaquebxay_gzcm = xgonae False
|
||||
, _qaqb_eykzuyuwi = xgonae False
|
||||
-- test comment
|
||||
}
|
||||
|
||||
#test large record wildcard comment
|
||||
|
||||
-- brittany { lconfig_indentPolicy: IndentPolicyLeft }
|
||||
vakjkeSulxudbFokvir = Duotpo
|
||||
{ _ekku_gcrpbze = xgonae (1 :: Int)
|
||||
, _spob_qipaarx = KaxavsmOtoyeaq { _rusrirw_okx = Tajemkix [] }
|
||||
, _vmah_uivucnfka_ikaquebxay_gzcm = xgonae False
|
||||
, _qaqb_eykzuyuwi = xgonae False
|
||||
-- test comment
|
||||
, -- N.B.
|
||||
.. -- x
|
||||
}
|
||||
|
||||
#test issue 263
|
||||
|
||||
func = abc + def
|
||||
-- a
|
||||
-- b
|
||||
|
||||
-- comment
|
||||
|
||||
where
|
||||
abc = 13
|
||||
def = 1
|
||||
|
||||
#test AddBaseY/EnsureIndent float in effect
|
||||
|
||||
zItazySunefp twgq nlyo lwojjoBiecao =
|
||||
let mhIarjyai =
|
||||
ukwAausnfcn
|
||||
$ XojlsTOSR.vuwOvuvdAZUOJaa
|
||||
$ XojlsTOSR.vkesForanLiufjeDI
|
||||
$ XojlsTOSR.vkesForanLiufjeDI
|
||||
$ XojlsTOSR.popjAyijoWarueeP
|
||||
$ XojlsTOSR.jpwuPmafuDqlbkt nlyo
|
||||
$ XojlsTOSR.jpwuPmafuDqlbkt xxneswWhxwng
|
||||
$ XojlsTOSR.jpwuPmafuDqlbkt oloCuxeDdow
|
||||
$ XojlsTOSR.jpwuPmafuDqlbkt (uwurrvoNnukzefuDjeh lwojjoBiecao nlyo)
|
||||
$ etOslnoz lwojjoBiecao
|
||||
in kucotg $ (bbbr, Yoxe.Dwzbuzi.zrLokoTnuy piv)
|
||||
|
||||
#test module initial comment
|
||||
-- test
|
||||
module MyModule where
|
||||
|
||||
#test issue 231
|
||||
|
||||
foo =
|
||||
[ ("xxx", "xx")
|
||||
, --
|
||||
("xx" , "xx")
|
||||
--
|
||||
, ("xx" , "xxxxx")
|
||||
, ("xx" , "xx")
|
||||
]
|
||||
|
||||
#test issue 231 not
|
||||
|
||||
foo =
|
||||
[ ("xx", "xx")
|
||||
, ( "xx" --
|
||||
, "xx"
|
||||
)
|
||||
, ("xx", "xxxxx")
|
||||
, ("xx", "xx")
|
||||
]
|
||||
|
||||
#test issue 281
|
||||
|
||||
module Main
|
||||
( DataTypeI
|
||||
, DataTypeII(DataConstructor)
|
||||
-- * Haddock heading
|
||||
, name
|
||||
) where
|
||||
|
||||
#test type level list
|
||||
|
||||
xeoeqibIaib
|
||||
:: ( KqujhIsaus m
|
||||
, XivuvIpoboi Droqifim m
|
||||
, IgorvOtowtf m
|
||||
, RyagaYaqac m
|
||||
, QouruDU m
|
||||
)
|
||||
=> MaptAdfuxgu
|
||||
-> Zcnxg NsxayqmvIjsezea -- ^ if Lvqucoo, opsip jl reyoyhk lfil qaculxgd
|
||||
-> QNOZqwuzg
|
||||
-> Eoattuq
|
||||
'[ XkatytdWdquraosu -- test comment
|
||||
, KyezKijim -- another test comment
|
||||
, DjmioeePuoeg
|
||||
, NinrxoiOwezc
|
||||
, QATAlrijacpk
|
||||
, TrutvotwIwifiqOjdtu
|
||||
, CoMmuatjwr
|
||||
, BoZckzqyodseZole
|
||||
, VagfwoXaeChfqe
|
||||
]
|
||||
m
|
||||
()
|
||||
|
||||
#test recordupd-overflow-bad-multiline-spacing
|
||||
|
||||
createRedirectedProcess processConfig = do
|
||||
let redirectedProc = (_processConfig_inner processConfig)
|
||||
{ std_in = CreatePipe
|
||||
, std_out = CreatePipe
|
||||
, std_err = CreatePipe
|
||||
}
|
||||
foo
|
||||
|
||||
#test issue 282
|
||||
|
||||
instance HasDependencies SomeDataModel where
|
||||
-- N.B. Here is a bunch of explanatory context about the relationship
|
||||
-- between these data models or whatever.
|
||||
type Dependencies SomeDataModel
|
||||
= (SomeOtherDataModelId, SomeOtherOtherDataModelId)
|
||||
|
||||
#test stupid-do-operator-combination
|
||||
#pending
|
||||
|
||||
func =
|
||||
do
|
||||
y
|
||||
>>= x
|
||||
|
||||
#test nested-arrow-type
|
||||
#pending
|
||||
fieldWith
|
||||
:: a
|
||||
-> a
|
||||
-> ( ( GHC.RealSrcLoc
|
||||
, a
|
||||
, Either
|
||||
(Maybe GHC.RealSrcLoc, ToBriDocM BriDocNumbered)
|
||||
( Maybe GHC.RealSrcLoc
|
||||
, ToBriDocM BriDocNumbered
|
||||
, ToBriDocM BriDocNumbered
|
||||
)
|
||||
)
|
||||
-> ToBriDocM BriDocNumbered
|
||||
)
|
||||
-> [ToBriDocM BriDocNumbered]
|
||||
|
||||
#test comment-before-where
|
||||
briDocLineLength briDoc = flip StateS.evalState False $ go briDoc
|
||||
-- the state encodes whether a separator was already
|
||||
-- appended at the current position.
|
||||
where
|
||||
go = \case
|
||||
BDEmpty -> return $ 0
|
||||
BDLit t -> StateS.put False $> Text.length t
|
||||
BDSeq bds -> sum <$> go `mapM` bds
|
||||
|
||||
#test where-funbind-no-empty-lines
|
||||
alignColsLines layoutBriDocM bridocs = do -- colInfos `forM_` \colInfo -> do
|
||||
-- tellDebugMess ("alignColsLines: at " ++ take 100 (show $ briDocToDoc $ head bridocs))
|
||||
case () of
|
||||
_ -> do
|
||||
-- tellDebugMess ("colInfos:\n" ++ List.unlines [ "> " ++ prettyColInfos "> " x | x <- colInfos])
|
||||
-- tellDebugMess ("processedMap: " ++ show processedMap)
|
||||
sequence_
|
||||
$ List.intersperse layoutWriteEnsureNewlineBlock
|
||||
$ colInfos <&> processInfo layoutBriDocM colMax processedMap
|
||||
where
|
||||
(colInfos, finalState) = StateS.runState
|
||||
(mergeBriDocs bridocs)
|
||||
(ColBuildState IntMapS.empty 0)
|
||||
-- maxZipper :: [Int] -> [Int] -> [Int]
|
||||
-- maxZipper [] ys = ys
|
||||
-- maxZipper xs [] = xs
|
||||
-- maxZipper (x:xr) (y:yr) = max x y : maxZipper xr yr
|
||||
colAggregation :: [Int] -> Int
|
||||
colAggregation [] = 0 -- this probably cannot happen the way we call
|
||||
-- this function, because _cbs_map only ever
|
||||
-- contains nonempty Seqs.
|
||||
colAggregation xs = maximum [ x | x <- xs, x <= minimum xs + alignMax' ]
|
||||
where alignMax' = max 0 alignMax
|
||||
|
||||
#test type-signature comment-after-context
|
||||
tzejubuVxairoy
|
||||
:: (VwzuyApikd.VwzuyApikd zub, ZxtbaKospaKwqnuw Defg.Xeqpgko.Xeqpgko m)
|
||||
-- foo bar
|
||||
=> CUR.Ozuzcak zub
|
||||
-> m ()
|
||||
|
||||
#test allow par-spacing for HsApp HsDo
|
||||
func = other $ meep
|
||||
do
|
||||
abc
|
||||
def
|
||||
(some other very long linnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne)
|
||||
|
||||
#test allow par-spacing for HsApp HsDo
|
||||
func = other $ meep
|
||||
[ x | x <- myList ]
|
||||
(some other very long linnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne)
|
||||
|
||||
#test allow par-spacing for HsApp HsSpliceE
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
func = other $ meep
|
||||
[q|hello
|
||||
world|]
|
||||
(some other very long linnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne)
|
|
@ -0,0 +1,35 @@
|
|||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
#group pending
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
|
||||
|
||||
|
||||
## this testcase is not about idempotency, but about _how_ the output differs
|
||||
## from the input; i cannot really express this yet with the current
|
||||
## test-suite.
|
||||
## #test ayaz
|
||||
##
|
||||
## myManageHook =
|
||||
## composeOne [isFullscreen -?> doFullFloat, isDialog -?> doFloat, transience]
|
||||
## <+> composeAll
|
||||
## [ className =? "Pidgin" --> doFloat
|
||||
## , className =? "XCalc" --> doFloat
|
||||
## -- plan9port's acme
|
||||
## , className =? "acme" --> doFloat
|
||||
## -- Acme with Vi bindings editor
|
||||
## , title =? "ED" --> doFloat
|
||||
## , title =? "wlc-x11" --> doFloat
|
||||
## , className =? "Skype" --> doFloat
|
||||
## , className =? "ffplay" --> doFloat
|
||||
## , className =? "mpv" --> doFloat
|
||||
## , className =? "Plugin-container" --> doFloat -- Firefox flash, etc.
|
||||
## -- Firefox works well tiled, but it has dialog windows we want to float.
|
||||
## , appName =? "Browser" --> doFloat
|
||||
## ]
|
||||
## where
|
||||
## role = stringProperty "WM_WINDOW_ROLE"
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,43 @@
|
|||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
#group indent-policy-multiple
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
|
||||
#test long
|
||||
-- brittany { lconfig_indentAmount: 4, lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
func =
|
||||
mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
+ mweroiuxlskdfjlksjdflkjsdfljksldkjflkjsdflkj
|
||||
|
||||
#test let indAmount=4
|
||||
-- brittany { lconfig_indentAmount: 4, lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
foo = do
|
||||
let aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
foo
|
||||
|
||||
#test let indAmount=8
|
||||
-- brittany { lconfig_indentAmount: 8, lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
foo = do
|
||||
let aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
foo
|
||||
foo = do
|
||||
let aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
foo
|
||||
|
||||
#test nested do-block
|
||||
-- brittany { lconfig_indentAmount: 4, lconfig_indentPolicy: IndentPolicyMultiple }
|
||||
foo =
|
||||
asdyf8asdf
|
||||
"ajsdfas"
|
||||
[ asjdf asyhf $ do
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
]
|
|
@ -1 +0,0 @@
|
|||
func :: a -> a
|
|
@ -1,3 +0,0 @@
|
|||
func
|
||||
:: lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> (lakjsdlkjasldkj -> lakjsdlkjasldkj)
|
|
@ -1 +0,0 @@
|
|||
func = klajsdas klajsdas klajsdas
|
|
@ -1,3 +0,0 @@
|
|||
func = lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
|
@ -1,3 +0,0 @@
|
|||
func = lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd lakjsdlajsdljas
|
||||
lakjsdlajsdljas
|
||||
lakjsdlajsdljas
|
|
@ -1 +0,0 @@
|
|||
func = (1 +)
|
|
@ -1 +0,0 @@
|
|||
func = (+ 1)
|
|
@ -1 +0,0 @@
|
|||
func = (1 `abc`)
|
|
@ -1 +0,0 @@
|
|||
func = (`abc` 1)
|
|
@ -1 +0,0 @@
|
|||
func = (abc, def)
|
|
@ -1 +0,0 @@
|
|||
func = (abc, )
|
|
@ -1 +0,0 @@
|
|||
func = (, abc)
|
|
@ -1,3 +0,0 @@
|
|||
func
|
||||
:: (lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd -> lakjsdlkjasldkj)
|
||||
-> lakjsdlkjasldkj
|
|
@ -1,6 +0,0 @@
|
|||
myTupleSection =
|
||||
( verylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargefirstelement
|
||||
,
|
||||
, verylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargethirdelement
|
||||
,
|
||||
)
|
|
@ -1,4 +0,0 @@
|
|||
func =
|
||||
( lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
, lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
)
|
|
@ -1,6 +0,0 @@
|
|||
foo = if True
|
||||
then
|
||||
-- iiiiii
|
||||
"a "
|
||||
else
|
||||
"b "
|
|
@ -1,5 +0,0 @@
|
|||
func = if cond
|
||||
then pure 42
|
||||
else do
|
||||
-- test
|
||||
abc
|
|
@ -1,3 +0,0 @@
|
|||
func = case x of
|
||||
False -> False
|
||||
True -> True
|
|
@ -1,7 +0,0 @@
|
|||
func =
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of
|
||||
False -> False
|
||||
True -> True
|
|
@ -1,7 +0,0 @@
|
|||
func = do
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of
|
||||
False -> False
|
||||
True -> True
|
|
@ -1 +0,0 @@
|
|||
func = case x of {}
|
|
@ -1,5 +0,0 @@
|
|||
func =
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of {}
|
|
@ -1,5 +0,0 @@
|
|||
func = do
|
||||
case
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
lakjsdlajsdljasdlkjasldjasldjasldjalsdjlaskjd
|
||||
of {}
|
|
@ -1,5 +0,0 @@
|
|||
func
|
||||
:: ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
-> lakjsdlkjasldkj
|
|
@ -1,3 +0,0 @@
|
|||
func = do
|
||||
stmt
|
||||
stmt
|
|
@ -1,3 +0,0 @@
|
|||
func = do
|
||||
x <- stmt
|
||||
stmt x
|
|
@ -1,3 +0,0 @@
|
|||
func = do
|
||||
let x = 13
|
||||
stmt x
|
|
@ -1,7 +0,0 @@
|
|||
func =
|
||||
foooooo
|
||||
$ [ case
|
||||
foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
|
||||
of
|
||||
_ -> True
|
||||
]
|
|
@ -1,4 +0,0 @@
|
|||
testMethod foo bar baz qux =
|
||||
let x = undefined foo bar baz qux qux baz bar :: String
|
||||
-- some comment explaining the in expression
|
||||
in undefined foo x :: String
|
|
@ -1,4 +0,0 @@
|
|||
testMethod foo bar baz qux =
|
||||
let x = undefined :: String
|
||||
-- some comment explaining the in expression
|
||||
in undefined :: String
|
|
@ -1,3 +0,0 @@
|
|||
testMethod foo bar baz qux =
|
||||
-- some comment explaining the in expression
|
||||
let x = undefined :: String in undefined :: String
|
|
@ -1,6 +0,0 @@
|
|||
foo foo bar baz qux =
|
||||
let a = 1
|
||||
b = 2
|
||||
c = 3
|
||||
-- some comment explaining the in expression
|
||||
in undefined :: String
|
|
@ -1,6 +0,0 @@
|
|||
func =
|
||||
foo
|
||||
$ [ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
]
|
||||
++ [ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]
|
|
@ -1 +0,0 @@
|
|||
module Main where
|
|
@ -1,5 +0,0 @@
|
|||
func
|
||||
:: ( ( lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
-> lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
)
|
||||
)
|
|
@ -1 +0,0 @@
|
|||
module Main () where
|
|
@ -1 +0,0 @@
|
|||
module Main (main) where
|
|
@ -1 +0,0 @@
|
|||
module Main (main, test1, test2) where
|
|
@ -1,12 +0,0 @@
|
|||
module Main
|
||||
( main
|
||||
, test1
|
||||
, test2
|
||||
, test3
|
||||
, test4
|
||||
, test5
|
||||
, test6
|
||||
, test7
|
||||
, test8
|
||||
, test9
|
||||
) where
|
|
@ -1,12 +0,0 @@
|
|||
module Main
|
||||
( main
|
||||
-- main
|
||||
, test1
|
||||
, test2
|
||||
-- Test 3
|
||||
, test3
|
||||
, test4
|
||||
-- Test 5
|
||||
, test5
|
||||
-- Test 6
|
||||
) where
|
|
@ -1 +0,0 @@
|
|||
module Main (Test(..)) where
|
|
@ -1 +0,0 @@
|
|||
module Main (module Main) where
|
|
@ -1 +0,0 @@
|
|||
module Main (Test(Test, a, b)) where
|
|
@ -1,6 +0,0 @@
|
|||
-- comment1
|
||||
module Main
|
||||
( Test(Test, a, b)
|
||||
, foo -- comment2
|
||||
) -- comment3
|
||||
where
|
|
@ -1 +0,0 @@
|
|||
module Main (Test()) where
|
|
@ -1 +0,0 @@
|
|||
func :: asd -> Either a b
|
|
@ -1 +0,0 @@
|
|||
-- Intentionally left empty
|
|
@ -1 +0,0 @@
|
|||
import Data.List
|
|
@ -1 +0,0 @@
|
|||
import Data.List as L
|
|
@ -1 +0,0 @@
|
|||
import qualified Data.List
|
|
@ -1 +0,0 @@
|
|||
import qualified Data.List as L
|
|
@ -1 +0,0 @@
|
|||
import safe Data.List as L
|
|
@ -1 +0,0 @@
|
|||
import {-# SOURCE #-} Data.List ( )
|
|
@ -1 +0,0 @@
|
|||
import safe qualified Data.List
|
|
@ -1 +0,0 @@
|
|||
import {-# SOURCE #-} safe qualified Data.List
|
|
@ -1 +0,0 @@
|
|||
import qualified "base" Data.List
|
|
@ -1,5 +0,0 @@
|
|||
func
|
||||
:: asd
|
||||
-> Either
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
|
@ -1,3 +0,0 @@
|
|||
import {-# SOURCE #-} safe qualified "base" Data.List as L
|
||||
import {-# SOURCE #-} safe qualified "base" Data.List ( )
|
||||
import {-# SOURCE #-} safe qualified Data.List hiding ( )
|
|
@ -1 +0,0 @@
|
|||
import qualified Data.List ( )
|
|
@ -1 +0,0 @@
|
|||
import Data.List ( nub )
|
|
@ -1,4 +0,0 @@
|
|||
import Data.List ( foldl'
|
||||
, indexElem
|
||||
, nub
|
||||
)
|
|
@ -1,14 +0,0 @@
|
|||
import Test ( Long
|
||||
, anymore
|
||||
, fit
|
||||
, items
|
||||
, line
|
||||
, list
|
||||
, not
|
||||
, onA
|
||||
, quite
|
||||
, single
|
||||
, that
|
||||
, will
|
||||
, with
|
||||
)
|
|
@ -1,11 +0,0 @@
|
|||
import Test ( (+)
|
||||
, (:!)(..)
|
||||
, (:*)((:.), T7, t7)
|
||||
, (:.)
|
||||
, T
|
||||
, T2()
|
||||
, T3(..)
|
||||
, T4(T4)
|
||||
, T5(T5, t5)
|
||||
, T6((<|>))
|
||||
)
|
|
@ -1,3 +0,0 @@
|
|||
import Test hiding ( )
|
||||
import Test as T
|
||||
hiding ( )
|
|
@ -1,13 +0,0 @@
|
|||
import Prelude as X
|
||||
hiding ( head
|
||||
, init
|
||||
, last
|
||||
, maximum
|
||||
, minimum
|
||||
, pred
|
||||
, read
|
||||
, readFile
|
||||
, succ
|
||||
, tail
|
||||
, undefined
|
||||
)
|
|
@ -1,3 +0,0 @@
|
|||
import TestJustAbitToLongModuleNameLikeThisOneIs
|
||||
( )
|
||||
import TestJustShortEnoughModuleNameLikeThisOne ( )
|
|
@ -1,3 +0,0 @@
|
|||
import TestJustAbitToLongModuleNameLikeThisOneI
|
||||
as T
|
||||
import TestJustShortEnoughModuleNameLikeThisOn as T
|
|
@ -1,6 +0,0 @@
|
|||
func
|
||||
:: asd
|
||||
-> Trither
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
||||
lkasdlkjalsdjlakjsdlkjasldkjalskdjlkajsd
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue