-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[pkg/ottl] Add grammar utility to extract paths from statements #35174
[pkg/ottl] Add grammar utility to extract paths from statements #35174
Conversation
@edmocosta I'm holding off on reviewing this until it is marked Ready, but I am interested. |
…lector-contrib into ottl_add_grammar_paths_visitor
I was running a few more tests and forgot to mark it as ready. Thanks @TylerHelmuth! |
9ff99fb
to
055d362
Compare
Hi @TylerHelmuth! please let me know if there is anything left before it can be merged. Thank you! |
@evan-bradley please review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me, sorry for the long delay in reviewing this. Thank you @edmocosta!
…-telemetry#35174) **Description:** <Describe what has changed.> <!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> This PR is part of open-telemetry#29017, and adds a grammar utility to allow extracting `ottl.path` from parsed statements and expressions. The new functions will power the context inferrer utility (see [draft](open-telemetry#35050)), which implementation will basically gather all declared statement's `Path.Context`, and choose the highest priority one. For the statements rewriter utility purpose, it changes the `grammar.go` file including a new field `Pos lexer.Position` into the `ottl.path` struct. This value is automatically set by the `participle` lexer and holds the path's offsets, being useful for identifying their positions in the raw statement, without using regexes an being coupled to the grammar's definition. **Additional changes**: This proposal uses the visitor pattern to gather all path's from the parsed statements. Considering the grammar's custom error mechanism (`checkForCustomError`) also works with a similar pattern, I've added the visitor implementation as part of the grammar objects, and refactored all `checkForCustomError` functions to be part of a validator visitor. Differently of the current implementation, it joins and displays all errors at once instead of one by one, IMO, it's specially useful for statements with more than one error, for example: `set(name, int(2), float(1))`. *** We can change it back do be error-by-error if necessary. *** If modifying the custom validator is not desired, I can roll those changes back keeping only the necessary code to extract the path's + `Pos` field. **Link to tracking Issue:** open-telemetry#29017 **Testing:** Unit tests were added **Documentation:** No changes
…-telemetry#35174) **Description:** <Describe what has changed.> <!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> This PR is part of open-telemetry#29017, and adds a grammar utility to allow extracting `ottl.path` from parsed statements and expressions. The new functions will power the context inferrer utility (see [draft](open-telemetry#35050)), which implementation will basically gather all declared statement's `Path.Context`, and choose the highest priority one. For the statements rewriter utility purpose, it changes the `grammar.go` file including a new field `Pos lexer.Position` into the `ottl.path` struct. This value is automatically set by the `participle` lexer and holds the path's offsets, being useful for identifying their positions in the raw statement, without using regexes an being coupled to the grammar's definition. **Additional changes**: This proposal uses the visitor pattern to gather all path's from the parsed statements. Considering the grammar's custom error mechanism (`checkForCustomError`) also works with a similar pattern, I've added the visitor implementation as part of the grammar objects, and refactored all `checkForCustomError` functions to be part of a validator visitor. Differently of the current implementation, it joins and displays all errors at once instead of one by one, IMO, it's specially useful for statements with more than one error, for example: `set(name, int(2), float(1))`. *** We can change it back do be error-by-error if necessary. *** If modifying the custom validator is not desired, I can roll those changes back keeping only the necessary code to extract the path's + `Pos` field. **Link to tracking Issue:** open-telemetry#29017 **Testing:** Unit tests were added **Documentation:** No changes
Description:
This PR is part of #29017, and adds a grammar utility to allow extracting
ottl.path
from parsed statements and expressions. The new functions will power the context inferrer utility (see draft), which implementation will basically gather all declared statement'sPath.Context
, and choose the highest priority one.For the statements rewriter utility purpose, it changes the
grammar.go
file including a new fieldPos lexer.Position
into theottl.path
struct. This value is automatically set by theparticiple
lexer and holds the path's offsets, being useful for identifying their positions in the raw statement, without using regexes an being coupled to the grammar's definition.Additional changes:
This proposal uses the visitor pattern to gather all path's from the parsed statements. Considering the grammar's custom error mechanism (
checkForCustomError
) also works with a similar pattern, I've added the visitor implementation as part of the grammar objects, and refactored allcheckForCustomError
functions to be part of a validator visitor. Differently of the current implementation, it joins and displays all errors at once instead of one by one, IMO, it's specially useful for statements with more than one error, for example:set(name, int(2), float(1))
.* We can change it back do be error-by-error if necessary.
* If modifying the custom validator is not desired, I can roll those changes back keeping only the necessary code to extract the path's +
Pos
field.Link to tracking Issue: #29017
Testing: Unit tests were added
Documentation: No changes