首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtCreator中的JSON语言服务器

QtCreator中的JSON语言服务器
EN

Stack Overflow用户
提问于 2019-10-14 18:11:19
回答 1查看 313关注 0票数 0

我似乎无法在QtCreator中为JSON (不是尝试过的其他语言)提供语言服务器。

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

代码语言:javascript
复制
*.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文件时,我看不到任何区别。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-16 20:01:15

我以前从未使用过那个语言服务器,但我使用过Qt use in their example的python服务器。我想我应该看看它是否能在我的机器上工作。

我正在使用下面的Qt Creator:

代码语言:javascript
复制
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安装了这个插件

代码语言:javascript
复制
npm install --save vscode-json-languageservice

他们在示例中使用的python服务通过stdio进行通信,因此我尝试使用该服务,例如

代码语言:javascript
复制
*.json, 
startup behaviour: "Requires an Open File"
Executable: /usr/bin/node
Arguments: /home/netherda/node_modules/vscode-json-languageserver --stdio

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

代码语言:javascript
复制
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

我改变了:

代码语言:javascript
复制
dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof params.initializationOptions.provideFormatter !== 'boolean');

成为

代码语言:javascript
复制
dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && ((params.initializationOptions) && typeof params.initializationOptions.provideFormatter !== 'boolean');

在capabilities对象def中,我更改了:

代码语言:javascript
复制
documentRangeFormattingProvider: params.initializationOptions.provideFormatter === true

成为

代码语言:javascript
复制
documentRangeFormattingProvider: (params.initializationOptions) ? params.initializationOptions.provideFormatter === true : false

如果填充了capabilities字段,则可以看出它正在工作。(尝试在测试时将启动行为更改为"Always on“):

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58374562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档