on master help sign in
Parser-driven highlighting of quotation symbols
commit2a4e82b2e0a322bbab5321e366b5e2efbc5ef433 authorDavid Raymond Christiansen <david@davidchristiansen.dk> dateFri 10 Jul 2015, 11:16 (11 years ago) parent520f367
2 files changed+16−8
src/Idris/Output.hs+3−1 src/Idris/ParseExpr.hs+13−7
src/Idris/Output.hs+3−1
@@ -199,9 +199,11 @@ prettyDocumentedIst ist (name, ty, docs) =
199199sendParserHighlighting :: Idris ()
200200sendParserHighlighting =
201201 do ist <- getIState
202− let hs = nub $ idris_parserHighlights ist
202+ let hs = map unwrap . nub . map wrap $ idris_parserHighlights ist
203203 sendHighlighting hs
204204 putIState ist {idris_parserHighlights = []}
205+ where wrap (fc, a) = (FC' fc, a)
206+ unwrap (fc', a) = (unwrapFC fc', a)
205207
206208sendHighlighting :: [(FC, OutputAnnotation)] -> Idris ()
207209sendHighlighting highlights =
src/Idris/ParseExpr.hs+13−7
@@ -648,14 +648,19 @@ constraintArg syn = do symbol "@{"
648648
649649-}
650650quasiquote :: SyntaxInfo -> IdrisParser PTerm
651−quasiquote syn = do symbol "`("
651+quasiquote syn = do startFC <- symbolFC "`("
652652 e <- expr syn { syn_in_quasiquote = (syn_in_quasiquote syn) + 1 ,
653653 inPattern = False }
654− g <- optional $ do
655− symbol ":"
656− expr syn { inPattern = False } -- don't allow antiquotes
657− symbol ")"
658− return $ PQuasiquote e g
654+ g <- optional $
655+ do fc <- symbolFC ":"
656+ ty <- expr syn { inPattern = False } -- don't allow antiquotes
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 ()
663+ return $ PQuasiquote e (fst <$> g)
659664 <?> "quasiquotation"
660665
661666{-| Parses an unquoting inside a quasiquotation (for building reflected terms using the elaborator)
@@ -665,8 +670,9 @@ quasiquote syn = do symbol "`("
665670-}
666671unquote :: SyntaxInfo -> IdrisParser PTerm
667672unquote syn = do guard (syn_in_quasiquote syn > 0)
668− symbol "~"
673+ startFC <- symbolFC "~"
669674 e <- simpleExpr syn { syn_in_quasiquote = syn_in_quasiquote syn - 1 }
675+ highlightP startFC AnnKeyword
670676 return $ PUnquote e
671677 <?> "unquotation"
672678