Как отобразить связанную информацию LSP в VS Code

Пишу языковой сервер. Он предоставляет дополнительную DiagnosticRelatedInformation как часть своего диагностического ответа. Как и в https://code.visualstudio.com/updates/v1_22#_related-information-in-errors-and-warnings. Хотя в настоящее время я вижу, что основная ошибка отображается как в окне «Проблемы», так и в основной текстовой области, дополнительной «relatedInformation» нигде не видно.

Я подозреваю, что этому может быть две причины. Либо на стороне клиента: возможность отображения этой информации не включена в VS Code. По крайней мере, когда протокол инициирован, этой возможности нигде не видно, вот начальное сообщение JSON от клиента:

[Trace - 2:22:13 PM] Sending request 'initialize - (0)'.
Params: {
    "processId": 6640,
    "rootPath": null,
    "rootUri": null,
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true
            },
            "executeCommand": {
                "dynamicRegistration": true
            }
        },
        "textDocument": {
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true
                }
            },
            "hover": {
                "dynamicRegistration": true
            },
            "signatureHelp": {
                "dynamicRegistration": true
            },
            "definition": {
                "dynamicRegistration": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true
            },
            "codeAction": {
                "dynamicRegistration": true
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true
            },
            "documentLink": {
                "dynamicRegistration": true
            }
        }
    },
    "trace": "verbose"
}

Кстати, я использую VS Code 1.28.2 на Win10.

Другая причина может быть на стороне сервера: ответ, содержащий диагностику, может быть искажен. Это выглядит так:

Params: {
    "diagnostics": [
        {
            "code": null,
            "message": "the declaration of 'x' shadows an existing declaration",
            "range": {
                "end": {
                    "character": 17,
                    "line": 8
                },
                "start": {
                    "character": 17,
                    "line": 8
                }
            },
            "relatedInformation": [
                {
                    "location": {
                        "uri": "file:///c%3A/Users/blabla/XlocalShadow3.blc",
                        "range": {
                            "end": {
                                "character": 13,
                                "line": 6
                            },
                            "start": {
                                "character": 13,
                                "line": 6
                            }
                        }
                    },
                    "message": "existing declaration"
                },
                {
                    "location": {
                        "uri": "file:///c%3A/Users/blabla/XlocalShadow3.blc",
                        "range": {
                            "end": {
                                "character": 17,
                                "line": 8
                            },
                            "start": {
                                "character": 17,
                                "line": 8
                            }
                        }
                    },
                    "message": "shadowing declaration"
                }
            ],
            "severity": {
                "_tag": 0
            },
            "source": "Parsing Error"
        }
    ],
    "uri": "file:///c%3A/Users/blabla/XlocalShadow3.blc"
}

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

Моя проблема в том, что я не вижу, как проверить ту или иную гипотезу о том, что идет не так. Или, может быть, мне не хватает чего-то совершенно другого?


person Friedrich Gretz    schedule 13.11.2018    source источник


Ответы (1)


Проблема заключалась просто в устаревшей версии vscode-languageclient в разделе зависимостей package.json. Эта функция была реализована в 4.1.0, но поскольку мой проект немного устарел, требовалось только что-то выше 3.5. Я обновился до последней версии, и все работает.

person Friedrich Gretz    schedule 19.11.2018