Проблемы с добавлением дополнительного узла If к существующему if elif else в Libcst

Я новичок в LibCST. Я пишу инструмент, который модифицирует код. Я хочу добавить elif (orelse=If) к существующему узлу If elif else. Простой пример:

      # before
if data == "a":
   execute_a(data)
elif data == "b":
   execute_b(data)
else:
   raise RuntimeError("switch not recognized")

#after
if data == "a":
   execute_a(data)
elif data == "inserted":
   execute_inserted(data)
elif data == "b":
   execute_b(data)
else:
   raise RuntimeError("switch not recognized")

Мой код выглядит так:

      def leave_Try(self, node: cst.Try, updated_node: cst.Try):
    # we now have enough information to make the insertion
    
    if self.in_dispatcher:
        self.in_dispatcher = False

        # first let's generate a new if
        new_if_str = build_command_str("New_Intent", "New_command")
        new_if = cst.parse_module(new_if_str).code

        #new_if is a module not an if, we may need to modify it.
            
        # now lets make last_if point to the new 
        self.last_if.orelse = new_if
            
        #and the new_ifs orelse point to the else
        new_if.orelse = self.else_if

        # I am not sure what to call with the with_changes()
        return node

когда я выполняю код, я получаю:

      Exception: Expected a node of type CSTNode or a RemovalSentinel, but got a return value of NoneType

Я не уверен, что удивлен, потому что я не обновляюсь должным образом. Я считаю, что блок Try - неправильное место. Я что-то делаю неправильно. Буду признателен за любые идеи.

Спасибо, Андрей

0 ответов

Другие вопросы по тегам