Merlin: a language server for OCaml (experience report)

@article{Bour2018MerlinAL,
  title={Merlin: a language server for OCaml (experience report)},
  author={Fr{\'e}d{\'e}ric Bour and Thomas Refis and Gabriel Scherer},
  journal={Proceedings of the ACM on Programming Languages},
  year={2018},
  volume={2},
  pages={1 - 15}
}
We report on the experience of developing Merlin, a language server for the OCaml programming language in development since 2013. Merlin is a daemon that connects to your favourite text editor and provides services that require a fine-grained understanding of the programming language syntax and static semantics: instant feedback on warnings and errors, autocompletion, "type of the code under the cursor", "go to definition", etc. Language servers need to handle incomplete and partially-incorrect… Expand
A right-to-left type system for mutually-recursive value definitions
TLDR
A set of declarative inference rules are presented, proved its soundness with respect to the reference source-level semantics of Nordlander, Carlsson, and Gill (2008), and it is shown that it can be (right-to-left) directed into an algorithmic check in a surprisingly simple way. Expand
A text-based syntax completion method using LR parsing
TLDR
The advantage of this method is that LR parsers can be adopted without modification, and a syntax completion system can be built using them, without incurring efforts. Expand
Challenges in the collaborative evolution of a proof language and its ecosystem. (Défis dans l'évolution collaborative d'un langage de preuve et de son écosystème)
TLDR
The application of software engineering methods and knowledge to the development, maintenance, and evolution of Coq —an interactive proof assistant based on type theory— and its package ecosystem and an analysis of package distribution methods, and a focus on the problem of the long-term maintenance of single-maintainer packages. Expand
Reasonably programmable literal notation
TLDR
This paper incorporates TLMs into Reason, an emerging alternative front-end for OCaml, and demonstrates, through several non-trivial case studies, how TLMs integrate with the advanced features of OCamL, including pattern matching and the module system. Expand
A right-to-left type system for value recursion
ion and application The rule for abstraction is discussed above. The application rule checks both function and argument in a Deref context, and merges the two resulting environments, taking the mostExpand
Constraint-Based Type-Directed Program Synthesis Extended Report
We explore an approach to type-directed program synthesis rooted in constraint-based type inference techniques. By doing this, we aim to more efficiently synthesize polymorphic code while alsoExpand
Constraint-based type-directed program synthesis
We explore an approach to type-directed program synthesis rooted in constraint-based type inference techniques. By doing this, we aim to more efficiently synthesize polymorphic code while alsoExpand
Building an Integrated Development Environment (IDE) on top of a Build System: The tale of a Haskell IDE
TLDR
This paper explains how to go from that idea to a usable IDE, including the difficulties imposed by reusing a build system, and those imposed by technical details specific to Haskell. Expand
Modèles de programmation de haut niveau pour microcontrôleurs à faibles ressources. (High-level programming models for microcontrollers with scarce resources)
TLDR
L'ensemble des propositions de cette these constitue une chaine complete de developpement, and plusieurs exemples d’applications concretes illustrant the completude des solutions offertes sont alors presentees. Expand
A practical mode system for recursive definitions
TLDR
A set of declarative inference rules is presented, its soundness is proved with respect to the reference source-level semantics of Nordlander, Carlsson, and Gill [2008], and it is shown that it can be directed into an algorithmic backwards analysis check in a surprisingly simple way. Expand
...
1
2
...

References

SHOWING 1-10 OF 15 REFERENCES
History-Sensitive Error Recovery
TLDR
History- based error recovery is language independent and is compat- ible with the best known methods for incremental lexing and parsing, adding neither time nor space overhead to those al- gorithms. Expand
Practical algorithms for incremental software development environments
TLDR
An integrated collection of algorithms and data structures to serve as the basis for a practical incremental software development environment and provides the first known method for handling C, C++, COBOL, and FORTRAN in an incremental framework derived from formal specifications. Expand
Efficient and flexible incremental parsing
TLDR
The approach extends the theory of sentential-form parsing to allow for ambiguity in the grammar, exploiting it for notational convenience, to denote sequences, and to construct compact (“abstract”) syntax trees directly. Expand
Generating LR syntax error messages from examples
TLDR
Merr is a tool that allows a compiler writer to associate diagnostic messages with syntax errors by example, avoiding the need to add error productions to the grammar or interpret integer parse states. Expand
Toward Semantic Foundations for Program Editors
TLDR
It is the hope that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Expand
Scribble: closing the book on ad hoc documentation tools
TLDR
This paper has used Scribble to produce thousands of pages of documentation for PLT Scheme; the new documentation is more complete, more accessible, and better organized, thanks in large part to Scribble's flexibility and the ease with which the authors cross-reference information across levels. Expand
Having Fun With 31.521 Shell Scripts
TLDR
A parser, which makes use of recent developments in parser generation technology, succeeds on 99.9% of the corpus and is the basis for the definition of a model which the author plans to use in the future for the formal verification of scripts. Expand
Towards Efficient, Typed LR Parsers
TLDR
It is shown that, using generalized algebraic data types, it is possible to produce parsers that are well-typed (so they cannot unexpectedly crash or fail) and nevertheless efficient. Expand
Eco: A Language Composition Editor
TLDR
The authors' prototype editor ‘feels’ like a normal text editor, but the user always operates on a valid tree as in a syntax directed editor, which allows us to compose arbitrary syntaxes while still enabling IDE-like features such as name binding analysis. Expand
Reachability and error diagnosis in LR(1) parsers
TLDR
An algorithm is proposed that allows building a collection of pairs of an erroneous input sentence and a (handwritten) diagnostic message, ensuring that this collection covers every error state, and maintaining this property as the grammar evolves. Expand
...
1
2
...