Свертывание комментариев и вложенного кода в PyCharm

Почему PyCharm складывает комментарии новой строки в конце вложенного блока кода в предыдущий блок?

Пример (попробуйте сложить первый блок «если»):

def print_me(a):

# newline comment
    if a == 'me':
        dummy_padding = ''
        if not dummy_padding:
            favorite_place = 'zoo'
            print(a)
        else:
            pass

# invisible newline comment
    elif a == 'you':
        dummy_padding = ''
        pass

# visible newline comment
    elif a == 'us':
        dummy_padding = ''
        if not dummy_padding:
            favorite_place = 'movies'
            print(favorite_place)

    # visible indented comment
    elif a == 'them':
        dummy_padding = ''
        pass

    return a

Есть ли в Python спецификация, в которой говорится, что комментарии внутри функции всегда должны иметь отступ? Если нет, есть ли способ настроить параметры в PyCharm так, чтобы комментарии новой строки не исчезали при сворачивании вложенного кода?


person R J    schedule 27.09.2017    source источник


Ответы (1)


PEP8 указывает, что

Блочные комментарии обычно применяются к некоторому (или всему) коду, следующему за ними, и имеют отступ на том же уровне, что и этот код.

Поэтому я думаю, что именно тот факт, что ваш следующий комментарий не имеет отступа, вызывает такое поведение.

Если бы вы сделали отступ «# невидимый комментарий новой строки» до того же уровня, что и следующий за ним elif, вы увидите, что PyCharm больше не сворачивает его в верхний блок.

# newline comment
    if a == 'me':
        dummy_padding = ''
        if not dummy_padding:
            favorite_place = 'zoo'
            print(a)
        else:
            pass

    # invisible newline comment  -- now not folded
    elif a == 'you':
person Myk Willis    schedule 27.09.2017
comment
Спасибо. Очень приятно знать... хотя и немного пугающе, поскольку соответствие PEP8 может потребовать от меня масштабного рефакторинга сейчас. Фу! Однако PEP8 не объясняет полностью, почему явления возникают только тогда, когда блок кода содержит другой (вложенный) блок кода. Обратите внимание, что комментарий выше elif a == 'us': по-прежнему виден, даже если вы сворачиваете его предыдущий блок кода, поскольку этот блок не содержит дополнительных вложений. - person R J; 27.09.2017