diff --git a/hstyle.cabal b/hstyle.cabal
--- a/hstyle.cabal
+++ b/hstyle.cabal
@@ -1,5 +1,5 @@
 Name:           hstyle
-Version:        0.2.0.1
+Version:        0.2.0.2
 Synopsis:       Checks Haskell source code for style compliance.
 Description:    Originally intended to automate style checking for the Snap
                 project.  But the project should be general enough to work
diff --git a/src/HStyle.hs b/src/HStyle.hs
--- a/src/HStyle.hs
+++ b/src/HStyle.hs
@@ -7,6 +7,8 @@
 import Control.Applicative ((<$>))
 import Control.Monad (forM, forM_)
 import Data.Char (isSpace)
+import Data.List (isPrefixOf)
+import Data.Maybe (fromMaybe)
 
 import qualified Data.Text as T
 import qualified Data.Text.IO as T
@@ -69,11 +71,25 @@
         then Just "trailing whitespace"
         else Nothing
 
+-- | Filter out lines which use CPP macros
+unCPP :: String -> String
+unCPP = unlines . map unCpp' . lines
+  where
+    unCpp' x
+        | "#" `isPrefixOf` x = ""
+        | otherwise          = x
+
 checkStyle :: FilePath -> IO Bool
 checkStyle file = do
     contents <- readFile file
-    let block = fromText $ T.pack contents
-    case H.parseModule contents of
+    let block      = fromText $ T.pack contents
+        -- Determine the extensions used in the file, and update the parsing
+        -- mode based upon those
+        exts      = fromMaybe [] $ H.readExtensions contents
+        mode      = H.defaultParseMode {H.extensions = exts}
+        -- Special handling for CPP, haskell-src-exts can't deal with it
+        contents' = if H.CPP `elem` exts then unCPP contents else contents
+    case H.parseModuleWithMode mode contents' of
         H.ParseOk md -> and <$> mapM (runRule file block md)
             [ (typeSigSelector, typeSigCheck)
             , (selectLines, tabsCheck)
