My First Visual Code Extension

Search for a command to run...

No comments yet. Be the first to comment.
I'm a big fan of a table of contents (ToC) on the side of a blog post page, especially if it is a long article. It helps me gauge the article's length and allows me to navigate between the sections quickly. In this article, I will show you how to cre...

This year I launched a free eBook with 27 helpful tips for Vue developers for subscribers of my weekly Vue newsletter. For marketing purposes, I showed a popup on the landing page of my portfolio page each time a user visited my site. I was aware tha...

My portfolio website is built with Nuxt 3 and Nuxt Content v2. An RSS feed with my latest five blog posts is available here. In this article, you'll learn how to add an RSS feed to your Nuxt website. Setup First, let's create a new Nuxt 3 project. As...

title: How to Create a Custom Code Block With Nuxt Content v2 published: true date: tags: nuxt, vue, nuxtjs, vuejs, webdev canonical_url: https://www.mokkapps.de/blog/how-to-create-a-custom-code-block-with-nuxt-content-v2/ cover_image: https://dev-t...

Code blocks are essential for blogs about software development. In this article, I want to show you how can define a custom code block component in Nuxt Content v2 with the following features: Custom styling for code blocks inside Markdown files Sho...

Screenshot of the extension in use
I am really a big fan of Visual Code and use it as my main IDE for software development. The available selection of extensions (see the Extension Marketplace) is amazing.
As I started using Visual Code I found every extension I was looking for. But lastly I stumbled upon a feature where I could not find an extension for. So I decided to write my first VS code extension and let you know about my experiences during the development.
Currently I am doing a lot of Angular development and therefore use Jasmine for unit tests. My first IDE which I used for web development was WebStorm which is based on IntelliJ IDEA. In WebStorm I often used and liked the plugin ddescriber for Jasmine tests:
Intellij plugin to quickly transform a JavaScript test block from describe() to ddescribe() and a test it() into iit()
This is a nice feature but I often used the plugin to list all available specs and then jump to certain describe() or it() block:
Just type Ctrl + Shift + D (Command + Shift + D on a Mac) to launch a dialog that lets you choose which suites or unit tests you want to include or exclude.
This is useful in large unit tests which includes many describe() or it() blocks.
As I could not find a VS code extension which solves this problem, I decided to write my first own VS code extension.
The first version of the extension should be able to:
List all describe() or it() blocks as dropdown in an opened file in the editor
If a block is selected, move the cursor to this block
Big applause to the VS code team for the amazing documentation on how to build your own VS code extension.
It is really easy to grab one of the example projects or create a new one using Extension Generator and get started. Additionally it is very easy to run and debug your new extension.
Searching through the Extension API documentation I found this method
showQuickPick(items: T[] | Thenable<T[]>, options?: QuickPickOptions, token?: CancellationToken): Thenable<T | undefined>
which functionality is described as:
Shows a selection list allowing multiple selections.
It looks this way in VS code if it is called:
So this sounded like a good opportunity to list all test blocks and provide a way to receive the selected value.
So basically I had to implement these steps:
Grab all strings in the opened editor which include it( or describe( and the corresponding line number of this string
Pass them to showQuickPick method
Receive the selection and move the cursor the corresponding line number
The final output for a Jasmine test file looks like this:
Another very nice experience was the very easy publishing process for VS code extensions. Basically I had just to follow the official documentation which requires an Visual Studio Team Services account.
The published extension is available in the Visual Studio Code Marketplace.
In summary it made a lot of fun to develop a VS code experience. The documentation and the provided examples are very good and I am very happy to have added a functionality to my favorite code editor which I have been missing.
Originally published at www.mokkapps.de.