1{-# OPTIONS_GHC -Wwarn #-} 2 3-- | GHC language options parser 4module Ide.Plugin.Eval.Parse.Option ( 5 langOptions, 6 parseSetFlags, 7) where 8 9import Control.Arrow (left) 10import Data.Void (Void) 11import Text.Megaparsec 12import Text.Megaparsec.Char 13 14{- | 15>>> langOptions ":set -XBinaryLiterals -XOverloadedStrings " 16Right ["BinaryLiterals","OverloadedStrings"] 17 18>>> langOptions ":set" 19Right [] 20 21>>> langOptions "" 22Left "No match" 23-} 24langOptions :: String -> Either String [String] 25langOptions = 26 left errorBundlePretty 27 . parse (space *> languageOpts <* eof) "" 28 29parseSetFlags :: String -> Maybe String 30parseSetFlags = parseMaybe 31 (hspace *> chunk ":set" 32 *> hspace1 *> takeRest 33 :: Parsec Void String String 34 ) 35 36-- >>> parseMaybe languageOpts ":set -XBinaryLiterals -XOverloadedStrings" 37-- Just ["BinaryLiterals","OverloadedStrings"] 38languageOpts :: Parsec Void String [String] 39languageOpts = string ":set" *> space1 40 *> many (string "-X" *> many letterChar <* space) 41