#+TITLE: F# layer #+TAGS: general|layer|multi-paradigm|programming [[file:img/fsharp.png]] * Table of Contents :TOC_5_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] - [[#configuration][Configuration]] - [[#choosing-a-backend][Choosing a backend]] - [[#eglot][Eglot]] - [[#lsp][LSP]] - [[#key-bindings][Key bindings]] - [[#repl][REPL]] * Description This layer adds support for F# language using [[https://github.com/fsharp/fsharpbinding][fsharpbinding]] and [[https://github.com/fsharp/fsharpbinding][fsharp-mode]]. ** Features: - Auto-completion - Syntax-checking - Syntax highlighting - REPL * Install To use this configuration layer, add it to your =~/.spacemacs=. You will need to add =fsharp= to the existing =dotspacemacs-configuration-layers= list in this file. In addition you require the .NET Core executable in your path. * Configuration All layer configurations can be done by setting layer variables in your dotfile. No custom user config lines are necessary ** Choosing a backend This layer provides two alternative backends to choose from. *** Eglot This is the default choice if nothing is set and no lsp layer is loaded in your dotfile. This mode provides straight forward IDE capabilities by means of an external server using the LSP protocol using =eglot-mode= a lightweight LSP client. The server is started automatically when a fsharp file is opened. This backend is best used if small applications are edited. To set explicitly set the following in your dotfile: #+BEGIN_SRC emacs-lisp (fsharp :variables fsharp-backend 'eglot) #+END_SRC *** LSP For proper IDE support this backend should be used. It is also based on an external LSP server however it is using a more elaborate client providing a lot of standard feature which are not available by the lightweight alternative. The server is started automatically when a fsharp file is opened. The key bindings are the same for all lsp modes so if you are already familiar with one you should be able to work the same in all modes. To set explicitly do the following in your dotfile: #+BEGIN_SRC emacs-lisp (fsharp :variables fsharp-backend 'lsp) #+END_SRC Normally LSP mode should install the matching server for you if you require a specific version you need to install it yourself from [[https://github.com/fsharp/FsAutoComplete][here]]. NOTE: Key bindings for LSP are defined in the LSP layer. Also it is advisable to have a look at the autocomplete layer for an optimal intellisense config for LSP. * Key bindings | Key binding | Description | |-------------+----------------------| | ~SPC m c c~ | Build the project | | ~SPC m g a~ | Go to alternate file | ** REPL | Key binding | Description | |--------------------------+------------------------------------------------------------------| | ~SPC m s b~ | Send buffer to the REPL | | ~SPC m s B~ | Send buffer to the REPL and switch to the REPL in =insert state= | | ~SPC m s i~ or ~SPC m '​~ | Start a REPL process | | ~SPC m s p~ | Send phrase to the REPL | | ~SPC m s P~ | Send phrase to the REPL and switch to the REPL in =insert state= | | ~SPC m s r~ | Send region to the REPL | | ~SPC m s R~ | Send region to the REPL and switch to the REPL in =insert state= |