2024-01-17 10:28:06 +01:00
|
|
|
import refactor
|
|
|
|
|
import liblkqllang as lkql
|
|
|
|
|
from refactor import Action, ActionKind
|
|
|
|
|
|
2025-11-26 10:37:29 +01:00
|
|
|
|
2024-01-17 10:28:06 +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"
|
|
|
|
|
)
|
2024-01-17 10:28:06 +01:00
|
|
|
# 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,
|
|
|
|
|
):
|
2024-01-17 10:28:06 +01:00
|
|
|
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__":
|
2024-01-17 10:28:06 +01:00
|
|
|
App.run()
|