Синтаксис 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".