Visual Studio Code Client for Wolfram Language Server
by kenkangxgwe and hxianglong
Table of Contents
Please be advised to git pull the lastest minor version 0.2.x. There are some
breaking changes you want to know more in the server's
Wolfram Language Server (WLServer) is an implementation of the Microsoft's
Language Server Protocol
(LSP) for Wolfram
Language. This server is
implemented in Wolfram Language itself.
This is the client-side code for VS Code, which is based on some slight
modifications of Microsoft's LSP
However, you still need to manually install the
Wolfram Mathematica (11.2 or higher1) or Wolfram
Engine (12.0 or higher).
Download the server from its
git clone https://github.com/kenkangxgwe/lsp-wl.git
Install the dependent paclets with the correct versions from the Wolfram kernel / Mathematica.
(This will take a while for the first time) :
PacletInstall["AST", "UpdateSites" -> True]
PacletInstall["Lint", "UpdateSites" -> True]
Install the client extenstion from Visual Studio Marketplace: Wolfram
Once you have installed the extension, a few settings have to be done manually
in the client side to make things work.
After the extension is launched, go to Preference -> Settings -> User Settings
-> Extensions -> Wolfram Language Server, and configure the following options:
Port: The client communicates with the server through port. Feel free to use
any port that is not occupied by other processes.
WLServer Path: The path to the server repository.
Wolfram Path: The path of the
Wolfram executable. (NOT
For Windows users, the default path is
C:\Program Files\Wolfram Research\Mathematica\11.*\wolfram.exe.
For MaxOS users, the default path is
For Linux users, the default path is
Restart VS Code to take effect.
DocumentSymbol: You may typeset your package in the same way that
Mathematica FrontEnd handles it: a cell begins with two lines of comments,
where the first line specifies the style of the cell and the second line names it.
So you may get the outline structure of the file.
(* ::Title:: *)
(*Title of the file*)
(* ::Section:: *)
Hover: Provide documentations for functions and variables from the
System` context, such as
the special numerical literals with
Completion: The completion is shown by the client automatically.
Functions and system variables from the
System` context that matches the
input would be displayed. To enter an unicode character, you may use the
leader key \ followed by the alias just like esc in
Wolfram FrondEnd. E.g.,
<esc>a in the FrontEnd is input as
\a in the
editor and the server will show you the available completions.
Completion Resolve: Further information (such as documentation) would be
provided for the items in the list.
Diagnostics: Syntax error would be underlined. This feature is powered by
Lint paclets, thank you
Definition / References / DocumentHighlight: It is now able to look up the
definition and references of a local variable in a scope such as
Document Color / Color Presentation: Both Named Colors and
Color Models with constant parameters are able to show and modify.
(Experimental, may have performance issues.)
This is an early release, so more features are on the way. Notice that,
syntax highlight will NOT be provided as long as it is excluded in the LSP,
but there are already some good enough extensions written by Flip
SocketListen is used for server-client
communication, which is introduced since 11.2. ^