Skip to content

Commit c6b58a5

Browse files
committed
Create aggregate stage definitions
1 parent 8902bfc commit c6b58a5

File tree

4 files changed

+246
-238
lines changed

4 files changed

+246
-238
lines changed

src/editor/autocomplete.tsx renamed to src/editor/autocomplete.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +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 completionData from './completions.json';
4+
import stages from './stages.json';
55

66
interface CompletionState {
77
name: string;
@@ -11,7 +11,7 @@ interface CompletionState {
1111

1212
// Supports JSON only right now
1313
class CompletionProvider implements monacoTypes.languages.CompletionItemProvider {
14-
constructor(private readonly editor: MonacoEditor) {}
14+
constructor(private readonly editor: MonacoEditor) { }
1515

1616
provideCompletionItems(
1717
model: monacoTypes.editor.ITextModel,
@@ -46,10 +46,10 @@ class CompletionProvider implements monacoTypes.languages.CompletionItemProvider
4646
endColumn: word.endColumn,
4747
};
4848

49-
const suggestions: languages.CompletionItem[] = completionData['stages'].map((stage) => ({
49+
const suggestions: languages.CompletionItem[] = stages.map((stage) => ({
5050
label: `"${stage.name}"`,
5151
kind: languages.CompletionItemKind.Function,
52-
insertText: createInsertText(stage),
52+
insertText: `"\\${stage.name}": ${stage.snippet}`,
5353
range: range,
5454
detail: 'stage',
5555
documentation: stage.description,

src/editor/completions.json

Lines changed: 0 additions & 229 deletions
This file was deleted.

src/editor/hover.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useEffect, useRef } from 'react';
22
import { monacoTypes, type Monaco, type MonacoEditor } from '@grafana/ui';
3-
import completionData from './completions.json';
3+
import stages from './stages.json';
44

5-
const stages = Object.fromEntries(completionData['stages'].map((stage) => [stage.name, stage.description]))
5+
const stageObj = Object.fromEntries(stages.map((stage) => [stage.name, [stage.description, stage.comment]]))
66

77
class HoverProvider implements monacoTypes.languages.HoverProvider {
88
constructor(private readonly editor: MonacoEditor) { }
@@ -12,8 +12,8 @@ class HoverProvider implements monacoTypes.languages.HoverProvider {
1212
}
1313

1414
const word = model.getWordAtPosition(position);
15-
if (word && Object.keys(stages).includes(word.word)) {
16-
const lines = stages[word.word].split("\n").map((para) => ({ value: para.trim() }));
15+
if (word && Object.keys(stageObj).includes(word.word)) {
16+
const [description, comment] = stageObj[word.word];
1717
return {
1818
range: {
1919
startLineNumber: position.lineNumber,
@@ -23,7 +23,8 @@ class HoverProvider implements monacoTypes.languages.HoverProvider {
2323
},
2424
contents: [
2525
{ value: `[${word.word}](https://www.mongodb.com/docs/manual/reference/operator/aggregation/${word.word.substring(1)})` },
26-
...lines
26+
{ value: description },
27+
{ value: comment },
2728
]
2829
};
2930
}

0 commit comments

Comments
 (0)