@@ -648,14 +648,19 @@ constraintArg syn = do symbol "@{"
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)]
661+ Just (_, fc) -> highlightP fc AnnKeyword
658− return $ PQuasiquote e g
663+ return $ PQuasiquote e (fst <$> g)
659 <?> "quasiquotation"
664 <?> "quasiquotation"
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 "`("
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"