Add length function to exapnsions
This is useful for an error message that includes the number of items we've expanded to. Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
parent
731b61b0b9
commit
9545d9a854
|
@ -275,6 +275,10 @@ module Var_expansion = struct
|
|||
| Paths of Path.t list
|
||||
| Strings of string list
|
||||
|
||||
let length = function
|
||||
| Paths x -> List.length x
|
||||
| Strings x -> List.length x
|
||||
|
||||
let is_multivalued = function
|
||||
| Paths [_] -> false
|
||||
| Strings [_] -> false
|
||||
|
|
|
@ -106,6 +106,7 @@ let string_of_var syntax v =
|
|||
|
||||
module type EXPANSION = sig
|
||||
type t
|
||||
val length : t -> int
|
||||
val is_multivalued : t -> bool
|
||||
type context
|
||||
val to_string : context -> t -> string
|
||||
|
@ -132,12 +133,12 @@ end
|
|||
|
||||
module Expand_to(V: EXPANSION) = struct
|
||||
|
||||
let check_valid_multivalue syntax ~var t ctx =
|
||||
if not t.quoted && V.is_multivalued ctx then
|
||||
Loc.fail t.loc "Variable %s expands to multiple values, \
|
||||
let check_valid_multivalue syntax ~var t x =
|
||||
if not t.quoted && V.is_multivalued x then
|
||||
Loc.fail t.loc "Variable %s expands to %d values, \
|
||||
however a single value is expected here. \
|
||||
Please quote this atom. "
|
||||
(string_of_var syntax var)
|
||||
(string_of_var syntax var) (V.length x)
|
||||
|
||||
let expand ctx t ~f =
|
||||
match t.items with
|
||||
|
@ -189,6 +190,7 @@ end
|
|||
|
||||
module String_expansion = struct
|
||||
type t = string
|
||||
let length _ = 1
|
||||
let is_multivalued _ = false
|
||||
type context = unit
|
||||
let to_string () (s: string) = s
|
||||
|
|
|
@ -49,6 +49,8 @@ module type EXPANSION = sig
|
|||
type t
|
||||
(** The value to which variables are expanded. *)
|
||||
|
||||
val length : t -> int
|
||||
|
||||
val is_multivalued : t -> bool
|
||||
(** Report whether the value is a multivalued one (such as for
|
||||
example ${@}) which much be in quoted strings to be concatenated
|
||||
|
|
Loading…
Reference in New Issue