BlitzMax for Visual Studio Code

Welcome to the BlitzMax extension for Visual Studio Code!
If you are new to BlitzMax or VS Code, make sure you read how to get started.
This extension provides the following features inside VS Code for BlitzMax source files:
BlitzMax NG 1.00 and newer ships with its own language server, so error checking, auto-complete, outline, go to definition and rename work straight away with nothing to install and nothing to set up.
You can discuss this extension on Discord: 
We hang out in the #vscode-extension channel!
Get started writing BlitzMax code in VS Code
Changelog
See CHANGELOG.
Note about using the Language Server Protocol
A language server is a separate program that reads your project and your code, and tells the editor what it found.
Error checking, auto-complete, the outline, go to definition, rename and hover documentation all come from it.
BlitzMax NG 1.00 and newer ships with one, so a recent release is all you need.
It is called bls and it sits in the bin folder of your BlitzMax NG install, next to bcc and bmk, which is exactly where the extension looks.
If you moved it somewhere else, point blitzmax.lsp.path at it.
bls shares its parser and its model of the language with the compiler, so what it tells you is what a build would tell you.
It also works on a project that has never been built, and on edits you have not saved yet.
You get:
- Errors and warnings straight from the compiler, shown as you work
- Outline, breadcrumbs, folding and Go to Symbol in Workspace
- Auto-complete offering only what your program can actually reach
- Go to definition, go to type, find all references, and rename across the whole project
- Type hierarchy, so you can walk up and down from any type
- Hover documentation, signature help and inline hints
- Colouring by what a name really is, so a type and a local no longer look alike
- Quick fixes on the problems it reports
Any other server will work too, as long as it speaks LSP.
Point blitzmax.lsp.path at it and put anything it needs on the command line in blitzmax.lsp.args.
The server reads your project the way a build would, so it needs to know which build you mean.
blitzmax.lsp.buildMode picks debug or release, blitzmax.lsp.targetPlatform and blitzmax.lsp.targetArchitecture pick the target, and leaving those two empty means the machine you are sitting at.
The rest of the blitzmax.lsp settings are described in the settings editor.
If different workspace folders use different BlitzMax SDKs, enable blitzmax.lsp.multi. Each folder can then override blitzmax.base.path and blitzmax.lsp.path in its own .vscode/settings.json; folders without overrides continue to use your user-level defaults.
Useful LSP links for server developers:
VS Code specific information
Official LSP specifications
Formatting is not part of the language server, so this one still needs a separate program.
The extension looks for a formatter called bfm in the bin folder of your BlitzMax NG install, next to bls.
If yours has a different name or lives somewhere else, point blitzmax.formatter.path at it.
The extension will offer to help the first time you format without one.
FAQ
Q. What languages are supported?
- A. Only BlitzMax NG is officially supported.
You can enable the 'Legacy Mode' build option for basic BlitzMax Vanilla/Legacy build support.
(I highly recommend you upgrade to BlitzMax NG)
Q. Why is the outlines view and breadcrumbs not working?
- A. These come from the language server.
BlitzMax NG 1.00 and newer ships with one, so updating BlitzMax is usually the fix.
Q. I've found an issue / I'd like to make a feature request, what do I do?
Q. How do I <do this or that> in VS Code?
(aka. I need more help)
Credits
BlitzMax by Mark Sibly.
BlitzMax NG by Brucey.
Extension by Hezkore.
Icons by GWRon.
Contributing
Contributions are greatly appreciated.
Fork this repository and open your pull requests.
License
Licensed under the MIT License.