on master help sign in
Add Elm.Utils.isDefinition to solve some problems in elm-repl
0537abbEvan Czaplicki
src/Elm/Utils.hs+26−2
@@ -1,8 +1,15 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE FlexibleContexts #-}
3+module Elm.Utils
4+ ( (|>), (<|)
5+ , getAsset
3−module Elm.Utils ((|>), (<|), getAsset, run, unwrappedRun, CommandError(..)) where
6+ , run, unwrappedRun
7+ , CommandError(..)
8+ , isDeclaration
9+ ) where
4
10
5import Control.Monad.Except (MonadError, MonadIO, liftIO, throwError)
11import Control.Monad.Except (MonadError, MonadIO, liftIO, throwError)
12+import qualified Data.List as List
6import System.Directory (doesFileExist)
13import System.Directory (doesFileExist)
7import System.Environment (getEnv)
14import System.Environment (getEnv)
8import System.Exit (ExitCode(ExitSuccess, ExitFailure))
15import System.Exit (ExitCode(ExitSuccess, ExitFailure))
@@ -10,7 +17,12 @@ import System.FilePath ((</>))
10import System.IO.Error (tryIOError)
17import System.IO.Error (tryIOError)
11import System.Process (readProcessWithExitCode)
18import System.Process (readProcessWithExitCode)
12
19
20+import qualified AST.Expression.Source as Source
21+import qualified AST.Pattern as Pattern
13import qualified Elm.Compiler.Version as Version
22import qualified Elm.Compiler.Version as Version
23+import qualified Parse.Helpers as Parse
24+import qualified Parse.Expression as Parse
25+import qualified Reporting.Annotation as A
14
26
15
27
16{-| Forward function application `x |> f == f x`. This function is useful
28{-| Forward function application `x |> f == f x`. This function is useful
@@ -118,4 +130,16 @@ errorNotFound name =
118 , ""
130 , ""
119 , "If it seems like a more complex issue, please report it here:"
131 , "If it seems like a more complex issue, please report it here:"
120 , " <https://github.com/elm-lang/elm-platform/issues>"
132 , " <https://github.com/elm-lang/elm-platform/issues>"
121− ]
133+ ]
134+
135+
136+-- DECL CHECKER
137+
138+isDeclaration :: String -> Maybe String
139+isDeclaration string =
140+ case Parse.iParse Parse.definition string of
141+ Right (A.A _ (Source.Definition pattern _)) ->
142+ Just (List.intercalate "$" (Pattern.boundVarList pattern))
143+
144+ _ ->
145+ Nothing
src/Parse/Helpers.hs+2−1
@@ -18,7 +18,6 @@ import qualified AST.Expression.Source as Source
18import qualified AST.Helpers as Help
18import qualified AST.Helpers as Help
19import qualified AST.Literal as L
19import qualified AST.Literal as L
20import qualified AST.Variable as Variable
20import qualified AST.Variable as Variable
21−import Elm.Utils ((|>))
22import qualified Reporting.Annotation as A
21import qualified Reporting.Annotation as A
23import qualified Reporting.Error.Syntax as Syntax
22import qualified Reporting.Error.Syntax as Syntax
24import qualified Reporting.Region as R
23import qualified Reporting.Region as R
@@ -504,6 +503,8 @@ glSource src =
504 |> foldr addGLinput emptyDecls
503 |> foldr addGLinput emptyDecls
505 |> Right
504 |> Right
506 where
505 where
506+ (|>) = flip ($)
507+
507 emptyDecls = L.GLShaderTipe Map.empty Map.empty Map.empty
508 emptyDecls = L.GLShaderTipe Map.empty Map.empty Map.empty
508
509
509 addGLinput (qual,tipe,name) glDecls =
510 addGLinput (qual,tipe,name) glDecls =
src/Reporting/Error/Syntax.hs+1−1
@@ -9,7 +9,6 @@ import Text.PrettyPrint ((<+>))
9
9
10import qualified AST.Helpers as Help
10import qualified AST.Helpers as Help
11import qualified AST.Type as Type
11import qualified AST.Type as Type
12−import Elm.Utils ((|>))
13import qualified Reporting.PrettyPrint as P
12import qualified Reporting.PrettyPrint as P
14import qualified Reporting.Report as Report
13import qualified Reporting.Report as Report
15
14
@@ -126,6 +125,7 @@ toReport err =
126 |> P.nest 4
125 |> P.nest 4
127 ]
126 ]
128 where
127 where
128+ (|>) = flip ($)
129 vars = map P.text (givenVars ++ tvar : tvars)
129 vars = map P.text (givenVars ++ tvar : tvars)
130 toDoc (ctor, args) =
130 toDoc (ctor, args) =
131 P.text ctor <+> P.hsep (map (P.pretty True) args)
131 P.text ctor <+> P.hsep (map (P.pretty True) args)
src/Reporting/Report.hs+4−1
@@ -10,7 +10,6 @@ module Reporting.Report
10import Data.Aeson ((.=))
10import Data.Aeson ((.=))
11import qualified Data.Aeson.Types as Json
11import qualified Data.Aeson.Types as Json
12
12
13−import Elm.Utils ((|>))
14import qualified Reporting.Region as R
13import qualified Reporting.Region as R
15
14
16
15
@@ -68,6 +67,8 @@ grabRegion maybeSubRegion (R.Region start end) source =
68 (R.Position startLine startColumn) = start
67 (R.Position startLine startColumn) = start
69 (R.Position endLine endColumn) = end
68 (R.Position endLine endColumn) = end
70
69
70+ (|>) = flip ($)
71+
71 relevantLines =
72 relevantLines =
72 lines source
73 lines source
73 |> drop (startLine - 1)
74 |> drop (startLine - 1)
@@ -138,6 +139,8 @@ singleLineRegion lineNum sourceLine (start, innerStart, innerEnd, end) =
138 replicate (innerStart - 1) ' '
139 replicate (innerStart - 1) ' '
139 ++ replicate (max 1 (innerEnd - innerStart)) '^'
140 ++ replicate (max 1 (innerEnd - innerStart)) '^'
140
141
142+ (|>) = flip ($)
143+
141 trimmedSourceLine =
144 trimmedSourceLine =
142 sourceLine
145 sourceLine
143 |> drop (start - 1)
146 |> drop (start - 1)