-
Notifications
You must be signed in to change notification settings - Fork 413
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
per_module breaks .merlin output #1212
Comments
This is a known issue. We could improve the approximation of the merlin command by taking the union of ppx preprocessors, but we've been kind of dragging our feet on this stuff as we'd really like to see this issue fixed once and for all. Feel free to add a workaround for this for now if it's blocking you. @trefis do we have an ETA on the new merlin interface? |
Is there an open issue in the merlin issue tracker for this specific need? I could not find it, maybe we should add one? |
opening such an issue makes sense |
The new merlin interface is released, and I believe @voodoos is working on (and might already be done) improving this particular point on the dune side. |
…ne-action-plugin, dune-private-libs and dune-glob (2.8.0) CHANGES: - `dune rules` accepts aliases and other non-path rules (ocaml/dune#4063, @mrmr1993) - Action `(diff reference test_result)` now accept `reference` to be absent and in that case consider that the reference is empty. Then running `dune promote` will create the reference file. (ocaml/dune#3795, @bobot) - Ignore special files (BLK, CHR, FIFO, SOCKET), (ocaml/dune#3570, fixes ocaml/dune#3124, ocaml/dune#3546, @ejgallego) - Experimental: Simplify loading of additional files (data or code) at runtime in programs by introducing specific installation sites. In particular it allow to define plugins to be installed in these sites. (ocaml/dune#3104, ocaml/dune#3794, fixes ocaml/dune#1185, @bobot) - Move all temporary files created by dune to run actions to a single directory and make sure that actions executed by dune also use this directory by setting `TMPDIR` (or `TEMP` on Windows). (ocaml/dune#3691, fixes ocaml/dune#3422, @rgrinberg) - Fix bootstrap script with custom configuration. (ocaml/dune#3757, fixes ocaml/dune#3774, @marsam) - Add the `executable` field to `inline_tests` to customize the compilation flags of the test runner executable (ocaml/dune#3747, fixes ocaml/dune#3679, @lubegasimon) - Add `(enabled_if ...)` to `(copy_files ...)` (ocaml/dune#3756, @nojb) - Make sure Dune cleans up the status line before exiting (ocaml/dune#3767, fixes ocaml/dune#3737, @alan-j-hu) - Add `{gitlab,bitbucket}` as options for defining project sources with `source` stanza `(source (<host> user/repo))` in the `dune-project` file. (ocaml/dune#3813, @rgrinberg) - Fix generation of `META` and `dune-package` files when some targets (byte, native, dynlink) are disabled. Previously, dune would generate all archives for regardless of settings. (ocaml/dune#3829, ocaml/dune#4041, @rgrinberg) - Do not run ocamldep to for single module executables & libraries. The dependency graph for such artifacts is trivial (ocaml/dune#3847, @rgrinberg) - Fix cram tests inside vendored directories not being interpreted correctly. (ocaml/dune#3860, fixes ocaml/dune#3843, @rgrinberg) - Add `package` field to private libraries. This allows such libraries to be installed and to be usable by other public libraries in the same project (ocaml/dune#3655, fixes ocaml/dune#1017, @rgrinberg) - Fix the `%{make}` variable on Windows by only checking for a `gmake` binary on UNIX-like systems as a unrelated `gmake` binary might exist on Windows. (ocaml/dune#3853, @kit-ty-kate) - Fix `$ dune install` modifying the build directory. This made the build directory unusable when `$ sudo dune install` modified permissions. (fix ocaml/dune#3857, @rgrinberg) - Fix handling of aliases given on the command line (using the `@` and `@@` syntax) so as to correctly handle relative paths. (ocaml/dune#3874, fixes ocaml/dune#3850, @nojb) - Allow link time code generation to be used in preprocessing executable. This makes it possible to use the build info module inside the preprocessor. (ocaml/dune#3848, fix ocaml/dune#3848, @rgrinberg) - Correctly call `git ls-tree` so unicode files are not quoted, this fixes problems with `dune subst` in the presence of unicode files. Fixes ocaml/dune#3219 (ocaml/dune#3879, @ejgallego) - `dune subst` now accepts common command-line arguments such as `--debug-backtraces` (ocaml/dune#3878, @ejgallego) - `dune describe` now also includes information about executables in addition to that of libraries. (ocaml/dune#3892, ocaml/dune#3895, @nojb) - instrumentation backends can now receive arguments via `(instrumentation (backend <name> <args>))`. (ocaml/dune#3906, ocaml/dune#3932, @nojb) - Tweak auto-formatting of `dune` files to improve readability. (ocaml/dune#3928, @nojb) - Add a switch argument to opam when context is not default. (ocaml/dune#3951, @tmattio) - Avoid pager when running `$ git diff` (ocaml/dune#3912, @AltGr) - Add `(root_module ..)` field to libraries & executables. This makes it possible to use library dependencies shadowed by local modules (ocaml/dune#3825, @rgrinberg) - Allow `(formatting ...)` field in `(env ...)` stanza to set per-directory formatting specification. (ocaml/dune#3942, @nojb) - [coq] In `coq.theory`, `:standard` for the `flags` field now uses the flags set in `env` profile flags (ocaml/dune#3931 , @ejgallego @rgrinberg) - [coq] Add `-q` flag to `:standard` `coqc` flags , fixes ocaml/dune#3924, (ocaml/dune#3931 , @ejgallego) - Add support for Coq's native compute compilation mode (@ejgallego, ocaml/dune#3210) - Add a `SUFFIX` directive in `.merlin` files for each dialect with no preprocessing, to let merlin know of additional file extensions (ocaml/dune#3977, @vouillon) - Stop promoting `.merlin` files. Write per-stanza Merlin configurations in binary form. Add a new subcommand `dune ocaml-merlin` that Merlin can use to query the configuration files. The `allow_approximate_merlin` option is now useless and deprecated. Dune now conflicts with `merlin < 3.4.0` and `ocaml-lsp-server < 1.3.0` (ocaml/dune#3554, @voodoos) - Configurator: fix a bug introduced in 2.6.0 where the configurator V1 API doesn't work at all when used outside of dune. (ocaml/dune#4046, @aalekseyev) - Fix `libexec` and `libexec-private` variables. In cross-compilation settings, they now point to the file in the host context. (ocaml/dune#4058, fixes ocaml/dune#4057, @TheLortex) - When running `$ dune subst`, use project metadata as a fallback when package metadata is missing. We also generate a warning when `(name ..)` is missing in `dune-project` files to avoid failures in production builds. - Remove support for passing `-nodynlink` for executables. It was bypassed in most cases and not correct in other cases in particular on arm32. (ocaml/dune#4085, fixes ocaml/dune#4069, fixes ocaml/dune#2527, @emillon) - Generate archive rules compatible with 4.12. Dune longer attempt to generate an archive file if it's unnecessary (ocaml/dune#3973, fixes ocaml/dune#3766, @rgrinberg) - Fix generated Merlin configurations when multiple preprocessors are defined for different modules in the same folder. (ocaml/dune#4092, fixes ocaml/dune#2596, ocaml/dune#1212 and ocaml/dune#3409, @voodoos) - Add the option `use_standard_c_and_cxx_flags` to `dune-project` that 1. disables the unconditional use of the `ocamlc_cflags` and `ocamlc_cppflags` from `ocamlc -config` in C compiler calls, these flags will be present in the `:standard` set instead; and 2. enables the detection of the C compiler family and populates the `:standard` set of flags with common default values when building CXX stubs. (ocaml/dune#3875, ocaml/dune#3802, fix ocaml/dune#3718 and ocaml/dune#3528, @voodoos)
This should be fixed in Dune 2.8. If it is not don't hesitate to warn us. |
Great thanks! |
Hello, I tried to use this new feature but I can't get it to work. This is my attempt: LPCIC/elpi#91 but if I open anything in src/*.ml then I don't get the pre-processing, e.g. data.ml is not getting I'm on
and I'm using vscode with ocaml-platform just installed (I had the reason thing before, since I like the syntax highlighting better, but I guess I have to switch now). |
Side note: I had a single runtime.ml file and 2 copy_file directives, but apparently this does not work anymore, so I did make a symlink. I'm OK with that, just wanted to point out the change of behavior. |
@gares, thanks for trying this out, I will have a look when I have time. It would be very useful if you could build a small, self-contained, reproduction ! |
Hum, I can help debug but I don't know how to start. Maybe you can give a hint. |
You can ask Dune to print the configurations for a source folder by calling There is also the Merlin counterpart (i don't know if ocamllsp has a similar feature, @rgrinberg ?): And for reference there is a case in Dune test-suite for per-module config: |
My dune file has
and the dump (for
|
I was expecting to see |
Note that directories about the ppx I link in
For reference:
|
This used to be supported in .merlin files. So this seems like a regression indeed. |
@gares, can you post the complete output of the configuration dump ? (In the Dune test case for the |
It is present for the parser, which calls camlp5.
Here the full output:
|
@gares That makes little sense but it looks like putting the (preprocess (per_module
((action (run %{project_root}/ppxfindcache/ppxfindcache2.exe
--cache-file %{dep:.ppcache/API.ml}
--cache-file %{dep:.ppcache/API.mli}
--cache-file %{dep:.ppcache/util.ml}
--cache-file %{dep:.ppcache/util.mli}
--cache-file %{dep:.ppcache/ast.ml}
--cache-file %{dep:.ppcache/ast.mli}
--cache-file %{dep:.ppcache/data.ml}
--cache-file %{dep:.ppcache/compiler.ml}
--cache-file %{dep:.ppcache/compiler.mli}
%{input-file}))
API ast data compiler)
((action (run %{project_root}/ppxfindcache/ppxfindcache.exe
--ppx-opt --cookie
--ppx-opt "elpi_trace=\"true\""
--cache-file %{dep:.ppcache/runtime_trace_on.ml}
--cache-file %{dep:.ppcache/runtime_trace_on.mli}
%{input-file}))
runtime_trace_on)
((action (run %{project_root}/ppxfindcache/ppxfindcache.exe
--ppx-opt --cookie
--ppx-opt "elpi_trace=\"false\""
--cache-file %{dep:.ppcache/runtime_trace_off.ml}
--cache-file %{dep:.ppcache/runtime_trace_off.mli}
%{input-file}))
runtime_trace_off)
((action (run camlp5o -I . -I +camlp5 pa_extend.cmo pa_lexer.cmo %{input-file})) parser)
)) Can you try it ? @rgrinberg do you have an idea why the order of the parameters could be of significance here ? |
Thanks @voodoos ! I would have never guessed this work around. Now I get my [%extensions] processed. There is still a glitch, if you open src/runtime_trace_on.ml (or _off.ml) you get an error on the first line (which is a comment): Is this related to the ppx handling? EDIT: I spoke too early, I get that error on all files, even in src/parser.ml, so I guess it's not my ppx but the way it is invoked. |
Actually I get errors like |
OK, I understood a bit more: all I don't know if Is there a way I can ask for a |
FTR |
Because the way we handle |
So to sum-up:
Modulo 1, it seems that per-module configuration is working as expected, and we should close this issue and move the discussion elsewhere. |
For the following dune file:
Merlin doesn't load the PPX for
Mercury.ml
. If I change thepreprocess
stanza to just(pps ppx_pgsql)
then.merlin
gains the required:The text was updated successfully, but these errors were encountered: