mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Promtheus: Improve tab completion (#20938)
Change in behavior: - no longer suggest everything in empty field, only history - term suggestions need at least one character
This commit is contained in:
@@ -72,7 +72,14 @@ export default class PromQlLanguageProvider extends LanguageProvider {
|
||||
}
|
||||
|
||||
// Strip syntax chars
|
||||
cleanText = (s: string) => s.replace(/[{}[\]="(),!~+\-*/^%]/g, '').trim();
|
||||
cleanText = (s: string) =>
|
||||
s
|
||||
.replace(/[{}[\]="(),!]/g, '')
|
||||
.replace(/^\s*[~+\-*/^%]/, '')
|
||||
.trim()
|
||||
.split(' ')
|
||||
.pop()
|
||||
.trim();
|
||||
|
||||
get syntax() {
|
||||
return PromqlSyntax;
|
||||
@@ -126,7 +133,7 @@ export default class PromQlLanguageProvider extends LanguageProvider {
|
||||
const noSuffix = !nextCharacter || nextCharacter === ')';
|
||||
|
||||
// Empty prefix is safe if it does not immediately follow a complete expression and has no text after it
|
||||
const safeEmptyPrefix = prefix === '' && !text.match(/^[\]})\s]+$/) && noSuffix;
|
||||
const safePrefix = prefix && !text.match(/^[\]})\s]+$/) && noSuffix;
|
||||
|
||||
// About to type next operand if preceded by binary operator
|
||||
const operatorsPattern = /[+\-*/^%]/;
|
||||
@@ -145,7 +152,10 @@ export default class PromQlLanguageProvider extends LanguageProvider {
|
||||
} else if (empty) {
|
||||
// Suggestions for empty query field
|
||||
return this.getEmptyCompletionItems(context);
|
||||
} else if ((prefixUnrecognized && noSuffix) || safeEmptyPrefix || isNextOperand) {
|
||||
} else if (prefixUnrecognized && noSuffix && !isNextOperand) {
|
||||
// Show term suggestions in a couple of scenarios
|
||||
return this.getBeginningCompletionItems(context);
|
||||
} else if (prefixUnrecognized && safePrefix) {
|
||||
// Show term suggestions in a couple of scenarios
|
||||
return this.getTermCompletionItems();
|
||||
}
|
||||
@@ -155,6 +165,12 @@ export default class PromQlLanguageProvider extends LanguageProvider {
|
||||
};
|
||||
};
|
||||
|
||||
getBeginningCompletionItems = (context: { history: Array<HistoryItem<PromQuery>> }): TypeaheadOutput => {
|
||||
return {
|
||||
suggestions: [...this.getEmptyCompletionItems(context).suggestions, ...this.getTermCompletionItems().suggestions],
|
||||
};
|
||||
};
|
||||
|
||||
getEmptyCompletionItems = (context: { history: Array<HistoryItem<PromQuery>> }): TypeaheadOutput => {
|
||||
const { history } = context;
|
||||
const suggestions = [];
|
||||
@@ -177,9 +193,6 @@ export default class PromQlLanguageProvider extends LanguageProvider {
|
||||
});
|
||||
}
|
||||
|
||||
const termCompletionItems = this.getTermCompletionItems();
|
||||
suggestions.push(...termCompletionItems.suggestions);
|
||||
|
||||
return { suggestions };
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user