Merge pull request #1121 from ocaml/highlight-error-locations
Highlight error locations
This commit is contained in:
commit
7a8b86d6c2
|
@ -7,6 +7,8 @@ next
|
||||||
- Fix error message when the source directory of `copy_files` does not exist.
|
- Fix error message when the source directory of `copy_files` does not exist.
|
||||||
(#1120, fix #1099, @emillon)
|
(#1120, fix #1099, @emillon)
|
||||||
|
|
||||||
|
- Highlight error locations in error messages (#1121, @emillon)
|
||||||
|
|
||||||
1.1.1 (08/08/2018)
|
1.1.1 (08/08/2018)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
27
src/loc.ml
27
src/loc.ml
|
@ -61,12 +61,35 @@ let of_pos (fname, lnum, cnum, enum) =
|
||||||
; stop = { pos with pos_cnum = enum }
|
; stop = { pos with pos_cnum = enum }
|
||||||
}
|
}
|
||||||
|
|
||||||
let print ppf { start; stop } =
|
let file_line path n =
|
||||||
|
Io.with_file_in ~binary:false path
|
||||||
|
~f:(fun ic ->
|
||||||
|
for _ = 1 to n - 1 do
|
||||||
|
ignore (input_line ic)
|
||||||
|
done;
|
||||||
|
input_line ic
|
||||||
|
)
|
||||||
|
|
||||||
|
let print ppf loc =
|
||||||
|
let { start; stop } = loc in
|
||||||
let start_c = start.pos_cnum - start.pos_bol in
|
let start_c = start.pos_cnum - start.pos_bol in
|
||||||
let stop_c = stop.pos_cnum - start.pos_bol in
|
let stop_c = stop.pos_cnum - start.pos_bol in
|
||||||
|
let pp_file_excerpt pp () =
|
||||||
|
let whole_file = start_c = 0 && stop_c = 0 in
|
||||||
|
if not whole_file then
|
||||||
|
let path = Path.of_string start.pos_fname in
|
||||||
|
if Path.exists path then
|
||||||
|
let line = file_line path start.pos_lnum in
|
||||||
|
if stop_c <= String.length line then
|
||||||
|
let len = stop_c - start_c in
|
||||||
|
Format.fprintf pp "%s\n%*s\n" line
|
||||||
|
stop_c
|
||||||
|
(String.make len '^')
|
||||||
|
in
|
||||||
Format.fprintf ppf
|
Format.fprintf ppf
|
||||||
"@{<loc>File \"%s\", line %d, characters %d-%d:@}@\n"
|
"@{<loc>File \"%s\", line %d, characters %d-%d:@}@\n%a"
|
||||||
start.pos_fname start.pos_lnum start_c stop_c
|
start.pos_fname start.pos_lnum start_c stop_c
|
||||||
|
pp_file_excerpt ()
|
||||||
|
|
||||||
let warn t fmt =
|
let warn t fmt =
|
||||||
Errors.kerrf ~f:print_to_console
|
Errors.kerrf ~f:print_to_console
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
$ dune runtest --root absolute-path
|
$ dune runtest --root absolute-path
|
||||||
Entering directory 'absolute-path'
|
Entering directory 'absolute-path'
|
||||||
File "jbuild", line 3, characters 16-24:
|
File "jbuild", line 3, characters 16-24:
|
||||||
|
(deps ((alias /foo/bar)))))
|
||||||
|
^^^^^^^^
|
||||||
Error: Invalid alias!
|
Error: Invalid alias!
|
||||||
Tried to reference path outside build dir: "/foo/bar"
|
Tried to reference path outside build dir: "/foo/bar"
|
||||||
[1]
|
[1]
|
||||||
$ dune runtest --root outside-workspace
|
$ dune runtest --root outside-workspace
|
||||||
Entering directory 'outside-workspace'
|
Entering directory 'outside-workspace'
|
||||||
File "jbuild", line 4, characters 16-39:
|
File "jbuild", line 4, characters 16-39:
|
||||||
|
(deps ((alias ${ROOT}/../../../foobar)))))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: path outside the workspace: ./../../../foobar from default
|
Error: path outside the workspace: ./../../../foobar from default
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -6,6 +6,8 @@ All builtin variables are lower cased in Dune:
|
||||||
$ dune runtest --root dune-upper
|
$ dune runtest --root dune-upper
|
||||||
Entering directory 'dune-upper'
|
Entering directory 'dune-upper'
|
||||||
File "dune", line 3, characters 41-46:
|
File "dune", line 3, characters 41-46:
|
||||||
|
(action (with-stdout-to %{null} (echo %{MAKE}))))
|
||||||
|
^^^^^
|
||||||
Error: %{MAKE} was renamed to '%{make}' in the 1.0 version of the dune language
|
Error: %{MAKE} was renamed to '%{make}' in the 1.0 version of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ No ppx driver found
|
||||||
|
|
||||||
$ dune build foo1.cma
|
$ dune build foo1.cma
|
||||||
File "dune", line 6, characters 13-18:
|
File "dune", line 6, characters 13-18:
|
||||||
|
(preprocess (pps)))
|
||||||
|
^^^^^
|
||||||
Error: You must specify at least one ppx rewriter.
|
Error: You must specify at least one ppx rewriter.
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -9,6 +11,8 @@ Too many drivers
|
||||||
|
|
||||||
$ dune build foo2.cma
|
$ dune build foo2.cma
|
||||||
File "dune", line 13, characters 13-28:
|
File "dune", line 13, characters 13-28:
|
||||||
|
(preprocess (pps ppx1 ppx2)))
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
Error: Too many incompatible ppx drivers were found: foo.driver2 and
|
Error: Too many incompatible ppx drivers were found: foo.driver2 and
|
||||||
foo.driver1.
|
foo.driver1.
|
||||||
[1]
|
[1]
|
||||||
|
@ -17,6 +21,8 @@ Not compatible with Dune
|
||||||
|
|
||||||
$ dune build foo3.cma
|
$ dune build foo3.cma
|
||||||
File "dune", line 20, characters 13-28:
|
File "dune", line 20, characters 13-28:
|
||||||
|
(preprocess (pps ppx_other)))
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
Error: No ppx driver were found. It seems that ppx_other is not compatible
|
Error: No ppx driver were found. It seems that ppx_other is not compatible
|
||||||
with Dune. Examples of ppx rewriters that are compatible with Dune are ones
|
with Dune. Examples of ppx rewriters that are compatible with Dune are ones
|
||||||
using ocaml-migrate-parsetree, ppxlib or ppx_driver.
|
using ocaml-migrate-parsetree, ppxlib or ppx_driver.
|
||||||
|
|
|
@ -5,6 +5,8 @@ Duplicating a field in a dune file is an error:
|
||||||
|
|
||||||
$ dune build --root dune
|
$ dune build --root dune
|
||||||
File "dune", line 4, characters 1-20:
|
File "dune", line 4, characters 1-20:
|
||||||
|
(action (echo bar)))
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
Error: Field "action" is present too many times
|
Error: Field "action" is present too many times
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -15,6 +17,8 @@ For backward compatibility, it is only a warning in jbuild files:
|
||||||
|
|
||||||
$ dune build --root jbuild
|
$ dune build --root jbuild
|
||||||
File "jbuild", line 4, characters 2-21:
|
File "jbuild", line 4, characters 2-21:
|
||||||
|
(action (echo bar))))
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
Warning: Field "action" is present several times, previous occurrences are ignored.
|
Warning: Field "action" is present several times, previous occurrences are ignored.
|
||||||
Entering directory 'jbuild'
|
Entering directory 'jbuild'
|
||||||
bar
|
bar
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
$ dune build --display short
|
$ dune build --display short
|
||||||
File "dune", line 3, characters 22-26:
|
File "dune", line 3, characters 22-26:
|
||||||
|
(modules :standard \ fake))
|
||||||
|
^^^^
|
||||||
Warning: Module Fake is excluded but it doesn't exist.
|
Warning: Module Fake is excluded but it doesn't exist.
|
||||||
|
|
|
@ -2,6 +2,8 @@ When using dune exec, the external-lib-deps command refers to the executable:
|
||||||
|
|
||||||
$ dune exec ./x.exe
|
$ dune exec ./x.exe
|
||||||
File "dune", line 3, characters 12-26:
|
File "dune", line 3, characters 12-26:
|
||||||
|
(libraries does-not-exist))
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
Error: Library "does-not-exist" not found.
|
Error: Library "does-not-exist" not found.
|
||||||
Hint: try: dune external-lib-deps --missing ./x.exe
|
Hint: try: dune external-lib-deps --missing ./x.exe
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -2,6 +2,8 @@ fallback isn't allowed in dune
|
||||||
|
|
||||||
$ dune build --root dune1
|
$ dune build --root dune1
|
||||||
File "dune", line 2, characters 1-11:
|
File "dune", line 2, characters 1-11:
|
||||||
|
(fallback)
|
||||||
|
^^^^^^^^^^
|
||||||
Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language
|
Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -9,6 +11,8 @@ fallback isn't allowed in dune
|
||||||
|
|
||||||
$ dune build --root dune2
|
$ dune build --root dune2
|
||||||
File "dune", line 2, characters 1-17:
|
File "dune", line 2, characters 1-17:
|
||||||
|
(fallback false)
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language
|
Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ We are dropping support for findlib in dune
|
||||||
$ dune build --root in-dune target.txt
|
$ dune build --root in-dune target.txt
|
||||||
Entering directory 'in-dune'
|
Entering directory 'in-dune'
|
||||||
File "dune", line 2, characters 25-37:
|
File "dune", line 2, characters 25-37:
|
||||||
|
(write-file target.txt %{findlib:pkg})
|
||||||
|
^^^^^^^^^^^^
|
||||||
Error: %{findlib:..} was renamed to '%{lib:..}' in the 1.0 version of the dune language
|
Error: %{findlib:..} was renamed to '%{lib:..}' in the 1.0 version of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -11,5 +13,7 @@ But it must still be available in jbuild files
|
||||||
$ dune build --root in-jbuild target.txt
|
$ dune build --root in-jbuild target.txt
|
||||||
Entering directory 'in-jbuild'
|
Entering directory 'in-jbuild'
|
||||||
File "jbuild", line 4, characters 23-42:
|
File "jbuild", line 4, characters 23-42:
|
||||||
|
(write-file target.txt ${findlib:pkg:file})
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
Error: Public library "pkg" not found
|
Error: Public library "pkg" not found
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -8,6 +8,8 @@ Reproduction case for #484. The error should point to src/jbuild
|
||||||
|
|
||||||
$ dune build @install
|
$ dune build @install
|
||||||
File "src/dune", line 4, characters 14-15:
|
File "src/dune", line 4, characters 14-15:
|
||||||
|
(libraries a b c))
|
||||||
|
^
|
||||||
Error: Library "a" not found.
|
Error: Library "a" not found.
|
||||||
Hint: try: dune external-lib-deps --missing @install
|
Hint: try: dune external-lib-deps --missing @install
|
||||||
[1]
|
[1]
|
||||||
|
@ -16,6 +18,8 @@ When passing --dev, the profile should be displayed only once (#1106):
|
||||||
|
|
||||||
$ jbuilder build --dev @install
|
$ jbuilder build --dev @install
|
||||||
File "src/dune", line 4, characters 14-15:
|
File "src/dune", line 4, characters 14-15:
|
||||||
|
(libraries a b c))
|
||||||
|
^
|
||||||
Error: Library "a" not found.
|
Error: Library "a" not found.
|
||||||
Hint: try: dune external-lib-deps --missing --profile dev @install
|
Hint: try: dune external-lib-deps --missing --profile dev @install
|
||||||
[1]
|
[1]
|
||||||
|
@ -24,6 +28,8 @@ With dune and an explicit profile, it is the same:
|
||||||
|
|
||||||
$ dune build --profile dev @install
|
$ dune build --profile dev @install
|
||||||
File "src/dune", line 4, characters 14-15:
|
File "src/dune", line 4, characters 14-15:
|
||||||
|
(libraries a b c))
|
||||||
|
^
|
||||||
Error: Library "a" not found.
|
Error: Library "a" not found.
|
||||||
Hint: try: dune external-lib-deps --missing --profile dev @install
|
Hint: try: dune external-lib-deps --missing --profile dev @install
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -3,6 +3,8 @@ If the source directory does not exist, an error message is printed:
|
||||||
$ dune build --root no-dir demo.exe
|
$ dune build --root no-dir demo.exe
|
||||||
Entering directory 'no-dir'
|
Entering directory 'no-dir'
|
||||||
File "dune", line 1, characters 13-23:
|
File "dune", line 1, characters 13-23:
|
||||||
|
(copy_files# "no_dir/*")
|
||||||
|
^^^^^^^^^^
|
||||||
Error: cannot find directory: no_dir
|
Error: cannot find directory: no_dir
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -11,5 +13,7 @@ This works also is a file exists with the same name:
|
||||||
$ dune build --root file-with-same-name demo.exe
|
$ dune build --root file-with-same-name demo.exe
|
||||||
Entering directory 'file-with-same-name'
|
Entering directory 'file-with-same-name'
|
||||||
File "dune", line 1, characters 13-23:
|
File "dune", line 1, characters 13-23:
|
||||||
|
(copy_files# "no_dir/*")
|
||||||
|
^^^^^^^^^^
|
||||||
Error: cannot find directory: no_dir
|
Error: cannot find directory: no_dir
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
$ dune runtest
|
$ dune runtest
|
||||||
File "jbuild", line 4, characters 20-42:
|
File "jbuild", line 4, characters 20-42:
|
||||||
|
(preprocess (pps (ppx_that_doesn't_exist)))))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: Library "ppx_that_doesn't_exist" not found.
|
Error: Library "ppx_that_doesn't_exist" not found.
|
||||||
Hint: try: dune external-lib-deps --missing @runtest
|
Hint: try: dune external-lib-deps --missing @runtest
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
$ jbuilder build @foo
|
$ jbuilder build @foo
|
||||||
File "src/dune", line 4, characters 10-17:
|
File "src/dune", line 4, characters 10-17:
|
||||||
|
(c_names stubs/x))
|
||||||
|
^^^^^^^
|
||||||
Error: File src/stubs/x.c is not part of the current directory group. This is not allowed.
|
Error: File src/stubs/x.c is not part of the current directory group. This is not allowed.
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
$ jbuilder build @bar
|
$ jbuilder build @bar
|
||||||
File "dune", line 2, characters 7-14:
|
File "dune", line 2, characters 7-14:
|
||||||
|
(name foo/bar)
|
||||||
|
^^^^^^^
|
||||||
Error: "foo/bar" is not a valid alias name
|
Error: "foo/bar" is not a valid alias name
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
$ dune build
|
$ dune build
|
||||||
File "dune", line 1, characters 0-28:
|
File "dune", line 1, characters 0-28:
|
||||||
|
(rule (run %{bin:echo} foo))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: Rule has no targets specified
|
Error: Rule has no targets specified
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -17,9 +17,13 @@ argument of "package".
|
||||||
|
|
||||||
$ cd package-without-pub-name && dune build -p foo
|
$ cd package-without-pub-name && dune build -p foo
|
||||||
File "dune", line 3, characters 1-14:
|
File "dune", line 3, characters 1-14:
|
||||||
|
(package foo))
|
||||||
|
^^^^^^^^^^^^^
|
||||||
Error: This field is useless without a (public_name ...) field.
|
Error: This field is useless without a (public_name ...) field.
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
$ cd package-without-pub-name-jbuild && dune build -p foo
|
$ cd package-without-pub-name-jbuild && dune build -p foo
|
||||||
File "jbuild", line 3, characters 2-15:
|
File "jbuild", line 3, characters 2-15:
|
||||||
|
(package foo)))
|
||||||
|
^^^^^^^^^^^^^
|
||||||
Warning: This field is useless without a (public_name ...) field.
|
Warning: This field is useless without a (public_name ...) field.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
$ dune build --display short
|
$ dune build --display short
|
||||||
File "dune", line 1, characters 0-15:
|
File "dune", line 1, characters 0-15:
|
||||||
|
(include a.inc)
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
Error: Recursive inclusion of jbuild files detected:
|
Error: Recursive inclusion of jbuild files detected:
|
||||||
File a.inc is included from c.inc:1
|
File a.inc is included from c.inc:1
|
||||||
--> included from b.inc:1
|
--> included from b.inc:1
|
||||||
|
|
|
@ -6,11 +6,15 @@
|
||||||
|
|
||||||
$ dune runtest missing-backend
|
$ dune runtest missing-backend
|
||||||
File "missing-backend/dune", line 3, characters 1-15:
|
File "missing-backend/dune", line 3, characters 1-15:
|
||||||
|
(inline_tests))
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
Error: No inline tests backend found.
|
Error: No inline tests backend found.
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
$ dune runtest too-many-backends
|
$ dune runtest too-many-backends
|
||||||
File "too-many-backends/dune", line 17, characters 1-15:
|
File "too-many-backends/dune", line 17, characters 1-15:
|
||||||
|
(inline_tests)
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
Error: Too many independent inline tests backends found:
|
Error: Too many independent inline tests backends found:
|
||||||
- "backend_tmb1" in _build/default/too-many-backends
|
- "backend_tmb1" in _build/default/too-many-backends
|
||||||
- "backend_tmb2" in _build/default/too-many-backends
|
- "backend_tmb2" in _build/default/too-many-backends
|
||||||
|
|
|
@ -35,6 +35,8 @@ Errors:
|
||||||
$ dune build --display short --root b foo.cma
|
$ dune build --display short --root b foo.cma
|
||||||
Entering directory 'b'
|
Entering directory 'b'
|
||||||
File "dune", line 3, characters 33-34:
|
File "dune", line 3, characters 33-34:
|
||||||
|
(modules_without_implementation x))
|
||||||
|
^
|
||||||
Warning: The following modules must be listed here as they don't have an implementation:
|
Warning: The following modules must be listed here as they don't have an implementation:
|
||||||
- y
|
- y
|
||||||
This will become an error in the future.
|
This will become an error in the future.
|
||||||
|
@ -43,10 +45,14 @@ Errors:
|
||||||
$ dune build --display short --root c foo.cma
|
$ dune build --display short --root c foo.cma
|
||||||
Entering directory 'c'
|
Entering directory 'c'
|
||||||
File "dune", line 3, characters 33-34:
|
File "dune", line 3, characters 33-34:
|
||||||
|
(modules_without_implementation x))
|
||||||
|
^
|
||||||
Error: Module X doesn't exist.
|
Error: Module X doesn't exist.
|
||||||
[1]
|
[1]
|
||||||
$ dune build --display short --root d foo.cma
|
$ dune build --display short --root d foo.cma
|
||||||
Entering directory 'd'
|
Entering directory 'd'
|
||||||
File "dune", line 3, characters 33-34:
|
File "dune", line 3, characters 33-34:
|
||||||
|
(modules_without_implementation x))
|
||||||
|
^
|
||||||
Error: Module X has an implementation, it cannot be listed here
|
Error: Module X has an implementation, it cannot be listed here
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -3,5 +3,7 @@ inappropariate place:
|
||||||
|
|
||||||
$ dune build
|
$ dune build
|
||||||
File "dune", line 1, characters 14-21:
|
File "dune", line 1, characters 14-21:
|
||||||
|
(copy_files %{read:x}/*)
|
||||||
|
^^^^^^^
|
||||||
Error: %{read:..} isn't allowed in this position
|
Error: %{read:..} isn't allowed in this position
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
$ dune runtest --display short
|
$ dune runtest --display short
|
||||||
File "dune", line 44, characters 19-42:
|
File "dune", line 44, characters 19-42:
|
||||||
|
(deps (glob_files dir-that-doesnt-exist/*)))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Warning: Directory dir-that-doesnt-exist doesn't exist.
|
Warning: Directory dir-that-doesnt-exist doesn't exist.
|
||||||
diff alias runtest
|
diff alias runtest
|
||||||
diff alias runtest
|
diff alias runtest
|
||||||
|
|
|
@ -11,6 +11,8 @@ Path that needs to be searched:
|
||||||
$ dune runtest --root search-path
|
$ dune runtest --root search-path
|
||||||
Entering directory 'search-path'
|
Entering directory 'search-path'
|
||||||
File "dune", line 3, characters 14-32:
|
File "dune", line 3, characters 14-32:
|
||||||
|
(action (run foo-does-not-exist)))
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
Error: Error: Program foo-does-not-exist not found in the tree or in PATH (context: default)
|
Error: Error: Program foo-does-not-exist not found in the tree or in PATH (context: default)
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
|
|
@ -36,12 +36,16 @@ Test some error cases
|
||||||
$ dune build --root error2
|
$ dune build --root error2
|
||||||
Entering directory 'error2'
|
Entering directory 'error2'
|
||||||
File "dune", line 2, characters 0-29:
|
File "dune", line 2, characters 0-29:
|
||||||
|
(include_subdirs unqualified)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: The 'include_subdirs' stanza cannot appear more than once
|
Error: The 'include_subdirs' stanza cannot appear more than once
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
$ dune build --root error3
|
$ dune build --root error3
|
||||||
Entering directory 'error3'
|
Entering directory 'error3'
|
||||||
File "src/gen/dune", line 1, characters 0-23:
|
File "src/gen/dune", line 1, characters 0-23:
|
||||||
|
(executable (name gen))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: This stanza is not allowed in a sub-directory of directory with (include_subdirs unqualified).
|
Error: This stanza is not allowed in a sub-directory of directory with (include_subdirs unqualified).
|
||||||
Hint: add (include_subdirs no) to this file.
|
Hint: add (include_subdirs no) to this file.
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
$ dune exec ./bar.exe
|
$ dune exec ./bar.exe
|
||||||
File "dune", line 3, characters 7-14:
|
File "dune", line 3, characters 7-14:
|
||||||
|
(name foo.bar)
|
||||||
|
^^^^^^^
|
||||||
Warning: invalid library name.
|
Warning: invalid library name.
|
||||||
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
||||||
This is temporary allowed for libraries with (wrapped false).
|
This is temporary allowed for libraries with (wrapped false).
|
||||||
|
|
|
@ -5,6 +5,8 @@ the name field can be omitted for libraries when public_name is present
|
||||||
this isn't possible for older syntax <= (1, 0)
|
this isn't possible for older syntax <= (1, 0)
|
||||||
$ dune build --root no-name-lib-syntax-1-0
|
$ dune build --root no-name-lib-syntax-1-0
|
||||||
File "dune", line 1, characters 22-25:
|
File "dune", line 1, characters 22-25:
|
||||||
|
(library (public_name foo))
|
||||||
|
^^^
|
||||||
Error: name field cannot be omitted before version 1.1 of the dune language
|
Error: name field cannot be omitted before version 1.1 of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -15,6 +17,8 @@ executable(s) stanza works the same way
|
||||||
|
|
||||||
$ dune build --root no-name-exes-syntax-1-0
|
$ dune build --root no-name-exes-syntax-1-0
|
||||||
File "dune", line 1, characters 0-36:
|
File "dune", line 1, characters 0-36:
|
||||||
|
(executables (public_names foo bar))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: name field may not be omitted before dune version 1.1
|
Error: name field may not be omitted before dune version 1.1
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -22,6 +26,8 @@ there's only a public name but it's invalid as a name
|
||||||
|
|
||||||
$ dune build --root public-name-invalid-name
|
$ dune build --root public-name-invalid-name
|
||||||
File "dune", line 1, characters 22-28:
|
File "dune", line 1, characters 22-28:
|
||||||
|
(library (public_name c.find))
|
||||||
|
^^^^^^
|
||||||
Error: invalid library name.
|
Error: invalid library name.
|
||||||
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
||||||
Public library names don't have this restriction. You can either change this public name to be a valid library name or add a "name" field with a valid library name.
|
Public library names don't have this restriction. You can either change this public name to be a valid library name or add a "name" field with a valid library name.
|
||||||
|
@ -33,6 +39,8 @@ it's just a warning
|
||||||
$ dune build --root public-name-invalid-wrapped-false
|
$ dune build --root public-name-invalid-wrapped-false
|
||||||
Info: creating file dune-project with this contents: (lang dune 1.1)
|
Info: creating file dune-project with this contents: (lang dune 1.1)
|
||||||
File "dune", line 3, characters 14-21:
|
File "dune", line 3, characters 14-21:
|
||||||
|
(public_name foo.bar))
|
||||||
|
^^^^^^^
|
||||||
Error: invalid library name.
|
Error: invalid library name.
|
||||||
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
Hint: library names must be non-empty and composed only of the following characters: 'A'..'Z', 'a'..'z', '_' or '0'..'9'.
|
||||||
Public library names don't have this restriction. You can either change this public name to be a valid library name or add a "name" field with a valid library name.
|
Public library names don't have this restriction. You can either change this public name to be a valid library name or add a "name" field with a valid library name.
|
||||||
|
|
|
@ -9,6 +9,8 @@ In expands to a file name, and registers this as a dependency.
|
||||||
$ dune build --root dune @test-dep
|
$ dune build --root dune @test-dep
|
||||||
Entering directory 'dune'
|
Entering directory 'dune'
|
||||||
File "dune", line 13, characters 17-47:
|
File "dune", line 13, characters 17-47:
|
||||||
|
(echo "%{path:file-that-does-not-exist}\n")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: %{path:..} was renamed to '%{dep:..}' in the 1.0 version of the dune language
|
Error: %{path:..} was renamed to '%{dep:..}' in the 1.0 version of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -20,6 +22,8 @@ This form does not exist, but displays an hint:
|
||||||
$ dune build --root dune-invalid @test-path-no-dep
|
$ dune build --root dune-invalid @test-path-no-dep
|
||||||
Entering directory 'dune-invalid'
|
Entering directory 'dune-invalid'
|
||||||
File "dune", line 7, characters 17-54:
|
File "dune", line 7, characters 17-54:
|
||||||
|
(echo "%{path-no-dep:file-that-does-not-exist}\n")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: %{path-no-dep:..} was deleted in version 1.0 of the dune language
|
Error: %{path-no-dep:..} was deleted in version 1.0 of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -53,5 +57,7 @@ This form does not exist, but displays an hint:
|
||||||
$ dune build --root jbuild-invalid @test-dep
|
$ dune build --root jbuild-invalid @test-dep
|
||||||
Entering directory 'jbuild-invalid'
|
Entering directory 'jbuild-invalid'
|
||||||
File "jbuild", line 5, characters 16-37:
|
File "jbuild", line 5, characters 16-37:
|
||||||
|
(action (cat ${dep:generated-file}))))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: ${dep:..} is only available since version 1.0 of the dune language
|
Error: ${dep:..} is only available since version 1.0 of the dune language
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -3,6 +3,8 @@ public libraries may not have private dependencies
|
||||||
$ dune build --display short --root private-dep
|
$ dune build --display short --root private-dep
|
||||||
Entering directory 'private-dep'
|
Entering directory 'private-dep'
|
||||||
File "dune", line 8, characters 12-22:
|
File "dune", line 8, characters 12-22:
|
||||||
|
(libraries privatelib)
|
||||||
|
^^^^^^^^^^
|
||||||
Error: Library "privatelib" is private, it cannot be a dependency of a public library.
|
Error: Library "privatelib" is private, it cannot be a dependency of a public library.
|
||||||
You need to give "privatelib" a public name.
|
You need to give "privatelib" a public name.
|
||||||
ocamldep .publiclib.objs/publiclib.ml.d
|
ocamldep .publiclib.objs/publiclib.ml.d
|
||||||
|
@ -27,6 +29,8 @@ Unless they introduce private runtime dependencies:
|
||||||
$ dune build --display short --root private-runtime-deps
|
$ dune build --display short --root private-runtime-deps
|
||||||
Entering directory 'private-runtime-deps'
|
Entering directory 'private-runtime-deps'
|
||||||
File "jbuild", line 16, characters 20-31:
|
File "jbuild", line 16, characters 20-31:
|
||||||
|
(preprocess (pps (private_ppx)))
|
||||||
|
^^^^^^^^^^^
|
||||||
Error: Library "private_runtime_dep" is private, it cannot be a dependency of a public library.
|
Error: Library "private_runtime_dep" is private, it cannot be a dependency of a public library.
|
||||||
You need to give "private_runtime_dep" a public name.
|
You need to give "private_runtime_dep" a public name.
|
||||||
ocamlc .private_ppx.objs/private_ppx.{cmi,cmo,cmt}
|
ocamlc .private_ppx.objs/private_ppx.{cmi,cmo,cmt}
|
||||||
|
|
|
@ -4,6 +4,8 @@ that ${@} is not quoted and doesn't contain exactly 1 element
|
||||||
$ dune build --root bad x
|
$ dune build --root bad x
|
||||||
Entering directory 'bad'
|
Entering directory 'bad'
|
||||||
File "dune", line 3, characters 27-35:
|
File "dune", line 3, characters 27-35:
|
||||||
|
(action (with-stdout-to %{targets} (echo foo))))
|
||||||
|
^^^^^^^^
|
||||||
Error: Variable %{targets} expands to 2 values, however a single value is expected here. Please quote this atom.
|
Error: Variable %{targets} expands to 2 values, however a single value is expected here. Please quote this atom.
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -27,10 +29,14 @@ The targets should only be interpreted as a single path when quoted
|
||||||
|
|
||||||
$ dune build @quoted --root filename-space
|
$ dune build @quoted --root filename-space
|
||||||
File "dune", line 4, characters 17-18:
|
File "dune", line 4, characters 17-18:
|
||||||
|
(action (echo %{read:foo bar.txt})))
|
||||||
|
^
|
||||||
Error: This character is not allowed inside %{...} forms
|
Error: This character is not allowed inside %{...} forms
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
$ dune build @unquoted --root filename-space
|
$ dune build @unquoted --root filename-space
|
||||||
File "dune", line 4, characters 17-18:
|
File "dune", line 4, characters 17-18:
|
||||||
|
(action (echo %{read:foo bar.txt})))
|
||||||
|
^
|
||||||
Error: This character is not allowed inside %{...} forms
|
Error: This character is not allowed inside %{...} forms
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
$ echo '(jbuild_version 1)' > dune
|
$ echo '(jbuild_version 1)' > dune
|
||||||
$ dune build
|
$ dune build
|
||||||
File "dune", line 1, characters 0-18:
|
File "dune", line 1, characters 0-18:
|
||||||
|
(jbuild_version 1)
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
Error: 'jbuild_version' was deleted in version 1.0 of the dune language
|
Error: 'jbuild_version' was deleted in version 1.0 of the dune language
|
||||||
[1]
|
[1]
|
||||||
$ rm -f dune
|
$ rm -f dune
|
||||||
|
@ -12,6 +14,8 @@
|
||||||
$ echo '(executable (name x) (link_executables false))' > dune
|
$ echo '(executable (name x) (link_executables false))' > dune
|
||||||
$ dune build
|
$ dune build
|
||||||
File "dune", line 1, characters 21-45:
|
File "dune", line 1, characters 21-45:
|
||||||
|
(executable (name x) (link_executables false))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Error: 'link_executables' was deleted in version 1.0 of the dune language
|
Error: 'link_executables' was deleted in version 1.0 of the dune language
|
||||||
[1]
|
[1]
|
||||||
$ rm -f dune
|
$ rm -f dune
|
||||||
|
@ -19,6 +23,8 @@
|
||||||
$ echo '(alias (name x) (deps x) (action (run %{<})))' > dune
|
$ echo '(alias (name x) (deps x) (action (run %{<})))' > dune
|
||||||
$ dune build
|
$ dune build
|
||||||
File "dune", line 1, characters 40-42:
|
File "dune", line 1, characters 40-42:
|
||||||
|
(alias (name x) (deps x) (action (run %{<})))
|
||||||
|
^^
|
||||||
Error: %{<} was deleted in version 1.0 of the dune language.
|
Error: %{<} was deleted in version 1.0 of the dune language.
|
||||||
Use a named dependency instead:
|
Use a named dependency instead:
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,14 @@ are readable.
|
||||||
|
|
||||||
$ dune build --root b
|
$ dune build --root b
|
||||||
File "dune", line 4, characters 12-17:
|
File "dune", line 4, characters 12-17:
|
||||||
|
(libraries (lib)))
|
||||||
|
^^^^^
|
||||||
These parentheses are no longer necessary with dune, please remove them.
|
These parentheses are no longer necessary with dune, please remove them.
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
$ dune build --root c
|
$ dune build --root c
|
||||||
File "dune", line 3, characters 7-14:
|
File "dune", line 3, characters 7-14:
|
||||||
|
(deps (x y z)))
|
||||||
|
^^^^^^^
|
||||||
These parentheses are no longer necessary with dune, please remove them.
|
These parentheses are no longer necessary with dune, please remove them.
|
||||||
[1]
|
[1]
|
||||||
|
|
|
@ -2,6 +2,8 @@ jbuild still discovers workspaces as usual
|
||||||
|
|
||||||
$ jbuilder build --root jbuilder-default-name
|
$ jbuilder build --root jbuilder-default-name
|
||||||
File "jbuild-workspace", line 1, characters 10-24:
|
File "jbuild-workspace", line 1, characters 10-24:
|
||||||
|
(context (does-not-exist))
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
Error: Unknown constructor does-not-exist
|
Error: Unknown constructor does-not-exist
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
@ -14,6 +16,8 @@ dune uses a versioned file. If the version is missing, then we get an error.
|
||||||
|
|
||||||
$ dune build --root dune-no-version
|
$ dune build --root dune-no-version
|
||||||
File "dune-workspace", line 1, characters 0-19:
|
File "dune-workspace", line 1, characters 0-19:
|
||||||
|
(context (default))
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
Error: Invalid first line, expected: (lang <lang> <version>)
|
Error: Invalid first line, expected: (lang <lang> <version>)
|
||||||
[1]
|
[1]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue