Runs the mystmd-lsp language server in VS Code, for the pages of MyST projects.
Pages can be Markdown files or the Markdown cells of notebooks.
See its features for what you get.
Highlighting comes from the MyST Syntax extension.
This extension depends on it, so installing this one installs both.
References are coloured with MyST Syntax’s string.other.link.label.myst scope, so they look like their (label)= targets.
MyST Author builds on this extension to add a live preview.
Install¶
Once it is published, search for “MyST Language Server” in the Extensions view.
Until then, build and install the .vsix from the repository root:
npm install
npm run package -w packages/vscode # writes packages/vscode/mystmd-lsp.vsix
code --install-extension packages/vscode/mystmd-lsp.vsixUntil MyST Syntax is published, build and install its .vsix from the myst-syntax repository first, since VS Code resolves extension dependencies from its gallery.
Projects¶
The extension activates, and starts the server, when a workspace folder contains a myst.yml anywhere.
A myst.yml added after that needs a window reload.
Only files that are pages of a MyST project get completion, warnings and navigation. Finding the project says how a file’s project is found.
A status bar item names the project of the active Markdown file or notebook cell.
It shows MyST: <folder> when the file is a page of a project, and MyST: not a page of <folder> or MyST: no project when it isn’t.
Click it for a sentence explaining the state.
In an untrusted workspace the server runs without mystmd, since mystmd runs the project’s plugins. So the project-wide features are off until you trust the folder.
Settings¶
mystmdLsp.serverPath runs a server you built yourself.
mystmdLsp.execute runs the project’s code when mystmd builds.
The Settings UI describes each.
The extension also turns off VS Code’s own Markdown path suggestions (markdown.suggest.paths.enabled).
They offer GitHub-style heading slugs that mystmd doesn’t use, and the server completes files and labels itself.
If you build an extension on this one, contributing says what activate() returns.