placidenduwayo 1 rok temu
rodzic
commit
136b50262e
1 zmienionych plików z 73 dodań i 0 usunięć
  1. 73
    0
      monaco-editor/monaco-editor-config.ts

+ 73
- 0
monaco-editor/monaco-editor-config.ts Wyświetl plik

@@ -0,0 +1,73 @@
1
+
2
+
3
+async function onMonacoEditorLoad(languages: Array<string> = ['java', 'csharp', 'python', 'html', 'json', 'css']) {
4
+  const allLangs =  (<any>window).monaco.languages.getLanguages();
5
+  console.log('all supported languages:', allLangs);
6
+  console.log( (<any>window).monaco);
7
+  (<any>window).monaco.languages.register({ id: languages[0] });
8
+  (<any>window).monaco.languages.registerCompletionItemProvider(languages[0], {
9
+    triggerCharacters: ['.'],
10
+    provideCompletionItems: function (model: any, position: any) {
11
+      const textUntilPosition = model.getValueInRange(
12
+        {
13
+          startLineNumber: position.lineNumber, 
14
+          startColumn: 1,
15
+          endLineNumber: position.lineNumber,
16
+          endColumn: position.column
17
+        }
18
+      );
19
+      console.log(textUntilPosition);
20
+      const match = textUntilPosition.match(/"dependencies"\s*:\s*\{\s*("[^"]*"\s*:\s*"[^"]*"\s*,\s*)*([^"]*)?$/);
21
+      if (!match) {
22
+        return { suggestions: [] };
23
+      }
24
+      var word = model.getWordUntilPosition(position);
25
+      var range = {
26
+        startLineNumber: position.lineNumber,
27
+        endLineNumber: position.lineNumber,
28
+        startColumn: word.startColumn,
29
+        endColumn: word.endColumn
30
+      };
31
+
32
+      const suggestions = [
33
+        {
34
+          label: '"lodash"',
35
+          kind:  (<any>window).monaco.languages.CompletionItemKind.Function,
36
+          documentation: "The Lodash library exported as Node.js modules.",
37
+          insertText: '"lodash": "*"',
38
+          range: range
39
+        },
40
+        {
41
+          label: '"express"',
42
+          kind:  (<any>window).monaco.languages.CompletionItemKind.Function,
43
+          documentation: "Fast, unopinionated, minimalist web framework",
44
+          insertText: '"express": "*"',
45
+          range: range
46
+        },
47
+        {
48
+          label: '"mkdirp"',
49
+          kind:  (<any>window).monaco.languages.CompletionItemKind.Function,
50
+          documentation: "Recursively mkdir, like <code>mkdir -p</code>",
51
+          insertText: '"mkdirp": "*"',
52
+          range: range
53
+        },
54
+        {
55
+          label: '"my-third-party-library"',
56
+          kind:  (<any>window).monaco.languages.CompletionItemKind.Function,
57
+          documentation: "Describe your library here",
58
+          insertText: '"${1:my-third-party-library}": "${2:1.2.3}"',
59
+          insertTextRules:  (<any>window).monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
60
+          range: range
61
+        }
62
+      ];
63
+      return { suggestions: suggestions };
64
+    }
65
+
66
+  });
67
+}
68
+
69
+export const monacoConfig = {
70
+  baseUrl: './assets',
71
+  defaultOptions: { scrollBeyondLastLine: false },
72
+  onMonacoLoad: onMonacoEditorLoad
73
+};

Powered by TurnKey Linux.