Преглед изворни кода

Create example for model markers

This example demonstrates how to listen to model change events so that
the content of the editor can be validated. Any content that is deemed
invalid can be flagged with a model marker.

Signed-off-by: Remy Suen <remy.suen@gmail.com>
Remy Suen пре 3 година
родитељ
комит
661b83d7b0

+ 6 - 0
website/playground/new-samples/all.js

@@ -156,6 +156,12 @@
 			id: 'extending-language-services-hover-provider-example',
 			path: 'extending-language-services/hover-provider-example'
 		},
+		{
+			chapter: 'Extending Language Services',
+			name: 'Model markers example',
+			id: 'extending-language-services-model-markers-example',
+			path: 'extending-language-services/model-markers-example'
+		},
 		{
 			chapter: 'Extending Language Services',
 			name: 'Semantic tokens provider example',

+ 0 - 0
website/playground/new-samples/extending-language-services/model-markers-example/sample.css


+ 1 - 0
website/playground/new-samples/extending-language-services/model-markers-example/sample.html

@@ -0,0 +1 @@
+<div id="container" style="height: 100%"></div>

+ 48 - 0
website/playground/new-samples/extending-language-services/model-markers-example/sample.js

@@ -0,0 +1,48 @@
+function validate(model) {
+	const markers = [];
+	// lines start at 1
+	for (let i = 1; i < model.getLineCount() + 1; i++) {
+		const range = {
+			startLineNumber: i,
+			startColumn: 1,
+			endLineNumber: i,
+			endColumn: model.getLineLength(i) + 1
+		};
+		const content = model.getValueInRange(range).trim();
+		const number = Number(content);
+		if (Number.isNaN(number)) {
+			markers.push({
+				message: 'not a number',
+				severity: monaco.MarkerSeverity.Error,
+				startLineNumber: range.startLineNumber,
+				startColumn: range.startColumn,
+				endLineNumber: range.endLineNumber,
+				endColumn: range.endColumn
+			});
+		} else if (!Number.isInteger(number)) {
+			markers.push({
+				message: 'not an integer',
+				severity: monaco.MarkerSeverity.Warning,
+				startLineNumber: range.startLineNumber,
+				startColumn: range.startColumn,
+				endLineNumber: range.endLineNumber,
+				endColumn: range.endColumn
+			});
+		}
+	}
+	monaco.editor.setModelMarkers(model, 'owner', markers);
+}
+
+const value = `12345
+abcd
+234.56
+12345
+abcd
+234.56`;
+const uri = monaco.Uri.parse('inmemory://test');
+const model = monaco.editor.createModel(value, 'demoLanguage', uri);
+editor = monaco.editor.create(document.getElementById('container'), { model });
+validate(model);
+model.onDidChangeContent(() => {
+	validate(model);
+});