@@ -98,8 +98,7 @@ import System.IO
9898moduleHeader :: IdrisParser (Maybe (Docstring ()), [String], [(FC, OutputAnnotation)])
9999moduleHeader = try (do docs <- optional docComment
100100 noArgs docs
101− modFC <- reservedFC "module"
102− highlightP modFC AnnKeyword
101+ reservedHL "module"
103102 (i, ifc) <- identifier
104103 option ';' (lchar ';')
105104 let modName = moduleName i
@@ -131,10 +130,12 @@ data ImportInfo = ImportInfo { import_reexport :: Bool
131130 -}
132131import_ :: IdrisParser ImportInfo
133132import_ = do fc <- getFC
134− reserved "import"
135− reexport <- option False (do reserved "public"; return True)
133+ reservedHL "import"
134+ reexport <- option False (do reservedHL "public"
135+ return True)
136136 (id, idfc) <- identifier
137− newName <- optional (reserved "as" *> identifier)
137+ newName <- optional (do reservedHL "as"
138+ identifier)
138139 option ';' (lchar ';')
139140 return $ ImportInfo reexport (toPath id)
140141 (fmap (\(n, fc) -> (toPath n, fc)) newName)
@@ -286,9 +287,10 @@ syntaxRule :: SyntaxInfo -> IdrisParser Syntax
286287syntaxRule syn
287288 = do sty <- try (do
288289 pushIndent
289− sty <- option AnySyntax (do reserved "term"; return TermSyntax
290− <|> do reserved "pattern"; return PatternSyntax)
291− reserved "syntax"
290+ sty <- option AnySyntax
291+ (do reservedHL "term"; return TermSyntax
292+ <|> do reservedHL "pattern"; return PatternSyntax)
293+ reservedHL "syntax"
292294 return sty)
293295 syms <- some syntaxSym
294296 when (all isExpr syms) $ unexpected "missing keywords in syntax rule"
@@ -482,31 +484,31 @@ NameTimesList ::=
482484-- https://github.com/idris-lang/Idris-dev/issues/1574
483485fnOpts :: [FnOpt] -> IdrisParser [FnOpt]
484486fnOpts opts
485− = do reserved "total"; fnOpts (TotalFn : opts)
486− <|> do reserved "partial"; fnOpts (PartialFn : (opts \\ [TotalFn]))
487− <|> do reserved "covering"; fnOpts (CoveringFn : (opts \\ [TotalFn]))
488− <|> do try (lchar '%' *> reserved "export"); c <- fmap fst stringLiteral;
489− fnOpts (CExport c : opts)
490− <|> do try (lchar '%' *> reserved "no_implicit");
491− fnOpts (NoImplicit : opts)
492− <|> do try (lchar '%' *> reserved "inline");
493− fnOpts (Inlinable : opts)
494− <|> do try (lchar '%' *> reserved "assert_total");
495− fnOpts (AssertTotal : opts)
496− <|> do try (lchar '%' *> reserved "error_handler");
497− fnOpts (ErrorHandler : opts)
498− <|> do try (lchar '%' *> reserved "error_reverse");
499− fnOpts (ErrorReverse : opts)
500− <|> do try (lchar '%' *> reserved "reflection");
501− fnOpts (Reflection : opts)
502− <|> do try (lchar '%' *> reserved "hint");
503− fnOpts (AutoHint : opts)
504− <|> do lchar '%'; reserved "specialise";
505− lchar '['; ns <- sepBy nameTimes (lchar ','); lchar ']'
506− fnOpts (Specialise ns : opts)
507− <|> do reserved "implicit"; fnOpts (Implicit : opts)
508− <|> return opts
509− <?> "function modifier"
487+ = do reservedHL "total"; fnOpts (TotalFn : opts)
488+ <|> do reservedHL "partial"; fnOpts (PartialFn : (opts \\ [TotalFn]))
489+ <|> do reservedHL "covering"; fnOpts (CoveringFn : (opts \\ [TotalFn]))
490+ <|> do try (lchar '%' *> reserved "export"); c <- fmap fst stringLiteral;
491+ fnOpts (CExport c : opts)
492+ <|> do try (lchar '%' *> reserved "no_implicit");
493+ fnOpts (NoImplicit : opts)
494+ <|> do try (lchar '%' *> reserved "inline");
495+ fnOpts (Inlinable : opts)
496+ <|> do try (lchar '%' *> reserved "assert_total");
497+ fnOpts (AssertTotal : opts)
498+ <|> do try (lchar '%' *> reserved "error_handler");
499+ fnOpts (ErrorHandler : opts)
500+ <|> do try (lchar '%' *> reserved "error_reverse");
501+ fnOpts (ErrorReverse : opts)
502+ <|> do try (lchar '%' *> reserved "reflection");
503+ fnOpts (Reflection : opts)
504+ <|> do try (lchar '%' *> reserved "hint");
505+ fnOpts (AutoHint : opts)
506+ <|> do lchar '%'; reserved "specialise";
507+ lchar '['; ns <- sepBy nameTimes (lchar ','); lchar ']'
508+ fnOpts (Specialise ns : opts)
509+ <|> do reservedHL "implicit"; fnOpts (Implicit : opts)
510+ <|> return opts
511+ <?> "function modifier"
510512 where nameTimes :: IdrisParser (Name, Maybe Int)
511513 nameTimes = do n <- fst <$> fnName
512514 t <- option Nothing (do reds <- fmap fst natural
@@ -543,7 +545,7 @@ postulate syn = do (doc, ext)
543545 addAcc n acc
544546 return (PPostulate ext doc syn fc nfc opts' n ty)
545547 <?> "postulate"
546− where ppostDecl = do reserved "postulate"; return False
548+ where ppostDecl = do fc <- reservedHL "postulate"; return False
547549 <|> do lchar '%'; reserved "extern"; return True
548550{- | Parses a using declaration
549551
@@ -555,7 +557,8 @@ Using ::=
555557 -}
556558using_ :: SyntaxInfo -> IdrisParser [PDecl]
557559using_ syn =
558− do reserved "using"; lchar '('; ns <- usingDeclList syn; lchar ')'
560+ do reservedHL "using"
561+ lchar '('; ns <- usingDeclList syn; lchar ')'
559562 openBlock
560563 let uvars = using syn
561564 ds <- many (decl (syn { using = uvars ++ ns }))
@@ -573,7 +576,7 @@ Params ::=
573576 -}
574577params :: SyntaxInfo -> IdrisParser [PDecl]
575578params syn =
576− do reserved "parameters"; lchar '('; ns <- typeDeclList syn; lchar ')'
579+ do reservedHL "parameters"; lchar '('; ns <- typeDeclList syn; lchar ')'
577580 let ns' = [(n, ty) | (n, _, ty) <- ns]
578581 openBlock
579582 let pvars = syn_params syn
@@ -593,7 +596,7 @@ Mutual ::=
593596-}
594597mutual :: SyntaxInfo -> IdrisParser [PDecl]
595598mutual syn =
596− do reserved "mutual"
599+ do reservedHL "mutual"
597600 openBlock
598601 let pvars = syn_params syn
599602 ds <- many (decl (syn { mut_nesting = mut_nesting syn + 1 } ))
@@ -612,7 +615,7 @@ Namespace ::=
612615-}
613616namespace :: SyntaxInfo -> IdrisParser [PDecl]
614617namespace syn =
615− do reserved "namespace"
618+ do reservedHL "namespace"
616619 (n, nfc) <- identifier
617620 openBlock
618621 ds <- some (decl syn { syn_namespace = n : syn_namespace syn })
@@ -627,7 +630,7 @@ namespace syn =
627630@
628631-}
629632instanceBlock :: SyntaxInfo -> IdrisParser [PDecl]
630−instanceBlock syn = do reserved "where"
633+instanceBlock syn = do reservedHL "where"
631634 openBlock
632635 ds <- many (fnDecl syn)
633636 closeBlock
@@ -650,7 +653,7 @@ ClassBlock ::=
650653@
651654-}
652655classBlock :: SyntaxInfo -> IdrisParser (Maybe (Name, FC), Docstring (Either Err PTerm), [PDecl])
653−classBlock syn = do reserved "where"
656+classBlock syn = do reservedHL "where"
654657 openBlock
655658 (cn, cd) <- option (Nothing, emptyDocstring) $
656659 try (do (doc, _) <- option noDocs docComment
@@ -666,7 +669,7 @@ classBlock syn = do reserved "where"
666669
667670 where
668671 constructor :: IdrisParser (Name, FC)
669− constructor = reserved "constructor" *> fnName
672+ constructor = reservedHL "constructor" *> fnName
670673
671674 annotate :: SyntaxInfo -> IState -> Docstring () -> Docstring (Either Err PTerm)
672675 annotate syn ist = annotCode $ tryFullExpr syn ist
@@ -690,7 +693,7 @@ class_ :: SyntaxInfo -> IdrisParser [PDecl]
690693class_ syn = do (doc, argDocs, acc)
691694 <- try (do (doc, argDocs) <- docstring syn
692695 acc <- optional accessibility
693− reserved "class"
696+ reservedHL "class"
694697 return (doc, argDocs, acc))
695698 fc <- getFC
696699 cons <- constraintList syn
@@ -728,7 +731,7 @@ InstanceName ::= '[' Name ']';
728731-}
729732instance_ :: SyntaxInfo -> IdrisParser [PDecl]
730733instance_ syn = do (doc, argDocs)
731− <- try (docstring syn <* reserved "instance")
734+ <- try (docstring syn <* reservedHL "instance")
732735 fc <- getFC
733736 en <- optional instanceName
734737 cs <- constraintList syn
@@ -829,7 +832,7 @@ CAF ::= 'let' FnName '=' Expr Terminator;
829832@
830833-}
831834caf :: SyntaxInfo -> IdrisParser PDecl
832−caf syn = do reserved "let"
835+caf syn = do reservedHL "let"
833836 n_in <- fst <$> fnName; let n = expandNS syn n_in
834837 lchar '='
835838 t <- expr syn
@@ -927,7 +930,7 @@ clause syn
927930 return ([], [])]
928931 return $ PClauseR fc wargs r wheres) <|> (do
929932 popIndent
930− reserved "with"
933+ reservedHL "with"
931934 wval <- simpleExpr syn
932935 pn <- optProof
933936 openBlock
@@ -980,7 +983,7 @@ clause syn
980983 put (ist { lastParse = Just n })
981984 return $ PClause fc n capp wargs rs wheres) <|> (do
982985 popIndent
983− reserved "with"
986+ reservedHL "with"
984987 wval <- bracketed syn
985988 pn <- optProof
986989 openBlock
@@ -1012,7 +1015,7 @@ clause syn
10121015 ist <- get
10131016 put (ist { lastParse = Just n })
10141017 return $ PClause fc n capp wargs r wheres) <|> (do
1015− reserved "with"
1018+ reservedHL "with"
10161019 ist <- get
10171020 put (ist { lastParse = Just n })
10181021 wval <- bracketed syn
@@ -1025,7 +1028,7 @@ clause syn
10251028 return $ PWith fc n capp wargs wval pn withs)
10261029 <?> "function clause"
10271030 where
1028− optProof = option Nothing (do reserved "proof"
1031+ optProof = option Nothing (do reservedHL "proof"
10291032 n <- fnName
10301033 return (Just n))
10311034
@@ -1060,7 +1063,7 @@ WhereBlock ::= 'where' OpenBlock Decl+ CloseBlock;
10601063-}
10611064whereBlock :: Name -> SyntaxInfo -> IdrisParser ([PDecl], [(Name, Name)])
10621065whereBlock n syn
1063− = do reserved "where"
1066+ = do reservedHL "where"
10641067 ds <- indentedBlock1 (decl syn)
10651068 let dns = concatMap (concatMap declared) ds
10661069 return (concat ds, map (\x -> (x, decoration syn x)) dns)
@@ -1176,8 +1179,8 @@ Totality ::= 'partial' | 'total'
11761179-}
11771180totality :: IdrisParser Bool
11781181totality
1179− = do reserved "total"; return True
1180− <|> do reserved "partial"; return False
1182+ = do reservedHL "total"; return True
1183+ <|> do reservedHL "partial"; return False
11811184
11821185{- | Parses a type provider
11831186
@@ -1188,22 +1191,24 @@ ProviderWhat ::= 'proof' | 'term' | 'type' | 'postulate'
11881191 -}
11891192provider :: SyntaxInfo -> IdrisParser [PDecl]
11901193provider syn = do doc <- try (do (doc, _) <- docstring syn
1194+ fc1 <- getFC
11911195 lchar '%'
1192− reserved "provide"
1196+ fc2 <- reservedFC "provide"
1197+ highlightP (spanFC fc1 fc2) AnnKeyword
11931198 return doc)
11941199 provideTerm doc <|> providePostulate doc
11951200 <?> "type provider"
11961201 where provideTerm doc =
11971202 do lchar '('; (n, nfc) <- fnName; lchar ':'; t <- typeExpr syn; lchar ')'
11981203 fc <- getFC
1199− reserved "with"
1204+ reservedHL "with"
12001205 e <- expr syn <?> "provider expression"
12011206 return [PProvider doc syn fc nfc (ProvTerm t e) n]
12021207 providePostulate doc =
1203− do reserved "postulate"
1208+ do reservedHL "postulate"
12041209 (n, nfc) <- fnName
12051210 fc <- getFC
1206− reserved "with"
1211+ reservedHL "with"
12071212 e <- expr syn <?> "provider expression"
12081213 return [PProvider doc syn fc nfc (ProvPostulate e) n]
12091214