Conversation
4872c29 to
eddef5a
Compare
src/virtual_rules.ml
Outdated
| List.map ms ~f:Module.Name.to_string | ||
| |> String.concat ~sep:"\n" | ||
| in | ||
| if private_virtual_modules <> [] then begin |
There was a problem hiding this comment.
Since you're testing all 3 lists for emptiness, what do you think about refactoring into this:
let partitioned_modules = List.fold_left ... in
match partitioned_modules with
| _::_, _::_, _::_ -> {Implementation. ... }
| [], _, _ -> (* error 1 *)
| _, [], _ -> (* error 2 *)
| _, _, [] -> (* error 3 *)
(bonus points if the pattern matching can be extracted into a check function a bit higher)
There was a problem hiding this comment.
I think extracting the check into its own function but I'm not convinced the pattern matching is adding here. Now if we want to add another field, we'll have to update 3 other completely independent clauses. Why do we prefer the pattern matching here? I don't see any gains from exhaustivity checks here for example.
src/lib_rules.ml
Outdated
| ~dir | ||
| ~dir_kind | ||
| ~obj_dir | ||
| ~private_obj_dir:private_obj_dir |
There was a problem hiding this comment.
this will soon be formatted away, but you can remove the duplication here
src/module.ml
Outdated
| type nonrec t = t Name.Map.t | ||
| end | ||
|
|
||
| let is_public t = |
There was a problem hiding this comment.
The pattern matching part should be in Visibility.is_public
|
In the end, are private modules only visible to the library they are part of? Regarding auto-mangling of names, that seems fine, however before doing that we need a clear idea of whether we want to support more fine-grained visibility in the future and how it will be presented to the user. Otherwise it might prove to be difficult to implement. BTW, could you update the |
Yup. Did you have anything else in mind for them?
I see. So let's punt on the name mangling for now. What I had in mind is a
Sure thing. |
Nope, I just remember this came up while discussing private modules in the past. |
dac04b6 to
23bdd80
Compare
src/module.ml
Outdated
| let is_public t = Visibility.is_public t.visibility | ||
|
|
||
| let set_private t = | ||
| { t with visibility = Visibility.Private } |
There was a problem hiding this comment.
What is the module path?
There was a problem hiding this comment.
Ah, fixed. I thought you mean some path value of Module.t 😅
| File "foo.ml", line 1, characters 0-5: | ||
| Error: Unbound module X | ||
|
|
||
| $ dune build --root excluded-from-install-file |
There was a problem hiding this comment.
I suggest to add | grep priv, so that the focus is on private elements
|
I pushed a commit that disables the compatibility alias for private modules. |
| "_build/install/default/lib/lib/foo/priv2.cmt" {"foo/priv2.cmt"} | ||
| "_build/install/default/lib/lib/foo/priv2.cmx" {"foo/priv2.cmx"} | ||
| "_build/install/default/lib/lib/foo/priv2.ml" {"foo/priv2.ml"} | ||
| "_build/install/default/lib/lib/priv.ml" {"priv.ml"} |
There was a problem hiding this comment.
Why do we install the cmx/cmt for priv2 but not for priv?
There was a problem hiding this comment.
The grep was a little too strict. The artifacts for priv appear as Priv since it's wrapped. I'fxed this.
da2b80b to
b950fe5
Compare
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Since it's getting quite large Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
CHANGES: - Ignore stderr output when trying to find out the number of jobs available (ocaml/dune#1118, fix ocaml/dune#1116, @diml) - Fix error message when the source directory of `copy_files` does not exist. (ocaml/dune#1120, fix ocaml/dune#1099, @emillon) - Highlight error locations in error messages (ocaml/dune#1121, @emillon) - Display actual stanza when package is ambiguous (ocaml/dune#1126, fix ocaml/dune#1123, @emillon) - Add `dune unstable-fmt` to format `dune` files. The interface and syntax are still subject to change, so use with caution. (ocaml/dune#1130, fix ocaml/dune#940, @emillon) - Improve error message for `dune utop` without a library name (ocaml/dune#1154, fix ocaml/dune#1149, @emillon) - Fix parsing `ocamllex` stanza in jbuild files (ocaml/dune#1150, @rgrinberg) - Highlight multi-line errors (ocaml/dune#1131, @anuragsoni) - Do no try to generate shared libraries when this is not supported by the OS (ocaml/dune#1165, fix ocaml/dune#1051, @diml) - Fix `Flags.write_{sexp,lines}` in configurator by avoiding the use of `Stdune.Path` (ocaml/dune#1175, fix ocaml/dune#1161, @rgrinberg) - Add support for `findlib.dynload`: when linking an executable using `findlib.dynload`, automatically record linked in libraries and findlib predicates (ocaml/dune#1172, @bobot) - Add support for promoting a selected list of files (ocaml/dune#1192, @diml) - Add an emacs mode providing helpers to promote correction files (ocaml/dune#1192, @diml) - Improve message suggesting to remove parentheses (ocaml/dune#1196, fix ocaml/dune#1173, @emillon) - Add `(wrapped (transition "..message.."))` as an option that will generate wrapped modules but keep unwrapped modules with a deprecation message to preserve compatibility. (ocaml/dune#1188, fix ocaml/dune#985, @rgrinberg) - Fix the flags passed to the ppx rewriter when using `staged_pps` (ocaml/dune#1218, @diml) - Add `(env var)` to add a dependency to an environment variable. (ocaml/dune#1186, @emillon) - Add a simple version of a polling mode: `dune build -w` keeps running and restarts the build when something change on the filesystem (ocaml/dune#1140, @kodek16) - Cleanup the way we detect the library search path. We no longer call `opam config var lib` in the default build context (ocaml/dune#1226, @diml) - Make test stanzas honor the -p flag. (ocaml/dune#1236, fix ocaml/dune#1231, @emillon) - Test stanzas take an optional (action) field to customize how they run (ocaml/dune#1248, ocaml/dune#1195, @emillon) - Add support for private modules via the `private_modules` field (ocaml/dune#1241, fix ocaml/dune#427, @rgrinberg) - Add support for passing arguments to the OCaml compiler via a response file when the list of arguments is too long (ocaml/dune#1256, @diml) - Do not print diffs by default when running inside dune (ocaml/dune#1260, @diml) - Interpret `$ dune build dir` as building the default alias in `dir`. (ocaml/dune#1259, @rgrinberg) - Make the `dynlink` library available without findlib installed (ocaml/dune#1270, fix ocaml/dune#1264, @rgrinberg)
This PR still needs some cleaning before it's ready for merging but it's already ready for feedback. One small issue that I think might be worth discussing is the auto mangling of private module names. The benefits will be large for users of the
unwrappedmode, but it would also be quite useful for virtual libraries. As without this name mangling, it would technically be a breaking change to add a private module to a virtual library.cc @Drup and @c-cube