Сопоставитель LibCST для обнаружения вложенных выражений f-строки в Python ASTPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сопоставитель LibCST для обнаружения вложенных выражений f-строки в Python AST

Сообщение Anonymous »

Я хочу создать преобразователь, который преобразует все кавычки f-строк из одинарных в тройные кавычки, но оставляет вложенные f-строки нетронутыми.
Например, следующее выражение остался нетронутым.

Код: Выделить всё

f"""\
Hello {developer_name}
My name is {_get_machine(f"{self.prop_a}, {self.prop_b}")}
"""
Но результат преобразования:

Код: Выделить всё

f"""\
Hello {developer_name}
My name is {_get_machine(f"""{self.prop_a}, {self.prop_b}""")}
"""
Я попробовал следующие средства сопоставления, но безуспешно:

Код: Выделить всё

class _FormattedStringEscapingTransformer(m.MatcherDecoratableTransformer):

@m.call_if_not_inside(
m.FormattedString(
parts=m.OneOf(
m.FormattedStringExpression(expression=m.TypeOf(m.FormattedString))
)
)
)
@m.leave(m.FormattedString())
def escape_f_string(
self, original_node: cst.FormattedString, updated_node: cst.FormattedString
) -> cst.FormattedString:
return updated_node.with_changes(start='f"""', end='"""')

Код: Выделить всё

class _FormattedStringEscapingTransformer(m.MatcherDecoratableTransformer):

@m.call_if_not_inside(
m.FormattedString(
parts=m.OneOf(
m.FormattedStringExpression(
expression=m.Not(m.FormattedString(parts=m.DoNotCare()))
)
)
)
)
@m.leave(m.FormattedString())
def escape_f_string(
self, original_node: cst.FormattedString, updated_node: cst.FormattedString
) -> cst.FormattedString:
return updated_node.with_changes(start='f"""', end='"""')
Ни один из них не сработал.
Какое правильное средство сопоставления исключает преобразование, если выражения внутренних f-строк?

Подробнее здесь: https://stackoverflow.com/questions/791 ... python-ast
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сопоставитель LibCST для обнаружения вложенных выражений f-строки в Python AST
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Получение источника AST Clang's AST
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Libcst: отступить, но оставьте пустые линии as-s
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Использование Pydantic для определения AST логических выражений
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • C# сопоставитель из списка<строка> в строку
    Гость » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»