packages feed

file-modules 0.1.2.2 → 0.1.2.3

raw patch · 2 files changed

+40/−20 lines, 2 filesdep +regex-compatdep +regex-pcrePVP ok

version bump matches the API change (PVP)

Dependencies added: regex-compat, regex-pcre

API changes (from Hackage documentation)

Files

file-modules.cabal view
@@ -1,5 +1,5 @@ name: file-modules-version: 0.1.2.2+version: 0.1.2.3 cabal-version: >=1.10 build-type: Simple license: MIT@@ -18,25 +18,29 @@     exposed-modules:         Development.FileModules     build-depends:-        MissingH -any,-        directory -any,-        async -any,-        base >=4.5 && <5,-        filepath -any,-        haskell-src-exts >=1.17 && <2+                  MissingH -any,+                  async -any,+                  base >=4.5 && <5,+                  directory -any,+                  filepath -any,+                  haskell-src-exts >=1.17 && <2,+                  regex-compat >= 0.95.1,+                  regex-pcre     default-language: Haskell2010     hs-source-dirs: src  executable file-modules     main-is: Main.hs     build-depends:-        base >=4.5 && <5,-        MissingH -any,-        directory -any,-        async -any,-        base >=4.5 && <5,-        filepath -any,-        haskell-src-exts >=1.17 && <2+                  MissingH -any,+                  async -any,+                  base >=4.5 && <5,+                  base >=4.5 && <5,+                  directory -any,+                  filepath -any,+                  haskell-src-exts >=1.17 && <2,+                  regex-compat >= 0.95.1,+                  regex-pcre -any     default-language: Haskell2010     hs-source-dirs: src     ghc-options: -O2 -threaded
src/Development/FileModules.hs view
@@ -7,9 +7,10 @@ import           Language.Haskell.Exts    (ImportDecl (..),                                            ModuleHeadAndImports (..),                                            ModuleName (..), NonGreedy (..),-                                           ParseResult (..), parse)+                                           ParseResult (..), SrcLoc (..), parse) import           System.Directory import           System.FilePath+import           Text.Regex  fileModulesRecur :: FilePath -> IO [String] fileModulesRecur fname = run fname@@ -28,15 +29,30 @@  fileModules :: FilePath -> IO [String] fileModules fname = do-    result <- parse . sanitize <$> readFile fname-    case result of-        (ParseOk (NonGreedy{..})) -> do+    fcontents <- readFile fname+    case parse $ sanitize fcontents  of+        (ParseOk NonGreedy{..}) -> do             let (ModuleHeadAndImports _ _ mimports) = unNonGreedy             forM mimports $ \imp ->                 let ModuleName iname = importModule imp                 in return iname-        (ParseFailed _ _) -> error $ "Failed to parse module in " ++ fname+        (ParseFailed (SrcLoc _ line col) err) -> error $+            "Failed to parse module in " ++ fname ++ ":\n" +++            "  (" ++ show line ++ ":" ++ show col ++ ") " ++ err ++ "\n" +++            "  " ++ getLineCol fcontents (line, col)   where-    sanitize = unlines . map removeCpp . lines+    sanitize =+        unlines . map (removeMagicHash . removeCpp) . lines     removeCpp ('#':_) = ""     removeCpp l = l+    removeMagicHash l = subRegex r l o+      where+        r = mkRegex "#"+        o = ""+    getLineCol fcontents (line, col) =+        ln ++ "\n" +++        "  " ++ replicate (col' - 3) ' ' ++ "^^^"+      where+        ln = lines fcontents !! line+        col' = let l = length ln+               in if col > l then l else col