hse-cpp 0.1 → 0.2
raw patch · 3 files changed
+72/−73 lines, 3 filesdep ~haskell-src-extsnew-uploader
Dependency ranges changed: haskell-src-exts
Files
- Language/Haskell/Exts/Annotated/CPP.hs +0/−66
- Language/Haskell/Exts/CPP.hs +65/−0
- hse-cpp.cabal +7/−7
− Language/Haskell/Exts/Annotated/CPP.hs
@@ -1,66 +0,0 @@-module Language.Haskell.Exts.Annotated.CPP- ( parseFileWithCommentsAndCPP- , parseFileContentsWithCommentsAndCPP- , defaultCpphsOptions- , CpphsOptions(..)- , BoolOptions(..)- ) where--import qualified Language.Preprocessor.Cpphs as Orig-import Language.Preprocessor.Cpphs hiding (defaultCpphsOptions)-import Language.Preprocessor.Unlit-import Language.Haskell.Exts (ParseMode(..))-import Language.Haskell.Exts.Annotated-import Control.Applicative-import Data.List--parseFileWithCommentsAndCPP :: CpphsOptions -> ParseMode -> FilePath- -> IO (ParseResult (Module SrcSpanInfo, [Comment]))-parseFileWithCommentsAndCPP cppopts parseMode0 file = do- content <- readFile file- parseFileContentsWithCommentsAndCPP cppopts parseMode content- where- parseMode = parseMode0 { parseFilename = file }--parseFileContentsWithCommentsAndCPP- :: CpphsOptions -> ParseMode -> String- -> IO (ParseResult (Module SrcSpanInfo, [Comment]))-parseFileContentsWithCommentsAndCPP cppopts p rawStr = do- let filename = parseFilename p- md = delit filename rawStr- cppMode = updateExtensions p md- processedSrc <- cpp cppopts cppMode md- let finalMode = updateExtensions cppMode processedSrc- return $ parseModuleWithComments finalMode processedSrc--updateExtensions :: ParseMode -> String -> ParseMode-updateExtensions p mod =- let oldLang = baseLanguage p- exts = extensions p- (bLang, extraExts) =- case (ignoreLanguagePragmas p, readExtensions mod) of- (False, Just (mLang, es)) ->- (case mLang of {Nothing -> oldLang;Just newLang -> newLang}, es)- _ -> (oldLang, [])- in p { extensions = exts ++ extraExts- , ignoreLanguagePragmas = False- , baseLanguage = bLang- }--cpp cppopts p str- | CPP `elem` impliesExts (toExtensionList (baseLanguage p) (extensions p))- = runCpphs cppopts (parseFilename p) str- | otherwise = return str--delit :: String -> String -> String-delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id--defaultCpphsOptions =- Orig.defaultCpphsOptions- { boolopts = (boolopts Orig.defaultCpphsOptions)- { locations = True- , stripC89 = True- , stripEol = False- , hashline = False- }- }
+ Language/Haskell/Exts/CPP.hs view
@@ -0,0 +1,65 @@+module Language.Haskell.Exts.CPP+ ( parseFileWithCommentsAndCPP+ , parseFileContentsWithCommentsAndCPP+ , defaultCpphsOptions+ , CpphsOptions(..)+ , BoolOptions(..)+ ) where++import qualified Language.Preprocessor.Cpphs as Orig+import Language.Preprocessor.Cpphs hiding (defaultCpphsOptions)+import Language.Preprocessor.Unlit+import Language.Haskell.Exts+import Control.Applicative+import Data.List++parseFileWithCommentsAndCPP :: CpphsOptions -> ParseMode -> FilePath+ -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseFileWithCommentsAndCPP cppopts parseMode0 file = do+ content <- readFile file+ parseFileContentsWithCommentsAndCPP cppopts parseMode content+ where+ parseMode = parseMode0 { parseFilename = file }++parseFileContentsWithCommentsAndCPP+ :: CpphsOptions -> ParseMode -> String+ -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseFileContentsWithCommentsAndCPP cppopts p rawStr = do+ let filename = parseFilename p+ md = delit filename rawStr+ cppMode = updateExtensions p md+ processedSrc <- cpp cppopts cppMode md+ let finalMode = updateExtensions cppMode processedSrc+ return $ parseModuleWithComments finalMode processedSrc++updateExtensions :: ParseMode -> String -> ParseMode+updateExtensions p mod =+ let oldLang = baseLanguage p+ exts = extensions p+ (bLang, extraExts) =+ case (ignoreLanguagePragmas p, readExtensions mod) of+ (False, Just (mLang, es)) ->+ (case mLang of {Nothing -> oldLang;Just newLang -> newLang}, es)+ _ -> (oldLang, [])+ in p { extensions = exts ++ extraExts+ , ignoreLanguagePragmas = False+ , baseLanguage = bLang+ }++cpp cppopts p str+ | CPP `elem` impliesExts (toExtensionList (baseLanguage p) (extensions p))+ = runCpphs cppopts (parseFilename p) str+ | otherwise = return str++delit :: String -> String -> String+delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id++defaultCpphsOptions =+ Orig.defaultCpphsOptions+ { boolopts = (boolopts Orig.defaultCpphsOptions)+ { locations = True+ , stripC89 = True+ , stripEol = False+ , hashline = False+ }+ }
hse-cpp.cabal view
@@ -1,23 +1,23 @@--- Initial hse-cpp.cabal generated by cabal init. For further +-- Initial hse-cpp.cabal generated by cabal init. For further -- documentation, see http://haskell.org/cabal/users-guide/ name: hse-cpp-version: 0.1+version: 0.2 synopsis: Preprocess+parse haskell code--- description: +-- description: license: MIT license-file: LICENSE author: Roman Cheplyaka maintainer: Roman Cheplyaka <roma@ro-che.info>--- copyright: +-- copyright: category: Language build-type: Simple cabal-version: >=1.10 library- exposed-modules: Language.Haskell.Exts.Annotated.CPP- -- other-modules: + exposed-modules: Language.Haskell.Exts.CPP+ -- other-modules: build-depends: base == 4.* , cpphs- , haskell-src-exts >= 1.14+ , haskell-src-exts >= 1.18 default-language: Haskell2010