aboutsummaryrefslogtreecommitdiffhomepage
path: root/printing/prettyp.ml
diff options
context:
space:
mode:
Diffstat (limited to 'printing/prettyp.ml')
-rw-r--r--printing/prettyp.ml64
1 files changed, 36 insertions, 28 deletions
diff --git a/printing/prettyp.ml b/printing/prettyp.ml
index 42f308955..c5840e20b 100644
--- a/printing/prettyp.ml
+++ b/printing/prettyp.ml
@@ -263,6 +263,7 @@ type logical_name =
| Dir of global_dir_reference
| Syntactic of kernel_name
| ModuleType of qualid * module_path
+ | Tactic of Nametab.ltac_constant
| Undefined of qualid
let locate_any_name ref =
@@ -297,6 +298,8 @@ let pr_located_qualid = function
str s ++ spc () ++ pr_dirpath dir
| ModuleType (qid,_) ->
str "Module Type" ++ spc () ++ pr_path (Nametab.full_name_modtype qid)
+ | Tactic kn ->
+ str "Ltac" ++ spc () ++ pr_path (Nametab.path_of_tactic kn)
| Undefined qid ->
pr_qualid qid ++ spc () ++ str "not a defined object."
@@ -325,20 +328,41 @@ let display_alias = function
end
| _ -> mt ()
-let print_located_qualid ref =
- let (loc,qid) = qualid_of_reference ref in
+let locate_term qid =
let expand = function
| TrueGlobal ref ->
- Term ref, Nametab.shortest_qualid_of_global Id.Set.empty ref
+ Term ref, Nametab.shortest_qualid_of_global Id.Set.empty ref
| SynDef kn ->
- Syntactic kn, Nametab.shortest_qualid_of_syndef Id.Set.empty kn in
- match List.map expand (Nametab.locate_extended_all qid) with
+ Syntactic kn, Nametab.shortest_qualid_of_syndef Id.Set.empty kn
+ in
+ List.map expand (Nametab.locate_extended_all qid)
+
+let locate_tactic qid =
+ let all = Nametab.locate_extended_all_tactic qid in
+ List.map (fun kn -> (Tactic kn, Nametab.shortest_qualid_of_tactic kn)) all
+
+let locate_module qid =
+ let all = Nametab.locate_extended_all_dir qid in
+ let map dir = match dir with
+ | DirModule (_, (mp, _)) -> Some (Dir dir, Nametab.shortest_qualid_of_module mp)
+ | DirOpenModule _ -> Some (Dir dir, qid)
+ | _ -> None
+ in
+ List.map_filter map all
+
+let print_located_qualid name flags ref =
+ let (loc,qid) = qualid_of_reference ref in
+ let located = [] in
+ let located = if List.mem `LTAC flags then locate_tactic qid @ located else located in
+ let located = if List.mem `MODULE flags then locate_module qid @ located else located in
+ let located = if List.mem `TERM flags then locate_term qid @ located else located in
+ match located with
| [] ->
let (dir,id) = repr_qualid qid in
if DirPath.is_empty dir then
- str "No object of basename " ++ pr_id id
+ str ("No " ^ name ^ " of basename") ++ spc () ++ pr_id id
else
- str "No object of suffix " ++ pr_qualid qid
+ str ("No " ^ name ^ " of suffix") ++ pr_qualid qid
| l ->
prlist_with_sep fnl
(fun (o,oqid) ->
@@ -349,26 +373,9 @@ let print_located_qualid ref =
else mt ()) ++
display_alias o)) l
-let print_located_tactic r =
- let (loc,qid) = qualid_of_reference r in
- let all = Nametab.locate_extended_all_tactic qid in
- let ans = List.map (fun qid -> (qid, Nametab.shortest_qualid_of_tactic qid)) all in
- match ans with
- | [] ->
- str "No Ltac definition is referred to by " ++ pr_qualid qid
- | _ ->
- let print (obj, oqid) =
- let path = Nametab.path_of_tactic obj in
- let msg = str "Ltac" ++ spc () ++ pr_path path in
- let short =
- if not (qualid_eq oqid qid) then
- spc() ++ str "(shorter name to refer to it in current context is "
- ++ pr_qualid oqid ++ str")"
- else mt ()
- in
- hov 2 (msg ++ short)
- in
- prlist_with_sep fnl print ans
+let print_located_term ref = print_located_qualid "term" [`TERM] ref
+let print_located_tactic ref = print_located_qualid "tactic" [`LTAC] ref
+let print_located_qualid ref = print_located_qualid "object" [`TERM; `LTAC; `MODULE] ref
(******************************************)
(**** Printing declarations and judgments *)
@@ -656,6 +663,7 @@ let print_any_name = function
| Dir (DirModule(dirpath,(mp,_))) -> print_module (printable_body dirpath) mp
| Dir _ -> mt ()
| ModuleType (_,kn) -> print_modtype kn
+ | Tactic kn -> mt () (** TODO *)
| Undefined qid ->
try (* Var locale de but, pas var de section... donc pas d'implicits *)
let dir,str = repr_qualid qid in
@@ -710,7 +718,7 @@ let print_about_any loc k =
v 0 (
print_syntactic_def kn ++ fnl () ++
hov 0 (str "Expands to: " ++ pr_located_qualid k))
- | Dir _ | ModuleType _ | Undefined _ ->
+ | Dir _ | ModuleType _ | Tactic _ | Undefined _ ->
hov 0 (pr_located_qualid k)
let print_about = function