Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the correct approach to create a custom GoTo Definition behavior in VS Code extension?

I am creating a VS Code extension that supports a small proprietary language. One of the minimal requirements for it is to have a "Go To Definition" functionality for procedures only. Being very new to JavaScript/TypeScript i'm struggling with using VSCode's API to actually solve the problem.

I have a grasp on what is required to make a VS Code extension, i.e the purpose of package.json, activate function in extesnion.ts and a general understanding of TypeScript (coming from Python). I have tried to refer to some open-source code that implements a much more advanced version of my extension (vscode-go), but the code there is overwhelming to go through as a TS beginner.

Essentially my question boils down to: Is there a simple way (may be an abstract set of steps?) to implement a very basic "go-to function definition within the same file" behavior, without resorting to creating a custom language server?

like image 516
Nan Nanco Avatar asked Sep 14 '25 18:09

Nan Nanco


1 Answers

To provide a Go To Definition feature, just like other extensions, you just have to register and implement a DefinitionProvider.

You don’t need a language server for that, nor any complex tooling. A simple lazy parser would work just fine :-).

I’ve made a Pascal (https://github.com/alefragnani/vscode-language-pascal) extension that provides some of these features, and don’t use a Language Server. I’m using global/ctags to parse and generate tags for the sources. Then I load and parse its output to identify the symbols.

You are free to take a look (https://github.com/alefragnani/vscode-language-pascal/blob/master/src/providers/definitionProvider.ts). The source code is open and fairly simple, as it was one of the first extensions that I have developed.

Hope this helps

like image 159
alefragnani Avatar answered Sep 17 '25 10:09

alefragnani