Skip to content

Commit ba1f7d1

Browse files
committed
Modify Signature to look top level func signatures and prepare for formatting
1 parent 2b80feb commit ba1f7d1

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,46 @@
1+
{-# LANGUAGE BlockArguments #-}
2+
{-# LANGUAGE LambdaCase #-}
3+
{-# LANGUAGE TypeApplications #-}
14
module Language.Haskell.Stylish.Step.Signature where
25

6+
import RdrName (RdrName)
7+
import SrcLoc (GenLocated (..), Located)
8+
import GHC.Hs.Decls (HsDecl(..))
9+
import GHC.Hs.Binds (Sig(..))
10+
import GHC.Hs.Extension (GhcPs)
11+
12+
--------------------------------------------------------------------------------
13+
import Language.Haskell.Stylish.Block
314
import Language.Haskell.Stylish.Step
15+
import Language.Haskell.Stylish.Module
16+
import Language.Haskell.Stylish.Editor (change)
17+
import Language.Haskell.Stylish.GHC (getStartLineUnsafe, getEndLineUnsafe)
18+
import Language.Haskell.Stylish.Editor (Change, applyChanges)
19+
20+
-- TODO unify with type alias from Data.hs
21+
type ChangeLine = Change String
422

523
data Config = Config
6-
{ maxColumnLength :: Int
24+
{ cMaxColumns :: Int
725
}
826

927
step :: Config -> Step
10-
step _ = makeStep "Signature" (\ls _ -> ls)
28+
step cfg = makeStep "Signature" (\ls m -> applyChanges (changes cfg m) ls)
29+
30+
changes :: Config -> Module -> [ChangeLine]
31+
changes cfg m = fmap (formatSignatureDecl cfg m) (topLevelFunctionSignatures m)
32+
33+
topLevelFunctionSignatures :: Module -> [Located SignatureDecl]
34+
topLevelFunctionSignatures = queryModule @(Located (HsDecl GhcPs)) \case
35+
L pos (SigD _ (TypeSig _ [name] _)) -> [L pos $ MkSignatureDecl name]
36+
_ -> []
37+
38+
data SignatureDecl = MkSignatureDecl
39+
{ sigName :: Located RdrName
40+
}
41+
42+
formatSignatureDecl :: Config -> Module -> Located SignatureDecl -> ChangeLine
43+
formatSignatureDecl _cfg _m ldecl = change originalDeclBlock id
44+
where
45+
originalDeclBlock =
46+
Block (getStartLineUnsafe ldecl) (getEndLineUnsafe ldecl)

tests/Language/Haskell/Stylish/Step/Signature/Tests.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ tests = testGroup "Language.Haskell.Stylish.Step.Signature.Tests"
2121
]
2222

2323
config :: Int -> Config
24-
config maxColumnLength = Config
25-
{ maxColumnLength = maxColumnLength
24+
config cMaxColumns = Config
25+
{ cMaxColumns = cMaxColumns
2626
}
2727

2828
case00 :: Assertion

0 commit comments

Comments
 (0)