Языковой сервер JSON в QtCreator - PullRequest
0 голосов
/ 14 октября 2019

Кажется, я не могу получить языковой сервер для JSON (не пробовал других), работающий в QtCreator.

Я скачал 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 и попробовал различные комбинации. Поле возможностей сообщает: «Доступно после инициализации [sic] сервера», и я не вижу разницы при открытии файла json.

Есть предложения?

1 Ответ

0 голосов
/ 16 октября 2019

Я никогда раньше не использовал этот языковой сервер, но я использовал Python, который Qt использует в их примере . Я подумал, что посмотрю, работает ли он на моей машине.

Я использую следующий 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-создатель не предоставил никаких параметров инициализации и серверный код, предполагая, что они будут там.

Я придумал локальное исправление, которое должно проверять, существуют ли варианты инициализации, прежде чем пытаться их использовать, и, похоже, это работает. Я собираюсь открыть запрос на получение vscode для предлагаемого исправления.

В то же время, если вы видите ту же проблему и с удовольствием используете мою идею, вы можетередактировать 2 строки connection.onInitialize ((params) => callback внутри jsonServerMain. (js / ts) (В версии, предоставленной моим менеджером пакетов, это 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');

и в объекте возможностей def я изменил:

documentRangeFormattingProvider: params.initializationOptions.provideFormatter === true

должно быть

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

Вы можете сказать, что оно работает, если заполнено поле возможностей. (Попробуйте изменить поведение при запуске на «Всегда включено» во время тестирования):

Populated capabilities field

...