Skip to content

Commit

Permalink
Basic show syntax tree
Browse files Browse the repository at this point in the history
  • Loading branch information
piotmag769 committed Jan 29, 2025
1 parent de26db0 commit 6c16498
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 1 deletion.
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@
"command": "cairo.viewAnalyzedCrates",
"title": "View currently analyzed crates",
"category": "Cairo"
},
{
"command": "cairo.viewSyntaxTree",
"title": "View syntax tree of the current file content",
"category": "Cairo"
}
],
"configuration": [
Expand Down
2 changes: 2 additions & 0 deletions src/cairols.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Context } from "./context";
import { Scarb } from "./scarb";
import {
registerMacroExpandProvider,
registerviewSyntaxTreeProvider,
registerVfsProvider,
registerViewAnalyzedCratesProvider,
} from "./textDocumentProviders";
Expand Down Expand Up @@ -71,6 +72,7 @@ export async function setupLanguageServer(ctx: Context): Promise<SetupResult | u
registerVfsProvider(client, ctx);
registerMacroExpandProvider(client, ctx);
registerViewAnalyzedCratesProvider(client, ctx);
registerviewSyntaxTreeProvider(client, ctx);

client.onNotification("scarb/could-not-find-scarb-executable", () => notifyScarbMissing(ctx));

Expand Down
12 changes: 12 additions & 0 deletions src/lspRequests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,15 @@ export interface ToolchainInfoResponse {
export const toolchainInfo = new lc.RequestType0<ToolchainInfoResponse, void>(
"cairo/toolchainInfo",
);

export interface viewSyntaxTreeRequest {
uri: string;
}

export type viewSyntaxTreeRequestResponse = string | null;

export const viewSyntaxTree = new lc.RequestType<
viewSyntaxTreeRequest,
viewSyntaxTreeRequestResponse,
void
>("cairo/viewSyntaxTree");
37 changes: 36 additions & 1 deletion src/textDocumentProviders.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as lc from "vscode-languageclient/node";
import * as vscode from "vscode";
import { Context } from "./context";
import { expandMacro, vfsProvide, viewAnalyzedCrates } from "./lspRequests";
import { expandMacro, viewSyntaxTree, vfsProvide, viewAnalyzedCrates } from "./lspRequests";

export const registerVfsProvider = (client: lc.LanguageClient, ctx: Context) => {
const vfsProvider: vscode.TextDocumentContentProvider = {
Expand Down Expand Up @@ -94,3 +94,38 @@ export const registerViewAnalyzedCratesProvider = (client: lc.LanguageClient, ct
}),
);
};

export const registerviewSyntaxTreeProvider = (client: lc.LanguageClient, ctx: Context) => {
const uri = vscode.Uri.parse("cairo-show-syntax-tree://viewSyntaxTree/[SYNTAX_TREE].txt");
const eventEmitter = new vscode.EventEmitter<vscode.Uri>();

const tdcp: vscode.TextDocumentContentProvider = {
async provideTextDocumentContent(): Promise<string> {
const editor = vscode.window.activeTextEditor;
if (!editor) return "No file selected, please click on a file";

const syntaxTree = await client.sendRequest(viewSyntaxTree, {
uri: client.code2ProtocolConverter.asUri(editor.document.uri),
});

return syntaxTree ?? "Not available";
},
onDidChange: eventEmitter.event,
};

ctx.extension.subscriptions.push(
vscode.workspace.registerTextDocumentContentProvider("cairo-show-syntax-tree", tdcp),
);

ctx.extension.subscriptions.push(
vscode.commands.registerCommand("cairo.viewSyntaxTree", async () => {
const document = await vscode.workspace.openTextDocument(uri);

eventEmitter.fire(uri);

return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true);
}),
);

// TODO: re-request on file change
};

0 comments on commit 6c16498

Please sign in to comment.