-
Notifications
You must be signed in to change notification settings - Fork 409
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
Tracking paths to error locations #138
Comments
I admit I'm a bit fuzzy on what is recommended way of invoking the build system from the editor. Myself I use some emacs lisp code that guesses the project root by looking for a few key files ( So the idea would be to have an option
before reporting an error? |
Yes, something like that would work. I don't think it would be a good idea to have everybody write their own editor scripts for how |
Instead of an option that should be added manually, can't jbuilder always print PS: I personally use projectile, where projectile-compile run the command where the .git is. |
|
It's not a big deal. Various messages can coexist. You can choose your own, maybe something like I'm not sure how |
Btw., if anybody needs a quickfix for now when building from within a subdirectory of the root, just create a .PHONY: all
all:
@echo jbuilder: Entering directory \`$(abspath $(dir $(lastword $(PWD))))\'
@jbuilder build --dev @all Then a simple call to |
That seems fine to me
It's almost the case. Basically most commands run by jbuilder are run from the root, except for building C files as the .o is always generated in the cwd. User actions are also run from the directory they are defined. In any cases, jbuilder always print the directory in which the action is run, using this syntax:
|
The handling of C-files makes things more complicated then. Since you presumably build them in parallel, I guess the best way would be to only print the directory change right before emitting an error message, making sure that there is no race condition that could insert another message between the directory change message and the error message. I'm not sure |
The standard way of launching a build system in Emacs is Unless there is a strong motivation, it would be better to keep the sentence Another possibility (which I'm not particularly fond of) is to invoke OCaml compilers with absolute file names, the errors will then contain the full path and links to errors will work. |
I implemented @bobot's suggestion. Initially I was thinking about printing Unfortunately, it still doesn't help for C stubs. The problem with C stubs is that when you call |
But most Vim
This would require the following changes:
I have updated my personal (public) OCaml Vim configuration to support both kinds of ticks, which is what other configurations do now, too. GNU make is apparently switching to saner quoting. But it would help if |
The format that jbuilder is currently using is the output used by gnu make since 4.0 (2013). Editors have been updated (for example four years ago for emacs). Even if gnu make 4.0 had been adopted slowly it is now. So I don't want jbuilder to support an old format that is deprecated. |
I agree about not supporting deprecated formats but @mmottl has a point when he says that the line is still prefixed by |
Indeed I forget to say that I don't see any problem for the first point. |
Some platforms (e.g. Mac OS X) still ship with old |
I agree, I don't see any problem for the implementation and inclusion of the first point. We can add the prefix "jbuilder:". Sorry if I was not clear. |
Any chance that the corresponding "Leaving directory …" messages could be added? Otherwise, when dune is run in a sequence including other programs, the messages produced by those programs are misinterpreted by editors. For example, the following case is broken: project root is in
When I execute |
It just feels a tad heavy :/ In your particular case, why not put the rules in the |
That's a fair point. Maybe under a flag?
I didn't realize this was possible. In practice, the rules tend to be more complicated. Can I do things like enumerating all files with a certain extension and run a command on each in dune? (Also, I (and to a larger extent people that I work with) have more experience with make, so I'm wary of using dune for more than the OCaml and Coq parts of my projects — but I'm open to being convinced ^^). |
Well, I won't try to convince you as the truth is, as soon as you go off the beaten track it's indeed pretty verbose compared to Adding a flag would be an option yeah. On the other hand having too many specific options tends to clutter the documentation. We generally try to just do the right thing without offering configuration unless it's really needed. Thinking about this again, it's only one line at the end of the build and the Do you want to write the patch? The |
Neat. Yes, I can (try to) prepare a patch. One more question, though, to make sure that I have this right. Why was the fix for the original issue to print the directory when compilation starts, rather than printing error messages relative to the current directory? Is it because the messages are printed by OCaml itself (and hence can't be adjusted to be relative to the directory in which |
That's exactly the idea. We would need to parse the output of commands and rewrite filenames. There is no universal format for printing locations, so we'd need to hardcode a bunch of formats. |
The "Entering ..." message was introduced in 157e4d6. Adding a matching "Leaving directory "..."' message helps when dune is invoked in sequence with other programs: otherwise, editors use dune's root to interpret path printed by programs executed after dune (instead of the original working directory). Discussed in ocaml#138.
The "Entering ..." message was introduced in 157e4d6. Adding a matching "Leaving directory "..."' message helps when dune is invoked in sequence with other programs: otherwise, editors use dune's root to interpret path printed by programs executed after dune (instead of the original working directory). Discussed in ocaml#138. Signed-off-by: Clément Pit-Claudel <clement.pitclaudel@live.com>
The "Entering ..." message was introduced in 157e4d6. Adding a matching "Leaving directory "..."' message helps when dune is invoked in sequence with other programs: otherwise, editors use dune's root to interpret path printed by programs executed after dune (instead of the original working directory). Discussed in ocaml#138. Signed-off-by: Clément Pit-Claudel <clement.pitclaudel@live.com>
Done (roughly 4 months later 🎉) in #3072 |
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
Print "Leaving Directory '%s'" in addition to "Entering Directory" Fixes #138 Signed-off-by: Rudi Grinberg <me@rgrinberg.com> Co-authored-by: Clément Pit-Claudel <clement.pitclaudel@live.com>
…, dune-rpc, dune-rpc-lwt, dune-private-libs, dune-glob, dune-configurator, dune-build-info, dune-action-plugin and chrome-trace (3.7.0~alpha1) CHANGES: - Fix parsing of OCaml errors that contain code excerpts with `...` in them. (ocaml/dune#7008, @rgrinberg) - Pre-emptively clear screen in watch mode (ocaml/dune#6987, fixes ocaml/dune#6884, @rgrinberg) - Fix cross compilation configuration when a context with targets is itself a host of another context (ocaml/dune#6958, fixes ocaml/dune#6843, @rgrinberg) - Fix parsing of the `<=` operator in *blang* expressions of `dune` files. Previously, the operator would be interpreted as `,`. (ocaml/dune#6928, @tatchi) - Fix `--trace-file` output. Dune now emits a single *complete* event for every executed process. Unterminated *async* events are no longer written. (ocaml/dune#6892, @rgrinberg) - Fix preprocessing with `staged_pps` (ocaml/dune#6748, fixes ocaml/dune#6644, @rgrinberg) - Use colored output with MDX when Dune colors are enabled. (ocaml/dune#6462, @MisterDA) - Make `dune describe workspace` return consistent dependencies for executables and for libraries. By default, compile-time dependencies towards PPX-rewriters are from now not taken into account (but runtime dependencies always are). Compile-time dependencies towards PPX-rewriters can be taken into account by providing the `--with-pps` flag. (ocaml/dune#6727, fixes ocaml/dune#6486, @esope) - Print missing newline after `$ dune exec`. (ocaml/dune#6821, fixes ocaml/dune#6700, @rgrinberg, @Alizter) - Fix binary corruption when installing or promoting in parallel (ocaml/dune#6669, fixes ocaml/dune#6668, @edwintorok) - Use colored output with GCC and Clang when compiling C stubs. The flag `-fdiagnostics-color=always` is added to the `:standard` set of flags. (ocaml/dune#4083, @MisterDA) - Fix the parsing of decimal and hexadecimal escape literals in `dune`, `dune-package`, and other dune s-expression based files (ocaml/dune#6710, @shym) - Report an error if `dune init ...` would create a "dune" file in a location which already contains a "dune" directory (ocaml/dune#6705, @gridbugs) - Fix the parsing of alerts. They will now show up in diagnostics correctly. (ocaml/dune#6678, @rginberg) - Fix the compilation of modules generated at link time when `implicit_transitive_deps` is enabled (ocaml/dune#6642, @rgrinberg) - Allow `$ dune utop` to load libraries defined in data only directories defined using `(subdir ..)` (ocaml/dune#6631, @rgrinberg) - Format dune files when they are named `dune-file`. This occurs when we enable the alternative file names project option. (ocaml/dune#6566, @rgrinberg) - Move `$ dune ocaml-merlin -dump-config=$dir` to `$ dune ocaml merlin dump-config $dir`. (ocaml/dune#6547, @rgrinberg) - Allow compilation rules to be impacted by `(env ..)` stanzas that modify the environment or set binaries. (ocaml/dune#6527, @rgrinberg) - Coq native mode is now automatically detected by Dune starting with Coq lang 0.7. `(mode native)` has been deprecated in favour of detection from the configuration of Coq. (ocaml/dune#6409, @Alizter) - Print "Leaving Directory" whenever "Entering Directory" is printed. (ocaml/dune#6149, fixes ocaml/dune#138, @cpitclaudel, @rgrinberg) - Allow `$ dune ocaml dump-dot-merlin` to run in watch mode. Also this command shouldn't print "Entering Directory" mesages. (ocaml/dune#6497, @rgrinberg) - `dune clean` should no longer fail under Windows due to the inability to remove the `.lock` file. Also, bring the implementation of the global lock under Windows closer to that of Unix. (ocaml/dune#6523, @nojb) - Remove "Entering Directory" messages for `$ dune install`. (ocaml/dune#6513, @rgrinberg) - Stop passing `-q` flag in `dune coq top`, which allows for `.coqrc` to be loaded. (ocaml/dune#6848, fixes ocaml/dune#6847, @Alizter) - Fix missing dependencies when detecting the kind of C compiler we're using (ocaml/dune#6610, fixes ocaml/dune#6415, @emillon) - Allow `(include_subdirs qualified)` for OCaml projects. (ocaml/dune#6594, fixes ocaml/dune#1084, @rgrinberg) - Accurately determine merlin configuration for all sources selected with `copy#` and `copy_files#`. The old heuristic of looking for a module in parent directories is removed (ocaml/dune#6594, @rgrinberg) - Fix inline tests with *js_of_ocaml* and whole program compilation mode enabled (ocaml/dune#6645, @hhugo) - Fix *js_of_ocaml* separate compilation rules when `--enable=effects` ,`--enable=use-js-string` or `--toplevel` is used. (ocaml/dune#6714, ocaml/dune#6828, ocaml/dune#6920, @hhugo) - Fix *js_of_ocaml* separate compilation in presence of linkall (ocaml/dune#6832, ocaml/dune#6916, @hhugo) - Remove spurious build dir created when running `dune init proj ...` (ocaml/dune#6707, fixes ocaml/dune#5429, @gridbugs) - Allow `--sandbox` to affect `ocamldep` invocations. Previously, they were wrongly marked as incompatible (ocaml/dune#6749, @rgrinberg) - Validate the command line arguments for `$ dune ocaml top-module`. This command requires one positional argument (ocaml/dune#6796, fixes ocaml/dune#6793, @rgrinberg) - Add a `dune cache size` command for displaying the size of the cache (ocaml/dune#6638, @Alizter) - Add 4.14.0 MSVC to CI (ocaml/dune#6917, @jonahbeckford) - Fix dependency cycle when installing files to the bin section with `glob_files` (ocaml/dune#6764, fixes ocaml/dune#6708, @gridbugs) - Handle "Too many links" errors when using Dune cache on Windows (ocaml/dune#6993, @nojb)
…, dune-rpc, dune-rpc-lwt, dune-private-libs, dune-glob, dune-configurator, dune-build-info, dune-action-plugin and chrome-trace (3.7.0) CHANGES: - Allow running `$ dune exec` in watch mode (with the `-w` flag). In watch mode, `$ dune exec` the executed binary whenever it is recompiled. (ocaml/dune#6966, @gridbugs) - `coqdep` is now called once per theory, instead of one time per Coq file. This should significantly speed up some builds, as `coqdep` startup time is often heavy (ocaml/dune#7048, @Alizter, @ejgallego) - Add `map_workspace_root` dune-project stanza to allow disabling of mapping of workspace root to `/workspace_root`. (ocaml/dune#6988, fixes ocaml/dune#6929, @richardlford) - Fix handling of support files generated by odoc. (ocaml/dune#6913, @jonludlam) - Fix parsing of OCaml errors that contain code excerpts with `...` in them. (ocaml/dune#7008, @rgrinberg) - Pre-emptively clear screen in watch mode (ocaml/dune#6987, fixes ocaml/dune#6884, @rgrinberg) - Fix cross compilation configuration when a context with targets is itself a host of another context (ocaml/dune#6958, fixes ocaml/dune#6843, @rgrinberg) - Fix parsing of the `<=` operator in *blang* expressions of `dune` files. Previously, the operator would be interpreted as `<`. (ocaml/dune#6928, @tatchi) - Fix `--trace-file` output. Dune now emits a single *complete* event for every executed process. Unterminated *async* events are no longer written. (ocaml/dune#6892, @rgrinberg) - Fix preprocessing with `staged_pps` (ocaml/dune#6748, fixes ocaml/dune#6644, @rgrinberg) - Use colored output with MDX when Dune colors are enabled. (ocaml/dune#6462, @MisterDA) - Make `dune describe workspace` return consistent dependencies for executables and for libraries. By default, compile-time dependencies towards PPX-rewriters are from now not taken into account (but runtime dependencies always are). Compile-time dependencies towards PPX-rewriters can be taken into account by providing the `--with-pps` flag. (ocaml/dune#6727, fixes ocaml/dune#6486, @esope) - Print missing newline after `$ dune exec`. (ocaml/dune#6821, fixes ocaml/dune#6700, @rgrinberg, @Alizter) - Fix binary corruption when installing or promoting in parallel (ocaml/dune#6669, fixes ocaml/dune#6668, @edwintorok) - Use colored output with GCC and Clang when compiling C stubs. The flag `-fdiagnostics-color=always` is added to the `:standard` set of flags. (ocaml/dune#4083, @MisterDA) - Fix the parsing of decimal and hexadecimal escape literals in `dune`, `dune-package`, and other dune s-expression based files (ocaml/dune#6710, @shym) - Report an error if `dune init ...` would create a "dune" file in a location which already contains a "dune" directory (ocaml/dune#6705, @gridbugs) - Fix the parsing of alerts. They will now show up in diagnostics correctly. (ocaml/dune#6678, @rginberg) - Fix the compilation of modules generated at link time when `implicit_transitive_deps` is enabled (ocaml/dune#6642, @rgrinberg) - Allow `$ dune utop` to load libraries defined in data only directories defined using `(subdir ..)` (ocaml/dune#6631, @rgrinberg) - Format dune files when they are named `dune-file`. This occurs when we enable the alternative file names project option. (ocaml/dune#6566, @rgrinberg) - Move `$ dune ocaml-merlin -dump-config=$dir` to `$ dune ocaml merlin dump-config $dir`. (ocaml/dune#6547, @rgrinberg) - Allow compilation rules to be impacted by `(env ..)` stanzas that modify the environment or set binaries. (ocaml/dune#6527, @rgrinberg) - Coq native mode is now automatically detected by Dune starting with Coq lang 0.7. `(mode native)` has been deprecated in favour of detection from the configuration of Coq. (ocaml/dune#6409, @Alizter) - Print "Leaving Directory" whenever "Entering Directory" is printed. (ocaml/dune#6419, fixes ocaml/dune#138, @cpitclaudel, @rgrinberg) - Allow `$ dune ocaml dump-dot-merlin` to run in watch mode. Also this command shouldn't print "Entering Directory" mesages. (ocaml/dune#6497, @rgrinberg) - `dune clean` should no longer fail under Windows due to the inability to remove the `.lock` file. Also, bring the implementation of the global lock under Windows closer to that of Unix. (ocaml/dune#6523, @nojb) - Remove "Entering Directory" messages for `$ dune install`. (ocaml/dune#6513, @rgrinberg) - Stop passing `-q` flag in `dune coq top`, which allows for `.coqrc` to be loaded. (ocaml/dune#6848, fixes ocaml/dune#6847, @Alizter) - Fix missing dependencies when detecting the kind of C compiler we're using (ocaml/dune#6610, fixes ocaml/dune#6415, @emillon) - Allow `(include_subdirs qualified)` for OCaml projects. (ocaml/dune#6594, fixes ocaml/dune#1084, @rgrinberg) - Accurately determine merlin configuration for all sources selected with `copy#` and `copy_files#`. The old heuristic of looking for a module in parent directories is removed (ocaml/dune#6594, @rgrinberg) - Fix inline tests with *js_of_ocaml* and whole program compilation mode enabled (ocaml/dune#6645, @hhugo) - Fix *js_of_ocaml* separate compilation rules when `--enable=effects` ,`--enable=use-js-string` or `--toplevel` is used. (ocaml/dune#6714, ocaml/dune#6828, ocaml/dune#6920, @hhugo) - Fix *js_of_ocaml* separate compilation in presence of linkall (ocaml/dune#6832, ocaml/dune#6916, @hhugo) - Remove spurious build dir created when running `dune init proj ...` (ocaml/dune#6707, fixes ocaml/dune#5429, @gridbugs) - Allow `--sandbox` to affect `ocamldep` invocations. Previously, they were wrongly marked as incompatible (ocaml/dune#6749, @rgrinberg) - Validate the command line arguments for `$ dune ocaml top-module`. This command requires one positional argument (ocaml/dune#6796, fixes ocaml/dune#6793, @rgrinberg) - Add a `dune cache size` command for displaying the size of the cache (ocaml/dune#6638, @Alizter) - Fix dependency cycle when installing files to the bin section with `glob_files` (ocaml/dune#6764, fixes ocaml/dune#6708, @gridbugs) - Handle "Too many links" errors when using Dune cache on Windows (ocaml/dune#6993, @nojb) - Allow the `cinaps` stanza to set a custom alias. By default, if the alias is not set then the cinaps actions will be attached to both `@cinaps` and `@runtest` (ocaml/dune#6991, @rgrinberg) - Add `(using ctypes 0.3)`. When used, paths in `(ctypes)` are interpreted relative to where the stanza is defined. (ocaml/dune#6883, fixes ocaml/dune#5325, @emillon) - Auto-detect `dune-workspace` files as `dune` files in Emacs (ocaml/dune#7061, @ilankri) - Add native support for polling mode on Windows (ocaml/dune#7010, @yams-yams, @nojb)
My directory structure is as follows:
src
contains a library andexamples
example applications. If I go to theexamples
directory and issue a build command from there (e.g. from an editor), an error in examplefoo.ml
would be reported using locationexamples/foo.ml
. This is a problem for inferring correct error locations. The editor does not know where the root of this path is, because we are in a (potentially even deeper) subdirectory.Could you please print the absolute path of the root for error messages for a particular build when
jbuilder
is invoked so editors can infer the correct path? E.g. Vim allows you to pattern match on the build output to keep track of directory stacks for correct errors locations. A somewhat unique string should be used to correctly identify this location message, preferably an existingmake
-likeEntering directory
message that Vim or Emacs already understand.The text was updated successfully, but these errors were encountered: