为什么我的 VSCode 语言支持扩展在开发模式下工作但在实时模式下失败

问题描述 投票:0回答:1

VS 代码扩展

我正在构建一个扩展,通过标记 Quarto 内联脚注标记符号来为 Quarto 提供额外的语言支持:^[我是脚注]。我用四开本写了大量文章,并带有内联脚注,这确实可以帮助我找到它们。

问题

问题是该扩展在开发模式(f5 模式)下完全按照预期工作,但是当我将其下载为 .vsix 或通过商店时,它在运行时无法工作。前几天我把它推到了商店,因为我认为它的效果符合预期。

您可以在此处找到可用代码的完整 GitHub 存储库。

{
  "$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”构建的

visual-studio-code vscode-extensions
1个回答
0
投票

您正在尝试用自己的语言和语法覆盖四开本语言和语法。
在开发模式下,您的扩展程序优先于所有其他扩展程序。
在用户模式下,Quarto 扩展 id

quarto.quarto
在字母表中比
nkmwicz.quartofn
更靠前,因此具有优先级。

您需要注入 Quarto 的语法,而不是尝试覆盖。
从您的

"languages": []
中删除
package.json
。你不会需要它。
同时从
"language": "quarto"
下移除
"grammars"

"injectTo"
下添加
"grammars"

"injectTo": [ "text.html.quarto" ]

它将把你的语法注入到他们的语法中。

并且您需要在语法中添加

"injectionSelector"

它控制在其语法中注入哪些范围。
injectionSelector

© www.soinside.com 2019 - 2024. All rights reserved.