如何为尚未支持语法高亮的数据格式JSON Lines添加语法高亮?

9

我想为JSONL数据格式获得语法高亮支持 - "JSON-Lines" - 因为该格式目前在'V.S. Code'中尚未得到支持。

The JSONL website建议我搜索添加JSON Lines支持的扩展,但是,我尝试查找此类扩展的所有尝试都没有返回任何有用的结果。

我还在Visual Studio Marketplace上搜索了“JSON Lines”和“.jsonl”,但是搜索仍然没有返回任何有用的结果。

现在我想知道是否可能添加对该数据格式的支持?


1
给未来的读者:看起来有人刚刚为JSONL创建了语言支持 - MC Emperor
2个回答

7

2022年更新:

这里提到的其他两个建议是有效的,它们可以作为可能的解决方案,然而,截至2022年,V.S. Code已经新增了一个功能,允许用户将语法注入到另一个语法中。

通常情况下,想要在V.S. Code中创建语言风格扩展(添加语法高亮或其他语言特性的扩展)的人会找到VS Code生态系统中已经存在的基础语法。最理想的语法是已经内置在编辑器中的语法。扩展开发者随后会将较小的语法注入到预先存在的语法中。因为当代开发人员使用的许多数据类型、语言、API、SDK、RTE等只是子集(或扩展,如果您愿意),所以将语法注入到语法中使得快速、简单地支持许多功能的语法高亮成为可能。

就像OP的情况一样,他正在寻找JSON-Lines,因此他将使用内置的JSON语法,并在已经存在的JSON语法之上注入额外的语法高亮。

这通常是整个过程的工作方式,但通常需要手动复制、粘贴,然后维护JSON语法。听起来很简单,但与创建和维护实际上只是一个片段(注入的语法)相比,这已经为您完成了一个巨大的步骤。 要注入语法,请访问此链接">
2021年7月21日 @ 04:08 UTC — 编辑:"添加了另一个可能的解决方案"

支持不受支持的文件类型的可能解决方案


在回答另一个有关“V.S. Code中的语言支持”的问题时,我想起了来自这个“问与答”(Q&A)的问题,并且意识到可能有一个解决方案。如果作者还没有找到解决方案,那么我建议他们尝试一下这个方法,如果其他人偶然遇到这个问题并想要添加不受支持的语言支持。

首先,如果您要添加的语言和/或文件类型是完全独特的,则此解决方案将无法使用。此外,即使您能够获得支持,也可能不是完整的支持,或者可能存在其他问题。让我举个例子,以帮助您充分理解我所说的内容。

示例:


To start, let me show you the syntax for the solution. This is a setting used in V.S. Code's settings.json file — it can be placed in either the user's, or the workspace's implementation of the settings.json file.
   // "./.vscode/settings.json"

   "files.associations": {
       "json": "jsonc"
   },

"Hypothetically, lets say V.S. Code does not support the JSONC file type — 'JSON with Comments'. If the previous statement were true, which it isn't, but if it were, then this solution would work, however, if you have JSONC files already filled with data, then you will likely get errors, as the JSONC file type is used to implement comments in a JSON file, however, V.S. Code's JSON language does not support comments, and the editor will display errors for every comment that there is in a JSONC document, because when you configure your editor this way, V.S. code treats JSONC files as JSON files."



"There are other instances where using this configuration works better. Since we already used JSONC as an example, I'll give you a real world example, where the File-Associations Setting is used to support comments in .json (JSON) files — remember, the above was a hypothetical example, this one is an actual example practiced by developers."
"Adding comments to JSON file is simple, and quick, using the File Association Setting, simple invert the configuration from the code block above, so that the settings configuration looks like the example below. If you type the configuration into your .vscode/settings.json file, you will find that V.S. Code won't complain when you add a comment to a JSON file anymore.
    // "./.vscode/settings.json"  

    "files.associations": {
        "jsonc": "json"
    }, 

基本上,简而言之,您可能会获得一些支持,可能是有限的支持,或者是完全支持,使用文件关联(file.associations)设置。尝试很容易,并且比为整个编程语言或数据文件类型添加V.S. Code支持要快得多,工作量也少得多。

(已编辑:2021年12月04日)


