@@ -147,14 +147,17 @@ extension syn ns rules =
147 ruleGroup _ _ = False
147 ruleGroup _ _ = False
149 extensionSymbol :: SSymbol -> IdrisParser (Maybe (Name, SynMatch))
149 extensionSymbol :: SSymbol -> IdrisParser (Maybe (Name, SynMatch))
150− extensionSymbol (Keyword n) = do reserved (show n); return Nothing
150+ extensionSymbol (Keyword n) = do fc <- reservedFC (show n)
151+ highlightP fc AnnKeyword
151 extensionSymbol (Expr n) = do tm <- expr syn
153 extensionSymbol (Expr n) = do tm <- expr syn
152 return $ Just (n, SynTm tm)
154 return $ Just (n, SynTm tm)
153 extensionSymbol (SimpleExpr n) = do tm <- simpleExpr syn
155 extensionSymbol (SimpleExpr n) = do tm <- simpleExpr syn
154 return $ Just (n, SynTm tm)
156 return $ Just (n, SynTm tm)
155 extensionSymbol (Binding n) = do b <- fst <$> name
157 extensionSymbol (Binding n) = do b <- fst <$> name
156 return $ Just (n, SynBind b)
158 return $ Just (n, SynBind b)
157− extensionSymbol (Symbol s) = do symbol s
159+ extensionSymbol (Symbol s) = do fc <- symbolFC s
160+ highlightP fc AnnKeyword
158 return Nothing
161 return Nothing
159 dropn :: Name -> [(Name, a)] -> [(Name, a)]
162 dropn :: Name -> [(Name, a)] -> [(Name, a)]
160 dropn n [] = []
163 dropn n [] = []
@@ -645,14 +648,19 @@ constraintArg syn = do symbol "@{"
647quasiquote :: SyntaxInfo -> IdrisParser PTerm
650quasiquote :: SyntaxInfo -> IdrisParser PTerm
648−quasiquote syn = do symbol "`("
651+quasiquote syn = do startFC <- symbolFC "`("
649 e <- expr syn { syn_in_quasiquote = (syn_in_quasiquote syn) + 1 ,
652 e <- expr syn { syn_in_quasiquote = (syn_in_quasiquote syn) + 1 ,
650 inPattern = False }
653 inPattern = False }
651− g <- optional $ do
654+ g <- optional $
652− symbol ":"
655+ do fc <- symbolFC ":"
653− expr syn { inPattern = False } -- don't allow antiquotes
656+ ty <- expr syn { inPattern = False } -- don't allow antiquotes
654− symbol ")"
657+ return (ty, fc)
658+ endFC <- symbolFC ")"
659+ mapM_ (uncurry highlightP) [(startFC, AnnKeyword), (endFC, AnnKeyword), (spanFC startFC endFC, AnnQuasiquote)]
661+ Just (_, fc) -> highlightP fc AnnKeyword
655− return $ PQuasiquote e g
663+ return $ PQuasiquote e (fst <$> g)
656 <?> "quasiquotation"
664 <?> "quasiquotation"
658{-| 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)
@@ -662,8 +670,11 @@ quasiquote syn = do symbol "`("
663unquote :: SyntaxInfo -> IdrisParser PTerm
671unquote :: SyntaxInfo -> IdrisParser PTerm
664unquote syn = do guard (syn_in_quasiquote syn > 0)
672unquote syn = do guard (syn_in_quasiquote syn > 0)
665− symbol "~"
673+ startFC <- symbolFC "~"
666 e <- simpleExpr syn { syn_in_quasiquote = syn_in_quasiquote syn - 1 }
674 e <- simpleExpr syn { syn_in_quasiquote = syn_in_quasiquote syn - 1 }
676+ highlightP startFC AnnKeyword
677+ highlightP (spanFC startFC endFC) AnnAntiquote
667 return $ PUnquote e
678 return $ PUnquote e
668 <?> "unquotation"
679 <?> "unquotation"