我正在构建一个扩展,通过标记 Quarto 内联脚注标记符号来为 Quarto 提供额外的语言支持:^[我是脚注]。我用四开本写了大量文章,并带有内联脚注,这确实可以帮助我找到它们。
问题是该扩展在开发模式(f5 模式)下完全按照预期工作,但是当我将其下载为 .vsix 或通过商店时,它在运行时无法工作。前几天我把它推到了商店,因为我认为它的效果符合预期。
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "Quarto",
"patterns": [
{
"include": "#inlineFootnotes"
}
],
"repository": {
"inlineFootnotes": {
"patterns": [
{
"name": "meta.footnote.inline.quarto",
"match": "\\^\\[.*?\\]"
}
]
}
},
"scopeName": "text.html.quarto.quartofn"
}
这是我的 package.json
{
"name": "quartofn",
"displayName": "QuartoFootnoteHighlighter",
"description": "This plugin provides highlighting for inline footnotes in Quarto file (^[I am a footnote]).",
"version": "0.0.3",
"publisher": "nkmwicz",
"pricing": "Free",
"repository": {
"type": "git",
"url": "https://github.com/nkmwicz/quartofn.git"
},
"engines": {
"vscode": "^1.92.0"
},
"categories": [
"Programming Languages"
],
"extensionDependencies": [
"quarto.quarto"
],
"activationEvents": [
"onLanguage: quarto"
],
"main": "./src/extension.js",
"contributes": {
"languages": [
{
"id": "quarto",
"aliases": [
"Quarto",
"quarto"
],
"extensions": [
".qmd"
],
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "quarto",
"scopeName": "text.html.quarto.quartofn",
"path": "./syntaxes/quartofn.tmLanguage.json"
}
]
}
}
任何帮助将不胜感激。
我添加了一个activationEvents: [onLanguage: quarto] 和一个extensions.js 以确保扩展正在运行。它是并适当地记录,但它没有适当地捕获正则表达式来标记它。基本上,我所做的所有检查是否已连接的操作都有效,除了对捕获的模式进行标记之外: 它会正确记录语言,它会在保存四开文档时进行记录,等等。
所有这些对于扩展的工作来说都是不必要的,但它们使我能够确保它正确读取。
我已确保所有字段均已正确填写。我更改了语法文件名以确保它不会与四开冲突。我使用 vsce 包构建了扩展来生成 .vsix 文件。
我下载到vscode 1.93.0,它是用vscode“^1.92.0”构建的
您正在尝试用自己的语言和语法覆盖四开本语言和语法。
在开发模式下,您的扩展程序优先于所有其他扩展程序。
在用户模式下,Quarto 扩展 id
quarto.quarto
在字母表中比 nkmwicz.quartofn
更靠前,因此具有优先级。
您需要注入 Quarto 的语法,而不是尝试覆盖。
从您的
"languages": []
中删除 package.json
。你不会需要它。"language": "quarto"
下移除 "grammars"
。"injectTo"
下添加 "grammars"
。
"injectTo": [ "text.html.quarto" ]
它将把你的语法注入到他们的语法中。
并且您需要在语法中添加
"injectionSelector"
。