Sublime Text синтаксис: Python 3.6 f-строк

Я пытаюсь изменить по умолчанию Python.sublime_syntax файл для правильной обработки литералов f-строки Python. Моя цель состоит в том, чтобы выражения в интерполированных строках распознавались как таковые:

f"hello {person.name if person else 'there'}"
         -----------source.python----------
------string.quoted.double.block.python------

Внутри f-строк, диапазоны текста между одним { и другой } (но завершается до спецификаторов формата, таких как !r}, :<5}и т. д. - см. PEP 498) должны распознаваться как выражения. Насколько я знаю, это может выглядеть примерно так:

...
string:
 - match: "(?<=[^\{]\{)[^\{].*)(?=(!(s|r|a))?(:.*)?\})" # I'll need a better regex
   push: expressions

Тем не менее, после проверки встроенного Python.sublime_syntax файл, строковые контексты особенно громоздки, чтобы даже приблизиться (~480 строк?), и я понятия не имею, с чего начать. Спасибо огромное за любую информацию.

1 ответ

В BUILD 3127 было обновлено подсветка синтаксиса (которая включает: Значительные улучшения подсветки синтаксиса Python).

Тем не менее, несколько пользователей заявили, что в BUILD 3176 подсветка синтаксиса по-прежнему не настроена для правильного выделения выражений Python, расположенных в f строках. Согласно @Jollywatt, он установлен в source.python f"string.quoted.double.block {constant.other.placeholder}" скорее, чем f"string.quoted.double.block {source.python}"

Похоже, что Sublime использует этот инструмент PackageDev, "чтобы упростить создание фрагментов, определений синтаксиса и т. Д. Для Sublime Text".

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