0

我似乎无法获得在 QtCreator 中工作的 JSON(未尝试过其他)的语言服务器。

我下载了 vscode-json-langageserver 并在 QtCreator 选项中进行了设置...语言客户端:

*.json, 
startup behaviour: "Requires an Open File"
Executable: /usr/bin/node
Arguments: /home/netherda/node_modules/vscode-json-languageserver --node-ipc

我已经设置了 MIME 类型,并尝试了各种组合。功能字段报告“在服务器被初始化后可用”,当我打开一个 json 文件时我看不到任何区别。

有什么建议么?

4

1 回答 1

0

我以前从未使用过该语言服务器,但我使用了Qt 在他们的示例中使用的 python 。我想我会看看它是否在我的机器上工作。

我正在使用以下 Qt Creator:

Qt Creator 4.10.0
Based on Qt 5.13.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit)
Built on Sep 4 2019 04:47:37
From revision 9b7bab7d35

我使用这些说明安装了插件:

npm install --save vscode-json-languageservice

他们在示例中使用的 python 服务通过 stdio 进行通信,所以我尝试使用它,例如

*.json, 
startup behaviour: "Requires an Open File"
Executable: /usr/bin/node
Arguments: /home/netherda/node_modules/vscode-json-languageserver --stdio

当我在本地尝试这个时,它似乎做了一些事情。不幸的是,这会产生初始化错误:

Cannot read property 'provideFormatter' of undefined

我不确定服务器或 qt-creator 是否有问题(或两者兼而有之),但它似乎是由 qt-creator 没有提供任何初始化选项和服务器代码假设它们会在那里引起的。

我在本地提出了一个修复方法,即在尝试使用它们之前检查初始化选项是否存在,这似乎有效。我将在vscode上打开一个拉取请求以获取建议的修复。

同时,如果你看到同样的问题并且乐于使用我的想法,你可以编辑两行connection.onInitialize((params) => callback inside jsonServerMain.(js/ts)(在我的包的版本中manger 提供了它的 js 但它似乎在最新版本中更改为 ts ,但无论您使用哪个版本,问题似乎都存在......)

例如在我的机器上是:node_modules/vscode-json-languageserver/out/jsonServerMain.js

我变了:

dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof params.initializationOptions.provideFormatter !== 'boolean');

成为

dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && ((params.initializationOptions) && typeof params.initializationOptions.provideFormatter !== 'boolean');

在功能对象定义中我改变了:

documentRangeFormattingProvider: params.initializationOptions.provideFormatter === true

成为

documentRangeFormattingProvider: (params.initializationOptions) ? params.initializationOptions.provideFormatter === true : false

如果填充了功能字段,您可以知道它正在工作。(尝试在测试时将启动行为更改为“始终开启”):

填充的功能字段

于 2019-10-16T12:01:15.000 回答