Я пишу сервер LSP и cl inet в коде VS. Я использую lsp4j для реализации сервера LSP и использую пакет npm vscode-languageclient для реализации клиента.
В клиенте я использую FileSystemProvider для получения содержимого файла, потому что мне нужна схема настройки. Ниже приведен фрагмент кода реализации FileSystemProvider :: readFile:
if (path) {
return fs.readFileSync(path);
}
Как видите, я получаю данные из существующего файла напрямую. Затем я использую следующий код для открытия URI:
vscode.commands.executeCommand('vscode.open', vscode.Uri.Parse(a-customize-uri));
Конечно, поставщик файловой системы мог работать и файл мог быть открыт, но событие изменения не генерировалось, когда я изменял содержимое. Это означает, что когда я изменяю содержимое файла в редакторе, jsonRP C не связывается между клиентом и сервером.
Я могу получить событие изменения при сохранении файла (FileChangeType.Changed), но это не то, что Я хочу.
Если я не использую FileSystemProvider, просто откройте файл напрямую:
vscode.commands.executeCommand('vscode.open', vscode.Uri.file(abs-path));
Все идет хорошо, языковой клиент может правильно отправить событие изменения.
Я также пытался добавить промежуточное ПО (didOpen, didSave, didChange) в настройках клиента, но все равно не смог работать. Кроме того, когда я не использую FileSystemProvider, промежуточное программное обеспечение может вызываться правильно.
Так что я предполагаю, может ли FileSystemProvider заинтересовать событие изменения в редакторе?
Не уверен, что я опишу Мой вопрос ясно, но любой комментарий будет оценен. Спасибо!