我似乎无法在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类型,并尝试了各种组合。capabilities字段报告"Available after server wassic initialized“,当我打开一个json文件时,我看不到任何区别。
有什么建议吗?
发布于 2019-10-16 20:01:15
我以前从未使用过那个语言服务器,但我使用过Qt use in their example的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我使用these instructions安装了这个插件
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上打开一个拉取请求,以获得建议的修复。
同时,如果你看到同样的问题,并且很乐意使用我的想法,你可以在jsonServerMain.(js/ts)中编辑两行connection.onInitialize((params) =>回调(在我的包管理器提供的版本中,它是js,但它似乎被更改为ts in the latest,无论你使用哪个版本,这个问题似乎都存在……)
例如,在我的机器上是: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');在capabilities对象def中,我更改了:
documentRangeFormattingProvider: params.initializationOptions.provideFormatter === true成为
documentRangeFormattingProvider: (params.initializationOptions) ? params.initializationOptions.provideFormatter === true : false如果填充了capabilities字段,则可以看出它正在工作。(尝试在测试时将启动行为更改为"Always on“):

https://stackoverflow.com/questions/58374562
复制相似问题