forked from haskell/haskell-language-server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOption.hs
33 lines (27 loc) · 820 Bytes
/
Option.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{-# OPTIONS_GHC -Wwarn #-}
-- | GHC language options parser
module Ide.Plugin.Eval.Parse.Option (
langOptions,
) where
import Control.Monad.Combinators (many)
import Ide.Plugin.Eval.Parse.Parser (
Parser,
letterChar,
runParser,
space,
string,
)
{- |
>>> langOptions ":set -XBinaryLiterals -XOverloadedStrings "
Right ["BinaryLiterals","OverloadedStrings"]
>>> langOptions ":set"
Right []
>>> langOptions ""
Left "No match"
-}
langOptions :: [Char] -> Either String [[Char]]
langOptions = runParser (many space *> languageOpts <* many space)
-- >>> runParser languageOpts ":set -XBinaryLiterals -XOverloadedStrings"
-- Right ["BinaryLiterals","OverloadedStrings"]
languageOpts :: Parser Char [[Char]]
languageOpts = string ":set" *> many (many space *> string "-X" *> (many letterChar))