我想在这里插入一句话,我一直在上C++课,并使用CLang-format-12作为我的格式化程序。CLang-Format要求用户在项目中实现.clang-format文件以自定义CLang-format的配置(如果您熟悉JS,则相当于ESLint的.eslintrc文件)。有时,VS-Code会自动将该文件检测为YAML格式,这是准确的,但有时它会将其检测为Python?我不写Python,但语法中的某些东西似乎与“VSCode自动检测文件格式功能”相似。有时它将其检测为MD,但它并不是Markdown格式。它是YAML格式,但从技术上讲,它不是一个YAML文档,但是使用file.associations设置,我能够准确地获得对该文件的支持。

顺便提一下,VSCode会尽力自动添加支持,并检测文件格式以及可用的数据格式/编程语言语法,但有时需要一些帮助。正如我已经说过的那样,有时候文件格式可以工作,但是支持可能有限,当支持有限时,您总是需要告诉VSCode哪些文件类型可以工作。



2021年6月23日 @ 22:45 UTC — 原始帖子

在 V.S. Code 中支持 JSONL 的解决方案


没有人在VSCode中创建了对JSONL文件的支持。像您一样,我也找不到添加对JSON Lines或JSONL文件语言支持的扩展程序。唯一的方法是在VSCode中添加支持。VSCode为用户提供了定义语言所需的工具。他们提供的工具与MS VSCode开发团队用于定义语言的工具相同,换句话说,它们是好的工具,您可以使用它们做出很酷的东西。如果这是整个语言,那么可能不值得考虑,但实际上只是对现有数据类型的几个小修改。最难的部分将是阅读VSCode文档以了解如何在扩展清单中使用Contributes属性,这只是一个炫耀的package.json文件。
我知道没有人愿意做额外的工作,特别是比他们原本需要做的更多的工作,但我向你保证,一旦你学会了VSCode扩展程序清单及其贡献属性的基础知识,再加上一点关于TextMate如何工作的知识,你就可以在不到几个小时的时间内完成想要做的事情。此外,回报是巨大的,学习如何制作VSCode扩展程序是一个我非常高兴做出的决定,我几乎每天都使用这些知识。而且这是你得到支持的唯一途径。

以下是一些不错的起点:


语言定义(官方VSCode网站)
语法高亮(官方VSCode网站)
贡献对象(官方VSCode网站)
扩展清单(官方VSCode网站)
TextMate语法文档(TextMate官方网站)
VSCODE中的TextMate令牌/范围(官方VSCode网站)



最终提示:

你唯一的选择是给负责 JSON Lines 的人发邮件,询问他们建议使用哪个编辑器,或者询问他们是否计划在将来支持VSCode。




4
理论上,JSONlines 应该只是 JSON 的扩展,但加入了用于分隔文档的换行符规则。在这种情况下,YAML 也可以帮助,因为它支持多个文档且是 JSON 的超集。与 YAML 的 --- 不同,JSONlines 使用 \n 分隔文档。但是,您还需要更新允许在其他任何位置使用换行符的任何解析规则。- 如上所述,几个小时可能就足够了。 - E. Körner

1
作为此提交的结果:https://github.com/microsoft/vscode/commit/0adddd82816db666c52038e8277312dc55da2756,Insider's Build v1.79.0现在内置支持JSON Lines语言定义。有一个新的jsonl语言标识符,下面的示例使用.jsonl扩展名,JSON Lines语言标识符会自动选择。
以下是默认的语法着色:

JSON Lines default syntax colors

然而,您可以通过 "editor.tokenColorCustomizations" 设置来检查这些 JSON 行令牌的范围并自行更改颜色,如下所示:

"editor.tokenColorCustomizations": {
    "textMateRules": [

      {
        "scope": "string.quoted.double.json.lines",   // values
        "settings": {
          "foreground": "#7300ff",
          "fontStyle": "bold"
        }
      },
      {
        "scope": "support.type.property-name.json.lines",   // keys/property names
        "settings": {
          "foreground": "#FF0000",
          "fontStyle": "bold"
        }
      }
    ]
},

还有更多的范围可以研究。以下是这些令牌颜色变化的样子:

JSON Lines custom syntax colors


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接