Prometheus: Fix label value suggestion (#21294)

* Prometheus: Fix label value suggestion

- remove quotes from typeahead input to suggest correct label values
- fix acceptance of partial label values

* Disable mid-word suggestions

* Fix test
This commit is contained in:
David
2019-12-31 08:56:57 +01:00
committed by GitHub
parent 649fa6789e
commit 334b89f3ee
4 changed files with 29 additions and 7 deletions

View File

@@ -88,7 +88,10 @@ export default class PromQlLanguageProvider extends LanguageProvider {
cleanText(s: string) {
const parts = s.split(PREFIX_DELIMITER_REGEX);
const last = parts.pop();
return last.trimLeft().replace(/"$/, '');
return last
.trimLeft()
.replace(/"$/, '')
.replace(/^"/, '');
}
get syntax() {
@@ -297,8 +300,15 @@ export default class PromQlLanguageProvider extends LanguageProvider {
labelKey,
value,
}: TypeaheadInput): Promise<TypeaheadOutput> => {
const suggestions: CompletionItemGroup[] = [];
const line = value.anchorBlock.getText();
const cursorOffset = value.selection.anchor.offset;
const nextChar = line[cursorOffset];
const isValueContext = wrapperClasses.includes('attr-value');
if (!nextChar.match(/["}]/)) {
// Don't suggest anything inside a value
return { suggestions };
}
// Get normalized selector
let selector;
@@ -313,7 +323,6 @@ export default class PromQlLanguageProvider extends LanguageProvider {
const containsMetric = selector.includes('__name__=');
const existingKeys = parsedSelector ? parsedSelector.labelKeys : [];
const suggestions: CompletionItemGroup[] = [];
let labelValues;
// Query labels for selector
if (selector) {
@@ -326,7 +335,7 @@ export default class PromQlLanguageProvider extends LanguageProvider {
}
let context: string;
if ((text && text.match(/^!?=~?/)) || wrapperClasses.includes('attr-value')) {
if ((text && text.match(/^!?=~?/)) || isValueContext) {
// Label values
if (labelKey && labelValues[labelKey]) {
context = 'context-label-values';