Синтаксис Sublime Text: Python 3.6 f-strings
Я пытаюсь изменить файл Python.sublime_syntax
по умолчанию, Python.sublime_syntax
правильно обрабатывать литералы f-string Pythons. Моя цель состоит в том, чтобы выражения в интерполированных строках были признаны таковыми:
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".