packages feed

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

-- | Check for tabs in files
{-# LANGUAGE OverloadedStrings #-}
module HStyle.Rules.Tabs
    ( tabsRule
    , tabsChecker
    , tabsFixer
    ) where

import qualified Data.Text as T

import HStyle.Checker
import HStyle.Fixer
import HStyle.Rule
import HStyle.Selector

tabsRule :: Int -> Rule
tabsRule i = Rule selectLines tabsChecker (tabsFixer i)

tabsChecker :: Checker ()
tabsChecker = checkLines $ \() line -> case T.findIndex (== '\t') line of
    Nothing -> Nothing
    Just i  -> Just $ "\\t at column " `T.append` T.pack (show $ i + 1)

tabsFixer :: Int -> Fixer ()
tabsFixer numSpaces = fixLines fixer
  where
    spaces   = T.replicate numSpaces " "
    fixer () = T.intercalate spaces . T.split (== '\t')