Files
langkit-query-language/utils/refactoring/replace_or_patterns.py

29 lines
945 B
Python
Raw Permalink Normal View History

import refactor
import liblkqllang as lkql
from refactor import Action, ActionKind
2025-11-26 10:37:29 +01:00
class App(refactor.Refactor):
def preprocess(self, unit):
for or_pat in unit.root.findall(lkql.OrPattern):
# Replace 'or' by '|'
2025-11-26 10:37:29 +01:00
or_tok = refactor.first_with_pred(
or_pat.f_left.token_end, lambda t: t.kind == "Or"
)
# Put parens around the OrPattern if needed
2025-11-26 10:37:29 +01:00
if not or_pat.parent.is_a(
lkql.OrPattern,
lkql.ParenPattern,
lkql.NodePatternSelector,
lkql.NodePatternField,
lkql.NodePatternProperty,
):
self.add_action(or_pat.token_start, Action(ActionKind.prepend, "("))
self.add_action(or_pat.token_end, Action(ActionKind.append, ")"))
self.add_action(or_tok, Action(ActionKind.replace, "|"))
2025-11-26 10:37:29 +01:00
if __name__ == "__main__":
App.run()