Go: skip extracting ast.ParenExpr nodes#22146
Draft
owen-mc wants to merge 2 commits into
Draft
Conversation
Instead of creating a database entry for parenthesised expressions, extract their child expression directly in their place. This makes the extracted AST act as if ParenExpr nodes do not exist while still correctly extracting children. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Since the extractor no longer produces ParenExpr nodes, deprecate the class so existing user code gets a warning rather than breaking, and remove all references from library code where it was used to look through parentheses. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Parenthesised expressions (
ast.ParenExpr) carry no semantic meaning beyond grouping -- their type and value are identical to their child. This change makes the Go extractor "see through" them: instead of emitting a@parenexprnode into the database, we recurse directly into the child expression, passing through the parent label and child index so it takes the slot the paren node would have occupied.Approach
At the top of
extractExpr, before any label or type extraction happens, we check for*ast.ParenExprand immediately recurse intoparen.Xwith the caller'sparent/idx/skipExtractingValue. The old switch-case branch is removed.Notes
dbscheme.ParenExprbranch declaration is left intables.gofor now to avoid a schema migration in this PR.