|
1 | 1 | import * as lc from "vscode-languageclient/node";
|
2 | 2 | import * as vscode from "vscode";
|
3 | 3 | import { Context } from "./context";
|
4 |
| -import { expandMacro, vfsProvide, viewAnalyzedCrates } from "./lspRequests"; |
| 4 | +import { expandMacro, showSyntaxTree, vfsProvide, viewAnalyzedCrates } from "./lspRequests"; |
5 | 5 |
|
6 | 6 | export const registerVfsProvider = (client: lc.LanguageClient, ctx: Context) => {
|
7 | 7 | const vfsProvider: vscode.TextDocumentContentProvider = {
|
@@ -94,3 +94,38 @@ export const registerViewAnalyzedCratesProvider = (client: lc.LanguageClient, ct
|
94 | 94 | }),
|
95 | 95 | );
|
96 | 96 | };
|
| 97 | + |
| 98 | +export const registerShowSyntaxTreeProvider = (client: lc.LanguageClient, ctx: Context) => { |
| 99 | + const uri = vscode.Uri.parse("cairo-show-syntax-tree://showSyntaxTree/[SYNTAX_TREE].txt"); |
| 100 | + const eventEmitter = new vscode.EventEmitter<vscode.Uri>(); |
| 101 | + |
| 102 | + const tdcp: vscode.TextDocumentContentProvider = { |
| 103 | + async provideTextDocumentContent(): Promise<string> { |
| 104 | + const editor = vscode.window.activeTextEditor; |
| 105 | + if (!editor) return "No file selected, please click on a file"; |
| 106 | + |
| 107 | + const syntaxTree = await client.sendRequest(showSyntaxTree, { |
| 108 | + uri: client.code2ProtocolConverter.asUri(editor.document.uri), |
| 109 | + }); |
| 110 | + |
| 111 | + return syntaxTree ?? "Not available"; |
| 112 | + }, |
| 113 | + onDidChange: eventEmitter.event, |
| 114 | + }; |
| 115 | + |
| 116 | + ctx.extension.subscriptions.push( |
| 117 | + vscode.workspace.registerTextDocumentContentProvider("cairo-show-syntax-tree", tdcp), |
| 118 | + ); |
| 119 | + |
| 120 | + ctx.extension.subscriptions.push( |
| 121 | + vscode.commands.registerCommand("cairo.showSyntaxTree", async () => { |
| 122 | + const document = await vscode.workspace.openTextDocument(uri); |
| 123 | + |
| 124 | + eventEmitter.fire(uri); |
| 125 | + |
| 126 | + return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true); |
| 127 | + }), |
| 128 | + ); |
| 129 | + |
| 130 | + // TODO: re-request on file change |
| 131 | +}; |
0 commit comments