Skip to content

Commit 32dd84b

Browse files
committed
Add more operators
1 parent 18eee9c commit 32dd84b

File tree

1 file changed

+14
-36
lines changed

1 file changed

+14
-36
lines changed

src/editor/autocomplete.ts

Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
import { useRef, useEffect } from 'react';
22
import { type Monaco, type monacoTypes, type MonacoEditor } from '@grafana/ui';
33
import { languages } from 'monaco-editor';
4-
import { STAGE_OPERATORS } from '@mongodb-js/mongodb-constants'
5-
6-
interface CompletionState {
7-
name: string;
8-
description: string;
9-
fields?: string[] | string;
10-
}
4+
import { STAGE_OPERATORS, EXPRESSION_OPERATORS, ACCUMULATORS, CONVERSION_OPERATORS, QUERY_OPERATORS } from '@mongodb-js/mongodb-constants'
115

126
// Supports JSON only right now
137
class CompletionProvider implements monacoTypes.languages.CompletionItemProvider {
@@ -46,18 +40,27 @@ class CompletionProvider implements monacoTypes.languages.CompletionItemProvider
4640
endColumn: word.endColumn,
4741
};
4842

49-
const suggestions: languages.CompletionItem[] = STAGE_OPERATORS.map((stage) => ({
43+
const stageSuggestions: languages.CompletionItem[] = STAGE_OPERATORS.map((stage) => ({
5044
label: `"${stage.name}"`,
5145
kind: languages.CompletionItemKind.Function,
5246
insertText: `"\\${stage.name}": ${stage.snippet}`,
5347
range: range,
54-
detail: 'stage',
48+
detail: stage.meta,
5549
documentation: stage.description,
5650
insertTextRules: languages.CompletionItemInsertTextRule.InsertAsSnippet,
5751
}));
5852

53+
const expressionSuggestions: languages.CompletionItem[] = [...EXPRESSION_OPERATORS, ...ACCUMULATORS, ...CONVERSION_OPERATORS, ...QUERY_OPERATORS].map((expression) => ({
54+
label: `"${expression.name}"`,
55+
kind: languages.CompletionItemKind.Function,
56+
insertText: `"\\${expression.name}": \${1:expression}`,
57+
range: range,
58+
detail: expression.meta,
59+
insertTextRules: languages.CompletionItemInsertTextRule.InsertAsSnippet,
60+
}));
61+
5962
return {
60-
suggestions: suggestions,
63+
suggestions: [...stageSuggestions, ...expressionSuggestions],
6164
};
6265
}
6366
}
@@ -75,29 +78,4 @@ export function useAutocomplete() {
7578
const { dispose } = monaco.languages.registerCompletionItemProvider('json', provider);
7679
autocompleteDisposeFun.current = dispose;
7780
};
78-
}
79-
80-
function createInsertText({ name, fields }: CompletionState) {
81-
if (fields) {
82-
if (Array.isArray(fields)) {
83-
let insertText = `"\\${name}": {\n\t`;
84-
for (let i = 0; i < fields.length; i++) {
85-
const field = fields[i];
86-
insertText += `"${field}": \${${i + 1}:${field}}`;
87-
88-
if (i === 0) {
89-
insertText += '$0';
90-
}
91-
92-
if (i !== fields.length - 1) {
93-
insertText += ',\n\t';
94-
}
95-
}
96-
insertText += '\n}';
97-
98-
return insertText;
99-
}
100-
return `"\\${name}": \${1:${fields}}`;
101-
}
102-
return `"\\${name}": {\n\t$0\n}`;
103-
}
81+
}

0 commit comments

Comments
 (0)