git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1969 from kRITZCREEK/gracefully-fail-case-split
e678452Phil Freeman
src/Language/PureScript/Ide/CaseSplit.hs+10−6
@@ -54,7 +54,8 @@ noAnnotations = WildcardAnnotations False
54caseSplit :: (PscIde m, MonadLogger m, MonadError PscIdeError m) =>
54caseSplit :: (PscIde m, MonadLogger m, MonadError PscIdeError m) =>
55 Text -> m [Constructor]
55 Text -> m [Constructor]
56caseSplit q = do
56caseSplit q = do
57− (tc, args) <- splitTypeConstructor (parseType' (T.unpack q))
57+ type' <- parseType' (T.unpack q)
58+ (tc, args) <- splitTypeConstructor type'
58 (EDType _ _ (DataType typeVars ctors)) <- findTypeDeclaration tc
59 (EDType _ _ (DataType typeVars ctors)) <- findTypeDeclaration tc
59 let applyTypeVars = everywhereOnTypes (replaceAllTypeVars (zip (map fst typeVars) args))
60 let applyTypeVars = everywhereOnTypes (replaceAllTypeVars (zip (map fst typeVars) args))
60 let appliedCtors = map (\(n, ts) -> (n, map applyTypeVars ts)) ctors
61 let appliedCtors = map (\(n, ts) -> (n, map applyTypeVars ts)) ctors
@@ -119,11 +120,14 @@ addClause s wca =
119 " = ?" <> (T.strip . T.pack . runIdent $ fName)
120 " = ?" <> (T.strip . T.pack . runIdent $ fName)
120 in [s, template]
121 in [s, template]
121
122
123+parseType' :: (MonadError PscIdeError m) =>
122−parseType' :: String -> Type
124+ String -> m Type
123−parseType' s = let (Right t) = do
125+parseType' s =
124− ts <- lex "" s
125− runTokenParser "" (parseType <* P.eof) ts
126+ case lex "<psc-ide>" s >>= runTokenParser "<psc-ide>" (parseType <* P.eof) of
126− in t
127+ Right type' -> pure type'
128+ Left err ->
129+ throwError (GeneralError ("Parsing the splittype failed with:"
130+ ++ show err))
127
131
128parseTypeDeclaration' :: String -> (Ident, Type)
132parseTypeDeclaration' :: String -> (Ident, Type)
129parseTypeDeclaration' s =
133parseTypeDeclaration' s =