|
@@ -1008,6 +1008,55 @@ function getCode() {
|
|
|
=======================END
|
|
|
|
|
|
|
|
|
+== Completion provider example
|
|
|
+=======================JS
|
|
|
+function createDependencyProposals() {
|
|
|
+ // returning a static list of proposals, not even looking at the prefix (filtering is done by the Monaco editor),
|
|
|
+ // here you could do a server side lookup
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ label: '"lodash"',
|
|
|
+ kind: monaco.languages.CompletionItemKind.Function,
|
|
|
+ documentation: "The Lodash library exported as Node.js modules.",
|
|
|
+ insertText: '"lodash": "*"'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '"express"',
|
|
|
+ kind: monaco.languages.CompletionItemKind.Function,
|
|
|
+ documentation: "Fast, unopinionated, minimalist web framework",
|
|
|
+ insertText: '"express": "*"'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '"mkdirp"',
|
|
|
+ kind: monaco.languages.CompletionItemKind.Function,
|
|
|
+ documentation: "Recursively mkdir, like <code>mkdir -p</code>",
|
|
|
+ insertText: '"mkdirp": "*"'
|
|
|
+ }
|
|
|
+ ];
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+monaco.languages.registerCompletionItemProvider('json', {
|
|
|
+ provideCompletionItems: function(model, position) {
|
|
|
+ // find out if we are completing a property in the 'dependencies' object.
|
|
|
+ var textUntilPosition = model.getValueInRange({startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column});
|
|
|
+ var match = textUntilPosition.match(/"dependencies"\s*:\s*{\s*("[^"]*"\s*:\s*"[^"]*"\s*,\s*)*("[^"]"]*)?$/);
|
|
|
+ if (match) {
|
|
|
+ return createDependencyProposals();
|
|
|
+ }
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+monaco.editor.create(document.getElementById("container"), {
|
|
|
+ value: "{\n\t\"dependencies\": {\n\t\t\n\t}\n}\n",
|
|
|
+ language: "json"
|
|
|
+});
|
|
|
+=======================HTML
|
|
|
+<div id="container" style="height:100%;"></div>
|
|
|
+
|
|
|
+=======================END
|
|
|
+
|
|
|
|
|
|
== Hover provider example
|
|
|
=======================JS
|
|
@@ -1120,4 +1169,49 @@ monaco.editor.create(document.getElementById("container"), {
|
|
|
|
|
|
=======================END
|
|
|
|
|
|
+== Configure JSON defaults
|
|
|
+=======================JS
|
|
|
+// Configures two JSON schemas, with references.
|
|
|
+
|
|
|
+monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
|
|
|
+ schemas: [{
|
|
|
+ uri: "http://myserver/foo-schema.json",
|
|
|
+ schema: {
|
|
|
+ type: "object",
|
|
|
+ properties: {
|
|
|
+ p1: {
|
|
|
+ enum: [ "v1", "v2"]
|
|
|
+ },
|
|
|
+ p2: {
|
|
|
+ $ref: "http://myserver/bar-schema.json"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },{
|
|
|
+ uri: "http://myserver/bar-schema.json",
|
|
|
+ schema: {
|
|
|
+ type: "object",
|
|
|
+ properties: {
|
|
|
+ q1: {
|
|
|
+ enum: [ "x1", "x2"]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }]
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
+var jsonCode = [
|
|
|
+ '{',
|
|
|
+ ' "$schema": "http://myserver/foo-schema.json"',
|
|
|
+ "}"
|
|
|
+].join('\n');
|
|
|
|
|
|
+monaco.editor.create(document.getElementById("container"), {
|
|
|
+ value: jsonCode,
|
|
|
+ language: "json"
|
|
|
+});
|
|
|
+=======================HTML
|
|
|
+<div id="container" style="height:100%;"></div>
|
|
|
+
|
|
|
+=======================END
|