Показать результаты как на основе слов предложений и собственного поставщика завершения - PullRequest
2 голосов
/ 18 марта 2019

Я разрабатываю расширение кода Visual Studio, которое, используя протокол Language Server, предоставляет список завершения. Моя проблема в том, что после его реализации пользователи потеряли завершение на основе содержимого документа.

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

Нерабочий пример:

Рабочий пример:

(https://github.com/APerricone/harbourCodeExtension/issues/16)

Я пытался установить isIncomplete на false, без каких-либо улучшений.

1 Ответ

1 голос
/ 18 марта 2019

Это функция VSCode, называемая «предложения на основе слов» (см. Настройку "editor.wordBasedSuggestions"). Предложения на основе слов предоставляются по умолчанию всякий раз, когда все другие зарегистрированные поставщики завершения не могут вернуть никаких результатов.

Я не знаю ни одного способа, чтобы предложения на основе слов были объединены с результатами вашего собственного поставщика. Это утверждение разработчика VSCode , кажется, подтверждает, что это невозможно:

Почему бы не включить сопоставление на основе строк, даже если есть поставщик завершения, возвращающий предложения?

Каждый провайдер получает ранг в зависимости от селектора, который он использует при регистрации. У провайдера, основанного на словах, обычно самый низкий балл, и правило гласит, что провайдеры с более низким рейтингом не спрашивают, дали ли провайдеры с более высоким рейтингом результат. Чтобы избежать дубликатов и спама.

Комментарий к документу registerCompletionItemProvider() остается прежним, поэтому я не думаю, что с тех пор что-то изменилось. Возможно, вы могли бы открыть запрос функции для этого, но я не уверен, насколько высоки шансы его реализации.

Однако есть простой обходной путь: просто реализуйте предложения на основе слов самостоятельно. Если вы используете CompletionItemKind.Text, он должен выглядеть так же, как встроенный поставщик VSCode. Я предполагаю, что для завершения вам все равно придется сканировать содержимое документа. В качестве дополнительного бонуса, это позволяет избежать дубликатов, как указано в выпуске.

...