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:
David
2019-12-10 16:11:31 +01:00
committed by GitHub
parent 67d83d1ffc
commit 75923c43d1
2 changed files with 60 additions and 28 deletions

View File

@@ -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 };
};