|
1 | 1 | import { LanguageClient, ServerOptions, LanguageClientOptions, StreamInfo } from 'vscode-languageclient'
|
| 2 | +import { EvaluatableExpressionRequest } from './protocol' |
2 | 3 |
|
3 | 4 | import * as vscode from 'vscode'
|
4 | 5 | import { join } from 'path'
|
@@ -50,6 +51,29 @@ export function activate(context: vscode.ExtensionContext): void {
|
50 | 51 |
|
51 | 52 | languageClient = createClient(config)
|
52 | 53 | languageClient.start()
|
| 54 | + |
| 55 | + context.subscriptions.push( |
| 56 | + vscode.languages.registerEvaluatableExpressionProvider('php', { |
| 57 | + async provideEvaluatableExpression( |
| 58 | + document: vscode.TextDocument, |
| 59 | + position: vscode.Position, |
| 60 | + token: vscode.CancellationToken |
| 61 | + ): Promise<vscode.EvaluatableExpression | undefined> { |
| 62 | + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access |
| 63 | + if (languageClient.initializeResult?.capabilities.experimental?.xevaluatableExpressionProvider) { |
| 64 | + const eer = await languageClient.sendRequest( |
| 65 | + EvaluatableExpressionRequest.type, |
| 66 | + languageClient.code2ProtocolConverter.asTextDocumentPositionParams(document, position), |
| 67 | + token |
| 68 | + ) |
| 69 | + if (eer && eer.expression) { |
| 70 | + return new vscode.EvaluatableExpression(eer.range, eer.expression) |
| 71 | + } |
| 72 | + } |
| 73 | + return undefined |
| 74 | + }, |
| 75 | + }) |
| 76 | + ) |
53 | 77 | }
|
54 | 78 |
|
55 | 79 | export function deactivate(): Promise<void> | undefined {
|
|
0 commit comments