diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cfbe227d..cfb85827 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,3 +69,7 @@ jobs: - name: Build website working-directory: website run: yarn run build + + - name: Test website + working-directory: website + run: yarn test diff --git a/src/basic-languages/typescript/typescript.contribution.ts b/src/basic-languages/typescript/typescript.contribution.ts index eaec2a91..8627f521 100644 --- a/src/basic-languages/typescript/typescript.contribution.ts +++ b/src/basic-languages/typescript/typescript.contribution.ts @@ -10,7 +10,7 @@ declare var require: any; registerLanguage({ id: 'typescript', - extensions: ['.ts', '.tsx'], + extensions: ['.ts', '.tsx', '.cts', '.mts'], aliases: ['TypeScript', 'ts', 'typescript'], mimetypes: ['text/typescript'], loader: (): Promise => { diff --git a/website/package.json b/website/package.json index e4b0792d..b64189b1 100644 --- a/website/package.json +++ b/website/package.json @@ -6,7 +6,8 @@ "build-webpack": "webpack --mode production", "build": "yarn typedoc && yarn build-webpack", "dev-disk": "webpack --mode development --watch", - "typedoc": "typedoc --options ./typedoc/typedoc.json" + "typedoc": "typedoc --options ./typedoc/typedoc.json", + "test": "yarn ts-node scripts/check-playground-samples-js.ts" }, "dependencies": { "@popperjs/core": "^2.11.5", @@ -31,6 +32,7 @@ }, "devDependencies": { "@types/classnames": "^2.3.1", + "@types/glob": "^8.1.0", "@types/html-webpack-plugin": "^3.2.2", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.3", @@ -39,6 +41,7 @@ "copy-webpack-plugin": "^11.0.0", "css-loader": "^3.5.1", "file-loader": "^6.0.0", + "glob": "^9.2.1", "html-webpack-plugin": "^5.5.0", "raw-loader": "^4.0.2", "sass": "^1.32.8", diff --git a/website/scripts/check-playground-samples-js.ts b/website/scripts/check-playground-samples-js.ts new file mode 100644 index 00000000..dffcc62e --- /dev/null +++ b/website/scripts/check-playground-samples-js.ts @@ -0,0 +1,56 @@ +import { spawn } from "child_process"; +import { globSync } from "glob"; +import { exit } from "process"; + +(async () => { + let someFileError = false; + const files = globSync("src/website/data/playground-samples/*/*/*.js"); + type Result = { file: string; status: number; stdout: string }; + const promises: Promise[] = []; + for (const file of files) { + promises.push( + new Promise((resolve) => { + const process = spawn( + "yarn", + [ + "tsc", + "--noEmit", + "--allowJs", + "--checkJs", + "--skipLibCheck", + "../out/monaco-editor/monaco.d.ts", + file, + ], + { shell: true } + ); + let buffer = ""; + process.on("exit", () => { + resolve({ + file: file, + status: process.exitCode ?? 1, + stdout: buffer, + }); + }); + process.stdout.on("data", (data) => { + buffer += data.toString(); + }); + process.stderr.on("data", (data) => { + buffer += data.toString(); + }); + }) + ); + } + for (const promise of promises) { + const result = await promise; + console.log(result.file); + if (result.status != 0) { + console.log(result.stdout.toString()); + someFileError = true; + } + } + + if (someFileError) { + console.error("Some files had type errors."); + exit(1); + } +})(); diff --git a/website/src/website/data/playground-samples/creating-the-editor/syntax-highlighting-for-html-elements/sample.js b/website/src/website/data/playground-samples/creating-the-editor/syntax-highlighting-for-html-elements/sample.js index d8e4ba1b..4c152bd2 100644 --- a/website/src/website/data/playground-samples/creating-the-editor/syntax-highlighting-for-html-elements/sample.js +++ b/website/src/website/data/playground-samples/creating-the-editor/syntax-highlighting-for-html-elements/sample.js @@ -1,4 +1,4 @@ // The colorizeElement-function will read the data-lang-attribute // from the element to select the correct language mode. In this // sample it is text/css. -monaco.editor.colorizeElement(document.getElementById("code")); +monaco.editor.colorizeElement(document.getElementById("code"), {}); diff --git a/website/src/website/data/playground-samples/customizing-the-appearence/exposed-colors/sample.js b/website/src/website/data/playground-samples/customizing-the-appearence/exposed-colors/sample.js index a0bea3a2..60438103 100644 --- a/website/src/website/data/playground-samples/customizing-the-appearence/exposed-colors/sample.js +++ b/website/src/website/data/playground-samples/customizing-the-appearence/exposed-colors/sample.js @@ -3,7 +3,7 @@ monaco.editor.defineTheme("myTheme", { base: "vs", inherit: true, - rules: [{ background: "EDF9FA" }], + rules: [], colors: { "editor.foreground": "#000000", "editor.background": "#EDF9FA", diff --git a/website/src/website/data/playground-samples/extending-language-services/configure-javascript-defaults/sample.js b/website/src/website/data/playground-samples/extending-language-services/configure-javascript-defaults/sample.js index f4436561..7fc04f45 100644 --- a/website/src/website/data/playground-samples/extending-language-services/configure-javascript-defaults/sample.js +++ b/website/src/website/data/playground-samples/extending-language-services/configure-javascript-defaults/sample.js @@ -11,7 +11,7 @@ monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({ // compiler options monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ - target: monaco.languages.typescript.ScriptTarget.ES6, + target: monaco.languages.typescript.ScriptTarget.ES2015, allowNonTsExtensions: true, }); diff --git a/website/src/website/data/playground-samples/extending-language-services/custom-languages/sample.js b/website/src/website/data/playground-samples/extending-language-services/custom-languages/sample.js index 75fd3bdd..80d6c5f5 100644 --- a/website/src/website/data/playground-samples/extending-language-services/custom-languages/sample.js +++ b/website/src/website/data/playground-samples/extending-language-services/custom-languages/sample.js @@ -30,12 +30,20 @@ monaco.editor.defineTheme("myCoolTheme", { // Register a completion item provider for the new language monaco.languages.registerCompletionItemProvider("mySpecialLanguage", { - provideCompletionItems: () => { + provideCompletionItems: (model, position) => { + var word = model.getWordUntilPosition(position); + var range = { + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn, + }; var suggestions = [ { label: "simpleText", kind: monaco.languages.CompletionItemKind.Text, insertText: "simpleText", + range: range, }, { label: "testing", @@ -44,6 +52,7 @@ monaco.languages.registerCompletionItemProvider("mySpecialLanguage", { insertTextRules: monaco.languages.CompletionItemInsertTextRule .InsertAsSnippet, + range: range, }, { label: "ifelse", @@ -59,6 +68,7 @@ monaco.languages.registerCompletionItemProvider("mySpecialLanguage", { monaco.languages.CompletionItemInsertTextRule .InsertAsSnippet, documentation: "If-Else Statement", + range: range, }, ]; return { suggestions: suggestions }; diff --git a/website/src/website/data/playground-samples/extending-language-services/inlay-hints-provider-example/sample.js b/website/src/website/data/playground-samples/extending-language-services/inlay-hints-provider-example/sample.js index 43831d3c..e6ed7db4 100644 --- a/website/src/website/data/playground-samples/extending-language-services/inlay-hints-provider-example/sample.js +++ b/website/src/website/data/playground-samples/extending-language-services/inlay-hints-provider-example/sample.js @@ -11,34 +11,37 @@ const editor = monaco.editor.create(document.getElementById("container"), { monaco.languages.registerInlayHintsProvider("javascript", { provideInlayHints(model, range, token) { - return [ - { - kind: monaco.languages.InlayHintKind.Type, - position: { column: 13, lineNumber: 4 }, - text: `: Number`, - }, - { - kind: monaco.languages.InlayHintKind.Type, - position: { column: 13, lineNumber: 2 }, - text: `: Number`, - }, - { - kind: monaco.languages.InlayHintKind.Type, - position: { column: 16, lineNumber: 2 }, - text: `: Number`, - whitespaceBefore: true, // see difference between a and b parameter - }, - { - kind: monaco.languages.InlayHintKind.Parameter, - position: { column: 18, lineNumber: 4 }, - text: `a:`, - }, - { - kind: monaco.languages.InlayHintKind.Parameter, - position: { column: 21, lineNumber: 4 }, - text: `b:`, - whitespaceAfter: true, // similar to whitespaceBefore - }, - ]; + return { + hints: [ + { + kind: monaco.languages.InlayHintKind.Type, + position: { column: 13, lineNumber: 4 }, + label: `: Number`, + }, + { + kind: monaco.languages.InlayHintKind.Type, + position: { column: 13, lineNumber: 2 }, + label: `: Number`, + }, + { + kind: monaco.languages.InlayHintKind.Type, + position: { column: 16, lineNumber: 2 }, + label: `: Number`, + whitespaceBefore: true, // see difference between a and b parameter + }, + { + kind: monaco.languages.InlayHintKind.Parameter, + position: { column: 18, lineNumber: 4 }, + label: `a:`, + }, + { + kind: monaco.languages.InlayHintKind.Parameter, + position: { column: 21, lineNumber: 4 }, + label: `b:`, + whitespaceAfter: true, // similar to whitespaceBefore + }, + ], + dispose: () => {}, + }; }, }); diff --git a/website/src/website/data/playground-samples/interacting-with-the-editor/adding-a-command-to-an-editor-instance/sample.js b/website/src/website/data/playground-samples/interacting-with-the-editor/adding-a-command-to-an-editor-instance/sample.js index 771d1ca2..e110eda4 100644 --- a/website/src/website/data/playground-samples/interacting-with-the-editor/adding-a-command-to-an-editor-instance/sample.js +++ b/website/src/website/data/playground-samples/interacting-with-the-editor/adding-a-command-to-an-editor-instance/sample.js @@ -28,15 +28,16 @@ editor.addCommand( monaco.KeyCode.Tab, function () { // services available in `ctx` - alert("my command is executing!"); + console.log("my command is executing!"); }, "myCondition1 && myCondition2" ); - +// @ts-ignore myCondition1.set(true); setTimeout(function () { - alert("now enabling also myCondition2, try pressing Tab!"); + console.log("now enabling also myCondition2, try pressing Tab!"); + // @ts-ignore myCondition2.set(true); // you can use myCondition2.reset() to go back to the default }, 2000); diff --git a/website/src/website/data/playground-samples/interacting-with-the-editor/listening-to-mouse-events/sample.js b/website/src/website/data/playground-samples/interacting-with-the-editor/listening-to-mouse-events/sample.js index a0c96c1f..e0932e03 100644 --- a/website/src/website/data/playground-samples/interacting-with-the-editor/listening-to-mouse-events/sample.js +++ b/website/src/website/data/playground-samples/interacting-with-the-editor/listening-to-mouse-events/sample.js @@ -45,16 +45,16 @@ editor.changeViewZones(function (changeAccessor) { // Add a content widget (scrolls inline with text) var contentWidget = { - domNode: null, + domNode: (function () { + var domNode = document.createElement("div"); + domNode.innerHTML = "My content widget"; + domNode.style.background = "grey"; + return domNode; + })(), getId: function () { return "my.content.widget"; }, getDomNode: function () { - if (!this.domNode) { - this.domNode = document.createElement("div"); - this.domNode.innerHTML = "My content widget"; - this.domNode.style.background = "grey"; - } return this.domNode; }, getPosition: function () { @@ -74,18 +74,18 @@ editor.addContentWidget(contentWidget); // Add an overlay widget var overlayWidget = { - domNode: null, + domNode: (function () { + var domNode = document.createElement("div"); + domNode.innerHTML = "My overlay widget"; + domNode.style.background = "grey"; + domNode.style.right = "30px"; + domNode.style.top = "50px"; + return domNode; + })(), getId: function () { return "my.overlay.widget"; }, getDomNode: function () { - if (!this.domNode) { - this.domNode = document.createElement("div"); - this.domNode.innerHTML = "My overlay widget"; - this.domNode.style.background = "grey"; - this.domNode.style.right = "30px"; - this.domNode.style.top = "50px"; - } return this.domNode; }, getPosition: function () { diff --git a/website/src/website/pages/playground/Preview.tsx b/website/src/website/pages/playground/Preview.tsx index 93692974..e893c472 100644 --- a/website/src/website/pages/playground/Preview.tsx +++ b/website/src/website/pages/playground/Preview.tsx @@ -21,7 +21,7 @@ export class Preview