packages feed

hstyle-0.2.0.3: src/HStyle/Rules/TypeSigAlignment.hs

{-# LANGUAGE OverloadedStrings #-}
module HStyle.Rules.TypeSigAlignment
    ( typeSigAlignmentRule
    , typeSigSelector
    , typeSigAlignmentChecker
    ) where

import qualified Language.Haskell.Exts.Annotated as H

import HStyle.Alignment
import HStyle.Block
import HStyle.Checker
import HStyle.Fixer
import HStyle.Rule
import HStyle.Selector

typeSigAlignmentRule :: Rule
typeSigAlignmentRule = Rule typeSigSelector typeSigAlignmentChecker fixNothing

typeSigSelector :: Selector ()
typeSigSelector (md, _) block =
    map (\ssi -> ((), fromSrcSpanInfo ssi block)) $ tss md
  where
    tss (H.Module _ _ _ _ decls) = [ssi | H.TypeSig ssi _ _ <- decls]
    tss _                        = []

typeSigAlignmentChecker :: Checker ()
typeSigAlignmentChecker () block = case checkAlignmentHead alignment of
    Just t  -> [(1, t)]
    Nothing -> []
  where
    alignment = alignmentOf ["::", "=>", "->"] $ toLines block