Skip to content
康小广 edited this page Aug 30, 2022 · 22 revisions

Editor Support

Visual Studio Code

Get the Extension from Visual Studio Marketplace

GNU Emacs

Tested under Linux. Not working for Windows, since sockets are not supported. See Windows.

(add-to-list 'lsp-language-id-configuration '(wolfram-mode . "Mathematica"))

(lsp-register-client
 (make-lsp-client :language-id 'wolfram
                  :new-connection (lsp-tcp-server-command
                                   (lambda (port)
                                     `("wolfram" ;; or "wolframscript"
                                       "-script" ;; or "-file"
                                       "path/to/lsp-wl/init.wls"
                                       ,(concat
                                         "--socket="
                                         (number-to-string port)
                                         ))))
                  :major-modes '(wolfram-mode)
                  :server-id 'lsp-wl
                  ))

Windows

For windows, emacs does not support socket communications. We can write a small script (in whatever language that supports stdio and TCP) to bridge between stdio and socket. An example js script can be found here: https://gist.github.com/kenkangxgwe/67e7a830848650bf88bbc36f8d3e2af5.

Then the emacs config becomes:

(add-to-list 'lsp-language-id-configuration '(wolfram-mode . "Mathematica"))

(lsp-register-client
 (make-lsp-client :language-id 'wolfram
                  :new-connection (lsp-stdio-connection
                                   '("node"
                                    "/path/to/lsp-wl-stdio-bridge.js"))
                  :activation-fn (lsp-activate-on "Mathematica")
                  :major-modes '(wolfram-mode)
                  :server-id 'lsp-wl
                  )) 

(Neo)vim

Use coc.nvim together with coc-lsp-wl.

Troubleshooting

Enable Logging

To reveal the internal debug and kernel message, change info to debug at init.wls#L188 or the similar place if you check out another branch. It reads:

    loglevel = ArgumentValue["--log"|"-l", Alternatives @@ LoggingLevels]
        // Replace[_Missing -> "debug"];

You can see the logging message in the output console of the editor. You may also dump it to a file. Uncomment init.wls#L194 or the similar place in another branch, so it reads:

    logstreams = {
        OpenWrite[WolframLanguageServer`RootDirectory <> "wlserver.log"],
        First @ Streams["stderr"]
    };

It will be saved to path/to/lsp-wl/wlserver.log.

Working with Mathematica 12.3/13.0

Mathematica 12.3 & 13.0 are shipped with a new ZeroMQLink paclet version 1.2.0 which was found to have issues with TCP connections.

Please manually upgrade the ZeroMQLink paclet to version 1.2.6 or later:

PacletInstall["ZeroMQLink"]

Working with Wolfram Engine

Some versions of Wolfram Engine do not come with symbol usages. Thus all the hovering and completion documentation will be empty with that particular version.

As a workaround, you can copy an existing Usage.m file from Mathematica or another version of Wolfram Engine.

The path is $InstallationDirectory\SystemFiles\Kernel\TextResources\$Language\Usage.m.

Cannot start w/ Mathematica 11.2

The Curry issue has been resolved in 0.2.1. If it still happens, please file an issue.

  • Currys has been replaced by lambda expressions project-widely.

    Meanwhile, I figured out that Curry is not so efficient as the lambda function, so I started to transform them back into Function.

    Mathematica 11.2 doesn't have Curry function, so far, you just need to checkout the develop branch, where I implemented my own MyCurry function.

Related Posts

中文