mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-26 14:09:41 -08:00
44fcf876ca
* Implement Pretty() function for AST nodes. Signed-off-by: Harkishen-Singh <harkishensingh@hotmail.com> This commit adds .Pretty() for all nodes of PromQL AST. Each .Pretty() prettifies the node it belongs to, and under no circustance, the parent or child node is touch/prettified. Read more in the "Approach" part in `prettier.go` * Refactor functions between printer.go & prettier.go Signed-off-by: Harkishen-Singh <harkishensingh@hotmail.com> This commit removes redundancy between printer.go and prettier.go by taking out the common code into separate private functions. * Add more unit tests for Prettier. Signed-off-by: Harkishen-Singh <harkishensingh@hotmail.com> * Add support for spliting function calls with 1 arg & unary expressions. Signed-off-by: Harkishen-Singh <harkishensingh@hotmail.com> This commit does 2 things: 1. It adds support to split function calls that have 1 arg and exceeds the max_characters_per_line to multiple lines. 2. Splits Unary expressions that exceed the max_characters_per_line. This is done by formatting the child node and then removing the prefix indent, which is already applied before the unary operator.
17 lines
1,021 B
Markdown
17 lines
1,021 B
Markdown
# Prettifying PromQL expressions
|
|
This files contains rules for prettifying PromQL expressions.
|
|
|
|
Note: The current version of prettier does not preserve comments.
|
|
|
|
### Keywords
|
|
`max_characters_per_line`: Maximum number of characters that will be allowed on a single line in a prettified PromQL expression.
|
|
|
|
### Rules
|
|
1. A node exceeding the `max_characters_per_line` will qualify for split unless
|
|
1. It is a `MatrixSelector`
|
|
2. It is a `VectorSelector`. Label sets in a `VectorSelector` will be in the same line as metric_name, separated by commas and a space
|
|
Note: Label groupings like `by`, `without`, `on`, `ignoring` will remain on the same line as their parent node
|
|
2. Nodes that are nested within another node will be prettified only if they exceed the `max_characters_per_line`
|
|
3. Expressions like `sum(expression) without (label_matchers)` will be modified to `sum without(label_matchers) (expression)`
|
|
4. Functional call args will be split to different lines if they exceed the `max_characters_per_line`
|