@@ -8,8 +8,9 @@ module Ormolu.Parser.LanguagePragma
88 )
99where
1010
11+import Control.Monad
1112import Data.Char (toLower)
12−import Data.List (isPrefixOf)
13+import Data.List (stripPrefix, isSuffixOf)
1314import Data.Set (Set)
1415import FastString (mkFastString, unpackFS)
1516import Module (newSimpleUnitId, ComponentId (..))
@@ -25,20 +26,20 @@ import qualified Lexer as L
2526parseLanguagePragma
2627 :: String -- ^ Comment to try to parse
2728 -> Maybe (Set String)
28−parseLanguagePragma input =
29− if "{-#" `isPrefixOf` input
30− then do
31− toks0 <- tokenize (drop 3 input)
32− toks1 <- dropLanguage toks0
33− S.fromList <$> parseExtensions toks1
34− else Nothing
29+parseLanguagePragma input = do
30+ inputNoPrefix <- stripPrefix "{-#" input
31+ guard ("#-}" `isSuffixOf` input)
32+ let contents = take (length inputNoPrefix - 3) inputNoPrefix
33+ toks0 <- tokenize contents
34+ toks1 <- dropLanguage toks0
35+ S.fromList <$> parseExtensions toks1
3536
3637-- | Assuming the input consists of a series of tokens from a language
3738-- pragma, return the set of enabled extensions.
3839
3940parseExtensions :: [L.Token] -> Maybe [String]
4041parseExtensions = \case
41− (L.ITconid ext : L.ITclose_prag : []) -> return [unpackFS ext]
42+ (L.ITconid ext : []) -> return [unpackFS ext]
4243 (L.ITconid ext : L.ITcomma : xs) -> (unpackFS ext :) <$> parseExtensions xs
4344 _ -> Nothing
4445