When I have time to actually code these days, I tend to jump between the "big three" F# code editors; each have their own strengths. One of VS Code's best features is its extensibility model - there are thousands of them, from language plugins to data visualisation to source control managers. Here's a list of some of the extensions that I use on a regular basis when working with F# and Azure which I find improve my productivity as well as make coding that bit more enjoyable (or less painful, depending on your perspective!).
Ionide is the defacto F# extension for VS Code. Completely free to use (although you should consider contributing to the project if you use it commercially), it contains not only support for F# the language, but also full integration with code navigation and shortcuts as well as a selection of refactorings.
Better Comments highlights your code comments, such as
//TODO in a different colour, and also includes a nice navigation panel to allow you to quickly locate such comments quickly and easily.
This plugin attempts to override user/workspace settings with settings found in standard .editorconfig files. Useful if you want a project to confirm to certain guidelines across a team - so useful not just in commercial projects but also if you have an OSS project and want contributors to follow a consistent style.
This clever extension will automatically show you files and directories as soon as you open a quote (") with what looks like a valid path e.g. "/foo/" will provide a listing of all files in the "foo" folder. This is also useful for finding relative paths to scripts and DLLs, although F#5's built-in script NuGet support has somewhat lessened the need for this.
If you use SAFE Stack and the Elmish model, this extension is invaluable. It highlights corresponding start and end brackets with different colours (for nesting), and highlights brackets that don't have an associated open or close.
Another visual aid, this extension will overlay indents of e.g 4 spaces with a lightly coloured background. If you put one space too many or too few, it'll highlight that line in red. Especially for beginners to F# who are not used to whitespace-sensitivity, this extension is invaluable to help you track such errors.
The gitignore extension provides you with an easy way to create "default" gitignore files that support the most common setups. There's one for Visual Studio that I use often - ignore the name, it works fine with VSCode too, and includes matches for F# things like Ionide's local database cache file. Use this extension to make sure you don't find out that someone has accidentally committed that 10mb file into git!
Git Graph shows a nice embedded UI into VS Code for the tree of commit history. It includes some of the more common tasks as well, such as merging, pulling and checking out different branches. If you need a simple UI to visually see what's happening on your repository, Git Graph fits the bill.
If you're a user of GitHub (and, let's face it, if you're doing any form of Git today, there's a very, very high chance that you are!) then you should take a look at this extension. It allows you to not only create repositories directly from with VS Code, but also handle pull requests directly in the editor - from adding code review comments to approving a PR to even creating issues through
TODO comments. One caveat is that it doesn't seem to work quite as well with multiple accounts - for example, I haven't figured out how to let me create a new repository in our company account rather than my personal GH area.
A more powerful tool, GitLens provides all sorts of integrations into VSCode for git repositories, including line-by-line highlighting of who last made a change (almost like an "always on" git blame) as well as more extensive integration of git commands. I personally have backed away from this tool as it requires a fair bit of effort to tune to exactly how you like - and I found all of the information it provides overwhelming - but if you're a power git user, you can do worse than check this out.
The Azure Account extension is a kind of "base" extension that others use; it allows you to sign in to your Azure account, select a subscription and so on. You'll need this for some of the others listed below!
If you're an infrastructure-as-code kinda developer on Azure, you'll have no doubt looked at ARM templates. This extension provides a visual map of the components that you've created, including dependency chains. For Farmer development, this extension is an invaluable way to rapidly see what resources Farmer creates.
On the same subject, this extension provides a handy set of snippets, error highlighting and so on. So if for some reason you've decided to create ARM templates by hand, rather than use Farmer (why!), then you'll almost certainly want this extension.
This preview extension provides you with a way to visually navigate through all your Azure resources without leaving VS Code in a handy tree view. It also has a set of "child" extensions that provide more information on specific resource types, such as the Azure App Service extension.
The Azure Storage extension allows you to view blobs directly from VS Code, including copying, downloading and deleting them. Very handy, and much quicker than the bloated Azure Storage Explorer tool.
Working with Data
This handy extension provides a code formatter for XML documents, which you can apply using the standard VS Code "Format Document" command (SHIFT + ALT + F).
Rainbow CSV is a simple to use extension which will automatically highlight each column of your CSV in a different colour so that you can more easily distinguish between them. This is especially useful for a wide document with many columns.
If you need something a little more than Rainbow CSV, the Excel Viewer (which also works with CSV files) offers you a tabular read-only view of your data, complete with sorting and filtering capabilities. Again, very useful if you're in Code and wish to quickly interrogate a file without leaving the IDE.
If you're looking to create some markdown content, you'll sometimes want to insert data from a table sourced from e.g. a CSV file. This extension allows you to highlight some CSV content and immediately convert it into a markdown table, with headers.
The SQL Server extension allows you to execute queries and view results directly within VS Code. It comes complete with auto-complete and type checking for your queries, and can save a list of well-known connections for you, too. For many use cases, you can easily use this instead of e.g. firing up SQL Server Management Studio, so I'd strongly advise testing this out.
If you're developing back-end web applications, you're probably using something like Postman (or just the browser itself) to test out your endpoints. The REST Client is a powerful extension that lets you test out arbitrary HTTP endpoints, as well as script entire sets of calls with full support for headers and authentication etc. If you're doing any form of back-end web development, this extension is a must-have.
You'll be surprised how often you use this last extension. As the name suggests, it's simple: you provide a URL, and it downloads the contents of that resource to your workspace. This is especially useful for e.g. working with type providers that can work from local files as well as remote URLs - you can test out the provider with the remote url, and if the data looks good, download it and then move to using the offline file.
A useful extension that contains a built-in colour picker palette, as well as integrations for auto-completion values. If you're working with colours for e.g. CSS files, this is a handy tool to have.
I like using Draw.IO, especially since the files can be browsed online relatively easily as well as the fact that they're quite lightweight. This is a full extension to create and edit diagrams, directly from within Code. If you're creating an architecture diagram for your application, you could do worse than give this a look!
One of VS Code's greatest assets is its extensibility. In this post, I've shown some of the key extensions that you should be looking at if you're using F# and Azure today on VS Code - hope you found it useful!
Have (fun _ -> ())