hstyle-0.2.0.3: src/HStyle/Rules/DataAlignment.hs
{-# LANGUAGE OverloadedStrings #-}
module HStyle.Rules.DataAlignment
( dataAlignmentRule
, dataSelector
, dataAlignmentChecker
) 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
dataAlignmentRule :: Rule
dataAlignmentRule = Rule dataSelector dataAlignmentChecker fixNothing
dataSelector :: Selector ()
dataSelector (md, _) block =
map (\ssi -> ((), fromSrcSpanInfo ssi block)) $ datas =<< everything md
where
datas :: H.Decl H.SrcSpanInfo -> [H.SrcSpanInfo]
datas decl = case decl of
d@(H.DataDecl _ _ _ _ _ _) -> [H.ann d]
_ -> []
dataAlignmentChecker :: Checker ()
dataAlignmentChecker () block = case checkAlignmentHead alignment of
Just t -> [(1, t)]
Nothing -> []
where
alignment = alignmentOf ["{", ",", "}"] $ toLines block