OCaml Changelog

RSS

Read the latest releases and updates from the OCaml ecosystem.

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

Merlin 1.5

See full changelog
  • backend:

    • better handling of paths (both sources and build)
    • split build path into cmi and cmt path. New directives "CMI" and "CMT" are now available in .merlin files ("B" still works as previously)
    • doesn't get confused anymore when the user switch between buffers (the state is cleaned)
  • emacs:

    • adds ability to enable/disable extensions manually
    • adds a command to clear all the errors from a buffer
    • displaying of errors can now be disabled
  • extensions

    • updated bin_prot for version >= 109.45.00
    • bugfix for [with compare] in presence of parametrized types
    • added support for "here" (when activated adds [val here : Lexing.position])
    • added support for [assert_lwt]
    • fixed typing of [while_lwt]
  • vim:

    • vim plugin can be installed into a custom directory and has its own makefile target (contribution from Vsevolod Velichko)
    • added "ClearEnclosing" command to remove merlin's overlay after a call to TypeOf.
See full changelog
  • documentation:

    • updates of the emacs section of the readme by Ronan Lehy.
  • emacs:

    • bugfix for ac-mode: merlin-ac-prefix wasn't called.
    • better formatting for completion suggestions.
  • vim:

    • bugfix for the "selectPhrase" command, an overflow on 32b plateform was causing complete desynchronisation between vim and merlin.
    • better formatting for completion suggestions.

Merlin 1-4

See full changelog
  • backend:

    • lazy processing of open directives makes merlin much faster
    • simplified buffer management
    • tweak signal handling to improve windows compatibility
    • track verbosity of query: repeated queries are considered more "verbose"
    • type expansion: expand type aliases for verbose query
    • add support for OUnit-like Benchmark extension
    • more tolerant type checker, to provide completion on ill-typed expressions
    • proper version reporting with git revision
    • refactored logging subsystem
    • add support "val constructs" in implementation: report errors but add definition to current environment
    • add FLG, EXT and PRJ in .merlin
    • "locate" command now works in much more situations
    • one distribution for 4.00 and 4.01, introduced common interface between both, typers now live in https://github.com/def-lkb/merlin-typers
    • new implementation of the main merlin state tracking ast & types
    • better error reporting thanks to a contribution from Ronan Lehy
  • documentation:

    • started a wiki (https://github.com/def-lkb/merlin/wiki)
    • wrote 'from-scratch' guides to ease setting-up merlin in your editor
  • emacs

    • during completion with auto-complete, you can hit C-c C-l on a candidate to jump on its definition
    • made communication with merlin asynchronous (using transfer queues) hence improving responsiveness
    • when running a merlin command, the errors present in all phrases but the current one are displayed
    • fixed buffer cleaning
    • successive call to C-c C-t do not climb the typed tree but improve merlin's verbosity. To move inside the tree use C-down and C-up (which implements phrase movement if there is no enclosing started).
    • customize data for merlin
    • refactoring and numerous bugfixes

Minor release, but merlin is now compatible with ocaml versions > 4.00.1. The only noticeable changes since 1.3 is the use of short paths even with version 4.00.1 of ocaml.

See full changelog

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

Merlin 1-3

See full changelog
  • backend:

    • added a "locate" command to find the definition location of the given identifier works on the local buffer out of the box and at project level if it the build directories contain cmt files
  • emacs:

    • various bugfixes
    • aesthetic changes for highlighting
    • introduced "semantic movements": add commands (and keybindings) to go to the next/previous phrase
    • support for completion in emacs 23
    • reporting of syntax errors
    • removed "idle-typing" feature
    • asynchronous fetching of types so that long signatures won't make emacs hang
  • extensions:

    • add support for "type nonrec" declaration
    • add support for "with compare" from type-conv
    • add partial support for "with fields" from type-conv
  • misc:

    • added specific support for omake's polling mode
  • vim:

    • ':TypeOf' command now accepts an (optional) argument and tries to type it in the current context (i.e. at cursor position)
    • better catching of errors
If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.