From f7d654cf658c8b0b04ec98e4c3bf216ae2976a26 Mon Sep 17 00:00:00 2001 From: Brent Yorgey <byorgey@cis.upenn.edu> Date: Mon, 11 Feb 2013 22:00:44 -0500 Subject: [PATCH] implement a poor man's LANGUAGE pragma parser --- .../Distribution/Client/Init/Heuristics.hs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cabal-install/Distribution/Client/Init/Heuristics.hs b/cabal-install/Distribution/Client/Init/Heuristics.hs index cc0e9f8ad9..1e2a4a14ab 100644 --- a/cabal-install/Distribution/Client/Init/Heuristics.hs +++ b/cabal-install/Distribution/Client/Init/Heuristics.hs @@ -124,9 +124,25 @@ findImportsAndExts projectRoot sf = do -- Haskell parser since cabal's dependencies must be kept at a -- minimum. - exts = undefined --- XXX todo: parse LANGUAGE pragmas. - . lines - $ s + -- A poor man's LANGUAGE pragma parser. + exts = mapMaybe simpleParse + . concatMap getPragmas + . filter isLANGUAGEPragma + . map fst + . drop 1 + . takeWhile (not . null . snd) + . iterate (takeBraces . snd) + $ ("",s) + + takeBraces = break (== '}') . dropWhile (/= '{') + + isLANGUAGEPragma = ("{-# LANGUAGE " `isPrefixOf`) + + getPragmas = map trim . splitCommas . takeWhile (/= '#') . drop 13 + + splitCommas "" = [] + splitCommas xs = x : splitCommas (drop 1 y) + where (x,y) = break (==',') xs return sf { imports = modules , extensions = exts -- GitLab