[Mlir-commits] [mlir] 473a21c - [vscode-mlir] Add support for restarting the server on setting/server changes
River Riddle
llvmlistbot at llvm.org
Mon Jun 28 17:09:01 PDT 2021
Author: River Riddle
Date: 2021-06-29T00:08:44Z
New Revision: 473a21c0e9684b19016fd7367b28cc0ff12e928d
URL: https://github.com/llvm/llvm-project/commit/473a21c0e9684b19016fd7367b28cc0ff12e928d
DIFF: https://github.com/llvm/llvm-project/commit/473a21c0e9684b19016fd7367b28cc0ff12e928d.diff
LOG: [vscode-mlir] Add support for restarting the server on setting/server changes
This revision adds detection for changes to either the mlir-lsp-server binary or the setting, and prompts the user to restart the server. Whether the user gets prompted or not is a configurable setting in the extension, and this setting may updated based on the user response to the prompt.
Differential Revision: https://reviews.llvm.org/D104501
Added:
mlir/utils/vscode/src/config.ts
mlir/utils/vscode/src/configWatcher.ts
mlir/utils/vscode/src/mlirContext.ts
Modified:
mlir/utils/vscode/package-lock.json
mlir/utils/vscode/package.json
mlir/utils/vscode/src/extension.ts
Removed:
################################################################################
diff --git a/mlir/utils/vscode/package-lock.json b/mlir/utils/vscode/package-lock.json
index 0b6e1341260e7..00ede875a3ac1 100644
--- a/mlir/utils/vscode/package-lock.json
+++ b/mlir/utils/vscode/package-lock.json
@@ -8,10 +8,12 @@
"name": "mlir",
"version": "0.0.1",
"dependencies": {
+ "chokidar": "3.5.2",
"vscode-languageclient": "^5.2.1",
"vscode-languageserver-types": "3.16.0"
},
"devDependencies": {
+ "@types/chokidar": "2.1.3",
"@types/mocha": "^5.2.0",
"@types/node": "^8.0.0",
"@types/vscode": "1.52.*",
@@ -61,6 +63,16 @@
"node": ">= 6"
}
},
+ "node_modules/@types/chokidar": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@types/chokidar/-/chokidar-2.1.3.tgz",
+ "integrity": "sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==",
+ "deprecated": "This is a stub types definition. chokidar provides its own type definitions, so you do not need this installed.",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "*"
+ }
+ },
"node_modules/@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
@@ -103,6 +115,18 @@
"node": ">=4"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -156,6 +180,14 @@
"node": "*"
}
},
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/bluebird": {
"version": "3.4.7",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
@@ -178,6 +210,17 @@
"concat-map": "0.0.1"
}
},
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -296,6 +339,27 @@
"integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
+ "node_modules/chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
"node_modules/clang-format": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.4.0.tgz",
@@ -509,12 +573,36 @@
"pend": "~1.2.0"
}
},
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
@@ -582,6 +670,17 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
@@ -692,6 +791,17 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
@@ -704,6 +814,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -841,6 +978,14 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/nth-check": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
@@ -944,6 +1089,17 @@
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"dev": true
},
+ "node_modules/picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -992,6 +1148,17 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -1093,6 +1260,17 @@
"node": ">=8.17.0"
}
},
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
"node_modules/traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
@@ -1381,6 +1559,15 @@
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true
},
+ "@types/chokidar": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@types/chokidar/-/chokidar-2.1.3.tgz",
+ "integrity": "sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==",
+ "dev": true,
+ "requires": {
+ "chokidar": "*"
+ }
+ },
"@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
@@ -1417,6 +1604,15 @@
"color-convert": "^1.9.0"
}
},
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -1464,6 +1660,11 @@
"chainsaw": "~0.1.0"
}
},
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
"bluebird": {
"version": "3.4.7",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
@@ -1486,6 +1687,14 @@
"concat-map": "0.0.1"
}
},
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -1576,6 +1785,21 @@
"domutils": "^2.7.0"
}
},
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
"clang-format": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.4.0.tgz",
@@ -1733,12 +1957,26 @@
"pend": "~1.2.0"
}
},
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
"fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
@@ -1793,6 +2031,14 @@
"path-is-absolute": "^1.0.0"
}
},
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
"graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
@@ -1875,6 +2121,14 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
"is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
@@ -1884,6 +2138,24 @@
"has": "^1.0.3"
}
},
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -2002,6 +2274,11 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
"nth-check": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
@@ -2090,6 +2367,11 @@
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"dev": true
},
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
+ },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -2129,6 +2411,14 @@
"util-deprecate": "~1.0.1"
}
},
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -2209,6 +2499,14 @@
"rimraf": "^3.0.0"
}
},
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
"traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
diff --git a/mlir/utils/vscode/package.json b/mlir/utils/vscode/package.json
index 6d6813020782c..e580aaa94466f 100644
--- a/mlir/utils/vscode/package.json
+++ b/mlir/utils/vscode/package.json
@@ -44,9 +44,30 @@
"scope": "resource",
"type": "string",
"description": "The file path of the mlir-lsp-server executable."
+ },
+ "mlir.onSettingsChanged": {
+ "type": "string",
+ "default": "prompt",
+ "description": "Action taken when a setting change requires a server restart to take effect.",
+ "enum": [
+ "prompt",
+ "restart",
+ "ignore"
+ ],
+ "enumDescriptions": [
+ "Prompt the user for restarting the server",
+ "Automatically restart the server",
+ "Do nothing"
+ ]
}
}
- }
+ },
+ "commands": [
+ {
+ "command": "mlir.restart",
+ "title": "mlir: Restart language server"
+ }
+ ]
},
"scripts": {
"vscode:prepublish": "tsc -p ./",
@@ -56,6 +77,7 @@
"package": "vsce package"
},
"devDependencies": {
+ "@types/chokidar": "2.1.3",
"@types/mocha": "^5.2.0",
"@types/node": "^8.0.0",
"@types/vscode": "1.52.*",
@@ -67,6 +89,7 @@
"vscode-test": "^1.3.0"
},
"dependencies": {
+ "chokidar": "3.5.2",
"vscode-languageclient": "^5.2.1",
"vscode-languageserver-types": "3.16.0"
}
diff --git a/mlir/utils/vscode/src/config.ts b/mlir/utils/vscode/src/config.ts
new file mode 100644
index 0000000000000..58f45ccbc8c02
--- /dev/null
+++ b/mlir/utils/vscode/src/config.ts
@@ -0,0 +1,16 @@
+import * as vscode from 'vscode';
+
+/**
+ * Gets the config value `mlir.<key>`.
+ */
+export function get<T>(key: string): T {
+ return vscode.workspace.getConfiguration('mlir').get<T>(key);
+}
+
+/**
+ * Sets the config value `mlir.<key>`.
+ */
+export function update<T>(key: string, value: T,
+ target?: vscode.ConfigurationTarget) {
+ return vscode.workspace.getConfiguration('mlir').update(key, value, target);
+}
diff --git a/mlir/utils/vscode/src/configWatcher.ts b/mlir/utils/vscode/src/configWatcher.ts
new file mode 100644
index 0000000000000..47d450086804a
--- /dev/null
+++ b/mlir/utils/vscode/src/configWatcher.ts
@@ -0,0 +1,81 @@
+import * as chokidar from 'chokidar';
+import * as path from 'path';
+import * as vscode from 'vscode';
+
+import * as config from './config';
+import {MLIRContext} from './mlirContext';
+
+/**
+ * Prompt the user to see if we should restart the server.
+ */
+async function promptRestart(settingName: string, promptMessage: string) {
+ switch (config.get<string>(settingName)) {
+ case 'restart':
+ vscode.commands.executeCommand('mlir.restart');
+ break;
+ case 'ignore':
+ break;
+ case 'prompt':
+ default:
+ switch (await vscode.window.showInformationMessage(
+ promptMessage, 'Yes', 'Yes, always', 'No, never')) {
+ case 'Yes':
+ vscode.commands.executeCommand('mlir.restart');
+ break;
+ case 'Yes, always':
+ vscode.commands.executeCommand('mlir.restart');
+ config.update<string>(settingName, 'restart',
+ vscode.ConfigurationTarget.Global);
+ break;
+ case 'No, never':
+ config.update<string>(settingName, 'ignore',
+ vscode.ConfigurationTarget.Global);
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+}
+
+/**
+ * Activate the watchers that track configuration changes which decide when to
+ * restart the server.
+ */
+export function activate(mlirContext: MLIRContext) {
+ // When a configuration change happens, check to see if we should restart the
+ // server.
+ mlirContext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(event => {
+ const settings: string[] = [ 'server_path' ];
+ for (const setting of settings) {
+ const expandedSetting = `mlir.${setting}`;
+ if (event.affectsConfiguration(expandedSetting)) {
+ promptRestart(
+ 'onSettingsChanged',
+ `setting '${
+ expandedSetting}' has changed. Do you want to reload the server?`);
+ break;
+ }
+ }
+ }));
+
+ // Track the server file in case it changes. We use `fs` here because the
+ // server may not be in a workspace directory.
+ const userDefinedServerPath = config.get<string>('server_path');
+ const serverPath =
+ path.resolve((userDefinedServerPath === '') ? 'mlir-lsp-server'
+ : userDefinedServerPath);
+ const fileWatcherConfig = {
+ disableGlobbing : true,
+ followSymlinks : true,
+ ignoreInitial : true,
+ };
+ const fileWatcher = chokidar.watch(serverPath, fileWatcherConfig);
+ fileWatcher.on('all', (_event, _filename, _details) => {
+ promptRestart(
+ 'onSettingsChanged',
+ 'MLIR language server binary has changed. Do you want to reload the server?');
+ });
+ mlirContext.subscriptions.push(
+ new vscode.Disposable(() => { fileWatcher.close(); }));
+}
diff --git a/mlir/utils/vscode/src/extension.ts b/mlir/utils/vscode/src/extension.ts
index db4904e5c24a6..2220c50327e52 100644
--- a/mlir/utils/vscode/src/extension.ts
+++ b/mlir/utils/vscode/src/extension.ts
@@ -1,56 +1,21 @@
import * as vscode from 'vscode';
-import * as vscodelc from 'vscode-languageclient';
-let client: vscodelc.LanguageClient;
+import {MLIRContext} from './mlirContext';
/**
* This method is called when the extension is activated. The extension is
* activated the very first time a command is executed.
*/
export function activate(context: vscode.ExtensionContext) {
- // Get the path of the mlir-lsp-server that is used to provide language
- // functionality.
- const config = vscode.workspace.getConfiguration('mlir');
- const userDefinedServerPath = config.get<string>('server_path');
- const serverPath = (userDefinedServerPath === '') ? 'mlir-lsp-server'
- : userDefinedServerPath;
+ const mlirContext = new MLIRContext();
+ context.subscriptions.push(mlirContext);
- // Configure the server options.
- const serverOptions: vscodelc.ServerOptions = {
- run : {
- command : serverPath,
- transport : vscodelc.TransportKind.stdio,
- args : []
- },
- debug : {
- command : serverPath,
- transport : vscodelc.TransportKind.stdio,
- args : []
- }
- };
+ // Initialize the commands of the extension.
+ context.subscriptions.push(
+ vscode.commands.registerCommand('mlir.restart', async () => {
+ mlirContext.dispose();
+ await mlirContext.activate();
+ }));
- // Configure the client options.
- const clientOptions: vscodelc.LanguageClientOptions = {
- documentSelector : [ {scheme : 'file', language : 'mlir'} ],
- synchronize : {
- // Notify the server about file changes to *.mlir files contained in the
- // workspace.
- fileEvents : vscode.workspace.createFileSystemWatcher('**/*.mlir')
- }
- };
-
- // Create the language client and start the client.
- client = new vscodelc.LanguageClient('mlir-lsp', 'MLIR Language Client',
- serverOptions, clientOptions);
- client.start();
-}
-
-/**
- * This method is called when the extension is deactivated.
- */
-export function deactivate(): Thenable<void>|undefined {
- if (!client) {
- return undefined;
- }
- return client.stop();
+ mlirContext.activate();
}
diff --git a/mlir/utils/vscode/src/mlirContext.ts b/mlir/utils/vscode/src/mlirContext.ts
new file mode 100644
index 0000000000000..3b582187c3730
--- /dev/null
+++ b/mlir/utils/vscode/src/mlirContext.ts
@@ -0,0 +1,62 @@
+import * as vscode from 'vscode';
+import * as vscodelc from 'vscode-languageclient';
+
+import * as config from './config';
+import * as configWatcher from './configWatcher';
+
+/**
+ * This class manages all of the MLIR extension state,
+ * including the language client.
+ */
+export class MLIRContext implements vscode.Disposable {
+ subscriptions: vscode.Disposable[] = [];
+ client!: vscodelc.LanguageClient;
+
+ /**
+ * Activate the MLIR context, and start the language client.
+ */
+ async activate() {
+ // Get the path of the mlir-lsp-server that is used to provide language
+ // functionality.
+ const userDefinedServerPath = config.get<string>('server_path');
+ const serverPath = (userDefinedServerPath === '') ? 'mlir-lsp-server'
+ : userDefinedServerPath;
+
+ // Configure the server options.
+ const serverOptions: vscodelc.ServerOptions = {
+ run : {
+ command : serverPath,
+ transport : vscodelc.TransportKind.stdio,
+ args : []
+ },
+ debug : {
+ command : serverPath,
+ transport : vscodelc.TransportKind.stdio,
+ args : []
+ }
+ };
+
+ // Configure the client options.
+ const clientOptions: vscodelc.LanguageClientOptions = {
+ documentSelector : [ {scheme : 'file', language : 'mlir'} ],
+ synchronize : {
+ // Notify the server about file changes to *.mlir files contained in the
+ // workspace.
+ fileEvents : vscode.workspace.createFileSystemWatcher('**/*.mlir')
+ }
+ };
+
+ // Create the language client and start the client.
+ this.client = new vscodelc.LanguageClient(
+ 'mlir-lsp', 'MLIR Language Client', serverOptions, clientOptions);
+ this.subscriptions.push(this.client.start());
+
+ // Watch for configuration changes.
+ configWatcher.activate(this);
+ }
+
+ dispose() {
+ this.subscriptions.forEach((d) => { d.dispose(); });
+ this.subscriptions = [];
+ }
+}
More information about the Mlir-commits
mailing list