on master help sign in
Parser-driven highlighting of quotation symbols
2a4e82bDavid Raymond Christiansen
src/Idris/Output.hs+3−1
@@ -199,9 +199,11 @@ prettyDocumentedIst ist (name, ty, docs) =
199sendParserHighlighting :: Idris ()
199sendParserHighlighting :: Idris ()
200sendParserHighlighting =
200sendParserHighlighting =
201 do ist <- getIState
201 do ist <- getIState
202− let hs = nub $ idris_parserHighlights ist
202+ let hs = map unwrap . nub . map wrap $ idris_parserHighlights ist
203 sendHighlighting hs
203 sendHighlighting hs
204 putIState ist {idris_parserHighlights = []}
204 putIState ist {idris_parserHighlights = []}
205+ where wrap (fc, a) = (FC' fc, a)
206+ unwrap (fc', a) = (unwrapFC fc', a)
205
207
206sendHighlighting :: [(FC, OutputAnnotation)] -> Idris ()
208sendHighlighting :: [(FC, OutputAnnotation)] -> Idris ()
207sendHighlighting highlights =
209sendHighlighting highlights =
src/Idris/ParseExpr.hs+13−7
@@ -648,14 +648,19 @@ constraintArg syn = do symbol "@{"
648
648
649-}
649-}
650quasiquote :: SyntaxInfo -> IdrisParser PTerm
650quasiquote :: SyntaxInfo -> IdrisParser PTerm
651−quasiquote syn = do symbol "`("
651+quasiquote syn = do startFC <- symbolFC "`("
652 e <- expr syn { syn_in_quasiquote = (syn_in_quasiquote syn) + 1 ,
652 e <- expr syn { syn_in_quasiquote = (syn_in_quasiquote syn) + 1 ,
653 inPattern = False }
653 inPattern = False }
654− g <- optional $ do
654+ g <- optional $
655− symbol ":"
655+ do fc <- symbolFC ":"
656− expr syn { inPattern = False } -- don't allow antiquotes
656+ ty <- expr syn { inPattern = False } -- don't allow antiquotes
657− symbol ")"
657+ return (ty, fc)
658+ endFC <- symbolFC ")"
659+ mapM_ (uncurry highlightP) [(startFC, AnnKeyword), (endFC, AnnKeyword)]
660+ case g of
661+ Just (_, fc) -> highlightP fc AnnKeyword
662+ _ -> return ()
658− return $ PQuasiquote e g
663+ return $ PQuasiquote e (fst <$> g)
659 <?> "quasiquotation"
664 <?> "quasiquotation"
660
665
661{-| Parses an unquoting inside a quasiquotation (for building reflected terms using the elaborator)
666{-| Parses an unquoting inside a quasiquotation (for building reflected terms using the elaborator)
@@ -665,8 +670,9 @@ quasiquote syn = do symbol "`("
665-}
670-}
666unquote :: SyntaxInfo -> IdrisParser PTerm
671unquote :: SyntaxInfo -> IdrisParser PTerm
667unquote syn = do guard (syn_in_quasiquote syn > 0)
672unquote syn = do guard (syn_in_quasiquote syn > 0)
668− symbol "~"
673+ startFC <- symbolFC "~"
669 e <- simpleExpr syn { syn_in_quasiquote = syn_in_quasiquote syn - 1 }
674 e <- simpleExpr syn { syn_in_quasiquote = syn_in_quasiquote syn - 1 }
675+ highlightP startFC AnnKeyword
670 return $ PUnquote e
676 return $ PUnquote e
671 <?> "unquotation"
677 <?> "unquotation"
672
678