miniscript-languageserver 1.5.7 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +115 -0
- package/index.js +69 -69
- package/package.json +2 -2
package/README.md
CHANGED
@@ -46,6 +46,7 @@ This section provides a collection of IDEs that implement the `miniscript-langua
|
|
46
46
|
- [Sublime Text](#sublime): Instructions for integrating with Sublime Text.
|
47
47
|
- [IntelliJ](#intellij): Guide for using `miniscript-languageserver` with IntelliJ.
|
48
48
|
- [Neovim (nvim)](#nvim): Configuration for Neovim users.
|
49
|
+
- [Visual Studio](#visual-studio): Learn how to set up a Visual Studio extension using LSP to add support for the MiniScript language in Visual Studio.
|
49
50
|
|
50
51
|
Any other IDEs that follow the [LSP standards](https://code.visualstudio.com/api/language-extensions/language-server-extension-guide) should also work with `miniscript-languageserver`.
|
51
52
|
|
@@ -184,6 +185,120 @@ autocmd BufRead,BufNewFile *.src set filetype=src
|
|
184
185
|
|
185
186
|
This configuration ensures that miniscript-languageserver will be properly integrated into Neovim, and that .src files will be recognized with the correct syntax highlighting and LSP features.
|
186
187
|
|
188
|
+
#### Visual Studio
|
189
|
+
|
190
|
+
1. Begin by following the [official Visual Studio Extensibility Tutorial](https://learn.microsoft.com/de-de/visualstudio/extensibility/adding-an-lsp-extension?view=vs-2022#get-started) to create a new Visual Studio extension. This will set up the basic structure for the extension project.
|
191
|
+
2. In this step, we define a custom content type for the language we are adding (e.g., MiniScript). This will help Visual Studio identify files based on their extension or content type. Create a new class called ContentTypeDefinitions.cs:
|
192
|
+
```csharp
|
193
|
+
using Microsoft.VisualStudio.LanguageServer.Client;
|
194
|
+
using Microsoft.VisualStudio.Utilities;
|
195
|
+
using System.ComponentModel.Composition;
|
196
|
+
|
197
|
+
namespace MiniScript
|
198
|
+
{
|
199
|
+
internal static class MiniScriptContentDefinition
|
200
|
+
{
|
201
|
+
[Export]
|
202
|
+
[Name("miniscript")]
|
203
|
+
[BaseDefinition(CodeRemoteContentDefinition.CodeRemoteContentTypeName)]
|
204
|
+
public static ContentTypeDefinition MiniScriptContentTypeDefinition;
|
205
|
+
|
206
|
+
[Export]
|
207
|
+
[FileExtension(".ms")]
|
208
|
+
[ContentType("miniscript")]
|
209
|
+
public static FileExtensionToContentTypeDefinition MiniScriptFileExtensionDefinition;
|
210
|
+
}
|
211
|
+
}
|
212
|
+
```
|
213
|
+
3. Next, you will create the LanguageClient.cs class that connects Visual Studio to the language server. This class implements ILanguageClient, which is essential for interacting with the LSP. Create a new file called LanguageClient.cs:
|
214
|
+
```csharp
|
215
|
+
using Microsoft.VisualStudio.LanguageServer.Client;
|
216
|
+
using Microsoft.VisualStudio.Threading;
|
217
|
+
using Microsoft.VisualStudio.Utilities;
|
218
|
+
using System;
|
219
|
+
using System.Collections.Generic;
|
220
|
+
using System.ComponentModel.Composition;
|
221
|
+
using System.Diagnostics;
|
222
|
+
using System.Threading;
|
223
|
+
using System.Threading.Tasks;
|
224
|
+
|
225
|
+
namespace MiniScript
|
226
|
+
{
|
227
|
+
[Export(typeof(ILanguageClient))]
|
228
|
+
[ContentType("miniscript")]
|
229
|
+
[RunOnContext(RunningContext.RunOnHost)]
|
230
|
+
public class MiniScriptLanguageClient : ILanguageClient
|
231
|
+
{
|
232
|
+
public event AsyncEventHandler<EventArgs> StartAsync;
|
233
|
+
public event AsyncEventHandler<EventArgs> StopAsync;
|
234
|
+
public object InitializationOptions => null;
|
235
|
+
public IEnumerable<string> FilesToWatch => null;
|
236
|
+
public bool ShowNotificationOnInitializeFailed => true;
|
237
|
+
public string Name => "MiniScript Language Client";
|
238
|
+
public IEnumerable<string> ConfigurationSections => new[] { "miniscript" };
|
239
|
+
|
240
|
+
public Task<Connection> ActivateAsync(CancellationToken token)
|
241
|
+
{
|
242
|
+
var info = new ProcessStartInfo
|
243
|
+
{
|
244
|
+
FileName = @"C:\Users\myUser\AppData\Roaming\npm\miniscript-languageserver.cmd",
|
245
|
+
Arguments = "--stdio",
|
246
|
+
RedirectStandardInput = true,
|
247
|
+
RedirectStandardOutput = true,
|
248
|
+
UseShellExecute = false,
|
249
|
+
CreateNoWindow = true
|
250
|
+
};
|
251
|
+
var process = new Process { StartInfo = info };
|
252
|
+
|
253
|
+
if (process.Start())
|
254
|
+
{
|
255
|
+
Debug.WriteLine("Language server started successfully.");
|
256
|
+
return Task.FromResult(new Connection(process.StandardOutput.BaseStream, process.StandardInput.BaseStream));
|
257
|
+
}
|
258
|
+
|
259
|
+
Debug.WriteLine("Failed to start language server.");
|
260
|
+
return Task.FromResult<Connection>(null);
|
261
|
+
}
|
262
|
+
|
263
|
+
public async Task OnLoadedAsync()
|
264
|
+
{
|
265
|
+
if (StartAsync != null)
|
266
|
+
{
|
267
|
+
await StartAsync.InvokeAsync(this, EventArgs.Empty);
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
271
|
+
public async Task StopServerAsync()
|
272
|
+
{
|
273
|
+
if (StopAsync != null)
|
274
|
+
{
|
275
|
+
await StopAsync.InvokeAsync(this, EventArgs.Empty);
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
public Task OnServerInitializedAsync()
|
280
|
+
{
|
281
|
+
return Task.CompletedTask;
|
282
|
+
}
|
283
|
+
|
284
|
+
public Task<InitializationFailureContext> OnServerInitializeFailedAsync(ILanguageClientInitializationInfo initializationState)
|
285
|
+
{
|
286
|
+
string message = "MiniScript failed to activate, now we can't test LSP! :(";
|
287
|
+
string exception = initializationState.InitializationException?.ToString() ?? string.Empty;
|
288
|
+
message = $"{message}\n {exception}";
|
289
|
+
|
290
|
+
var failureContext = new InitializationFailureContext()
|
291
|
+
{
|
292
|
+
FailureMessage = message,
|
293
|
+
};
|
294
|
+
|
295
|
+
return Task.FromResult(failureContext);
|
296
|
+
}
|
297
|
+
}
|
298
|
+
}
|
299
|
+
```
|
300
|
+
4. At this point, you have a basic framework for integrating a custom language server into Visual Studio. You can customize the content type, server activation, or extend the language client.
|
301
|
+
|
187
302
|
## How to Add Tooltips
|
188
303
|
|
189
304
|
Tooltips in `miniscript-languageserver` can help provide additional context, such as method descriptions, to users. You can contribute your own tooltips by following this workflow:
|