OCaml Changelog
RSSRead the latest releases and updates from the OCaml ecosystem.
We're excited to announce the release of Dune-release 2.0.0!
This release brings support for putting your .opam
files in a opam/
directory. If your project contains dozens of packages, you'll be able to
generate them into the opam/
folder starting with Dune 3.8 using (opam_file_location inside_opam_directory)
in your dune-project
.
Another notable change is the removal of delegates. Users of dune-release who
want to publish their packages to another platform than GitHub can now use the
dune-release delegate-info
and use the output to build their own publication
workflows.
See full changelog
Added
- Adopt the OCaml Code of Conduct (#473, @rikusilvola)
- Added support for projects that have their OPAM files in the
opam/
subdirectory. (#466, @Leonidas-from-XIV)
Changed
- Running
dune-release check
now attempts to discover and parse the change log, and a new flag--skip-change-log
disables this behaviour. (#458, @gridbugs) - List the main package and amount of subpackages when creating the PR to avoid very long package lists in PRs (#465, @emillon)
Fixed
- Avoid collision between branch and tag name. Tag detection got confused when branch was named the same as tag. Now it searches only for tag refs, instead of all refs. (#452, @3Rafal)
- Fix project name detection from
dune-project
. The parser could get confused when opam file generation is used. Now it only considers the first(name X)
in the file. (#445, @emillon)
Removed
- Remove support for delegates.
Previous users of this feature should now use
dune-release delegate-info
and wrap dune-release calls in a script. See #188 for details. (#428, @NathanReb) - Removed support for the OPAM 1.2.2 client. This means
dune-release
expects theopam
binary to be version 2.0 at least. (#406, #411, @Leonidas-from-XIV)
We've released OCaml LSP 1.16.2 with a fix that was introduced in 1.16.1 that prevented users from using preprocessor such as CPPO.
See full changelog
Fixes
- Fix file permissions used when specifying output files of pp and ppx. (ocaml-lsp#1153)
We're thrilled to announce the release of OCaml LSP 1.16.1! π
This release comes with new "Extract local" and "Extract function" code actions to easily refactor your code.
We've also disabled code lenses by default following user feedback. You can follow the discussion on GitHub.
This release is also the first OCaml LSP release to use upstream Merlin. Among other things, this means that it is compatible with all the OCaml versions supported by Merlin: currently OCaml 4.14 and 5.0.0.
We're also releasing numerous bug fixes, including:
- A fix to the integration with Dune RPC on Windows, which, alongside Dune 3.9.0, makes OCaml LSP report Dune errors to the editors with Dune watch mode enabled.
- Minor improvements to the Odoc <-> Markdown conversion to return better function documentation on the editor.
And much more! Read the full changelog for a complete list of improvements and bug fixes.
See full changelog
Features
- Add "Remove type annotation" code action. (#1039)
- Support settings through
didChangeConfiguration
notification (#1103) - Add "Extract local" and "Extract function" code actions. (#870)
- Depend directly on
merlin-lib
4.9 (#1070)
Fixes
-
Support building with OCaml 5.0 and 5.1 (#1150)
-
Disable code lens by default. The support can be re-enabled by explicitly setting it in the configuration. (#1134)
-
Fix initilization of
ocamlformat-rpc
in some edge cases when ocamlformat is initialized concurrently (#1132) -
Kill unnecessary
$ dune ocaml-merlin
with SIGTERM rather than SIGKILL (#1124) -
Refactor comment parsing to use
odoc-parser
andcmarkit
instead ofoctavius
andomd
(#1088)This allows users who migrated to omd 2.X to install ocaml-lsp-server in the same opam switch.
We also slightly improved markdown generation support and fixed a couple in the generation of inline heading and module types.
-
Allow opening documents that were already open. This is a workaround for neovim's lsp client (#1067)
-
Disable type annotation for functions (#1054)
-
Respect codeActionLiteralSupport capability (#1046)
-
Fix a document syncing issue when utf-16 is the position encoding (#1004)
-
Disable "Type-annotate" action for code that is already annotated. (#1037, fixes #1036)
-
Fix semantic highlighting of long identifiers when using preprocessors (#1049, fixes #1034)
-
Fix the type of DocumentSelector in cram document registration (#1068)
-
Accept the
--clientProcessId
command line argument. (#1074) -
Accept
--port
as a synonym for--socket
. (#1075) -
Fix connecting to dune rpc on Windows. (#1080)
We've released Dune 3.8.2 with a few bug fixes.
See full changelog
- Switch back to threaded console for all systems; fix unresponsive console on Windows (dune#7906, @nojb)
- Respect
-p
/--only-packages
formelange.emit
artifacts (dune#7849, @anmonteiro) - Fix scanning of Coq installed files (@ejgallego, reported by @palmskog, dune#7895 , fixes dune#7893)
- Fix RPC buffer corruption issues due to multi threading. This issue was only reproducible with large RPC payloads (dune#7418)
- Fix printing errors from excerpts whenever character offsets span multiple lines (dune#7950, fixes dune#7905, @rgrinberg)
We've just released a patch version of Dune to fix regressions introduced in Dune 3.8.0.
In particular, we've reverted some cross-compilation improvements that caused build failures when using ppx_runtime_libraries
and we'll revisit them in a future version of Dune.
See full changelog
- Fix a crash when using a version of Coq < 8.13 due to the native compiler
config variable being missing. We now explicitly default to
(mode vo)
for these older versions of Coq. (dune#7847, fixes dune#7846, @Alizter) - Duplicate installed Coq theories are now allowed with the first appearing in COQPATH being preferred. This is inline with Coq's loadpath semantics. This fixes an issue with install layouts based on COQPATH such as those found in nixpkgs. (dune#7790, @Alizter)
- Revert dune#7415 and dune#7450 (Resolve
ppx_runtime_libraries
in the target context when cross compiling) (dune#7887, fixes dune#7875, @emillon)
Feedback on this post is welcomed on Discuss!
We are pleased to announce the patch release of opam 2.1.5.
This opam release consists of backported bug & security fixes:
- Security issue: fix opam installing packages without checking their checksum when the local cache is corrupted in some case (#5538), you can find more information there.
- Variables are now expanded in build-env (as for setenv) (#5352)
- Correctly handle empty environment variable additions (#5350)
- Skip empty environment variable additions (#5350)
- Fix passing
archive-mirrors
field from init config file to config (#5315) - git, hg: Use the full SHA1 revision instead of just the 8 first characters (#5342)
Opam installation instructions (unchanged):
-
From binaries: run
bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh) --version 2.1.5"
or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run
opam init --reinit -ni
to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script. -
From source, using opam:
opam update; opam install opam-devel
(then copy the opam binary to your PATH as explained, and don't forget to run
opam init --reinit -ni
to enable sandboxing if you had version 2.0.0~rc manually installed or to update your sandbox script) -
From source, manually: see the instructions in the README.
We hope you enjoy this new minor version, and remain open to bug reports and suggestions.
See full changelog
- [BUG] Variables are now expanded in build-env (as for setenv) [#5352 @dra27]
- Correctly handle empty environment variable additions [#5350 @dra27]
- Skip empty environment variable additions [#5350 @dra27]
- [BUG] Fix passing
archive-mirrors
field from init config file to config [#5315 @hannesm] - git, hg: Use the full SHA1 revision instead of just the 8 first characters [#5342 @reynir]
- [BUG] Fix opam installing packages without checking their checksum when the local cache is corrupted in some case [#5538 @kit-ty-kate]
We are pleased to announce the release of Merlin 4.9 for OCaml 4.14.1 and 5.0.
This maintenance release brings multiple bug fixes and improvements. In particular we identified and patched an important memory consumption issue that could greatly affect Merlinβs performance in heavily functorized projects.
See full changelog
- merlin binary
- Allow monadic IO in dot protocol (#1581)
- Add a
scope
option to theoccurrences
command in preparation for the upcomingproject-wide-occurrences
feature (#1596) - Construct bool-typed holes as
false
instead oftrue
in theconstruct
command, for consistency (#1599). - Add a hook to configure system command for spawning ppxes when Merlin is used as a library. (#1585)
- Implement an all-or-nothing cache for the PPX phase (#1584)
- Cleanup functors caches when backtracking, to avoid memory leaks (#1609, fixes #1529 and ocaml-lsp#1032)
- Fix
construct
results ordering for sum types sand poly variants (#1603) - Fix object method completion not working (#1606, fixes #1575)
- Improve context detection for package types (#1608, fixes #1607)
- Fix incorrect locations for string literals (#1574)
- Fixed an issue that caused
errors
to erroneously alert about missingcmi
files (#1577) - Prevent destruct from crashing on closed variant types (#1602, fixes #1601)
- Improve longident parsing (#1612, fixes #945)
- editor modes
- emacs: call the user's configured completion UI in
merlin-construct
(#1598)
- emacs: call the user's configured completion UI in
- test suite
- Add missing dependency to a test using ppxlib (#1583)
- Add tests for the new PPX phase cache (#1584)
- Add and update tests for
construct
ordering (#1603)
The dune team is pleased to announce the release of Dune 3.8.0.
It is now available in opam-repository
. As usual, it should always be safe to upgrade your dune
package: new features and deprecations are only available if you upgrade the language version in your dune-project
files.
π Spotlight Features
- Dune
concurrent
action
Dune 3.8.0 introduced the new concurrent
action. You can now use it instead of the progn
action to execute actions concurrently.
For instance:
(rule
(action
(concurrent
(write-file A "I am file A.\n")
(write-file B "I am certainly file B.\n")
(write-file C "I am most certainly file C.\n"))))
will write to files A
, B
and C
concurrently.
- Support for
.mld
files
In Dune 3.7.0, we introduced version 0.3
of the mdx
stanza, which came with support for .mld
files.
In Dune 3.8.0, .mld
files are now supported by default with version 0.4
of the mdx
stanza!
Have a look at this diff to see how to migrate your code to the new stanza version.
See full changelog
Added
-
Introduce mdx stanza 0.4 requiring mdx >= 2.3.0 which updates the default list of files to include
*.mld
files (#7582, @Leonidas-from-XIV) -
Allow
(stdlib ...)
to be used with(wrapped false)
in library stanzas (#7139, @anmonteiro). -
Allow the main module of a library with
(stdlib ...)
to depend on other libraries (#7154, @anmonteiro). -
Support
(link_flags ...)
in(cinaps ...)
stanza. (#7423, fixes #7416, @nojb) -
Allow
(package ...)
in any position within(rule ...)
stanza (#7445, @Leonidas-from-XIV) -
Added a new user action
(concurrent )
which is like(progn )
but runs the actions concurrently. (#6933, @Alizter) -
Accept the Ordered Set Language for the
modes
field inlibrary
stanzas (#6611, @anmonteiro). -
Allow parallel execution of inline tests partitions (#7012, @hhugo)
-
Add the
--display-separate-messages
flag to separate the error messages produced by commands with a blank line. (#6823, fixes #6158, @esope) -
Add
--watch-exclusions
to Dune build options (#7216, @jonahbeckford) -
Adds support for loading plugins in toplevels (#6082, fixes #6081, @ivg, @richardlford)
-
Introduce a
public_headers
field on libraries. This field is likeinstall_c_headers
, but it allows to choose the extension and choose the paths for the installed headers. (#7512, @rgrinberg) -
Dune can now detect Coq theories from outside the workspace. This allows for composition with installed theories (not necessarily installed with Dune). (#7047, @Alizter, @ejgallego)
-
Added a
--no-build
option todune coq top
for avoiding rebuilds (#7380, fixes #7355, @Alizter) -
Add a
coqdoc_flags
field to thecoq.theory
stanza allowing the user to pass extra arguments tocoqdoc
. (#7676, fixes #7954 @Alizter) -
Preliminary support for Coq compiled intefaces (
.vos
files) enabled via(mode vos)
incoq.theory
stanzas. This can be used in combination withdune coq top
to obtain fast re-building of dependencies (with no checking of proofs) prior to stepping into a file. (#7406, @rlepigre) -
Read
pkg-config
arguments from thePKG_CONFIG_ARGN
environment variable (#1492, #7734, @anmonteiro) -
Use
$PKG_CONFIG
, when set, to find thepkg-config
binary (#7469, fixes #2572, @anmonteiro)
Changed
-
Bootstrap: remove reliance on shell. Previously, we'd use the shell to get the number of processors. (#7274, @rgrinberg)
-
Non-user proccesses such as version control or config checking are now run silently. (#6994, fixes #4066, @Alizter)
-
Bytecode executables built for JSOO are linked with
-noautolink
and no longer depend on the shared stubs of their dependent libraries (#7156, @nojb) -
Always include
opam
files in the generated.install
file. Previously, it would not be included whenever(generate_opam_files true)
was set and the.install
file wasn't yet generated. (#7547, @rgrinberg)
Deprecated
-
Modules that were declared in
(modules_without_implementation)
,(private_modules)
or(virtual_modules)
but not declared in(modules)
will cause Dune to emit a warning which will become an error in 3.9. (#7608, fixes #7026, @Alizter) -
Coq language versions less 0.8 are deprecated, and will be removed in an upcoming Dune version. All users are required to migrate to
(coq lang 0.8)
which provides the right semantics for theories that have been globally installed, such as those coming from opam (@ejgallego, @Alizter)
Fixed
-
Find
pps
dependencies in the host context when cross-compiling, (#7415, fixes #4156, @anmonteiro) -
Fix plugin loading with findlib. The functionality was broken in 3.7.0. (#7556, @anmonteiro)
-
Load the host context
findlib.conf
when cross-compiling (#7428, fixes #1701, @rgrinberg, @anmonteiro) -
Allow overriding the
ocaml
binary with findlib configuration (#7648, @rgrinberg) -
Resolve
ppx_runtime_libraries
in the target context when cross compiling (#7450, fixes #2794, @anmonteiro) -
Fix
dune install
when cross compiling (#7410, fixes #6191, @anmonteiro, @rizo) -
Fix string quoting in the json file written by
--trace-file
(#7773, @rleshchinskiy) -
Correctly set
MANPATH
indune exec
. Previously, we would use thebin/
directory of the context. (#7655, @rgrinberg) -
merlin: ignore instrumentation settings for preprocessing. (#7606, fixes #7465, @Alizter)
-
When a rule's action is interrupted, delete any leftover directory targets. This is consistent with how we treat file targets. (#7564, @rgrinberg)
-
Fix dune crashing on MacOS in watch mode whenever
$PATH
contains$PWD
(#7441, fixes #6907, @rgrinberg) -
Dune in watch mode no longer builds concurrent rules in serial (#7395 @rgrinberg, @jchavarri)
-
dune coq top
now correctly respects the project root when called from a subdirectory. However, absolute filenames passed todune coq top
are no longer supported (due to being buggy) (#7357, fixes #7344, @rlepigre and @Alizter) -
RPC: Ignore SIGPIPE when clients suddenly disconnect (#7299, #7319, fixes #6879, @rgrinberg)
-
Always clean up the UI on exit. (#7271, fixes #7142 @rgrinberg)
-
Bootstrap: correctly detect the number of processors by allowing
nproc
to be looked up in$PATH
(#7272, @Alizter) -
Speed up file copying on macos by using
clonefile
when available (@rgrinberg, #7210) -
Support commands that output 8-bit and 24-bit colors in the terminal (#7188, @Alizter)
-
Speed up rule generation for libraries and executables with many modules (#7187, @jchavarri)
-
Do not re-render UI on every frame if the UI doesn't change (#7186, fix #7184, @rgrinberg)
-
Make
coq_db
creation in scope lazy (@ejgallego, #7133) -
dune install now respects --display quiet mode (#7116, fixes #4573, fixes #7106, @Alizter)
-
Stub shared libraries (
dllXXX_stubs.so
) in Dune-installed libraries could not be used as dependencies of libraries in the workspace (eg when compiling to bytecode and/or Javascript). This is now fixed. (#7151, @nojb) -
Fix regression where Merlin was unable to handle filenames with uppercase letters under Windows. (#7577, @nojb)
-
On nix+macos, pass
-f
to the codesign hook to avoid errors when the binary is already signed (#7183, fixes #6265, @greedy) -
Fix bug where RPC clients built with dune-rpc-lwt would crash when closing their connection to the server (#7581, @gridbugs)
-
Fix RPC server on Windows (used for OCaml-LSP). (#7666, @nojb)
Following the release of UTop 2.12.0 a few days ago, we released UTop 2.12.1, a patch release that fixes a regression with unit qualification.
This release also includes an implementation of completion-at-point
for Emacs.
See full changelog
- Fix regression with unit qualification when a
Unit
module is in scope with no()
constructor (fix regression with unit qualificationΒ ocaml-community/utop#429, fixes regression with qualifying ()Β ocaml-community/utop#428, @emillon) - emacs: add completion-at-point implementation (Add completion-at-point implementation ocaml-community/utop#261Β ocaml-community/utop#406, fixes utop emacs completion-at-point-functions support?Β ocaml-community/utop#261, @j-shilling)
UTop 2.12.0 is out with support for the upcoming release of OCaml 5.1!
This release also fixes an issue that prevented users to redefine the ()
constructor.
You can now safely run type t = () of unit
and continue using your top-level session.
See full changelog
-
Add support for OCaml 5.1 (#421, @emillon)
-
Mark
prompt_continue
,prompt_comment
,smart_accept
,new_prompt_hooks
,at_new_prompt
as deprecated (they have been documented as such since 2012 and most of them are ignored) (#415, @emillon) -
Qualify
()
constructor in generated expressions. (#418, fixes #417, @emillon)
We're pleased to announce the release of Mdx 2.3.0!
This release comes with support for mld
files and changes the parser used
by the toplevel, which allows Camlp5's parser to be used with MDX.
π Spotlight Feature
Starting in MDX 2.3.0, you can now execute code blocks in your .mld
files! π
As a reminder, .mld
files are text files similar to Markdown, but instead of
using the Markdown markup language, they use the Ocamldoc markdown language - as
is used in .mli
files. .mld
are typically used to write manuals with
odoc.
To run mdx on .mld
files, start by enabling mdx
in your dune-project
:
(using mdx 0.3)
Then list your .mld
files in the mdx
stanza in your dune
:
(mdx
(files index.mld))
Now if you put a code block in index.mld
, it will be executed when running dune test
and if dune will suggest to promote the output. For instance, if you run dune test
with this index.mld
:
Here's an example code block in a [.mld] file:
{[
# List.map (fun x -> x * x) [(1 + 9); 2; 3; 4];;
]}
dune test
will return:
---+++@@@@ Here's an example code block in a [.mld] file:
{[
# List.map (fun x -> x * x) [(1 + 9); 2; 3; 4];;
+ - : int list = [100; 4; 9; 16]
]}
You can run dune promote
to accept the change.
You can see a complete demo of this here.
Now you can keep the code blocks in your manual up-to-date even when your API changes!
See full changelog
Added
- Added support for
mld
files (#423, @jonludlam)
Changed
- Switch to using the parser that toplevel uses (found in a mutable
ref
, instead of always the official OCaml parser). This allows Camlp5's parser to be used with MDX. (#417, @chetmurthy)
We are excited to announce the release of Dune 3.7.1, which brings a few bug fixes from the recent 3.7.0 release:
- Resolved watch mode issue for executables on macOS: We have addressed a problem with the recently introduced watch mode for executables that was causing segmentation faults on macOS. Users can now enjoy a stable watch mode without unexpected crashes on macOS.
- Fixed "Too many links" error on Windows: We have fixed an issue that caused Dune build failures with a "Too many links" error on Windows when using Dune cache.
... and a few more, you can consult the changelog for a full list of bug fixes.
See full changelog
-
Fix segfault on MacOS when dune was being shutdown while in watch mode. (#7312, fixes #6151, @gridbugs, @emillon)
-
Fix preludes not being recorded as dependencies in the
(mdx)
stanza (#7109, fixes #7077, @emillon). -
Pass correct flags when compiling
stdlib.ml
. (#7241, @emillon) -
Handle "Too many links" errors when using Dune cache on Windows. The fix in 3.7.0 for this same issue was not effective due to a typo. (#7472, @nojb)
We are pleased to announce the release of OCamlFormat 0.25.1! This release contains several bug fixes, changes, and new features.
The library is also available through the ocamlformat-lib
package on opam. The ocamlformat
package only contains the binary.
We would like to thank all contributors for their valuable contributions to this release. Please see the complete changelog for more details.
We hope you enjoy this release and continue to find OCamlFormat a valuable tool for your OCaml projects. You can download ocamlformat.0.25.1
from the opam repository or GitHub.
Thank you for your support and feedback, and please don't hesitate to reach out if you have any questions or issues.
The OCamlFormat team
π Spotlight Feature
- New
if-then-else
andbreak-cases
options
Starting in OCamlFormat 0.25.1, we've also added new values to the if-then-else
and break-cases
options. Now you can use the vertical
value to format these expressions in a more readable and consistent way.
These options are not set by default but you can try them out by customizing your .ocamlformat
file as usual.
Here are a few examples:
if-then-else = vertical
- let epi = if Option.is_some next then fmt "@\n" else fmt_opt epi in
+ let epi =
+ if Option.is_some next then
+ fmt "@\n"
+ else
+ fmt_opt epi
+ in
- if tree_depth tree > depth then node_depth_truncate_ depth node
- else (* already short enough; don't bother truncating *)
+ if tree_depth tree > depth then
+ node_depth_truncate_ depth node
+ else
+ (* already short enough; don't bother truncating *)
node
break-cases = vertical
-| Ok (`Version | `Help) -> Stdlib.exit 0
-| Error _ -> Stdlib.exit 1
+| Ok (`Version | `Help) ->
+ Stdlib.exit 0
+| Error _ ->
+ Stdlib.exit 1
- ~f:(function `Int _ | `Float _ -> true | _ -> false)
+ ~f:(function
+ | `Int _
+ | `Float _ ->
+ true
+ | _ ->
+ false)
- Formatting .mld files
Formatting .mld
files as odoc documentation files is now possible! This will make it much easier to maintain high-quality documentation alongside your OCaml code.
This feature is only available in ocamlformat
for now, but keep an eye on the future dune
releases to know when dune fmt
will be able to format your .mld
files!
- Various improvements and bugfixes
We fixed various issues related to indentation, alignment, and comments positioning.
Here are a few examples:
- More consistent indentation inside a parenthesized expression:
| [ node ] ->
( (if List.mem node ~set:integer_graph.(node)
- then Has_loop [ numbering.forth.(node) ]
- else No_loop numbering.forth.(node))
+ then Has_loop [ numbering.forth.(node) ]
+ else No_loop numbering.forth.(node))
, component_edges.(component) )
(let open Memo.O in
- let+ w = Dune_rules.Workspace.workspace () in
- Dune_engine.Execution_parameters.builtin_default
- |> Dune_rules.Workspace.update_execution_parameters w);
+ let+ w = Dune_rules.Workspace.workspace () in
+ Dune_engine.Execution_parameters.builtin_default
+ |> Dune_rules.Workspace.update_execution_parameters w);
- More consistent formatting of module expressions:
- module Sel = (val if is_osx () then (module Mac)
- else if Sys.unix then (module Unix)
- else (module Fail) : Unix_socket)
+ module Sel =
+ (val if is_osx () then (module Mac)
+ else if Sys.unix then (module Unix)
+ else (module Fail)
+ : Unix_socket)
See full changelog
Library
- The declaration of options is a regular module instead of a functor. (#2193, @EmileTrotignon)
Bug fixes
- Fix indentation when ocamlformat is disabled on an expression (#2129, @gpetiot)
- Reset max-indent when the
max-indent
option is not set (#2131, @hhugo, @gpetiot) - Add missing parentheses around immediate objects having attributes attached in 4.14 (#2144, @gpetiot)
- Fix dropped comment attached to the identifier of an open-expression (#2155, @gpetiot)
- Correctly format chunks of file in presence of
enable
/disable
floating attributes (#2156, @gpetiot) - Remove abusive normalization in docstrings references (#2159, #2162, @EmileTrotignon)
- Fix parentheses around symbols in if-then-else branches (#2169, @gpetiot)
- Preserve position of comments around variant identifiers (#2179, @gpetiot)
- Fix parentheses around symbol identifiers (#2185, @gpetiot)
- Fix alignment inconsistency between let-binding and let-open (#2187, @gpetiot)
- Fix reporting of operational settings origin in presence of profiles (#2188, @EmileTrotignon)
- Fix alignment inconsistency of if-then-else in apply (#2203, @gpetiot)
- Fix automated Windows build (#2205, @nojb)
- Fix spacing between recursive module bindings and recursive module declarations (#2217, @gpetiot)
- ocamlformat-rpc: use binary mode for stdin/stdout (#2218, @rgrinberg)
- Fix interpretation of glob pattern in
.ocamlformat-ignore
under Windows (#2206, @nojb) - Remove conf mutability, and correctly display the conventional profile when using print-config (#2233, @EmileTrotignon)
- Preserve position of comments around type alias (#2239, @EmileTrotignon)
- Preserve position of comments around constructor record (#2237, @EmileTrotignon)
- Preserve position of comments around external declaration strings (#2238, @EmileTrotignon, @gpetiot)
- Preserve position of comments around module pack expressions (#2234, @EmileTrotignon, @gpetiot)
- Correctly parenthesize array literals with attributes in argument positions (#2250, @ccasin)
- Janestreet: Fix indentation of functions passed as labelled argument (#2259, @Julow)
Changes
- Indent 2 columns after
initializer
keyword (#2145, @gpetiot) - Preserve syntax of generative modules (
(struct end)
vs()
) (#2135, #2146, @trefis, @gpetiot) - Preserve syntax of module unpack with type constraint (
((module X) : (module Y))
vs(module X : Y)
) (#2136, @trefis, @gpetiot) - Normalize location format for warning and error messages (#2139, @gpetiot)
- Preserve syntax and improve readability of indexop-access expressions (#2150, @trefis, @gpetiot)
- Break sequences containing indexop-access assignments
- Remove unnecessary parentheses around indices
- Mute warnings for odoc code blocks whose syntax is not specified (#2151, @gpetiot)
- Improve formatting of odoc links (#2152, @gpetiot)
- Preserve sugared extension node attached to an
if
carrying attributes (#2167, @trefis, @gpetiot) - Remove unnecessary parentheses around partially applied infix operators with attributes (#2198, @gpetiot)
- JaneStreet profile: doesn't align infix ops with open paren (#2204, @gpetiot)
- Re-use the type let_binding from the parser instead of value_binding, improve the spacing of let-bindings regarding of having extension or comments (#2219, @gpetiot)
- The
ocamlformat
package now only contains the binary, the library is available through theocamlformat-lib
package (#2230, @gpetiot)
New features
- Add a
break-colon
option to decide whether to break before or after the:
symbol in value binding declarations and type constraints. This behavior is no longer ensured byocp-indent-compat
. (#2149, @gpetiot) - Format
.mld
files as odoc documentation files (#2008, @gpetiot) - New value
vertical
for optionif-then-else
(#2174, @gpetiot) - New value
vertical
for optionbreak-cases
(#2176, @gpetiot) - New value
wrap-or-vertical
for optionbreak-infix
that only wraps high precedence infix ops (#1865, @gpetiot)
We are pleased to announce the release of Merlin 4.8 for OCaml 4.14.1 and 5.0.
This maintenance release brings multiple bug fixes and improvements to document fetching, jump-to-definition and type-on-hover for records' labels.
See full changelog
- merlin binary
- Update internal typer to match OCaml 4.14.1 release (#1557)
- Improve type-enclosing behaviour when used on records' labels (#1565, fixes #1564)
- Restore compatibility with some OCaml compiler's debug flags that were incorrectly rejected by Merlin (#1556)
- Traverse aliases when jumping to declaration. This matches jump-to-definition's behavior (#1563)
- Improve locate's behavior in various ill-typed expressions (#1546, fixes #1567 and partially #1543)
- Correctly traverse patterns when looking for docs in the typedtree (#1572)
- Get documentation when the declaration or definition is selected (#1542, fixes #1540)
- On Windows, change to a harmless directory when launching server to avoid locking down current directory (#1569, fixes #1474)
- test suite
- Add multiple tests for locate over ill-typed expressions (#1546)
- Add non-regression tests for other fixes in this release
The dune team is pleased to announce the release of Dune 3.7.0.
As in the previous announce, here is a changelog split in several parts: changes to the dune
executable itself (new commands or options, etc) and changes to the dune language. Most of the changes to the latter are only enabled when you opt-in to the new version by specifying (lang dune 3.7)
in the corresponding dune-project
file. In other words, it should always be safe to upgrade the dune
package.
π Spotlight Features
- Watch mode for executables
Dune 3.7 now supports watch mode for executables! π
It works just as you'd expect, if you define an executable, you can run it with
dune exec -w my-executable
It will interrupt the process when a file change and re-start the application.
For a practical example of the workflows enabled by watch-mode, check this demo of a live reload for web development:
- Native Windows Polling
Starting from Dune 3.7, Dune watch mode is now available on Windows!
@yams-yams and @nojb
from Lexifi have been working on integrating Windows native polling API with
Dune to supplement the support for fswatch
, which is unavailable on Windows.
Windows users can now run dune build -w
out of the box!
- Qualified Subdirs
It's quite common to organise your code into subdirectories to separate
components. Until now, you could do this by including
(include_subdirs unqualified)
in your dune files, but this wasn't completely
satisfying since all of your modules were available in the top-level. If you
wanted to expose modules in subdirectories under another module, you had to
create a separate library, which was.. quite the overhead.
Dune 3.7 brings support for the highly-anticipated qualified sub-directories.
You can now write (include_subdirs qualified)
in your dune file, and modules
in your subdirectories will be exposed under a module with the name of the
directory.
See full changelog
dune executable
Added
-
Allow running
$ dune exec
in watch mode (with the-w
flag). In watch mode,$ dune exec
the executed binary whenever it is recompiled. (#6966, @gridbugs) -
Add a
dune cache size
command for displaying the size of the cache (#6638, @Alizter) -
Allow
$ dune ocaml dump-dot-merlin
to run in watch mode. Also this command shouldn't print "Entering Directory" mesages. (#6497, @rgrinberg) -
Add native support for polling mode on Windows (#7010, @yams-yams, @nojb, review by @Rucikir and @jbeckford)
-
Auto-detect
dune-workspace
files asdune
files in Emacs (#7061, @ilankri) -
Allow
$ dune utop
to load libraries defined in data only directories defined using(subdir ..)
(#6631, @rgrinberg)
Changed
-
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. (#6727, fixes #6486, @esope) -
Use colored output with MDX when Dune colors are enabled. (#6462, @MisterDA)
-
Use colored output with GCC and Clang when compiling C stubs. The flag
-fdiagnostics-color=always
is added to the:standard
set of flags. (#4083, @MisterDA) -
Move
$ dune ocaml-merlin -dump-config=$dir
to$ dune ocaml merlin dump-config $dir
. (#6547, @rgrinberg)
Fixed
-
Fix parsing of OCaml errors that contain code excerpts with
...
in them. (#7008, @rgrinberg) -
Fix
--trace-file
output. Dune now emits a single complete event for every executed process. Unterminated async events are no longer written. (#6892, @rgrinberg) -
Print missing newline after
$ dune exec
. (#6821, fixes #6700, @rgrinberg, @Alizter) -
Fix binary corruption when installing or promoting in parallel (#6669, fixes #6668, @edwintorok)
-
Report an error if
dune init ...
would create a "dune" file in a location which already contains a "dune" directory (#6705, @gridbugs) -
Fix the parsing of alerts. They will now show up in diagnostics correctly. (#6678, @rginberg)
-
Print "Leaving Directory" whenever "Entering Directory" is printed. (#6419, fixes #138, @cpitclaudel, @rgrinberg)
-
Remove "Entering Directory" messages for
$ dune install
. (#6513, @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. (#6523, @nojb) -
Fix missing dependencies when detecting the kind of C compiler we're using (#6610, fixes #6415, @emillon)
-
Remove spurious build dir created when running
dune init proj ...
(#6707, fixes #5429, @gridbugs) -
Validate the command line arguments for
$ dune ocaml top-module
. This command requires one positional argument (#6796, fixes #6793, @rgrinberg) -
Fix dependency cycle when installing files to the bin section with
glob_files
(#6764, fixes #6708, @gridbugs) -
Handle "Too many links" errors when using Dune cache on Windows (#6993, @nojb)
-
Pre-emptively clear screen in watch mode (#6987, fixes #6884, @rgrinberg)
-
Allow
--sandbox
to affectocamldep
invocations. Previously, they were wrongly marked as incompatible (#6749, @rgrinberg)
dune language
Added
-
Allow
(include_subdirs qualified)
for OCaml projects. (#6594, fixes #1084, @rgrinberg) -
Format dune files when they are named
dune-file
. This occurs when we enable the alternative file names project option. (#6566, @rgrinberg) -
Add
map_workspace_root
dune-project stanza to allow disabling of mapping of workspace root to/workspace_root
. (#6988, fixes #6929, @richardlford) -
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
(#6991, @rgrinberg) -
Add
(using ctypes 0.3)
. When used, paths in(ctypes)
are interpreted relative to where the stanza is defined. (#6883, fixes #5325, @emillon)
Changed
-
Stop passing
-q
flag indune coq top
, which allows for.coqrc
to be loaded. (#6848, fixes #6847, @Alizter) -
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. (#6409, @Alizter) -
Accurately determine merlin configuration for all sources selected with
copy#
andcopy_files#
. The old heuristic of looking for a module in parent directories is removed (#6594, @rgrinberg)
Fixed
-
Fix parsing of the
<=
operator in blang expressions ofdune
files. Previously, the operator would be interpreted as<
. (#6928, @tatchi) -
Fix preprocessing with
staged_pps
(#6748, fixes #6644, @rgrinberg) -
Fix the parsing of decimal and hexadecimal escape literals in
dune
,dune-package
, and other dune s-expression based files (#6710, @shym) -
Fix cross compilation configuration when a context with targets is itself a host of another context (#6958, fixes #6843, @rgrinberg)
-
Allow compilation rules to be impacted by
(env ..)
stanzas that modify the environment or set binaries. (#6527, @rgrinberg) -
Fix handling of support files generated by odoc. (#6913, @jonludlam)
-
Fix the compilation of modules generated at link time when
implicit_transitive_deps
is enabled (#6642, @rgrinberg) -
Fix inline tests with js_of_ocaml and whole program compilation mode enabled (#6645, @hhugo)
-
Fix js_of_ocaml separate compilation rules when
--enable=effects
,--enable=use-js-string
or--toplevel
is used. (#6714, #6828, #6920, @hhugo) -
Fix js_of_ocaml separate compilation in presence of linkall (#6832, #6916, @hhugo)
-
coqdep
is now called once per theory, instead of one time per Coq file. This should significantly speed up some builds, ascoqdep
startup time is often heavy (#7048, @Alizter, @ejgallego)
See full changelog
-
Fix configurator when using the MSVC compiler (#6538, fixes #6537, @nojb)
-
Fix running the RPC server on windows (#6721 fixes #6720, @rgrinberg)
See full changelog
Fixed
- Undid the change to the pipe code to restore compatibility with Windows (#403, @MisterDA)
See full changelog
Added
- Report all parsing errors in Markdown files (#389, @NathanReb)
Changed
- Preserve indentation in multiline OCaml blocks in .mli files (#395, @panglesd)
- Rename the
Normal
syntax toMarkdown
to better explain what the syntax is and moved it toMdx.Syntax
(#412, @Leonidas-from-XIV)
Fixed
- Fixed compatibility with Cmdliner 1.1.0 (#371, @Leonidas-from-XIV)
- Report errors and exit codes of toplevel directives (#382, @talex5, @Leonidas-from-XIV)
- Fix block locations in error reporting (#389, @NathanReb)
- Include the content of the line that features the
part-end
MDX directive in the output, before that line would've been dropped (#374, #387, @Leonidas-from-XIV) - Handle EINTR signal on waitpid call by restarting the syscall. (#409, @tmcgilchrist)
- Fix parsing of multiline toplevel phrases in .mli files (#394, #397, @Leonidas-from-XIV)
Removed
- Removed warning about missing semicolons added in MDX 1.11.0 and the automatic insertion of semicolons in the corrected files introduced in MDX 2.0.0. (#398, @Leonidas-from-XIV)
On behalf of the ocaml-lsp team, Iβm pleased to announce ocaml-lsp-server versions 1.15.0-4.14
and 1.15.0-5.0
for OCaml 4.14 and 5.0, respectively. This is the first time we release ocaml-lsp supporting two compiler versions. We look forward to your feedback.
See full changelog
Features
-
Enable semantic highlighting support by default (#933)
-
Support connecting over pipes and socket. Pipes on Windows aren't yet supported (#946)
More about communication channels in LSP specification.
-
Re-enable
ocamlformat-rpc
for formatting code snippets (but not files and not on Windows) (#920, #939)One needs to have installed either
ocamlformat
package version > 0.21.0 or, otherwise,ocamlformat-rpc
package. Note that previouslyocamlformat-rpc
came in a standalone OPAM package, but sinceocamlformat
version > 0.21.0, it comes withinocamlformat
package. -
Add custom
ocamllsp/hoverExtended
request (#561) -
Support utf-8 position encoding clients (#919)
More about position encoding in LSP specification.
-
Show unwrapped module alias types on hovering over module names. This is due to upgrading to merlin 4.7 and using merlin's
verbosity=smart
by default (#942)
Fixes
-
Respect the client's completion item resolve and preSelect capabilities (#925, #936)
-
Disable polling for dune's watch mode on Windows and OCaml 4.14.0 (#935)
-
Fix semantic highlighting of "long identifiers," e.g.,
Foo.Bar.x
(#932) -
Fix syncing of document contents:
- For ranges that span an entire line (#927)
- Previously, whole line edits would incorrectly eat the newline characters (#971)
See full changelog
- Bump the compatibility to 4.08+ (#393 @emillon)
- Load
@toplevel_printer
annotated printers for functors (#378 @metavinek) - Do not display a backtrace when exiting normally (#399 #398 @emillon)
See full changelog
Oops, we went looking but didn't find the changelog for this release π
Feedback on this post is welcomed on Discuss!
We are pleased to announce the minor release of opam 2.1.4.
This opam release consists of backported fixes:
- Make opam able to fully build with OCaml 5.0.
dose3 >= 6.1
andbase64 >= 3.1.0
are now required (#5357) - Fix a bug where opam would not output any explanation when a conflict arises when attempting to install a package (#5378)
Opam installation instructions (unchanged):
-
From binaries: run
bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh) --version 2.1.4"
or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run
opam init --reinit -ni
to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script. -
From source, using opam:
opam update; opam install opam-devel
(then copy the opam binary to your PATH as explained, and don't forget to run
opam init --reinit -ni
to enable sandboxing if you had version 2.0.0~rc manually installed or to update your sandbox script) -
From source, manually: see the instructions in the README.
We hope you enjoy this new minor version, and remain open to bug reports and suggestions.
See full changelog
- Add support for OCaml 5.0. Dose3 >= 6.1 and base64 >= 3.1.0 are now required [#5357 @kit-ty-kate @dra27 - fix #5354]
- [BUG] Fix all empty conflict explanation messages [#5378 @kit-ty-kate - partial fix #4373]
We are pleased to announce the minor release of opam-publish 2.2.0.
This opam-publish release consists of the following breaking change:
- Shorten the generated branch name. This is breaking change for people who want to force-push changes on an already opened PR using a previous version of opam-publish as the branch name might not be the same (#141)
and the following fixes:
See full changelog
Additions
- New unstable option
--as-json
for the HTML renderer that emits HTML fragments (preamble, content) together with metadata (table of contents, breadcrumbs, whether katex is used) in JSON format. (@sabine, #908) - New maths support via
{m ... }
and{math ... }
tags. (@giltho, @gpetiot, #886) - Various optimisations (@jonludlam, #870, #883)
- Better handling of alerts and deprecation notices. (@panglesd, #828)
- Handle language tags on code blocks (@julow, #848)
Bugfixes
- Shadowing issues (@jonludlam, #853)
- Layout fixes and improvements (@panglesd, #832, #839, #847)
- Handle comments on class constraints and inherit (@julow, #844)
- Disable the missing root warning (@jonludlam, #881)
See full changelog
Oops, we went looking but didn't find the changelog for this release π
See full changelog
- merlin binary
- Replace custom "holes" AST nodes by extensions. This restores binary compatibility and fixes issues with PPXs when using typed-holes. (#1503)
- Do not change temporarily Merlin's cwd when starting a PPX (#1521, fixes #1420)
- Fix a parsing issue when declaring the
(??)
custom prefix operator. (#1507, fixes #1506) - Fix variant constructors' comments grouping (#1516, @mheiber, fixes #1513)
- Filter-out duplicates from the
enclosing
command result (#1512) - Add a new
verbosity=smart
mode for type enclosing that only expand modules' types (#1374, @ulugbekna) - Improve locate for labels' declarations in the current buffer. (#1505, fixes #1524)
- Fix locate on module without implementation (#1522, fixes #1519)
- Allow program name customization when merlin is used as a library. (#1532)
- editor modes
- vim: load the plugin when necessary if it wasn't loaded before (#1511)
- emacs: xref works from context menus; better highlighting of xref matches; xref recognises operators and binding operators at the cursor position; bad locations are filtered out (#1385, fixes #1410)
- emacs: update CI for newer releases and fix some warnings (#1454, @mattiase)
- test suite
- Add tests for constructors' documentation (#1511)
- Add test cases for label comment documentation (#1526, @mheiber)
- Add a test for the
enclosing
command (#1512) - Add tests for interactions between locate and record labels (#1505)
- Add test showing an issue with locate and implicit transitive deps
See full changelog
-
Fix status line enabled when ANSI colors are forced. (#6503, @MisterDA)
-
Fix build with MSVC compiler (#6517, @nojb)
-
Do not shadow library interface modules (#6549, fixes #6545, @rgrinberg)
Dear dune users, It is my pleasure to announce that dune 3.6.0 is now available on opam π. Here's the changelog - I reused the same classification as in the previous announce for dune 3.5.0. Thanks again to all the contributors including bug reporters.
See full changelog
dune executable
This lists features of the βduneβ executable itself. Upgrading dune will bring in these changes. We consider these changes safe, but it is difficult to define what a breaking change is for a command-line tool (for example, some error messages change). It is important to note that just upgrading the dune executable is not supposed to change how dune interprets existing projects. If just upgrading dune breaks compilation, it is a bug in dune, please report it!
Added
- Introduce a
$ dune ocaml top-module
subcommand to load modules directly without sealing them behind the signature. (#5940, @rgrinberg) - Revive
$ dune external-lib-deps
under$ dune describe external-lib-deps
. (#6045, @moyodiallo) - Extend the promotion CLI to a
dune promotion
group:dune promote
is moved todune promotion apply
(the former still works) and the newdune promotion diff
command can be used to just display the promotion without applying it. (#6160, fixes #5368, @emillon) - Build progress status now shows number of failed jobs (#6242, @Alizter)
- Allow promoting into source directories specified by
subdir
(#6404, fixes #3502, @rgrinberg) - Support
CLICOLOR
andCLICOLOR_FORCE
to enable/disable/force ANSI colors. (#6340, fixes #6323, @MisterDA). - Create a fake socket file
_build/.rpc/dune
on windows to allow rpc clients to connect using the build directory. (#6329, @rgrinberg)
Fixed
- Forbid multiple instances of dune running concurrently in the same workspace. (#6360, fixes #236, @rgrinberg)
- Make dune describe workspace return the correct root path (#6380, fixes #6379, @esope)
- Fix running inline tests in bytecode mode (#5622, fixes #5515, @dariusf)
(lang dune 3.6)
This lists changes if you opt into the new (lang dune 3.6)
version in your dune-project file. For this too, these are changes that we consider safe, but they can require changes to your dune files. For example, sandboxing is enabled in more places, which means that you might have to be more precise in expressing your dependencies. Please reach out on the issue tracker if you have trouble fixing your dune file or if something does not seem to be possible anymore.
Added
- Add
(glob_files <glob>)
and(glob_files_rec <glob>)
terms to thefiles
field of theinstall
stanza (#6250, closes #6018, @gridbugs) - Allow
Byte_complete
binaries to be installable (#4837, @AltGr, @rgrinberg) - Allow
:standard
in the(modules)
field of thecoq.pp
stanza (#6229, fixes #2414, @Alizter)
Fixed
- Allow absolute build directories to find public executables. For example, those specified with
(deps %{bin:...})
(#6326, @anmonteiro) - [ctypes] do not mangle user written names in the ctypes stanza (#6374, fixes #5561, @rgrinberg)
- Forbid private libraries with
(package ..)
set from depending on private libraries that don't belong to a package (#6385, fixes #6153, @rgrinberg) - [ctypes] always re-run
pkg-config
because we aren't tracking its external dependencies (#6052, @rgrinberg) - [ctypes] remove dependency on configurator in the generated rules (#6052, @rgrinberg)
- Fix passing of flags to dune coq top (#6369, fixes #6366, @Alizter)
- Prevent crash if absolute paths are used in the install stanza and in recursive globs. These cases now result in a user error. (#6331, @gridbugs)