/usr/share/grafana/public/app/plugins/datasource/cloudwatch/language/cloudwatch-sql/completion
import { LinkedToken } from '../../monarch/LinkedToken'; import { FROM, SCHEMA, SELECT } from '../language'; import { SQLTokenTypes } from './types'; export const getSelectToken = (currentToken: LinkedToken | null) => currentToken?.getPreviousOfType(SQLTokenTypes.Keyword, SELECT) ?? null; export const getSelectStatisticToken = (currentToken: LinkedToken | null) => { const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken(); return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null; }; export const getMetricNameToken = (currentToken: LinkedToken | null) => { // statistic function is followed by `(` and then an argument const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next; return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null; }; export const getFromKeywordToken = (currentToken: LinkedToken | null) => { const selectToken = getSelectToken(currentToken); return selectToken?.getNextOfType(SQLTokenTypes.Keyword, FROM); }; export const getNamespaceToken = (currentToken: LinkedToken | null) => { const fromToken = getFromKeywordToken(currentToken); const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken(); if ( nextNonWhiteSpace?.isDoubleQuotedString() || (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA) ) { // schema is not used return nextNonWhiteSpace; } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(SQLTokenTypes.Parenthesis, '(')) { // schema is specified const assumedNamespaceToken = nextNonWhiteSpace.next?.next; if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) { return assumedNamespaceToken; } } return null; };
.
Edit
..
Edit
CompletionItemProvider.ts
Edit
statementPosition.test.ts
Edit
statementPosition.ts
Edit
suggestionKind.ts
Edit
tokenUtils.test.ts
Edit
tokenUtils.ts
Edit
types.ts
Edit