| import * as vscode from 'vscode' |
| |
| import {Command} from '../../command'; |
| import {MLIRContext} from '../../mlirContext'; |
| |
| /** |
| * The parameters to the pdll/viewOutput command. These parameters are: |
| * - `uri`: The URI of the file to view. |
| * - `kind`: The kind of the output to generate. |
| */ |
| type ViewOutputParams = Partial<{uri : string, kind : string}>; |
| |
| /** |
| * The output of the commands: |
| * - `output`: The output string of the command, e.g. a .mlir PDL string. |
| */ |
| type ViewOutputResult = Partial<{output : string}>; |
| |
| /** |
| * A command that displays the output of the current PDLL document. |
| */ |
| export class ViewPDLLCommand extends Command { |
| constructor(context: MLIRContext) { super('mlir.viewPDLLOutput', context); } |
| |
| async execute() { |
| const editor = vscode.window.activeTextEditor; |
| if (editor.document.languageId != 'pdll') |
| return; |
| |
| // Check to see if a language client is active for this document. |
| const pdllClient = |
| this.context.getLanguageClient(editor.document.uri, "pdll"); |
| if (!pdllClient) { |
| return; |
| } |
| |
| // Ask the user for the desired output type. |
| const outputType = |
| await vscode.window.showQuickPick([ 'ast', 'mlir', 'cpp' ]); |
| if (!outputType) { |
| return; |
| } |
| |
| // If we have the language client, ask it to try compiling the document. |
| let outputParams: ViewOutputParams = { |
| uri : editor.document.uri.toString(), |
| kind : outputType, |
| }; |
| const result: ViewOutputResult|undefined = |
| await pdllClient.sendRequest('pdll/viewOutput', outputParams); |
| if (!result || result.output.length === 0) { |
| return; |
| } |
| |
| // Display the output in a new editor. |
| let outputFileType = 'plaintext'; |
| if (outputType == 'mlir') { |
| outputFileType = 'mlir'; |
| } else if (outputType == 'cpp') { |
| outputFileType = 'cpp'; |
| } |
| await vscode.workspace.openTextDocument( |
| {language : outputFileType, content : result.output}); |
| } |
| } |