From 6f6f43bc10429aef96c6bf94ee6eca25a803fa6d Mon Sep 17 00:00:00 2001 From: Pavel Ashevskiy Date: Mon, 6 Sep 2021 18:28:12 +0400 Subject: [PATCH] Add k8s yaml language server for monaco editor --- .../metrics-cluster-feature/package-lock.json | 9 +++- package.json | 3 +- src/renderer/components/dock/editor-panel.tsx | 31 +++++++++++- webpack.renderer.ts | 4 ++ yarn.lock | 50 +++++++++++++++++++ 5 files changed, 93 insertions(+), 4 deletions(-) diff --git a/extensions/metrics-cluster-feature/package-lock.json b/extensions/metrics-cluster-feature/package-lock.json index 981cb43dff..d7862b705f 100644 --- a/extensions/metrics-cluster-feature/package-lock.json +++ b/extensions/metrics-cluster-feature/package-lock.json @@ -665,7 +665,8 @@ "@material-ui/core": "*", "@types/node": "*", "@types/react-select": "*", - "conf": "^7.0.1" + "conf": "^7.0.1", + "typed-emitter": "^1.3.1" }, "dependencies": { "@babel/runtime": { @@ -1329,6 +1330,12 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true }, + "typed-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-1.3.1.tgz", + "integrity": "sha512-2h7utWyXgd2R2u2IuL8B4yu1gqMxbgUj2VS/MGVbFhEVQNJKXoQQoS5CBMh+eW31zFeSmDfEQ3qQf4xy5SlPVQ==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 172c8fa1db..7050423bef 100644 --- a/package.json +++ b/package.json @@ -220,7 +220,8 @@ "mock-fs": "^4.14.0", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "monaco-editor": "^0.26.1", + "monaco-editor-webpack-plugin": "^4.1.2", + "monaco-yaml": "^3.2.0", "node-fetch": "^2.6.1", "node-pty": "^0.10.1", "npm": "^6.14.8", diff --git a/src/renderer/components/dock/editor-panel.tsx b/src/renderer/components/dock/editor-panel.tsx index 31ccc5b2e2..e4d70ceacf 100644 --- a/src/renderer/components/dock/editor-panel.tsx +++ b/src/renderer/components/dock/editor-panel.tsx @@ -28,8 +28,7 @@ import { dockStore, TabId } from "./dock.store"; import { monacoModelsManager } from "./monaco-model-manager"; import { ThemeStore } from "../../theme.store"; import { UserStore } from "../../../common/user-store"; - -import "monaco-editor"; +import { setDiagnosticsOptions } from 'monaco-yaml'; interface Props { className?: string; @@ -38,6 +37,16 @@ interface Props { onChange(value: string, error?: string): void; } +(window as any).MonacoEnvironment = { + getWorkerUrl(_: string, label: string) { + console.log("getWorkerUrl", label) + if (label === 'yaml') { + return '/build/yaml.worker.js'; + } + return '/build/editor.worker.js'; + }, +}; + @observer export class EditorPanel extends React.Component { @@ -48,6 +57,24 @@ export class EditorPanel extends React.Component { constructor(props: Props) { super(props); makeObservable(this); + + setDiagnosticsOptions({ + validate: true, + enableSchemaRequest: true, + hover: true, + completion: true, + isKubernetes: true, + schemas: [ + { + // Id of the first schema + uri: 'https://raw.githubusercontent.com/garethr/kubernetes-json-schema/master/v1.9.9/all.json', + + // Associate with our model + fileMatch: ['*'] + }, + ], + }); + } componentDidMount() { diff --git a/webpack.renderer.ts b/webpack.renderer.ts index 5be6ba09dc..82a89728c0 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -29,6 +29,7 @@ import ProgressBarPlugin from "progress-bar-webpack-plugin"; import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin"; import * as vars from "./src/common/vars"; import getTSLoader from "./src/common/getTSLoader"; +import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin'; export default [ webpackLensRenderer @@ -57,6 +58,8 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura cache: isDevelopment, entry: { [appName]: path.resolve(rendererDir, "bootstrap.tsx"), + 'editor.worker': 'monaco-editor/esm/vs/editor/editor.worker.js', + 'yaml.worker': 'monaco-yaml/lib/esm/yaml.worker.js', }, output: { libraryTarget: "global", @@ -143,6 +146,7 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura }, plugins: [ + new MonacoWebpackPlugin({languages:["yaml"], publicPath}), new ProgressBarPlugin(), new ForkTsCheckerPlugin(), diff --git a/yarn.lock b/yarn.lock index 71e9a2832d..8bc8204afd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1624,6 +1624,11 @@ "@types/parse5" "*" "@types/tough-cookie" "*" +"@types/json-schema@^7.0.0": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -9857,11 +9862,31 @@ moment-timezone@^0.5.33: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== +monaco-editor-webpack-plugin@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-4.1.2.tgz#afea30e4e0374132f8f298d358c99efc2cad3e84" + integrity sha512-snmHecygICKT0UlHhva+Cs2WaLPpxy3111xbvInhjjTr5m0xQTFHlmJ2QQDcB14Vzmm7f07uc1TtbvOpmL50BA== + dependencies: + loader-utils "^2.0.0" + monaco-editor@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.26.1.tgz#62bb5f658bc95379f8abb64b147632bd1c019d73" integrity sha512-mm45nUrBDk0DgZKgbD7+bhDOtcAFNGPJJRAdS6Su1kTGl6XEgC7U3xOmDUW/0RrLf+jlvCGaqLvD4p2VjwuwwQ== +monaco-yaml@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/monaco-yaml/-/monaco-yaml-3.2.0.tgz#9556a8f86dca08f2c2def1c3840e1c808a7ea21f" + integrity sha512-LvRGq2965waIPpnavnEreI8jtf3g1o1rboADI/v0v5IOmhZL+kjz+YQpJGZRX6SvG566UQ92jhN5b+eZNQ/png== + dependencies: + "@types/json-schema" "^7.0.0" + js-yaml "^4.0.0" + path-browserify "^1.0.0" + prettier "2.0.5" + vscode-languageserver-textdocument "^1.0.0" + vscode-languageserver-types "^3.0.0" + yaml-language-server-parser "^0.1.0" + moo-color@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.2.tgz#837c40758d2d58763825d1359a84e330531eca64" @@ -11089,6 +11114,11 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -11495,6 +11525,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -14701,6 +14736,16 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vscode-languageserver-textdocument@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" + integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== + +vscode-languageserver-types@^3.0.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + vscode-textmate@^5.2.0: version "5.4.0" resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.4.0.tgz#4b25ffc1f14ac3a90faf9a388c67a01d24257cd7" @@ -15215,6 +15260,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-language-server-parser@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yaml-language-server-parser/-/yaml-language-server-parser-0.1.2.tgz#8f660b64f1838e7845412341a9d71a5f3b280f6c" + integrity sha512-GQ2eRE5GcKBK8XVKBIcMyOfC8WMZmEs6gogtVc6knLKE6pG+e5L/lOMfBxZzAt2lqye5itMggQ9+6stXAVhMsw== + yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"