Refactor code to to have a dedicated type for Library.name
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
parent
6260dad66b
commit
317388fd95
|
@ -37,21 +37,36 @@ let module_name =
|
|||
|
||||
let module_names = list module_name >>| String.Set.of_list
|
||||
|
||||
let invalid_lib_name ~loc = of_sexp_errorf loc "invalid library name"
|
||||
module Lib_name : sig
|
||||
type t
|
||||
|
||||
let library_name =
|
||||
plain_string (fun ~loc name ->
|
||||
val to_string : t -> string
|
||||
|
||||
val of_string : loc:Loc.t -> string -> t
|
||||
|
||||
val t : t Sexp.Of_sexp.t
|
||||
end = struct
|
||||
type t = string
|
||||
|
||||
let invalid ~loc = of_sexp_errorf loc "invalid library name"
|
||||
|
||||
let to_string s = s
|
||||
|
||||
let of_string ~loc name =
|
||||
match name with
|
||||
| "" -> invalid_lib_name ~loc
|
||||
| "" -> invalid ~loc
|
||||
| s ->
|
||||
if s.[0] = '.' then invalid_lib_name ~loc
|
||||
if s.[0] = '.' then invalid ~loc
|
||||
else
|
||||
try
|
||||
String.iter s ~f:(function
|
||||
| 'A'..'Z' | 'a'..'z' | '_' | '.' | '0'..'9' -> ()
|
||||
| _ -> raise_notrace Exit);
|
||||
s
|
||||
with Exit -> invalid_lib_name ~loc)
|
||||
with Exit -> invalid ~loc
|
||||
|
||||
let t = plain_string of_string
|
||||
end
|
||||
|
||||
let file =
|
||||
plain_string (fun ~loc s ->
|
||||
|
@ -868,7 +883,7 @@ module Library = struct
|
|||
record
|
||||
(let%map buildable = Buildable.t
|
||||
and loc = loc
|
||||
and name = field_o "name" library_name
|
||||
and name = field_o "name" Lib_name.t
|
||||
and public = Public_lib.public_name_field
|
||||
and synopsis = field_o "synopsis" string
|
||||
and install_c_headers =
|
||||
|
@ -900,9 +915,9 @@ module Library = struct
|
|||
let name =
|
||||
match name, public with
|
||||
| Some n, _ -> n
|
||||
| None, Some { name = (_loc, name) ; _ } ->
|
||||
| None, Some { name = (loc, name) ; _ } ->
|
||||
if dune_version >= (1, 1) then
|
||||
name
|
||||
Lib_name.of_string ~loc name
|
||||
else
|
||||
of_sexp_error loc "name field cannot be omitted before version \
|
||||
1.1 of the dune language"
|
||||
|
@ -914,7 +929,7 @@ module Library = struct
|
|||
"name field is missing"
|
||||
)
|
||||
in
|
||||
{ name
|
||||
{ name = Lib_name.to_string name
|
||||
; public
|
||||
; synopsis
|
||||
; install_c_headers
|
||||
|
|
|
@ -4,7 +4,7 @@ the name field can be omitted for libraries when public_name is present
|
|||
|
||||
this isn't possible for older syntax <= (1, 0)
|
||||
$ dune build --root no-name-lib-syntax-1-0
|
||||
File "dune", line 1, characters 0-27:
|
||||
File "dune", line 1, characters 22-25:
|
||||
Error: name field cannot be omitted before version 1.1 of the dune language
|
||||
[1]
|
||||
|
||||
|
|
Loading…
Reference in New Issue