import * as vscode from 'vscode'; import { Position, TextDocumentIdentifier } from 'vscode-languageclient'; import { Server } from '../server'; type ExpandMacroResult = [string, string]; function code_format([name, text]: [string, string]): vscode.MarkdownString { const markdown = new vscode.MarkdownString( `#### Recursive expansion of ${name}! macro` ); markdown.appendCodeblock(text, 'rust'); return markdown; } export class ExpandMacroHoverProvider implements vscode.HoverProvider { public provideHover( document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken ): Thenable | null { async function handle() { const request: MacroExpandParams = { textDocument: { uri: document.uri.toString() }, position }; const result = await Server.client.sendRequest( 'rust-analyzer/expandMacro', request ); if (result != null) { const formated = code_format(result); return new vscode.Hover(formated); } return null; } return handle(); } } interface MacroExpandParams { textDocument: TextDocumentIdentifier; position: Position; }