OCaml Changelog

RSS

Read the latest releases and updates from the OCaml ecosystem.

This is a preview release that adds support for OCaml 4.10. Short-path is disabled. Other versions of OCaml are not supported.

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

See full changelog
  • backend
    • support OCaml 4.09 (#1055)
    • fix parse errors in 4.08 (#1037)
    • update 4.08 support to OCaml 4.08.1 (#1053)
    • support without_cmis
    • separate reading from caching in file-cache, use caching in Env.check_state_consistency (#1044)
    • simplify compiler state management (#1056, #1059)
    • fix creation of initial environment, improve compatibility with upstream 4.08 (#1052)
  • frontend
    • code re-organization (#1042)
    • error command: select which kind of errors to show (#995)
    • print value types in outline (#1014)
    • fix process handling in windows (#1005)
  • editor modes
    • emacs
      • bugfixes in merlin-imenu, merlin-xref (#1000, #1021, #1001)
      • show types in merlin-imenu (#1013)
      • reset buffer local configurations when resetting server (#1004)
      • remove merlin-use-tuareg-imenu
      • fix stack overflow (#1024)
      • fix merlin-occurrence (#1043)
    • vim
      • display warn-error warnings as errors (#1009)
  • testsuite
    • cover file-cache and check_state_consistency (#1044)
    • check inconsistent assumptions, test server versus single modes (#1047)
See full changelog
  • backend
    • ** globbing in .merlin won't look into hidden directories (starting with a '.') (by Daniel Bünzli, #990)
    • fallback to "/dev/null" configuration for findlib
    • better 4.08 support:
      • support for letop (let+, and+, ...) (#986)
      • fix parsing recovery for 4.08 constructions (#987)
      • catch an exception raised by 4.08 Printtyp trying to rename a persistent identifier (#991)
    • locate: treat local locations differently from external locations (coming from a cmi), this fixes "jump to definition" on mutually recursive bindings (#984)
    • when completing an infix operator in a sub-module, wrap with () (#992)
    • disable arity checks on externals (for Bucklescript compatibility)
    • remove parser preprocessing (simplify compilation for OCaml < 4.08) (#997)
  • editor modes
    • emacs
      • fix position computation in presence of tabs or multi-byte characters (#981)
      • log arguments in "merlin-debug-last-commands" (#981)
    • vim
      • install reason.vim file (by Hezekiah M. Carty, #974)

Special thanks to Rudi Grinberg for helping us in reviewing and merging pull-requests.

See full changelog
  • backend

    • interpret -pp flag
    • backtrack warnings in all versions, not just 4.06
    • silence C compiler warnings (by David Allsopp and Bernhard Schommer)
    • remove sturgeon support
    • allow to select sections to log
    • better error message on ocaml version mismatch
    • locate:
      • handle functors and functor applications
      • do not use the location coming from the environment
    • tweaked caching policy
    • fix environment when a file disappears
    • fix -short-paths handling of classes and class types (by Leo White)
    • don't select deprecated paths in -short-paths (by Leo White)
    • return type info in outline query (by Andrey Popp)
    • properly handle new lines in the lexer
    • better tracking of errors reported by the parser and by preprocessors
    • add support for OCaml 4.08
    • tweaked the recovery strategy in presence of syntax errors
    • timing information in replies now includes wall clock time.
    • dump command can new dump the parsetree post preprocessing
  • editors modes

    • emacs

      • fix merlin-xref.el install (by Emilio Jesus Gallego Arias)
      • keep labels matching the prefix the user has typed rather than dropping them (by Mitchell Plamann)
      • remove unused merlin--overlay function (by Wilfred Hughes)
      • show the number of errors in the modline (by Wilfred Hughes)
      • call a logger on the client side if one is defined
      • allow user to disable completion inside comments and strings
      • show errors and types even when buffer is narrowed (by Wilfred Hughes)
      • make sure PATH is updated when merlin-command is 'opam
    • vim

      • better FindBinary
      • make the log buffer a scratch buffer (by Tom Johnson)
      • execute buffer switching silently (by Fabian)
      • restore view after updating merlin type buffer (by Fabian)
  • testsuite

    • Switched to mdx with cram syntax.
See full changelog
  • Switched build to dune (thanks to @nojb).
  • Added support for 4.07.1
  • Various bugfixes in the backend and in the editor modes.
  • Fix build on OCaml 4.02 to 4.04

Thanks to the people who contributed to this release: ELLIOTTCABLE, Louis Roché, Rudi Grinberg, Yotam Barnoy, Leo White, Daniel Below, Andreas Hauptmann, Christophe Troestler, Bobby Priambodo, Milo Davis.

See full changelog
  • backend

    • new "polarity search" feature: provides a Hoogle-like type-based search for libraries that are in merlin's scope. See https://github.com/ocaml/merlin/blob/master/doc/features.md#polarity-search
    • new "open refactoring" feature: helps cleaning the code in the scope of an open statement. See https://github.com/ocaml/merlin/blob/master/doc/features.md#open-refactoring
    • spell-checking: a simple spell-checker has been added to suggest corrections when nothing can be directly completed.
    • type-driven record completion: merlin will now make use of type information from the context for narrowing and refining completion candidates.
    • support for #require directive in a source file, and will treat it as a package use
    • Add support for OCaml 4.07
    • locate: various minor bugfixes, as well as the following general improvements:
      • improved context detection
      • better tracking of namespaces
      • fixed support for local bindings
      • fixed support of disambiguated record fields and variant constructors
      • improved support for functors: merlin will now jump through functor application to the functor definitions and in some cases go back to the argument that was given (if it is simply reexported).
    • backport fixes of OCaml 4.06.1 to the 4.06 backend
    • various minor bugfixes
  • editor modes

    • emacs
      • proper handling of multibyte strings (by @Chris00)
      • bind "q" to close type buffer (by @MiloDavis)
      • make goto-point encoding independent
      • add reason-mode to the guessed favorite mode list (by @Khady)
      • sped up some tight loops (by @rgrinberg)
      • add support for x-ref backend (by @rgrinberg)
    • vim
      • fix support for Neomake (by @bobbypriambodo and @statianzo)
      • fix encoding issues in filepaths (by @Thelyria)
      • fix handling of enclosing-type cache (by @ELLIOTTCABLE)
      • add to prevent flashing when highlighting an enclosing (by @bluddy)

Add support for 4.06. Use Leo White's short-path for 4.05. Various bug fixes (in locate, in emacs serialization).

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

The major change Windows support is contributed by David Allsopp.

Other changes are a bunch of fixes:

  • compilation on FreeBSD contributed by Malcolm Matalka
  • improvement to emacs mode contributed by Olivier Andrieu, Christophe Troestler and Steve Purcell
  • improvement to vim mode by Fabian Hemmer and Gregory Nisbet
  • fixes to ppx invocation by Keigo Imai
  • fixes to Merlin s-expr dialect to bring UTF-8 compatibility with Emacs (WIP)
See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Bug fix after 3.0.1:

  • CMT magic number for 4.05 was wrong
  • handle merlin.focus, merlin.ignore, merlin.loc/merlin.relaxed-loc and merlin.syntax-error
  • missing include preventing build on some platforms contributed by Bernhard Schommer
See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Bug fix release after 3.0.0 major release.

  • portability fixes by David Allsop in configure script and vim mode (tough Windows support is not ready yet)
  • preliminary support for findlib toolchains with FINDLIB_TOOLCHAIN .merlin directive
  • make ocamlmerlin.c frontend more portable
  • various fixes to the frontend
See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

The major change is a new protocol that moves process management inside Merlin codebase, saving a lot of pain in Emacs and Vim. There are not much new user facing features.

Windows support is not yet available.

In editor configuration is now done with merlin-flags, merlin-extensions and merlin-use in Emacs and :MerlinFlags, :MerlinExtensions and :MerlinPackages in Vim. In previous versions, enabled extensions, flags and packages were retained while now only the last command is remembered.

"M-x merlin-use a", "M-x merlin-use b" should be replaced by "M-x merlin-use a,b". ":MerlinUse a", ":MerlinUse b" should be replaced by ":MerlinUse a b".

The old protocol is still supported, so existing editor modes should not be affected (tested with Atom, Visual Studio and Sublime-text).

Other main changes:

  • Support for OCaml 4.05 was added
  • Merlin uses a new implementation of short-path by Leo White which addresses performance problems
  • Merlin now works with the upstream version of Menhir
  • numerous cleanup and refactoring to decrease the amount of changes to upstream typechecker
  • emacs-imenu feature was contributed by tddsg. It is similar the "outline" feature in vim for navigating in a buffer.

Thanks to the many contributors (Jochen Bartl, tddsg, Ximin Luo, Jason Staten, Leo White, Leandro Ostera, Jacob Bass, Xavier Guérin, Yotam Barnoy, Jacques Pascal Deplaix, David Allsopp, ...).

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Minor release.

See full changelog
  • handle hole in 4.04
  • bug fixes in emacs mode
  • introduce merlin-imenu

Minor release.

See full changelog
  • fix Windows build with MSVC (#605).
  • fix module level errors escaping

This release mainly brings support for OCaml 4.04. Internal code was simplified and bugs were fixed in the meantime (cache invalidation, ast traversal, type error recovery, certain cases of completion, ppx working directory, locate, ...).

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Bug fix release before major version.

See full changelog
  • reintroduce lazy substitution to fix performance issue
  • add "FINDLIB_PATH" directive to .merlin (contributed by Gerd Stolpmann)
  • relax arity checks on externals (harmless, requested by Hongbo Zang)
  • handle case insensitivity of OS X (fix longstanding bug)
  • fix build under Cygwin
  • minor cleanup, portability and usability improvements in build system and editor modes
See full changelog
  • frontend:
    • now all commands can take a context, this reduce the amount of state in the command interpreter. Long term goal is to make protocol stateless
    • merlin now supports customizable "readers": processes responsible for parsing and pretty-printing. Main use-case is Reason, cppo/optcomp support might be added later
  • backend:
    • drop support for 4.00 / 4.01
    • support for 4.03 has been added
    • new implementation of type recovery, should diverge less from upstream
    • support for 4.02 was reimplemented to use the same design
    • menhir's fork has been synchronized with upstream, recovery algorithm is completely new
  • vim: add support for python3, update to new protocol
  • emacs: update to new protocol, bug fixes
See full changelog
  • backend:

    • improve support for module aliases in completion, locate and short-path
    • change management of flags
    • Cuillère ou Dorade
    • fix grammar for 4.02.3, support attributes on core_types
  • emacs & vim: minor fixes

Merlin 2.3

This release also contains contributions from: Rudi Grinberg, Fourchaux, Christopher Reichert, David Allsopp, Nick Borden, Mario Rodas, @Twinside, Pierre Chambart, Philipp Haselwarter, Tomasz Kołodziejski and Syohei Yoshida.

See full changelog
  • backend:

    • locate: fix assert failure on first class modules inclusion
    • outline: add support for classes and object types
    • nonrec: enable by default for OCaml >= 4.02.2
    • error reporting: less aggressive filtering on ghost locs
    • finer-grained tracking of usage (values, opened modules, etc)
    • significant improvement in the handling of PPX extensions:
      • fix shell commandline and working directory
      • normalize parsetree locations
      • implement caching of intermediate rewriting
    • merged support for MetaOCaml
    • path to the standard library can now be specified with STDLIB command in .merlin
    • BrowseT: split into Browse_node (OCaml version specific) and Merlin_browse, extract recursion scheme
    • add Jump command, contributed by Tomasz KoÅ‚odziejski
    • contextual-commands: optionnally specify the context (file, project) in which each command is interpreted
    • better support for trunk
    • many bugfixes
  • documentation:

    • update ARCHITECTURE and PROTOCOL documentations
  • emacs:

    • make use of contextual-commands, non backward compatible protocol change
    • new merlin-set-flags command
    • split into multiple files
    • cleanup symbol namespaces:
      • merlin- for user targeted definitions
      • merlin-- for internal definitions,
      • merlin/ for API definitions
    • usability tweaks, notably on error display and navigation
    • general cleanup and bugfixes
  • vim:

    • expose custom .merlin loading through buffer variable
    • cleanup and bugfixes, notably process liveness check and restart

Merlin 2.2

See full changelog
  • backend:

    • completion
      • return the type of the expected argument when completing an application. This allows us to offer completion for named and optional parameters, as well as polymorphic variants
      • optionally associates ocamldoc comments to candidates
      • adds field completion inside records ( #296 )
    • locate:
      • partially rewritten, introduces a new kind of cache (so potentially noticeably bigger memory consumption)
      • better handling of functors
      • handle local modules
      • fix occasional "inconsistent assumptions"
    • error reporting:
      • handle environment errors (inconsistent assumptions, …)
      • filter duplicated messages
      • fix type error reporting: "this expression has type t = t but an expression was expected of type u = u" we now only print the equality when it adds some information
      • less noisy pattern recovery: when every pattern is recovered, consider that the matched expression is the the source of the problem, and retry typing with "'a" as the type of the matched expression.
    • add support for trunk
    • add a "document" command: takes an ident and return its documentation (if any)
    • destruct: use more precise environments ( #389 )
    • warnings:
      • check signature inclusion to prevent spurious warnings about unused declarations
      • backport 4.02-style warning management
      • add a dump command
    • nonrec: update implementation to more-or-less match the upstream one (upstream >= 4.02.2)
    • parser: improve marking heuristic in presence of ;; or toplevel directives.
    • typeof: during verbose expansion, also print the type declaration if we have a type constructor
  • emacs:

    • fix bindings of every completion backend
    • bind ocamldoc comments to company (optional)
    • detect race conditions when running synchronous commands
    • cleanup "merlin-process-started-p"
    • locate error messages were silently ignored, they are now printed
    • drop text properties from commands sent to merlin (pull request #383 by milanst)
    • Tell merlin the content of the buffer when opening a new buffer. This allows merlin idle-job to preload content if nothing else is requested.
    • remove call to merlin from the lighter
  • vim:

    • fix ctrlp binding for locate
    • add (dwim) completion on :TypeOf
    • while completing, candidates documentation can be displayed in the "preview" window
    • prefix every command name by "Merlin" ( #379 )
    • Tell merlin the content of the buffer when opening a new buffer. This allows merlin idle-job to preload content if nothing else is requested.

Main new feature is a faster short-path, and also a lot of buxfixes.

See full changelog
  • backend:

    • merge new implementation of short-path
    • infrastructure for doing background computations
    • fix exhaustivity checking of GADTs
    • fix Typecore error reporting in 4.00.1 & 4.01.0
    • delayed checks are now enabled (e.g warnings)
    • special handling of "myocamlbuild.ml" (issue #363)
    • better sharing/caching of global modules
    • more customizable .merlin loading
    • minor fixes (better error messages, typos, "fake" extensions)
  • build system:

    • allow bytecode builds, support OpenBSD (pull request #364 by madroach)
    • Refuse/Resist... environment variables redefinition
  • vim:

    • fix charset/encoding detection (pull request #352 by rgrinberg)
    • minor fixes and simplification
  • emacs:

    • better integration with emacs error management and asynchronous handling
    • expose custom .merlin loading in merlin-grouping-function
    • fixes, printf-debugging cleanup
See full changelog
  • backend:

    • locate: merlin refused to locate things when it had no context (happens when the buffer didn't parse for example) claiming it was at the "definition point". Fixed.
    • locate: use the cmt path when no ml file was found in the source path (this might not be such a good idea, the cases when this work are the ones where the user configuration is wrong...)
    • destruct: qualify introduced constructors
    • destruct: eliminate "impossible" GADT branches
    • parser: handle '%' as an operator for 4.00 and 4.01 ( #345 )
  • fake:

    • add typerep support
    • never generate '_ type variables.
  • vim:

    • show duplicated outlines in CtrlP
    • sort outlines by name length in CtrlP
    • when split method is set to 'tab' always open a new tab.

This release also contains contributions from: Geoff Gole, Rudi Grinberg, Markus Mottl, Roman Vorobets and Arthur Wendling.

See full changelog
  • backend:

    • add PPX support
    • make use of context before locating (#308, #316, #318).
    • generate match patterns for arbitrary expressions and missing patterns for incomplete matchings (#123).
    • reintroduce type expansion (asking the times of the same expression several times will resolve type aliases).
    • "smart" (a.k.a "do what I mean") completion: L.m will expand to List.map ; List.m... ; ListLabels.map ; ... if L doesn't exist.
    • simplify incremental parser and typer interfaces
    • locate: better handling of packed modules (supposedly)
    • more precise recovery on patterns (before the recovery was done at the expression level, so the whole match was discarded, now only the pattern is)
  • emacs:

    • don't use fringe in emacs23 (broken)
    • remove obsolete aliases: merlin-occurences => merlin-occurrences merlin-to-end => merlin-error-check
    • disable merlin-mode on type buffer
    • require caml-types (needed for highlighting) (#331).
  • misc:

    • update README (#301).
  • vim:

    • add a type history buffer (#313, #322) -- only available for vim > 7.3.
    • highlight types when displaying them in the command line -- only for vim > 7.3
    • add tab completion for the argument of the :Locate command
    • add support for text objects based on type enclosing
    • introduce an interactive version of :Rename
    • locate results can now be shown in a new or existing tab (#335)
    • use fileencoding where necessary (#332)
    • ctrlp bindings for outline and locate

After a few months of development, we are pleased to announce the stable release of Merlin 2.0.
Supported OCaml versions range from 4.00.1 to 4.02.1.

Overview

Merlin is a tool focused on helping you code in OCaml by providing features such as:

  • automatic completion of identifiers, using scope and type information,
  • interactively typing definitions and expressions during edition,
  • jumping to the definition of any identifier,
  • quickly reporting errors in the editor.

We provide integration into Vim and Emacs. An external plugin is also available for Sublime Text.

What's new

This release provides great improvements in robustness and quality of analysis. Files that changed on disk are now automatically reloaded. The parsing process is finer grained to provide more accurate recovery and error messages. Integration with Jane Street Core and js_of_ocaml has also improved.

Vim & Emacs are still the main targeted editors. Thanks to Luc Rocher, preliminary support for Sublime Text is also available, see Sublime-text-merlin. Help is welcome to improve and extend supported editing environments.

Windows support also received some fixes. Merlin is now distributed in WODI. Integration in OCaml-on-windows is planned.

Installation

This new version of Merlin is already available with opam using opam install merlin, and can also be built from the sources which are available at the-lambda-church/merlin.

See full changelog

This is a major release which we worked on for several months, rewriting many parts of the codebase. An exhaustive list of changes is therefore impossible to give, but here are some key points (from an user perspective):

  • support for OCaml 4.02.{0,1}
  • more precise recovery in presence of syntax errors
  • more user-friendly messages for syntax errors
  • locate now works on MLI files
  • automatic reloading of .merlin files (when they are update or created), it is no longer necessary to restart Merlin
  • introduced a small refactoring command: rename, who renames all occurences of an identifier.

This release also contains contributions from: Yotam Barnoy, Jacques-Pascal Deplaix, Geoff Gole, Rudi Grinberg, Steve Purcell and Jan Rehders.

We also thank Gabriel Scherer and Jane Street for their continued support.

Minor update to installation procedure

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Merlin 1.7

See full changelog

This release also marks the apparition of a proper opam install script.

  • backend:

    • fixes on locate
    • print manifests even when -short-paths is set
    • add an "occurrences" command to list every occurrence of an identifier ( #156 )
    • new "version" command ( #180 )
    • add CPU time to log files ( #192 )
    • better error reporting from locate ( #190 )
  • documentation:

    • update vim doc file ( #204 )
    • typo correction in the README by Philippe Wang ( #195 )
  • emacs:

    • fix most byte compilation warnings, by Geoff Gole ( #209 )
    • numerous fixes
  • vim:

    • add error list independent from syntastic
    • fix completion for vim<=703 (#223)

Merlin 1.6

See full changelog
  • backend:

    • small memory leak fix
    • major improvements and bugfixes for locate (i.e. "jump to definition")
  • emacs:

    • fixed bug preventing merlin restart ( #167 )
    • removed keybindings reserved to users ( #170 ) the full list is:
      • C-c l previously bound to merlin-use
      • C-c r previously bound to merlin-restart-process
      • C-c t previously bound to merlin-type-expr
    • removed keybindings on C-<up> and C-<down> as these already have a meaning in emacs ( #129 ) They were bound to merlin-type-enclosing-go-up and merlin-type-enclosing-go-down respectively.
    • the emacs mode is now compiled (contribution from Jacques-Pascal Deplaix #158 , with a follow up from Rudy Grinberg #165 )
    • improved efficiency of completion at point
  • extensions:

    • added support for variantslib ( #132 )
    • updated fieldslib support ( #169 , #185 )
    • fix pa_lwt translation ( #182 )
    • added support for pa_enumerate ( #187 )
  • vim:

    • the split method for locate can now be configured
If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.