1 |
|
2 |
|
3 |
|
4 | (function (Prism) {
|
5 |
|
6 |
|
7 | var aggregations = [
|
8 | 'sum',
|
9 | 'min',
|
10 | 'max',
|
11 | 'avg',
|
12 | 'group',
|
13 | 'stddev',
|
14 | 'stdvar',
|
15 | 'count',
|
16 | 'count_values',
|
17 | 'bottomk',
|
18 | 'topk',
|
19 | 'quantile'
|
20 | ];
|
21 |
|
22 |
|
23 |
|
24 | var vectorMatching = [
|
25 | 'on',
|
26 | 'ignoring',
|
27 | 'group_right',
|
28 | 'group_left',
|
29 | 'by',
|
30 | 'without',
|
31 | ];
|
32 |
|
33 |
|
34 |
|
35 | var offsetModifier = ['offset'];
|
36 |
|
37 | var keywords = aggregations.concat(vectorMatching, offsetModifier);
|
38 |
|
39 | Prism.languages.promql = {
|
40 | 'comment': {
|
41 | pattern: /(^[ \t]*)#.*/m,
|
42 | lookbehind: true
|
43 | },
|
44 | 'vector-match': {
|
45 |
|
46 | pattern: new RegExp('((?:' + vectorMatching.join('|') + ')\\s*)\\([^)]*\\)'),
|
47 | lookbehind: true,
|
48 | inside: {
|
49 | 'label-key': {
|
50 | pattern: /\b[^,]*\b/,
|
51 | alias: 'attr-name',
|
52 | },
|
53 | 'punctuation': /[(),]/
|
54 | },
|
55 | },
|
56 | 'context-labels': {
|
57 | pattern: /\{[^{}]*\}/,
|
58 | inside: {
|
59 | 'label-key': {
|
60 | pattern: /\b[a-z_]\w*(?=\s*(?:=~?|![=~]))/,
|
61 | alias: 'attr-name',
|
62 | },
|
63 | 'label-value': {
|
64 | pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,
|
65 | greedy: true,
|
66 | alias: 'attr-value',
|
67 | },
|
68 | 'punctuation': /\{|\}|=~?|![=~]|,/,
|
69 | },
|
70 | },
|
71 | 'context-range': [
|
72 | {
|
73 | pattern: /\[[\w\s:]+\]/,
|
74 | inside: {
|
75 | 'punctuation': /\[|\]|:/,
|
76 | 'range-duration': {
|
77 | pattern: /\b(?:\d+(?:[smhdwy]|ms))+\b/i,
|
78 | alias: 'number',
|
79 | },
|
80 | },
|
81 | },
|
82 | {
|
83 | pattern: /(\boffset\s+)\w+/,
|
84 | lookbehind: true,
|
85 | inside: {
|
86 | 'range-duration': {
|
87 | pattern: /\b(?:\d+(?:[smhdwy]|ms))+\b/i,
|
88 | alias: 'number',
|
89 | },
|
90 | },
|
91 | },
|
92 | ],
|
93 | 'keyword': new RegExp('\\b(?:' + keywords.join('|') + ')\\b', 'i'),
|
94 | 'function': /\b[a-zA-Z_]\w*(?=\s*\()/i,
|
95 | 'number': /[-+]?(?:(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[-+]?\d+)?\b|\b(?:0x[0-9a-f]+|nan|inf)\b)/i,
|
96 | 'operator': /[\^*/%+-]|==|!=|<=|<|>=|>|\b(?:and|unless|or)\b/i,
|
97 | 'punctuation': /[{};()`,.[\]]/,
|
98 | };
|
99 | })(Prism);
|