VSCode 语言扩展:一种语言可以通过代码嵌入到另一种语言中吗?
VSCode language extension: can a language be embedded into another through code?
该扩展添加了对 Renpy 语言的支持,这是一种与 Python 非常相似的语言。在这种语言中,可以在 different ways.
中嵌入 Python 代码
单行语句:
define e = Character("Eileen", who_color="#c8ffc8")
default sidebar = False
$ sampleFunction("Eileen", 1.0)
要在单行语句中嵌入 python,我使用以下 TextMate Grammar 模式:
{
"comment": "Match begin and end of python one line statements",
"name": "meta.embedded.python.line",
"begin": "(?<=(\$|define|default)\s)",
"end": "\R$",
"patterns": [{ "include": "source.python" }]
}
在这种情况下,我可以知道语句何时结束。
Python块:
python:
def foo():
return "bar"
这些块可以嵌套在其他语言块中,例如:
init:
image movie = Movie()
python:
povname = ""
pov = DynamicCharacter("povname", color=(255, 0, 0, 255))
$ ectc = Character('Eileen', color=(200, 255, 200, 255))
在块的情况下,由于它是用缩进分隔的,所以我无法确定它在哪里结束。如果这些块不能嵌套,我可以用正则表达式捕获结尾,例如^(?=\S)
,因为它可以嵌套我无法检测到它何时结束。
我试图通过 SemanticTokenProvider, but it seems that it's not possible to add a textmate scope
using the SemanticTokensBuilder 添加 TextMate 范围 source.python
。也尝试过使用 TextMate 模式但没有成功。
我想找到一种方法使 Python 块的内容具有 source.python
TextMate 范围,无论它是否嵌套。
如果块后总是有一行与单词 python:
具有相同的缩进,您可以尝试
{
"begin": "^(\s*)(python:)",
"end": "^\1(?=\S)",
"beginCaptures": { "2": { "name": "keyword.other" } },
"patterns": [{ "include": "source.python" }]
}
该扩展添加了对 Renpy 语言的支持,这是一种与 Python 非常相似的语言。在这种语言中,可以在 different ways.
中嵌入 Python 代码单行语句:
define e = Character("Eileen", who_color="#c8ffc8")
default sidebar = False
$ sampleFunction("Eileen", 1.0)
要在单行语句中嵌入 python,我使用以下 TextMate Grammar 模式:
{
"comment": "Match begin and end of python one line statements",
"name": "meta.embedded.python.line",
"begin": "(?<=(\$|define|default)\s)",
"end": "\R$",
"patterns": [{ "include": "source.python" }]
}
在这种情况下,我可以知道语句何时结束。
Python块:
python:
def foo():
return "bar"
这些块可以嵌套在其他语言块中,例如:
init:
image movie = Movie()
python:
povname = ""
pov = DynamicCharacter("povname", color=(255, 0, 0, 255))
$ ectc = Character('Eileen', color=(200, 255, 200, 255))
在块的情况下,由于它是用缩进分隔的,所以我无法确定它在哪里结束。如果这些块不能嵌套,我可以用正则表达式捕获结尾,例如^(?=\S)
,因为它可以嵌套我无法检测到它何时结束。
我试图通过 SemanticTokenProvider, but it seems that it's not possible to add a textmate scope
using the SemanticTokensBuilder 添加 TextMate 范围 source.python
。也尝试过使用 TextMate 模式但没有成功。
我想找到一种方法使 Python 块的内容具有 source.python
TextMate 范围,无论它是否嵌套。
如果块后总是有一行与单词 python:
具有相同的缩进,您可以尝试
{
"begin": "^(\s*)(python:)",
"end": "^\1(?=\S)",
"beginCaptures": { "2": { "name": "keyword.other" } },
"patterns": [{ "include": "source.python" }]
}