Python сворачивание текста в TextMate 2, не сворачивание списков / кортежей / словарей - PullRequest
3 голосов
/ 27 февраля 2020

Я немного отстал и просто заметил, что Textmate 2 существует - я использую 1.5.10 в течение многих лет.

Я пробую это, и в некотором смысле сворачивание кода для Python улучшено. (Он больше не ест строку пробела после свернутого определения метода / класса). Однако он больше не сворачивает списки, кортежи и словари, разбитые на несколько строк. Следующий код, например, имеет стрелки сворачивания в 1.5.10, но не в 2.0.6:

foo = [
    1,
    2,
    3,
]

Настройка сворачивания по умолчанию в пакете Python:

{   foldingStartMarker = '^\s*"""(?=.)(?!.*""")';
    foldingStopMarker = '^\s*"""\s*$';
}

И шаблоны складывания по умолчанию гласят:

{ foldingIndentedBlockStart = '^\s*(class|def|for|while|if|elif|else|with|try|finally|except)\b.*:\s*(#.*)?$'; }

Я не совсем уверен, как эти два работают вместе, тем более что единственная документация, которую я могу найти для определений складывания, - это TextMate 1.5 и выглядит устаревшей. Я пытался возиться с ними, но пока безрезультатно. У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 01 марта 2020

Хорошо, оказалось, что это было не так сложно, когда я достаточно перевел свой мозг в режим регулярных выражений. foldingIndentBlockStart отвечает за большинство Python свертываний, то есть все, что основано на отступе. foldingStartMarker и foldingStopMarker обрабатывают все остальные операции свертывания, хотя шаблоны по умолчанию для пакета связывают только строки документов с тройными кавычками. *

Я написал пару шаблонов для проверки на открытие и закрытие {}, () и [], с поддержкой комментариев в той же строке (и запятой после, если это часть более длинной последовательности). Я добавил свои новые шаблоны к существующим с помощью |, например, так:

{   foldingStartMarker = '^\s*"""(?=.)(?!.*""")|(\{|\(|\[)\s*(#.*)?$';
    foldingStopMarker = '^\s*"""\s*$|^\s*(\}|\)|\]),?\s*(#.*)?$';
}

Возможно, мне не хватает некоторых угловых случаев, но пока что это похоже на работу.


* Примечание: предоставленные по умолчанию шаблоны работают только для строк документации, если вы не вставляете новую строку между открывающими тройными кавычками и началом вашей строки. В настоящее время я не вижу способа исправить это, поскольку TextMate, похоже, не нравится, когда ваш начальный и конечный шаблоны совпадают с одной и той же строкой.

...