@@ -151,7 +151,7 @@ module Kinds = struct
151151 let enumMember = 22
152152 let struct_ = 23
153153 let _event = 24
154- let _operator = 25
154+ let operator = 25
155155 let _typeParameter = 26
156156end
157157
@@ -233,6 +233,9 @@ let mk_name ~lines (id : Names.lname) : Lang.Ast.Name.t Lang.With_range.t =
233233let mk_id ~lines (id : Names.lident ) =
234234 CAst. map (fun id -> Names. Name id) id |> mk_name ~lines
235235
236+ let mk_string ~lines (id : Names.lstring ) =
237+ CAst. map (fun id -> Names. (Name (Id. of_string_soft id))) id |> mk_name ~lines
238+
236239let constructor_info ~lines ((_ , (id , _typ )) : constructor_expr ) =
237240 let range = Option. get id.loc in
238241 let range = Utils. to_range ~lines range in
@@ -300,6 +303,11 @@ let symbol_info ~lines ~range
300303 in
301304 List. map mk_info idents
302305
306+ let fixup_range ~loc id =
307+ match id.loc with
308+ | None -> CAst. make ?loc id.v
309+ | Some _ -> id
310+
303311let make_info ~st :_ ~lines CAst. { loc; v } : Lang.Ast.Info.t list option =
304312 let open Vernacexpr in
305313 match loc with
@@ -339,4 +347,36 @@ let make_info ~st:_ ~lines CAst.{ loc; v } : Lang.Ast.Info.t list option =
339347 let kind = Kinds. method_ in
340348 let detail = " Rewrite Rule" in
341349 Some [ Lang.Ast.Info. make ~range ~name ~kind ~detail () ]
350+ | VernacSynterp (VernacNotation (_infix , { ntn_decl_string; _ } )) ->
351+ let name = mk_string ~lines ntn_decl_string in
352+ let kind = Kinds. operator in
353+ let detail = " Notation" in
354+ Some [ Lang.Ast.Info. make ~range ~name ~kind ~detail () ]
355+ | VernacSynterp
356+ (VernacExtend
357+ ({ ext_entry = " VernacDeclareTacticDefinition" ; _ }, glist)) ->
358+ let ids =
359+ List. concat_map Serlib.Ser_analysis.NameAnalysis. analyze glist
360+ in
361+ let kind = Kinds. function_ in
362+ let detail = " Tactic" in
363+ let mk_info id =
364+ let name = mk_name ~lines id in
365+ Lang.Ast.Info. make ~range ~name ~detail ~kind ()
366+ in
367+ Some (List. map mk_info ids)
368+ | VernacSynterp
369+ (VernacExtend ({ ext_entry = " VernacTacticNotation" ; _ }, glist)) ->
370+ let ids =
371+ List. concat_map Serlib.Ser_analysis.NameAnalysis. analyze glist
372+ in
373+ let kind = Kinds. function_ in
374+ let detail = " Tactic Notation" in
375+ let mk_info id =
376+ (* Tactic notation doesn't properly set id location *)
377+ let id = fixup_range ~loc id in
378+ let name = mk_name ~lines id in
379+ Lang.Ast.Info. make ~range ~name ~detail ~kind ()
380+ in
381+ Some (List. map mk_info ids)
342382 | _ -> None )
0 commit comments