brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 6842687 Raw
86 lines · typescript
1import * as chokidar from 'chokidar';2import * as vscode from 'vscode';3 4import * as config from './config';5import {MLIRContext} from './mlirContext';6 7/**8 *  Prompt the user to see if we should restart the server.9 */10async function promptRestart(settingName: string, promptMessage: string) {11  switch (config.get<string>(settingName)) {12  case 'restart':13    vscode.commands.executeCommand('mlir.restart');14    break;15  case 'ignore':16    break;17  case 'prompt':18  default:19    switch (await vscode.window.showInformationMessage(20        promptMessage, 'Yes', 'Yes, always', 'No, never')) {21    case 'Yes':22      vscode.commands.executeCommand('mlir.restart');23      break;24    case 'Yes, always':25      vscode.commands.executeCommand('mlir.restart');26      config.update<string>(settingName, 'restart',27                            vscode.ConfigurationTarget.Global);28      break;29    case 'No, never':30      config.update<string>(settingName, 'ignore',31                            vscode.ConfigurationTarget.Global);32      break;33    default:34      break;35    }36    break;37  }38}39 40/**41 *  Activate watchers that track configuration changes for the given workspace42 *  folder, or null if the workspace is top-level.43 */44export async function activate(45    mlirContext: MLIRContext, workspaceFolder: vscode.WorkspaceFolder,46    serverSettings: string[], serverPaths: string[]) {47  // When a configuration change happens, check to see if we should restart the48  // server.49  mlirContext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(event => {50    for (const serverSetting of serverSettings) {51      const expandedSetting = `mlir.${serverSetting}`;52      if (event.affectsConfiguration(expandedSetting, workspaceFolder)) {53        promptRestart(54            'onSettingsChanged',55            `setting '${56                expandedSetting}' has changed. Do you want to reload the server?`);57      }58    }59  }));60 61  // Setup watchers for the provided server paths.62  const fileWatcherConfig = {63    disableGlobbing : true,64    followSymlinks : true,65    ignoreInitial : true,66    awaitWriteFinish : true,67  };68  for (const serverPath of serverPaths) {69    if (serverPath === '') {70      return;71    }72 73    // If the server path actually exists, track it in case it changes.74    const fileWatcher = chokidar.watch(serverPath, fileWatcherConfig);75    fileWatcher.on('all', (event, _filename, _details) => {76      if (event != 'unlink') {77        promptRestart(78            'onSettingsChanged',79            'MLIR language server file has changed. Do you want to reload the server?');80      }81    });82    mlirContext.subscriptions.push(83        new vscode.Disposable(() => { fileWatcher.close(); }));84  }85}86