Баннер мобильный (1) Пройти тест

LSP

Глоссарий

4 марта 2024

Поделиться

Скопировано

Содержание

    LSP (Language Server Protocol) — это протокол языкового сервера, набор правил, по которому среда программирования связывается с сервером и получает от него инструкции. Протокол нужен, чтобы программы для разработки могли автоматически подставлять данные в код.

    Протокол LSP разработала компания Microsoft для своего редактора кода Visual Studio Code. В VS Code технология встроена изначально, но протокол можно использовать и в других средах и редакторах.

    Технически LSP похож на протокол HTTP и тоже используется, чтобы обмениваться данными между программой и сервером. Но LSP применяют в первую очередь для IDE и редакторов кода, а общается он с языковым сервером — специальной программой на сервере какого-нибудь проекта, которая отвечает за связь с редактором кода. 

    Благодаря LSP в средах разработки и редакторах кода стало удобнее поддерживать разные языки программирования, библиотеки и фреймворки. Сейчас расскажем подробнее.

    Что такое LSP и языковые сервера

    Разработчики пишут программы в специальном ПО — средах разработки, или IDE, а также в редакторах кода. В отличие от обычных текстовых редакторов, они могут запускать код, выводить сообщения об ошибках или предлагать варианты, как дописать ту или иную команду. Чтобы редакторы и IDE умели так делать, придумали языковые серверы. Эти программы принимают информацию из редактора кода: какой код там написан, где находится курсор и так далее. А потом на основе этой информации дают инструкции, что делать дальше. 

    LSP — это «правила общения» между средой разработки и языковым сервером, стандарт, по которому эти две программы обмениваются информацией. Протокол можно реализовать практически для любого языка. Нужен только языковой сервер с его поддержкой.

    Для чего нужен LSP и почему он так популярен

    Раньше, чтобы «подключить» какой-то язык, фреймворк или технологию к среде программирования, приходилось совершать довольно много действий. Для каждой связки «язык + среда» нужны были свой плагин, своя технология. В итоге поддержка новых языков в средах программирования становилась трудоемким делом. Это называли «N * M-проблемой»: чтобы поддерживать N языков программирования в M средах, нужно было N * M технологий.

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

    Существовала и вторая проблема. Разработка языковых серверов была довольно сложной задачей, во многом из-за отсутствия четкого понимания, какими они должны быть. Поэтому самих серверов было мало. А IDE не всегда могли их поддерживать из-за собственных ограничений.

    Протокол LSP от Microsoft помог решить обе проблемы. 

    1. Теперь любой языковой сервер можно подключить к среде по одной и той же технологии. Вместо M * N нужно только M + N решений: по одному на каждую среду и каждый язык. А это намного быстрее и проще реализовать. 
    2. Кроме того, протокол оказался настолько удобным, что сами языковые сервера начали активно развиваться — их стало больше, они стали более продвинутыми.
    С протоколом языкового сервера можно использовать одну и ту же технологию
    С протоколом языкового сервера можно использовать одну и ту же технологию, чтобы интегрировать в разные среды множество языков программирования. Источник

    Поэтому благодаря LSP стало возможным:

    • не создавать для каждой пары «язык + среда» отдельную технологию, а пользоваться единым протоколом;
    • добавить в IDE и редакторы кода больше новых функций;
    • упростить подключение новых языков и фреймворков к среде разработки;
    • «отвязать» среды и редакторы от конкретных языков, чтобы, например, в IDE Eclipse можно было работать не только с Java;
    • продвинуть технологии разработки языковых серверов, сделать их более удобными и надежными.

    Как это работает

    Благодаря LSP в разработке появились единые правила, по которым среды программирования и языковые сервера связываются друг с другом. Раньше нужно было нативно интегрировать в каждую среду каждый нужный язык. Теперь такой необходимости нет: достаточно «научить» среду и сервер понимать протокол LSP. Дальше протокол делает всё сам, а редактор кода или среда даже не знают, с каким языком работают. 

    Поэтому любой язык, где есть языковой сервер с поддержкой LSP, можно подключить практически к любой среде программирования — для этого нужно только внедрить в нее протокол.

    Технически LSP связывается с сервисом с помощью JSON-RPC — архитектуры, которая позволяет удаленно передавать информацию в формате JSON. Эта архитектура похожа на REST, которая используется в веб-разработке. Разница в том, что основной узел в JSON-RPC — вызов процедуры. Работает это так.

    1. LSP связывается с удаленным сервером и передает данные с помощью JSON-RPC. Это полезные сведения в формате JSON, которые оформлены по спецификации RPC.
    2. В данных LSP передает какие-то параметры, запрашивает ответ и требует вызвать какую-то функцию.
    3. Сервер получает данные. Если он верно настроен, то поймет их и передаст информацию в ответ — нужные параметры или результаты выполнения требуемой функции.
    4. Ответ сервера тоже приходит с помощью JSON-RPC. LSP получает ответ и «понимает» его.
    5. Среда реагирует на новую информацию, которая появилась благодаря LSP, — например, предлагает пользователю закончить команду определенным образом.
    обмен информацией между средой разработки и языковым сервером
    Так происходит обмен информацией между средой разработки и языковым сервером. LSP передает сведения и в одну, и в другую сторону. Источник

    А еще LSP может связываться с несколькими языковыми серверами одновременно. Например, если разработчик открыл и редактирует две программы на разных языках или с разными технологиями, LSP будет обмениваться информацией с серверами для обоих этих языков.

    Работа LSP с двумя языковыми серверами
    Работа LSP с двумя языковыми серверами одновременно: SaaS и Java. Источник

    Что можно делать благодаря LSP

    Мы разобрались, как работает протокол сервера в теории. Теперь посмотрим на то, какие возможности LSP открывает для разработчика на практике.

    Автоматически завершать код. Когда разработчик вводит начало какой-то команды, среда предлагает ему варианты, как эту команду закончить. Раньше так можно было только в случаях, когда в среду полностью интегрирован какой-то язык. Сейчас данные для автозавершения получают с помощью LSP. Поэтому автодополнение поддерживает всё больше сред и языков.

    Подставлять переменные. Среды программирования могут предлагать подставить в команду или функцию ту или иную переменную, которая уже используется в коде. Они анализируют, какие именно сущности есть в программе, и советуют их. А еще могут быстро подставить одну переменную в несколько мест кода. Автоподставление тоже использует LSP.

    Подключать новые языки. Раньше для подключения новых языков приходилось долго настраивать интеграции, а некоторые языки и вовсе оказывались недоступными для тех или иных сред. Теперь это делается быстро: достаточно, например, скачать модуль для работы с PHP в магазине Visual Studio Code и тут же пользоваться всеми «умными» функциями вроде автодополнения. Так происходит благодаря LSP.

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

    Как начать работать с LSP

    Поддержка LSP сейчас есть во многих средах программирования и редакторах кода. В первую очередь это Visual Studio Code — он вышел одновременно с протоколом и быстро начал ассоциироваться с ним. Но остальные редакторы тоже могут поддерживать протокол языковых серверов. Где-то он внедрен «из коробки», в других редакторах кода и IDE может понадобиться установить и настроить несколько плагинов. 

    После этого с помощью LSP можно будет подключать к среде любой язык программирования, для которого есть языковой сервер с поддержкой протокола. Более того, на JavaScript можно реализовать LSP так, чтобы программировать прямо в браузере. Протокол в хорошем смысле изменил сферу разработки, и теперь любой может выбрать инструмент по вкусу и не привязываться к конкретным IDE и редакторам.

    Другие термины на «L»

    Все термины

    Поделиться

    Скопировано

    0 комментариев

    Комментарии