123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- """
- pygments.lexers.promql
- ~~~~~~~~~~~~~~~~~~~~~~
- Lexer for Prometheus Query Language.
- :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
- """
- from pygments.lexer import RegexLexer, bygroups, default, words
- from pygments.token import (
- Comment,
- Keyword,
- Name,
- Number,
- Operator,
- Punctuation,
- String,
- Whitespace,
- )
- __all__ = ["PromQLLexer"]
- class PromQLLexer(RegexLexer):
- """
- For `PromQL <https://prometheus.io/docs/prometheus/latest/querying/basics/>`_ queries.
- For details about the grammar see:
- https://github.com/prometheus/prometheus/tree/master/promql/parser
- .. versionadded: 2.7
- """
- name = "PromQL"
- aliases = ["promql"]
- filenames = ["*.promql"]
- base_keywords = (
- words(
- (
- "bool",
- "by",
- "group_left",
- "group_right",
- "ignoring",
- "offset",
- "on",
- "without",
- ),
- suffix=r"\b",
- ),
- Keyword,
- )
- aggregator_keywords = (
- words(
- (
- "sum",
- "min",
- "max",
- "avg",
- "group",
- "stddev",
- "stdvar",
- "count",
- "count_values",
- "bottomk",
- "topk",
- "quantile",
- ),
- suffix=r"\b",
- ),
- Keyword,
- )
- function_keywords = (
- words(
- (
- "abs",
- "absent",
- "absent_over_time",
- "avg_over_time",
- "ceil",
- "changes",
- "clamp_max",
- "clamp_min",
- "count_over_time",
- "day_of_month",
- "day_of_week",
- "days_in_month",
- "delta",
- "deriv",
- "exp",
- "floor",
- "histogram_quantile",
- "holt_winters",
- "hour",
- "idelta",
- "increase",
- "irate",
- "label_join",
- "label_replace",
- "ln",
- "log10",
- "log2",
- "max_over_time",
- "min_over_time",
- "minute",
- "month",
- "predict_linear",
- "quantile_over_time",
- "rate",
- "resets",
- "round",
- "scalar",
- "sort",
- "sort_desc",
- "sqrt",
- "stddev_over_time",
- "stdvar_over_time",
- "sum_over_time",
- "time",
- "timestamp",
- "vector",
- "year",
- ),
- suffix=r"\b",
- ),
- Keyword.Reserved,
- )
- tokens = {
- "root": [
- (r"\n", Whitespace),
- (r"\s+", Whitespace),
- (r",", Punctuation),
- # Keywords
- base_keywords,
- aggregator_keywords,
- function_keywords,
- # Offsets
- (r"[1-9][0-9]*[smhdwy]", String),
- # Numbers
- (r"-?[0-9]+\.[0-9]+", Number.Float),
- (r"-?[0-9]+", Number.Integer),
- # Comments
- (r"#.*?$", Comment.Single),
- # Operators
- (r"(\+|\-|\*|\/|\%|\^)", Operator),
- (r"==|!=|>=|<=|<|>", Operator),
- (r"and|or|unless", Operator.Word),
- # Metrics
- (r"[_a-zA-Z][a-zA-Z0-9_]+", Name.Variable),
- # Params
- (r'(["\'])(.*?)(["\'])', bygroups(Punctuation, String, Punctuation)),
- # Other states
- (r"\(", Operator, "function"),
- (r"\)", Operator),
- (r"\{", Punctuation, "labels"),
- (r"\[", Punctuation, "range"),
- ],
- "labels": [
- (r"\}", Punctuation, "#pop"),
- (r"\n", Whitespace),
- (r"\s+", Whitespace),
- (r",", Punctuation),
- (r'([_a-zA-Z][a-zA-Z0-9_]*?)(\s*?)(=~|!=|=|!~)(\s*?)("|\')(.*?)("|\')',
- bygroups(Name.Label, Whitespace, Operator, Whitespace,
- Punctuation, String, Punctuation)),
- ],
- "range": [
- (r"\]", Punctuation, "#pop"),
- (r"[1-9][0-9]*[smhdwy]", String),
- ],
- "function": [
- (r"\)", Operator, "#pop"),
- (r"\(", Operator, "#push"),
- default("#pop"),
- ],
- }
|