aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Jesus Gallego Arias2020-11-16 16:18:06 +0100
committerEmilio Jesus Gallego Arias2020-11-18 16:25:00 +0100
commitefa6673158f5eaa3fc11c0b3d1e3285c4acc129a (patch)
tree79d8b3cccd9759fc63cf22998e191928870e6993
parent6aeee2e4e37d4b8ffb8c50c109903ad336c8bdfa (diff)
[attributes] Add output test suite for errors, improve error printing.
-rw-r--r--test-suite/output/attributes.out11
-rw-r--r--test-suite/output/attributes.v9
-rw-r--r--vernac/attributes.ml9
3 files changed, 27 insertions, 2 deletions
diff --git a/test-suite/output/attributes.out b/test-suite/output/attributes.out
new file mode 100644
index 0000000000..25572ee2aa
--- /dev/null
+++ b/test-suite/output/attributes.out
@@ -0,0 +1,11 @@
+The command has indeed failed with message:
+Attribute for canonical specified twice.
+The command has indeed failed with message:
+key 'polymorphic' has been already set.
+The command has indeed failed with message:
+Invalid value 'foo' for key polymorphic
+use one of {yes, no}
+The command has indeed failed with message:
+Invalid syntax polymorphic(foo), try polymorphic={yes, no} instead.
+The command has indeed failed with message:
+Invalid syntax polymorphic(foo, bar), try polymorphic={yes, no} instead.
diff --git a/test-suite/output/attributes.v b/test-suite/output/attributes.v
new file mode 100644
index 0000000000..aef05e6cd4
--- /dev/null
+++ b/test-suite/output/attributes.v
@@ -0,0 +1,9 @@
+Fail #[canonical=yes, canonical=no] Definition a := 3.
+
+Fail #[universes(polymorphic=yes,polymorphic=no)] Definition a := 3.
+
+Fail #[universes(polymorphic=foo)] Definition a := 3.
+
+Fail #[universes(polymorphic(foo))] Definition a := 3.
+
+Fail #[universes(polymorphic(foo,bar))] Definition a := 3.
diff --git a/vernac/attributes.ml b/vernac/attributes.ml
index 04b1f128d3..fdaeedef8c 100644
--- a/vernac/attributes.ml
+++ b/vernac/attributes.ml
@@ -121,6 +121,9 @@ let single_key_parser ~name ~key v prev args =
assert_once ~name prev;
v
+let pr_possible_values ~values =
+ Pp.(str "{" ++ prlist_with_sep pr_comma str (List.map fst values) ++ str "}")
+
(** [key_value_attribute ~key ~default ~values] parses a attribute [key=value]
with possible [key] [value] in [values], [default] is for compatibility for users
doing [qualif(key)] which is parsed as [qualif(key=default)] *)
@@ -135,13 +138,15 @@ let key_value_attribute ~key ~default ~(values : (string * 'a) list) : 'a option
| exception Not_found ->
CErrors.user_err
Pp.(str "Invalid value '" ++ str b ++ str "' for key " ++ str key ++ fnl () ++
- str "use one of " ++ (pr_sequence str (List.map fst values)))
+ str "use one of " ++ pr_possible_values ~values)
| value -> value
end
| VernacFlagEmpty ->
default
| err ->
- CErrors.user_err Pp.(str "Invalid syntax " ++ pr_vernac_flag (key, err) ++ str ", try " ++ str key ++ str "=value instead.")
+ CErrors.user_err
+ Pp.(str "Invalid syntax " ++ pr_vernac_flag (key, err) ++ str ", try "
+ ++ str key ++ str "=" ++ pr_possible_values ~values ++ str " instead.")
end
in
attribute_of_list [key, parser]