GithubHelp home page GithubHelp logo

rgrinberg / ocaml-lsp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ocaml/ocaml-lsp

1.0 2.0 0.0 6.21 MB

OCaml Language Server Protocol implementation

License: Other

OCaml 91.40% TypeScript 6.53% JavaScript 0.05% Makefile 0.11% Nix 1.90% Standard ML 0.01%

ocaml-lsp's Introduction

OCaml-LSP

Build

OCaml-LSP is a language server for OCaml that implements Language Server Protocol (LSP).

This project contains an implementation of a language server for OCaml and a standalone library implementing LSP.

Installation

We recommend to install the language server via a package manager such as opam or esy.

Opam

To install the language server in the currently used opam switch:

$ opam install ocaml-lsp-server

Note: you will need to install ocaml-lsp-server in every switch where you would like to use it.

Esy

To add the language server to an esy project, run in terminal:

$ esy add @opam/ocaml-lsp-server

Source

This project uses submodules to handle dependencies. This is done so that users who install ocaml-lsp-server into their sandbox will not share dependency constraints on the same packages that ocaml-lsp-server is using.

$ git clone --recurse-submodules http://github.com/ocaml/ocaml-lsp.git
$ cd ocaml-lsp
$ make all

Usage

Once ocaml-lsp-server is installed, the executable is called ocamllsp. For now, the server can only be used through the standard input (stdin) and output (stdout) file descriptors.

For an example of usage of the server in a VS Code extension, see OCaml Platform Extension implementation here.

Features

The server supports the following LSP requests:

  • textDocument/completion
  • completionItem/resolve
  • textdocument/hover
  • textDocument/signatureHelp
  • textDocument/declaration
  • textDocument/definition
  • textDocument/typeDefinition
  • textDocument/implementation
  • textDocument/codeLens
  • textDocument/documentHighlight
  • textDocument/documentSymbol
  • textDocument/references
  • textDocument/documentColor
  • textDocument/colorPresentation
  • textDocument/formatting
  • textDocument/rangeFormatting
  • textDocument/onTypeFormatting
  • textDocument/prepareRename
  • textDocument/foldingRange
  • textDocument/selectionRange
  • workspace/symbol

Note that degrees of support for each LSP request are varying.

Integration with other tools

Formatters: OCamlFormat & Refmt

OCaml-LSP is dependent on external tools (OCamlFormat for OCaml and refmt for Reason) for formatting source files. You should have the necessary tool (OCamlFormat and/or Refmt) installed in your opam switch or esy project to have formatting support. Note, however, that OCaml-LSP requires presence of OCamlFormat configuration file (called .ocamlformat) in the project root to be able to format source files in your project.

Contributing to project

# clone repo with submodules
git clone --recursive [email protected]:ocaml/ocaml-lsp.git

# if you already cloned, pull submodules
git submodule update --init --recursive

# create local switch (or use global one) and install dependencies
opam switch create . ocaml-base-compiler.4.12.0 --with-test

# don't forget to set your environment to use the local switch
eval $(opam env)

# build
make all

# the ocamllsp executable can be found at _build/default/ocaml-lsp-server/src/main.exe

Tests

To run tests execute:

$ make test

Note that tests require Node.js and Yarn installed.

Relationship to Other Tools

The lsp server uses merlin under the hood, but users are not required to have merlin installed. We vendor merlin because we currently heavily depend on some implementation details of merlin that make it infeasible to upgrade the lsp server and merlin independently.

History

The implementation of the lsp protocol itself was taken from facebook's hack

Previously, this lsp server was a part of merlin, until it was realized that the lsp protocol covers a wider scope than merlin.

Comparison to other LSP Servers for OCaml

Note that the comparisons below make no claims of being objective and may be entirely out of date:

  • reason-language-server This server supports bucklescript & reason. However, this project does not use merlin which means that it supports fewer versions of OCaml and offers less "smart" functionality - especially in the face of sources that do not yet compile.

  • ocaml-language-server This project is extremely similar in the functionality it provides because it also reuses merlin on the backend. The essential difference is that this project is written in typescript, while our server is in OCaml. We feel that it's best to use OCaml to maximize the contributor pool.

ocaml-lsp's People

Contributors

rgrinberg avatar ulugbekna avatar andreypopp avatar giltho avatar tmattio avatar mnxn avatar manasjayanth avatar khady avatar voodoos avatar cannorin avatar tatchi avatar smorimoto avatar c-cube avatar pinotree avatar rusty-key avatar fsouza avatar dependabot[bot] avatar jorisgio avatar gbury avatar actionshrimp avatar ulrikstrid avatar shalokshalom avatar tsnobip avatar zindel avatar nymphium avatar kit-ty-kate avatar squiddev avatar fourchaux avatar ggreif avatar let-def avatar

Stargazers

Maddison Hellstrom avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.