我以前从未使用过该语言服务器,但我使用了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
如果填充了功能字段,您可以知道它正在工作。(尝试在测试时将启动行为更改为“始终开启”):