Cloudwatch: Restructure languages in plugin root (#61490)

Co-authored-by: Isabella Siu <isabella.siu@grafana.com>
This commit is contained in:
Erik Sundell 2023-01-19 20:04:28 +01:00 committed by GitHub
parent da7bf56c03
commit 78184f37c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 94 additions and 98 deletions

View File

@ -5321,8 +5321,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/plugins/datasource/cloudwatch/components/LogsQueryField.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"]
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/plugins/datasource/cloudwatch/components/MetricsQueryEditor/Alias.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@ -5343,16 +5342,7 @@ exports[`better eslint`] = {
"public/app/plugins/datasource/cloudwatch/guards.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/plugins/datasource/cloudwatch/language_provider.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
],
"public/app/plugins/datasource/cloudwatch/language_provider.ts:5381": [
"public/app/plugins/datasource/cloudwatch/language/cloudwatch-logs/CloudWatchLogsLanguageProvider.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"]

View File

@ -1,6 +1,6 @@
import { monacoTypes } from '@grafana/ui';
import { Monaco } from '../../monarch/types';
import { Monaco } from '../../language/monarch/types';
import * as SQLTestData from '../cloudwatch-sql-test-data';
import * as DynamicLabelTestData from '../dynamic-label-test-data';
import * as MetricMathTestData from '../metric-math-test-data';

View File

@ -4,10 +4,10 @@ import React, { useCallback, useRef } from 'react';
import { CodeEditor, getInputStyles, Monaco, useTheme2 } from '@grafana/ui';
import { DynamicLabelsCompletionItemProvider } from '../dynamic-labels/CompletionItemProvider';
import language from '../dynamic-labels/definition';
import { TRIGGER_SUGGEST } from '../monarch/commands';
import { registerLanguage } from '../monarch/register';
import { DynamicLabelsCompletionItemProvider } from '../language/dynamic-labels/CompletionItemProvider';
import language from '../language/dynamic-labels/definition';
import { TRIGGER_SUGGEST } from '../language/monarch/commands';
import { registerLanguage } from '../language/monarch/register';
const dynamicLabelsCompletionItemProvider = new DynamicLabelsCompletionItemProvider();

View File

@ -6,7 +6,7 @@ import React, { PureComponent } from 'react';
import { QueryEditorHelpProps } from '@grafana/data';
import { flattenTokens } from '@grafana/ui/src/slate-plugins/slate-prism';
import tokenizer from '../syntax';
import tokenizer from '../language/cloudwatch-logs/syntax';
import { CloudWatchQuery } from '../types';
interface QueryExample {

View File

@ -18,8 +18,7 @@ import { ExploreId } from 'app/types';
// Utils & Services
// dom also includes Element polyfills
import { CloudWatchDatasource } from '../datasource';
import { CloudWatchLanguageProvider } from '../language_provider';
import syntax from '../syntax';
import syntax from '../language/cloudwatch-logs/syntax';
import { CloudWatchJsonData, CloudWatchLogsQuery, CloudWatchQuery } from '../types';
import { getStatsGroups } from '../utils/query/getStatsGroups';
@ -68,11 +67,10 @@ export const CloudWatchLogsQueryField = (props: CloudWatchLogsQueryFieldProps) =
return { suggestions: [] };
}
const cloudwatchLanguageProvider = datasource.languageProvider as CloudWatchLanguageProvider;
const { history, absoluteRange } = props;
const { prefix, text, value, wrapperClasses, labelKey, editor } = typeahead;
return await cloudwatchLanguageProvider.provideCompletionItems(
return await datasource.languageProvider.provideCompletionItems(
{ text, value, prefix, wrapperClasses, labelKey, editor },
{
history,

View File

@ -4,9 +4,9 @@ import React, { useCallback, useRef } from 'react';
import { CodeEditor, Monaco } from '@grafana/ui';
import { CloudWatchDatasource } from '../datasource';
import language from '../metric-math/definition';
import { TRIGGER_SUGGEST } from '../monarch/commands';
import { registerLanguage } from '../monarch/register';
import language from '../language/metric-math/definition';
import { TRIGGER_SUGGEST } from '../language/monarch/commands';
import { registerLanguage } from '../language/monarch/register';
export interface Props {
onChange: (query: string) => void;

View File

@ -3,8 +3,8 @@ import React, { useCallback, useEffect, useState } from 'react';
import { EditorField, EditorRow, EditorRows } from '@grafana/experimental';
import { Input } from '@grafana/ui';
import SQLGenerator from '../../cloudwatch-sql/SQLGenerator';
import { CloudWatchDatasource } from '../../datasource';
import SQLGenerator from '../../language/cloudwatch-sql/SQLGenerator';
import { CloudWatchMetricsQuery } from '../../types';
import SQLBuilderSelectRow from './SQLBuilderSelectRow';

View File

@ -4,9 +4,9 @@ import { SelectableValue, toOption } from '@grafana/data';
import { EditorField, EditorFieldGroup, EditorSwitch } from '@grafana/experimental';
import { Select } from '@grafana/ui';
import { STATISTICS } from '../../cloudwatch-sql/language';
import { CloudWatchDatasource } from '../../datasource';
import { useDimensionKeys, useMetrics, useNamespaces } from '../../hooks';
import { STATISTICS } from '../../language/cloudwatch-sql/language';
import { CloudWatchMetricsQuery } from '../../types';
import { appendTemplateVariables } from '../../utils/utils';

View File

@ -5,10 +5,10 @@ import { SelectableValue, toOption } from '@grafana/data';
import { AccessoryButton, EditorList, InputGroup } from '@grafana/experimental';
import { Select } from '@grafana/ui';
import { COMPARISON_OPERATORS, EQUALS } from '../../cloudwatch-sql/language';
import { CloudWatchDatasource } from '../../datasource';
import { QueryEditorExpressionType, QueryEditorOperatorExpression, QueryEditorPropertyType } from '../../expressions';
import { useDimensionKeys } from '../../hooks';
import { COMPARISON_OPERATORS, EQUALS } from '../../language/cloudwatch-sql/language';
import { CloudWatchMetricsQuery } from '../../types';
import { appendTemplateVariables } from '../../utils/utils';

View File

@ -4,8 +4,8 @@ import { SelectableValue, toOption } from '@grafana/data';
import { AccessoryButton, EditorField, EditorFieldGroup, InputGroup } from '@grafana/experimental';
import { Select } from '@grafana/ui';
import { ASC, DESC, STATISTICS } from '../../cloudwatch-sql/language';
import { CloudWatchDatasource } from '../../datasource';
import { ASC, DESC, STATISTICS } from '../../language/cloudwatch-sql/language';
import { CloudWatchMetricsQuery } from '../../types';
import { appendTemplateVariables } from '../../utils/utils';

View File

@ -1,6 +1,5 @@
import { SelectableValue } from '@grafana/data';
import { SCHEMA } from '../../cloudwatch-sql/language';
import {
QueryEditorExpressionType,
QueryEditorPropertyType,
@ -9,6 +8,7 @@ import {
QueryEditorOperatorExpression,
QueryEditorGroupByExpression,
} from '../../expressions';
import { SCHEMA } from '../../language/cloudwatch-sql/language';
import { SQLExpression, CloudWatchMetricsQuery, Dimensions } from '../../types';
export function getMetricNameFromExpression(selectExpression: SQLExpression['select']): string | undefined {

View File

@ -3,10 +3,10 @@ import React, { FunctionComponent, useCallback, useEffect } from 'react';
import { CodeEditor, Monaco } from '@grafana/ui';
import language from '../cloudwatch-sql/definition';
import { CloudWatchDatasource } from '../datasource';
import { TRIGGER_SUGGEST } from '../monarch/commands';
import { registerLanguage } from '../monarch/register';
import language from '../language/cloudwatch-sql/definition';
import { TRIGGER_SUGGEST } from '../language/monarch/commands';
import { registerLanguage } from '../language/monarch/register';
export interface Props {
region: string;

View File

@ -19,11 +19,11 @@ import { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_sr
import { RowContextOptions } from '../../../features/logs/components/LogRowContextProvider';
import { CloudWatchAnnotationSupport } from './annotationSupport';
import { SQLCompletionItemProvider } from './cloudwatch-sql/completion/CompletionItemProvider';
import { DEFAULT_METRICS_QUERY, getDefaultLogsQuery } from './defaultQueries';
import { isCloudWatchAnnotationQuery, isCloudWatchLogsQuery, isCloudWatchMetricsQuery } from './guards';
import { CloudWatchLanguageProvider } from './language_provider';
import { MetricMathCompletionItemProvider } from './metric-math/completion/CompletionItemProvider';
import { CloudWatchLogsLanguageProvider } from './language/cloudwatch-logs/CloudWatchLogsLanguageProvider';
import { SQLCompletionItemProvider } from './language/cloudwatch-sql/completion/CompletionItemProvider';
import { MetricMathCompletionItemProvider } from './language/metric-math/completion/CompletionItemProvider';
import { CloudWatchAnnotationQueryRunner } from './query-runner/CloudWatchAnnotationQueryRunner';
import { CloudWatchLogsQueryRunner } from './query-runner/CloudWatchLogsQueryRunner';
import { CloudWatchMetricsQueryRunner } from './query-runner/CloudWatchMetricsQueryRunner';
@ -42,7 +42,7 @@ export class CloudWatchDatasource
implements DataSourceWithLogsContextSupport<CloudWatchLogsQuery>
{
defaultRegion?: string;
languageProvider: CloudWatchLanguageProvider;
languageProvider: CloudWatchLogsLanguageProvider;
sqlCompletionItemProvider: SQLCompletionItemProvider;
metricMathCompletionItemProvider: MetricMathCompletionItemProvider;
defaultLogGroups?: string[];
@ -62,7 +62,7 @@ export class CloudWatchDatasource
super(instanceSettings);
this.defaultRegion = instanceSettings.jsonData.defaultRegion;
this.resources = new ResourcesAPI(instanceSettings, templateSrv);
this.languageProvider = new CloudWatchLanguageProvider(this);
this.languageProvider = new CloudWatchLogsLanguageProvider(this);
this.sqlCompletionItemProvider = new SQLCompletionItemProvider(this.resources, this.templateSrv);
this.metricMathCompletionItemProvider = new MetricMathCompletionItemProvider(this.resources, this.templateSrv);
this.metricsQueryRunner = new CloudWatchMetricsQueryRunner(instanceSettings, templateSrv);

View File

@ -3,9 +3,11 @@ import { Value } from 'slate';
import { TypeaheadOutput } from '@grafana/ui';
import { CloudWatchDatasource } from './datasource';
import { CloudWatchLanguageProvider } from './language_provider';
import { ResourceResponse } from './resources/types';
import { CloudWatchDatasource } from '../../datasource';
import { ResourceResponse } from '../../resources/types';
import { LogGroupField } from '../../types';
import { CloudWatchLogsLanguageProvider } from './CloudWatchLogsLanguageProvider';
import {
AGGREGATION_FUNCTIONS_STATS,
BOOLEAN_FUNCTIONS,
@ -16,88 +18,87 @@ import {
STRING_FUNCTIONS,
FIELD_AND_FILTER_FUNCTIONS,
} from './syntax';
import { LogGroupField } from './types';
const fields = ['field1', '@message'];
describe('CloudWatchLanguageProvider', () => {
describe('CloudWatchLogsLanguageProvider', () => {
it('should suggest ', async () => {
await runSuggestionTest('stats count(\\)', [fields]);
await runSuggestionTest('stats count(^)', [fields]);
// Make sure having a field prefix does not brake anything
await runSuggestionTest('stats count(@mess\\)', [fields]);
await runSuggestionTest('stats count(@mess^)', [fields]);
});
it('should suggest query commands on start of query', async () => {
await runSuggestionTest('\\', [QUERY_COMMANDS.map((v) => v.label)]);
await runSuggestionTest('^', [QUERY_COMMANDS.map((v) => v.label)]);
});
it('should suggest query commands after pipe', async () => {
await runSuggestionTest('fields f | \\', [QUERY_COMMANDS.map((v) => v.label)]);
await runSuggestionTest('fields f | ^', [QUERY_COMMANDS.map((v) => v.label)]);
});
it('should suggest fields and functions after field command', async () => {
await runSuggestionTest('fields \\', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
await runSuggestionTest('fields ^', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
});
it('should suggest fields and functions after comma', async () => {
await runSuggestionTest('fields field1, \\', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
await runSuggestionTest('fields field1, ^', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
});
it('should suggest fields and functions after comma with prefix', async () => {
await runSuggestionTest('fields field1, @mess\\', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
await runSuggestionTest('fields field1, @mess^', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
});
it('should suggest fields and functions after display command', async () => {
await runSuggestionTest('display \\', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
await runSuggestionTest('display ^', [fields, FIELD_AND_FILTER_FUNCTIONS.map((v) => v.label)]);
});
it('should suggest functions after stats command', async () => {
await runSuggestionTest('stats \\', [AGGREGATION_FUNCTIONS_STATS.map((v) => v.label)]);
await runSuggestionTest('stats ^', [AGGREGATION_FUNCTIONS_STATS.map((v) => v.label)]);
});
it('should suggest fields and some functions after `by` command', async () => {
await runSuggestionTest('stats count(something) by \\', [
await runSuggestionTest('stats count(something) by ^', [
fields,
STRING_FUNCTIONS.concat(DATETIME_FUNCTIONS, IP_FUNCTIONS).map((v) => v.label),
]);
});
it('should suggest fields and some functions after comparison operator', async () => {
await runSuggestionTest('filter field1 >= \\', [
await runSuggestionTest('filter field1 >= ^', [
fields,
[...NUMERIC_OPERATORS.map((v) => v.label), ...BOOLEAN_FUNCTIONS.map((v) => v.label)],
]);
});
it('should suggest fields directly after sort', async () => {
await runSuggestionTest('sort \\', [fields]);
await runSuggestionTest('sort ^', [fields]);
});
it('should suggest fields directly after sort after a pipe', async () => {
await runSuggestionTest('fields field1 | sort \\', [fields]);
await runSuggestionTest('fields field1 | sort ^', [fields]);
});
it('should suggest sort order after sort command and field', async () => {
await runSuggestionTest('sort field1 \\', [['asc', 'desc']]);
await runSuggestionTest('sort field1 ^', [['asc', 'desc']]);
});
it('should suggest fields directly after parse', async () => {
await runSuggestionTest('parse \\', [fields]);
await runSuggestionTest('parse ^', [fields]);
});
it('should suggest fields and bool functions after filter', async () => {
await runSuggestionTest('filter \\', [fields, BOOLEAN_FUNCTIONS.map((v) => v.label)]);
await runSuggestionTest('filter ^', [fields, BOOLEAN_FUNCTIONS.map((v) => v.label)]);
});
it('should suggest fields and functions after filter bin() function', async () => {
await runSuggestionTest('stats count(@message) by bin(30m), \\', [
await runSuggestionTest('stats count(@message) by bin(30m), ^', [
fields,
STRING_FUNCTIONS.concat(DATETIME_FUNCTIONS, IP_FUNCTIONS).map((v) => v.label),
]);
});
it('should not suggest anything if not after comma in by expression', async () => {
await runSuggestionTest('stats count(@message) by bin(30m) \\', []);
await runSuggestionTest('stats count(@message) by bin(30m) ^', []);
});
});
@ -115,22 +116,24 @@ function makeDatasource(): CloudWatchDatasource {
return Promise.resolve([{ value: { name: 'field1' } }, { value: { name: '@message' } }]);
},
},
/* eslint-disable @typescript-eslint/no-explicit-any */
} as any;
}
/**
* Get suggestion items based on query. Use `\\` to mark position of the cursor.
* Get suggestion items based on query. Use `^` to mark position of the cursor.
*/
function getProvideCompletionItems(query: string): Promise<TypeaheadOutput> {
const provider = new CloudWatchLanguageProvider(makeDatasource());
const cursorOffset = query.indexOf('\\');
const queryWithoutCursor = query.replace('\\', '');
const provider = new CloudWatchLogsLanguageProvider(makeDatasource());
const cursorOffset = query.indexOf('^');
const queryWithoutCursor = query.replace('^', '');
let tokens: Token[] = Prism.tokenize(queryWithoutCursor, provider.getSyntax()) as any;
tokens = addTokenMetadata(tokens);
const value = new ValueMock(tokens, cursorOffset);
return provider.provideCompletionItems(
{
value,
/* eslint-disable @typescript-eslint/no-explicit-any */
} as any,
{ logGroups: [{ name: 'logGroup1', arn: 'logGroup1' }], region: 'custom' }
);
@ -145,12 +148,14 @@ class ValueMock {
start: {
offset: cursorOffset,
},
/* eslint-disable @typescript-eslint/no-explicit-any */
} as any;
this.data = {
get() {
return tokens;
},
/* eslint-disable @typescript-eslint/no-explicit-any */
} as any;
}
}
@ -160,9 +165,11 @@ class ValueMock {
* @param tokens
*/
function addTokenMetadata(tokens: Array<string | Token>): Token[] {
/* eslint-disable @typescript-eslint/no-explicit-any */
let prev = undefined as any;
let offset = 0;
return tokens.reduce((acc, token) => {
/* eslint-disable @typescript-eslint/no-explicit-any */
let newToken: any;
if (typeof token === 'string') {
newToken = {

View File

@ -5,7 +5,10 @@ import { AbsoluteTimeRange, HistoryItem, LanguageProvider } from '@grafana/data'
import { CompletionItemGroup, SearchFunctionType, Token, TypeaheadInput, TypeaheadOutput } from '@grafana/ui';
import { getTemplateSrv } from 'app/features/templating/template_srv';
import { CloudWatchDatasource } from './datasource';
import { CloudWatchDatasource } from '../../datasource';
import { CloudWatchQuery, LogGroup, TSDBResponse } from '../../types';
import { interpolateStringArrayUsingSingleOrMultiValuedVariable } from '../../utils/templateVariableUtils';
import syntax, {
AGGREGATION_FUNCTIONS_STATS,
BOOLEAN_FUNCTIONS,
@ -16,8 +19,6 @@ import syntax, {
QUERY_COMMANDS,
STRING_FUNCTIONS,
} from './syntax';
import { CloudWatchQuery, LogGroup, TSDBResponse } from './types';
import { interpolateStringArrayUsingSingleOrMultiValuedVariable } from './utils/templateVariableUtils';
export type CloudWatchHistoryItem = HistoryItem<CloudWatchQuery>;
@ -28,7 +29,7 @@ type TypeaheadContext = {
region: string;
};
export class CloudWatchLanguageProvider extends LanguageProvider {
export class CloudWatchLogsLanguageProvider extends LanguageProvider {
started = false;
declare initialRange: AbsoluteTimeRange;
datasource: CloudWatchDatasource;

View File

@ -5,7 +5,7 @@ import {
labelsVariable,
metricVariable,
namespaceVariable,
} from '../__mocks__/CloudWatchDataSource';
} from '../../__mocks__/CloudWatchDataSource';
import {
createFunctionWithParameter,
createArray,
@ -13,9 +13,9 @@ import {
createGroupBy,
createFunction,
createProperty,
} from '../__mocks__/sqlUtils';
import { QueryEditorExpressionType } from '../expressions';
import { SQLExpression } from '../types';
} from '../../__mocks__/sqlUtils';
import { QueryEditorExpressionType } from '../../expressions';
import { SQLExpression } from '../../types';
import SQLGenerator from './SQLGenerator';

View File

@ -7,8 +7,8 @@ import {
QueryEditorFunctionExpression,
QueryEditorOperatorExpression,
QueryEditorPropertyExpression,
} from '../expressions';
import { SQLExpression } from '../types';
} from '../../expressions';
import { SQLExpression } from '../../types';
export default class SQLGenerator {
constructor(private templateSrv: TemplateSrv = getTemplateSrv()) {}

View File

@ -3,11 +3,11 @@ import { uniq } from 'lodash';
import { getTemplateSrv, TemplateSrv } from '@grafana/runtime';
import type { Monaco, monacoTypes } from '@grafana/ui';
import { ResourcesAPI } from '../../../resources/ResourcesAPI';
import { CompletionItemProvider } from '../../monarch/CompletionItemProvider';
import { LinkedToken } from '../../monarch/LinkedToken';
import { TRIGGER_SUGGEST } from '../../monarch/commands';
import { SuggestionKind, CompletionItemPriority, StatementPosition } from '../../monarch/types';
import { ResourcesAPI } from '../../resources/ResourcesAPI';
import {
BY,
FROM,

View File

@ -5,9 +5,9 @@ import {
singleLineFullQuery,
singleLineEmptyQuery,
singleLineTwoQueries,
} from '../../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
} from '../../../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../../../__mocks__/monarch/Monaco';
import TextModel from '../../../__mocks__/monarch/TextModel';
import { linkedTokenBuilder } from '../../monarch/linkedTokenBuilder';
import { StatementPosition } from '../../monarch/types';
import cloudWatchSqlLanguageDefinition from '../definition';

View File

@ -5,9 +5,9 @@ import {
singleLineFullQuery,
singleLineTwoQueries,
multiLineIncompleteQueryWithoutNamespace,
} from '../../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
} from '../../../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../../../__mocks__/monarch/Monaco';
import TextModel from '../../../__mocks__/monarch/TextModel';
import { LinkedToken } from '../../monarch/LinkedToken';
import { linkedTokenBuilder } from '../../monarch/linkedTokenBuilder';
import cloudWatchSqlLanguageDefinition from '../definition';

View File

@ -1,9 +1,9 @@
import { CompletionItemPriority } from '@grafana/experimental';
import { Monaco, monacoTypes } from '@grafana/ui';
import { afterLabelValue, insideLabelValue } from '../__mocks__/dynamic-label-test-data';
import MonacoMock from '../__mocks__/monarch/Monaco';
import TextModel from '../__mocks__/monarch/TextModel';
import { afterLabelValue, insideLabelValue } from '../../__mocks__/dynamic-label-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
import { DynamicLabelsCompletionItemProvider } from './CompletionItemProvider';
import cloudWatchDynamicLabelsLanguageDefinition from './definition';

View File

@ -1,10 +1,10 @@
import { Monaco, monacoTypes } from '@grafana/ui';
import { setupMockedTemplateService } from '../../__mocks__/CloudWatchDataSource';
import * as MetricMathTestData from '../../__mocks__/metric-math-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
import { ResourcesAPI } from '../../resources/ResourcesAPI';
import { setupMockedTemplateService } from '../../../__mocks__/CloudWatchDataSource';
import * as MetricMathTestData from '../../../__mocks__/metric-math-test-data';
import MonacoMock from '../../../__mocks__/monarch/Monaco';
import TextModel from '../../../__mocks__/monarch/TextModel';
import { ResourcesAPI } from '../../../resources/ResourcesAPI';
import cloudWatchMetricMathLanguageDefinition from '../definition';
import {
METRIC_MATH_FNS,

View File

@ -1,11 +1,11 @@
import { getTemplateSrv, TemplateSrv } from '@grafana/runtime';
import type { Monaco, monacoTypes } from '@grafana/ui';
import { ResourcesAPI } from '../../../resources/ResourcesAPI';
import { CompletionItemProvider } from '../../monarch/CompletionItemProvider';
import { LinkedToken } from '../../monarch/LinkedToken';
import { TRIGGER_SUGGEST } from '../../monarch/commands';
import { SuggestionKind, CompletionItemPriority, StatementPosition } from '../../monarch/types';
import { ResourcesAPI } from '../../resources/ResourcesAPI';
import {
METRIC_MATH_FNS,
METRIC_MATH_KEYWORDS,

View File

@ -1,8 +1,8 @@
import { monacoTypes } from '@grafana/ui';
import * as MetricMathTestQueries from '../../__mocks__/metric-math-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
import * as MetricMathTestQueries from '../../../__mocks__/metric-math-test-data';
import MonacoMock from '../../../__mocks__/monarch/Monaco';
import TextModel from '../../../__mocks__/monarch/TextModel';
import { linkedTokenBuilder } from '../../monarch/linkedTokenBuilder';
import { StatementPosition } from '../../monarch/types';
import cloudWatchSqlLanguageDefinition from '../definition';

View File

@ -1,7 +1,7 @@
import { getTemplateSrv, TemplateSrv } from '@grafana/runtime';
import type { Monaco, monacoTypes } from '@grafana/ui';
import { ResourcesAPI } from '../resources/ResourcesAPI';
import { ResourcesAPI } from '../../resources/ResourcesAPI';
import { LinkedToken } from './LinkedToken';
import { linkedTokenBuilder } from './linkedTokenBuilder';

View File

@ -1,8 +1,8 @@
import { monacoTypes } from '@grafana/ui';
import { multiLineFullQuery, singleLineFullQuery } from '../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../__mocks__/monarch/Monaco';
import TextModel from '../__mocks__/monarch/TextModel';
import { multiLineFullQuery, singleLineFullQuery } from '../../__mocks__/cloudwatch-sql-test-data';
import MonacoMock from '../../__mocks__/monarch/Monaco';
import TextModel from '../../__mocks__/monarch/TextModel';
import { SQLTokenTypes } from '../cloudwatch-sql/completion/types';
import cloudWatchSqlLanguageDefinition from '../cloudwatch-sql/definition';
import { DESC, SELECT } from '../cloudwatch-sql/language';