【问题标题】:Sublime Text syntax: Python 3.6 f-stringsSublime Text 语法:Python 3.6 f-strings
【发布时间】:2017-04-19 08:10:06
【问题描述】:

我正在尝试修改默认的 Python.sublime_syntax 文件以正确处理 Python 的 f 字符串文字。我的目标是使插值字符串中的表达式被识别为:

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 行?),我不知道如何开始。非常感谢您提供任何信息。

【问题讨论】:

  • 使用诸如regex101.com 之类的正则表达式调试器可能有助于解析日志正则表达式模式
  • 这个问题现在在Build 3127中得到修复

标签: python syntax sublimetext3 syntax-highlighting


【解决方案1】:

BUILD 3127 中对语法高亮进行了更新(其中包括:对 Python 语法高亮的重大改进)。

但是,一些用户表示,在 BUILD 3176 中,语法高亮仍未设置为正确高亮位于 f 字符串中的 Python 表达式。根据@Jollywatt,它被设置为source.python f"string.quoted.double.block {constant.other.placeholder}" 而不是f"string.quoted.double.block {source.python}"

看起来 Sublime 使用了这个工具,PackageDev,“以简化 Sublime Text 的 sn-ps、语法定义等的创建。”

【讨论】:

  • 实际上这似乎不是“固定的”。在 Build 3176 中,Python 仍被解释为 source.python f"string.quoted.double.block {constant.other.placeholder}",而不是 source.python f"string.quoted.double.block {source.python}"。我想知道后者是否毕竟不应该是理想的行为……
  • @Jollywatt 这可能是比我更好的答案。如果您想添加该信息,我已将答案切换到社区 wiki。
  • 我也在使用 Build 3176,与 Atom 编辑器不同,我在 f-strings 中没有看到任何普通的 Python 语法高亮显示。
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 2020-06-08
相关资源
最近更新 更多