|
| 1 | +{-# LANGUAGE BlockArguments #-} |
| 2 | +{-# LANGUAGE LambdaCase #-} |
| 3 | +{-# LANGUAGE TypeApplications #-} |
1 | 4 | module Language.Haskell.Stylish.Step.Signature where
|
2 | 5 |
|
| 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 |
3 | 14 | 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 |
4 | 22 |
|
5 | 23 | data Config = Config
|
6 |
| - { maxColumnLength :: Int |
| 24 | + { cMaxColumns :: Int |
7 | 25 | }
|
8 | 26 |
|
9 | 27 | 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) |
0 commit comments