[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / mlir / utils / vscode / src / configWatcher.ts
blob68426873c18e6eebfb127eec40bcf2717097948f
1 import * as chokidar from 'chokidar';
2 import * as vscode from 'vscode';
4 import * as config from './config';
5 import {MLIRContext} from './mlirContext';
7 /**
8  *  Prompt the user to see if we should restart the server.
9  */
10 async 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   }
40 /**
41  *  Activate watchers that track configuration changes for the given workspace
42  *  folder, or null if the workspace is top-level.
43  */
44 export 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 the
48   // 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   }));
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     }
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   }