{"id":13484482,"url":"https://github.com/ocamllabs/vscode-ocaml-platform","last_synced_at":"2026-03-01T10:33:37.669Z","repository":{"id":37802830,"uuid":"225361931","full_name":"ocamllabs/vscode-ocaml-platform","owner":"ocamllabs","description":"Visual Studio Code extension for OCaml","archived":false,"fork":false,"pushed_at":"2025-03-26T14:22:12.000Z","size":12853,"stargazers_count":354,"open_issues_count":84,"forks_count":78,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-03-26T15:36:43.631Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ocamllabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-02T11:43:47.000Z","updated_at":"2025-03-26T14:22:10.000Z","dependencies_parsed_at":"2023-09-26T23:05:48.348Z","dependency_job_id":"df903280-0530-4aa3-86b4-2613c3babdc1","html_url":"https://github.com/ocamllabs/vscode-ocaml-platform","commit_stats":null,"previous_names":[],"tags_count":84,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocamllabs%2Fvscode-ocaml-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocamllabs%2Fvscode-ocaml-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocamllabs%2Fvscode-ocaml-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocamllabs%2Fvscode-ocaml-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocamllabs","download_url":"https://codeload.github.com/ocamllabs/vscode-ocaml-platform/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245882289,"owners_count":20687860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T17:01:25.057Z","updated_at":"2026-03-01T10:33:37.653Z","avatar_url":"https://github.com/ocamllabs.png","language":"OCaml","funding_links":[],"categories":["OCaml","Reason"],"sub_categories":["Editor Plugins"],"readme":"# VSCode OCaml Platform\n\n[![Builds, tests \u0026 co](https://github.com/ocamllabs/vscode-ocaml-platform/actions/workflows/main.yml/badge.svg)](https://github.com/ocamllabs/vscode-ocaml-platform/actions/workflows/main.yml)\n\n| Platform       | Downloads                                                                                                                                                                                           |\n| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| VS Marketplace | [![Visual Studio Marketplace Downloads](https://img.shields.io/visual-studio-marketplace/d/ocamllabs.ocaml-platform)](https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform) |\n| Open VSX       | [![Open VSX Downloads](https://img.shields.io/open-vsx/dt/ocamllabs/ocaml-platform)](https://open-vsx.org/extension/ocamllabs/ocaml-platform)                                                       |\n\nVisual Studio Code extension for OCaml and relevant tools.\n\n❗️ You are encouraged to read the [Getting started](#getting-started) section.\nThe rest of the document assumes you have read it. You may also find\n[Important concepts](#important-concepts) useful.\n\nIf you have issues with the extension and you have read the \"Getting Started\"\nsection, see [Debugging the extension](#debugging-the-extension) and [FAQ](#faq)\nbelow.\n\n## Getting started\n\n### Installation\n\nBelow we first install the extension dependencies and then the extension itself.\nYou can reverse the order; it's just that the extension will not work to its\nfull without all of its dependencies.\n\n1. Installing extension dependencies\n\n   This VS Code for most of its OCaml language support functionality requires\n   OCaml Language Server (often called `ocaml-lsp` or `ocamllsp`). Install\n   [ocaml-lsp-server](https://github.com/ocaml/ocaml-lsp) package as usual with\n   a package manager of your choice: [OPAM](https://github.com/ocaml/opam) or\n   [esy](https://github.com/esy/esy). Installation instructions by package\n   manager are available\n   [here](https://github.com/ocaml/ocaml-lsp#installation).\n\n   \u003e Make sure to install the packages in the sandbox (usually, OPAM\n   \u003e [switch](https://opam.ocaml.org/doc/Usage.html#opam-switch) or esy\n   \u003e [sandbox](https://esy.sh/docs/en/getting-started.html)) you use for\n   \u003e compiling your project.\n\n   Optionally:\n\n   - Install\n     [ocamlformat](https://github.com/ocaml-ppx/ocamlformat#installation)\n     package if you want source file formatting support.\n\n     Note: Formatting support requires having `.ocamlformat` file in your\n     project root directory.\n\n   - When you hover the cursor over OCaml code, the extension shows you the type\n     of the code. Install\n     [ocamlformat](https://github.com/ocaml-ppx/ocamlformat#installation) to get\n     nicely formatted types.\n\n2. Install this extension from the VSCode\n   [Marketplace](https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform).\n   VSCode extension installations instructions are available\n   [here](https://code.visualstudio.com/docs/editor/extension-marketplace).\n\n### Setting up the extension for your project\n\n1. Open your OCaml/ReasonML project (`File \u003e Add Folder to Workspace...`).\n\n2. Configure the extension to use the desired sandbox (usually, OPAM switch or\n   esy sandbox). You can pick it by\n\n   - either calling VSCode command \"OCaml: Select a Sandbox for this Workspace\"\n     (one can do this from VSCode Command Palette - \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eP\u003c/kbd\u003e\n     or on MacOS \u003ckbd\u003eCmd\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eP\u003c/kbd\u003e)\n   - or clicking on the package icon at the bottom of VSCode window and picking\n     your sandbox from the menu\n\n     ![pick sandbox](./doc/pick_sandbox.png)\n\n   \u003e _What's a sandbox?_ In short, the main purpose of a sandbox is to specify\n   \u003e how this extension should invoke its dependencies such as\n   \u003e `ocaml-lsp-server` or `ocamlformat`. For more information on what a sandbox\n   \u003e is, see \"Sandbox\" subsection.\n\n3. Build your project with [Dune](https://github.com/ocaml/dune) to get\n   go-to-definition, auto-completion, etc.\n\n   \u003e Important note: OCaml Language Server has its information about the files\n   \u003e from the last time your built your project.\n\n   _Caveat 1:_ Because of the note above, during active development of your\n   project, we advise building your project with dune in a polling mode using\n   the option `--watch`. This rebuilds your project whenever a file is changed\n   in your project. For example, run\n   `dune build --watch --terminal-persistence=clear-on-rebuild` in your VSCode\n   [integrated terminal](https://code.visualstudio.com/docs/editor/integrated-terminal).\n\n   _Caveat 2:_ Save the currently open file to get latest diagnostics (error and\n   warning squiggly underlining). For example, if you created a module `A` in\n   some file, and you still get an error that it's \"unbound\" (i.e., not found)\n   in the current file, save the file to get up-to-date diagnostics, assuming\n   you built your project after adding `A` or are running build in a polling\n   mode, and make sure that error isn't a stale error.\n\nBy this point, you should have a working OCaml development editor ready.\n\n### Dune Package Management (DPM)\n\nThis extension now supports **Dune Package Management (DPM)** as a sandbox for\nyour OCaml projects.\n\nDPM becomes available when your system has:\n\n- **Dune version ≥ 3.20.0**, or\n- A **Dune preview build dated 2025-07-30 or later**.\n\nA final required feature was implemented on **2025-07-29**, enabling full\nsupport for Dune development tools (`dune lock`, `dune tools exec`, and tools\nlike `ocamlformat`) inside the `ocamllsp` sandbox environment.\n\n#### Automatic Detection\n\nWhen a compatible Dune version is detected:\n\n- The extension automatically recognizes that your environment supports DPM.\n- A popup notification informs you that **Dune Package Management is\n  available**.\n- If your project is **not yet locked**, the extension will prompt you to lock\n  the project.\n\n- Once the project is locked, the extension will automatically configure\n  `ocamllsp` to use the DPM sandbox.\n\n#### Using Dune Package Management\n\nTo manually enable DPM for your project at any time:\n\n1. Open your OCaml project in VSCode.\n2. In the status bar (bottom-right), click the **sandbox selector**.\n3. Choose **“Dune Package Management”** from the list of available sandboxes.\n\nThe extension then configures `ocamllsp` to run inside the DPM sandbox, ensuring\nthat all Dune dev tools are available in the sandboxed `PATH`.\n\n### ReasonML / ReScript / BuckleScript\n\nReasonML, as an alternative syntax for OCaml, is supported out-of-the-box, as\nlong as `reason` is installed in your environment.\n\nThe new ReScript syntax (`res` and `resi` files) is not supported, you should\nuse [rescript-vscode](https://github.com/rescript-lang/rescript-vscode) instead.\n\nIf you're looking for a way to use OCaml or ReasonML syntax in a ReScript\nproject, it is no longer supported by this extension.\n\nIf you need to compile existing OCaml or ReasonML syntax to JS and use this\nextension, you can use [Melange](https://github.com/melange-re/melange):\n\n1. Install esy\n\n```bash\nnpm install esy --global\n```\n\n2. You can use the\n   [Melange basic template](https://github.com/melange-re/melange-basic-template)\n   to add OCaml LSP support. Then modify esy.json to pin ocaml-lsp-server to\n   version 1.8.3 due to lack of Merlin support in newer versions.\n\n```json\n{\n  \"dependencies\": {\n    \"@opam/ocaml-lsp-server\": \"1.8.3\"\n  }\n}\n```\n\n3. Install and build packages\n\n```bash\nesy\n```\n\n## Important Concepts\n\n### Sandbox\n\nSandbox defines environment that the extension sees, for example, to launch\n`ocamllsp`, detect OCaml compiler version, or use `ocamlformat`.\n\nThe extension supports 4 kinds of sandboxes:\n\n1. Global\n\nThe extension uses the environment that VS Code was opened in.\n\n2. OPAM Sandbox\n\nThe extension uses the environment defined by the OPAM switch that the user\npicks. Both global and local OPAM switches are supported.\n\n3. Esy Sandbox\n\nThe extension uses the environment defined by the Esy sandbox that the user\npicks.\n\n4. Custom\n\nUser can define how they would like to run commands using a (templated) command\nwhere `$prog` and `$args` strings need to be used to denote how to run an\nextension dependency and how arguments can be passed. One can imitate an OPAM\nsandbox using a custom sandbox by passing a command\n`opam exec --switch=4.13.1 --set-switch -- $prog $args` -- the extension can\nthen replace `$prog` with `ocamllsp` and `$args` with arguments it wants to pass\nto `ocamllsp`.\n\n## Features\n\n- Syntax highlighting\n  - ATD\n  - Cram tests\n  - Dune\n  - Menhir\n  - Merlin\n  - META\n  - OASIS\n  - OCaml\n  - OCamlbuild\n  - OCamlFormat\n  - OCamllex\n  - opam\n  - ReasonML\n  - Eliom\n- Indentation rules\n- Snippets\n  - Dune\n  - OCaml\n  - OCamllex\n- Task Provider\n  - Dune\n- Debugger\n  - Earlybird (experimental)\n\n## Configuration\n\nThis extension provides options in VSCode's configuration settings. You can find\nthe settings under `File \u003e Preferences \u003e Settings`.\n\n| Name                                      | Description                                                                                             | Default |\n| ----------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------- |\n| `ocaml.sandbox`                           | Determines where to find the sandbox for a given project                                                | `null`  |\n| `ocaml.dune.autoDetect`                   | Controls whether dune tasks should be automatically detected.                                           | `true`  |\n| `ocaml.trace.server`                      | Controls the logging output of the language server. Valid settings are `off`, `messages`, or `verbose`. | `off`   |\n| `ocaml.useOcamlEnv`                       | Controls whether to use ocaml-env (if available) for opam commands from OCaml for Windows.              | `true`  |\n| `ocaml.terminal.shell.linux`              | The path of the shell that the sandbox terminal uses on Linux                                           | `null`  |\n| `ocaml.terminal.shell.osx`                | The path of the shell that the sandbox terminal uses on macOS                                           | `null`  |\n| `ocaml.terminal.shell.windows`            | The path of the shell that the sandbox terminal uses on Windows                                         | `null`  |\n| `ocaml.terminal.shellArgs.linux`          | The command line arguments that the sandbox terminal uses on Linux                                      | `null`  |\n| `ocaml.terminal.shellArgs.osx`            | The command line arguments that the sandbox terminal uses on macOS                                      | `null`  |\n| `ocaml.terminal.shellArgs.windows`        | The command line arguments that the sandbox terminal uses on Windows                                    | `null`  |\n| `ocaml.repl.path`                         | The path of the REPL that the extension uses                                                            | `null`  |\n| `ocaml.repl.args`                         | The REPL arguments that the extension uses                                                              | `null`  |\n| `ocaml.repl.useUtop`                      | Controls whether to use Utop for the REPL if it is installed in the current switch.                     | `true`  |\n| `ocaml.commands.construct.recursiveCalls` | When enabled, the construct command will execute again on the next hole after a value has been chosen.  | `true`  |\n\nIf `ocaml.terminal.shell.*` or `ocaml.terminal.shellArgs.*` is `null`, the\nconfigured VSCode shell and shell arguments will be used instead.\n\nIf `ocaml.repl.path` or `ocaml.repl.args` is `null`, the default REPL is used\ninstead. The default REPL used depends on the packages installed in your current\nsandbox:\n\n- If `dune build` passes and the current sandbox has `utop` installed, the REPL\n  will be `dune utop`\n- If `dune build` fails and the current sandbox has `utop` installed, the REPL\n  will be `utop`\n- Else, the REPL will be `ocaml`\n\nIf a REPL already exists, it will be used instead, so if you installed `utop`\nafter openning a REPL, or if you fixed your project compilation, you will need\nto re-open the REPL to change it.\n\n## Commands\n\nAn easy way to see what commands are offered by the extension in the currently\nopen file, you can invoke VSCode Command Palette and search for commands with\nprefix `OCaml:`:\n\n![commands](./doc/commands.png)\n\n| Name                           | Description                                 | Keyboard Shortcuts |\n| ------------------------------ | ------------------------------------------- | ------------------ |\n| `ocaml.select-sandbox`         | Select sandbox for this workspace           |                    |\n| `ocaml.server.restart`         | Restart language server                     |                    |\n| `ocaml.open-terminal`          | Open a terminal (current sandbox)           |                    |\n| `ocaml.open-terminal-select`   | Open a terminal (select a sandbox)          |                    |\n| `ocaml.current-dune-file`      | Open Dune File (located in the same folder) |                    |\n| `ocaml.switch-impl-intf`       | Switch implementation/interface             | `Alt+O`            |\n| `ocaml.open-repl`              | Open REPL                                   |                    |\n| `ocaml.evaluate-selection`     | Evaluate Selection                          | `Shift+Enter`      |\n| `ocaml.copy-type-under-cursor` | Copy the type under the cursor              |                    |\n| `ocaml.search-by-type`         | Search a value by type or polarity          | `Alt+F`            |\n\n## Debugging OCaml programs (experimental)\n\nExperimental support for debugging OCaml programs is provided via\n[earlybird](https://github.com/hackwaly/ocamlearlybird). Problems with the\ndebugger should be reported at \u003chttps://github.com/hackwaly/ocamlearlybird\u003e.\n\nTwo steps to set up debugging:\n\n1. Install [earlybird](https://opam.ocaml.org/packages/earlybird/), which\n   provides the `ocamlearlybird` executable.\n\n   For newer OCaml version support, opam pin the development version from\n   \u003chttps://github.com/hackwaly/ocamlearlybird\u003e.\n\n2. If you use `dune` language version 3.0+ to build your project, switch to 3.7+\n   and make sure that you add:\n\n   ```\n   (map_workspace_root false)\n   ```\n\n   to your `dune-project` file. More info on this\n   [here](https://dune.readthedocs.io/en/stable/reference/dune-project/map_workspace_root.html).\n\n3. Build _bytecode_ version of your OCaml program executable.\n\n   See\n   [dune documentation](https://dune.readthedocs.io/en/stable/quick-start.html#building-a-hello-world-program-in-bytecode)\n   for further information.\n\nThere are three ways to launch the debugger in VS Code:\n\n1. Navigate to the built OCaml bytecode executable in VS Code Explorer panel (a\n   `.bc` file in `_build` directory), right click on it and select \"Start OCaml\n   Debugging (experimental)\".\n\n   The debugger launches immediately.\n\n2. If no VS Code launch configurations (the `.vscode/launch.json` file) exist,\n   then navigate to VS Code Run and Debug panel, click on \"create a launch.json\n   file\" and select \"OCaml earlybird (experimental)\".\n\n   Run the created \"OCaml earlybird (experimental)\" launch configuration to\n   launch the debugger. By default, it asks to open an OCaml bytecode executable\n   (a `.bc` file in `_build` directory) to debug. You can hard-code a specific\n   program instead of the default `${command:AskProgram}`.\n\n3. If some VS Code launch configurations exist (in `.vscode/launch.json`), then\n   open the `launch.json` file and inside `configurations` press Ctrl+Space to\n   select the \"OCaml earlybird (experimental)\" snippet. Then fill in the OCaml\n   bytecode executable path and desired launch configuration name.\n\n   Run the created launch configuration to launch the debugger.\n\n## Debugging the extension\n\n### Problems with code or file formatting support\n\nIf you are experiencing problems with OCaml code support, e.g., you invoke\n`Go to Definition` on a symbol (for example, a variable name), but nothing\nhappens, or you hover the cursor over a symbol and don't see its type, the\nproblem is likely to be with OCaml-LSP, which is responsible for code support.\n\nTwo steps to see if there are reported problems with OCaml-LSP (which you can\neither act upon yourself if you can or report the problem in Issues/Discussion\nof this repository):\n\n1. Set the `ocaml.trace.server` setting to `verbose` in VS Code settings.\n\n![trace verbose](./doc/trace_verbose.png)\n\n2. Invoke command `OCaml: Show OCaml Language Server Output` from the VS Code\n   Command Palette. This command shows requests and responses exchanged between\n   this extension and OCaml-LSP. If, for example, `Go to Definition` is not\n   working when you think it should, you may see some exception logged in this\n   Output View:\n\n   ```\n   [Error - 10:41:51 PM] Locate failed. File_not_found: 'Fiber' seems to originate from 'Fiber' whose ML file could not be found\n   ```\n\n   You can also sometimes see explicitly an exception being thrown. Such kind of\n   information in an issue report is usually very helpful in detecting and\n   fixing the problem.\n\nIf you face such kind of problems that you cannot resolve on your own, please,\ncheck that the issue hasn't been reported yet and report in\n[Issues](https://github.com/ocaml/ocaml-lsp/issues) if necessary.\n\nNote: File formatting is performed on the OCaml-LSP side, so OCaml-LSP may be\nthe culprit in a formatting problem. Make sure, however, that you've read\n[Getting Started](#getting-started) section, which describes some initial setup\nrequired for file formatting to work.\n\n### Problems with this Extension or OPAM support in the Extension\n\nOne by one, invoke and see outputs for commands\n`OCaml: Show OCaml Platform Extension Output` and\n`OCaml: Show OCaml Commands Output`. In these Output Views you may see errors\nand warnings, which can be handy to detect and fix the problem you're facing.\nPlease, check the issue you're facing hasn't been already reported and report in\n[Issues](https://github.com/ocamllabs/vscode-ocaml-platform/issues) tab of this\nrepository, if necessary.\n\n### Things to include in your Issue report\n\nIt is helpful to include information such as\n\n- Operation system information\n- VS Code version\n- OCaml Platform Extension version\n- OCaml-LSP version\n- Reproducible setup (some codebase, for example, where we can see the bug\n  happening) the problem\n- Output View information described above\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003eI installed \u003ccode\u003eocaml-lsp-server\u003c/code\u003e, but the extension still cannot find it.\u003c/summary\u003e\n\nMake sure you installed the the language server in the sandbox used by the\nextension.\n\n_OPAM_: If you're using opam, make sure that you're using correct switch when\ninstalling the extension by running `opam switch` to see the current switch and\ncheck the sandbox set for the current VSCode workspace (see \"Setting up the\nextension for your project\" section to learn more about picking a sandbox for\nthe extension).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e I am getting \u003ccode\u003eUnbound module ...\u003c/code\u003e error. What should I do? \u003c/summary\u003e\n\n1. Make sure the module _should_ be visible, e.g., there is no typo in the\n   module name, you added the module to `libraries` stanza in your `dune` file,\n   etc.\n\n2. Make sure you have up-to-date diagnostics (error and warning squiggly\n   underlining). Diagnostics are sent when the file open, when file is edited,\n   and when it is saved. Save the file containing the error to make sure the\n   error isn't stale.\n\n3. Make sure you have built your project after adding that module to your\n   environment. We suggest adhering to _Caveat 1_ in \"Setting up the extension\n   for your project\" section. If you haven't built it, build it and go to\n   step 2.\n\n4. If you are sure there must be a problem with the extension, file an issue.\n\n\u003c/details\u003e\n\nIn case you have a question or problem not listed above:\n\n- if you don't understand how to the extension works or how to make it work\n  correctly, create a new discussion in the repository Discussions\n  [tab](https://github.com/ocamllabs/vscode-ocaml-platform/discussions).\n\n- if the extension seems to misbehave:\n  - see [Debugging](#debugging) section to see if you can see any reported\n    errors\n  - file an issue in the repository Issues\n    [tab](https://github.com/ocamllabs/vscode-ocaml-platform/issues).\n\nIf this section doesn't contain the problem you managed to resolve, and you\nthink this may help others, consider adding the problem and its solution here by\ncreating a Pull Request.\n\n## For advanced users\n\nThis part of README is only for advanced users, who would like more\ncustomization.\n\n### Disable code lens\n\nCode lens are type information displayed over a symbol. In the screenshot below,\ncode lens is grey text `t -\u003e Sandbox.t`.\n\n![how code lens look like in VSCode](./doc/code_lens.png)\n\nYou can disable code lens for all extensions, i.e., in whole VS Code, set this\nsettings in your `settings.json`:\n\n```json\n  \"editor.codeLens\": false\n```\n\nOr if you only want to disable it for OCaml:\n\n```json\n\"[ocaml]\": {\n\t\"editor.codeLens\": false\n}\n```\n\nYou can also search for \"code lens\" in the VSCode settings tab and there will be\na checkbox you can untick to disable it:\n\n![disable code lens in\n VSCode](https://user-images.githubusercontent.com/25037249/102419410-88664900-3fb4-11eb-9770-a2efc73c4a00.png)\n\n(Credit for this answer goes to @mnxn)\n\n### Enable only syntax highlighting (No type-on-hover, go-to-definition, etc.)\n\nThe extension does not offer such functionality because it is rarely necessary.\nA workaround is to _not_ install `ocamllsp`. As a result you will mostly have\njust syntax highlighting for OCaml source files but also a warning notification\nthat `ocamllsp` wasn't found. See this\n[issue](https://github.com/ocamllabs/vscode-ocaml-platform/issues/889), feel\nfree to upvote this issue by leaving a thumbs-up reaction. Pull requests are\nwelcome as well.\n\n### Persisting sandbox information\n\nSandbox information is persisted in `.vscode/settings.json`. Below we show how\nthis settings file's content may look like with different sandbox options.\n\n1. Global\n\n```json\n{\n  \"ocaml.sandbox\": {\n    \"kind\": \"global\"\n  }\n}\n```\n\n2. OPAM\n\n_Global switch_\n\n```json\n{\n  \"ocaml.sandbox\": {\n    \"kind\": \"opam\",\n    \"switch\": \"ocaml-base-compiler.4.13.1\"\n  }\n}\n```\n\n_Local switch_\n\n```json\n{\n  \"ocaml.sandbox\": {\n    \"kind\": \"opam\",\n    \"switch\": \"/Users/ulugbekna/code/olsp\"\n  }\n}\n```\n\n3. Esy\n\n```json\n{\n  \"ocaml.sandbox\": {\n    \"kind\": \"esy\",\n    \"root\": \"${firstWorkspaceFolder}\"\n  }\n}\n```\n\n4. Custom\n\n```json\n{\n  \"ocaml.sandbox\": {\n    \"kind\": \"custom\",\n    \"template\": \"opam exec -- $prog $args\"\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focamllabs%2Fvscode-ocaml-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focamllabs%2Fvscode-ocaml-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focamllabs%2Fvscode-ocaml-platform/lists"}