~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 475025DF082A59A52785D3ED1C19FC91__1711443120 ✰
Заголовок документа оригинал.:
✰ Language Server Protocol - Wikipedia ✰
Заголовок документа перевод.:
✰ Протокол языкового сервера — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Language_Server_Protocol ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/47/91/475025df082a59a52785d3ed1c19fc91.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/47/91/475025df082a59a52785d3ed1c19fc91__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 11:38:42 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 26 March 2024, at 11:52 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Протокол языкового сервера — Википедия Jump to content

Протокол языкового сервера

Из Википедии, бесплатной энциклопедии

Протокол языкового сервера ( LSP ) — это открытый JSON-RPC на основе протокол для использования между редакторами исходного кода или интегрированными средами разработки (IDE) и серверами , которые предоставляют «инструменты языковой аналитики»: [1] специфичные для языка программирования функции, такие как завершение кода , подсветка синтаксиса и маркировка предупреждений и ошибок, а также процедуры рефакторинга . Цель протокола — обеспечить возможность реализации и распространения поддержки языка программирования независимо от любого данного редактора или IDE. [2] В начале 2020-х годов LSP быстро стал «нормой» для поставщиков инструментов языкового анализа. [1]

История [ править ]

LSP изначально был разработан для Microsoft Visual Studio Code и теперь является открытым стандартом. 27 июня 2016 года Microsoft объявила о сотрудничестве с Red Hat и Codenvy для стандартизации спецификации протокола. Первоначально протокол был поддержан и принят этими тремя компаниями. [3] [4] Его спецификация размещена и разрабатывается на GitHub . [5]

Предыстория [ править ]

Современные IDE предоставляют программистам сложные функции, такие как завершение кода , рефакторинг , переход к определению символа , подсветка синтаксиса , а также маркеры ошибок и предупреждений.

Например, в текстовом языке программирования программист может захотеть переименовать метод. read. Программист мог либо вручную отредактировать соответствующие файлы исходного кода и заменить соответствующие вхождения старого имени метода на новое имя, либо вместо этого использовать возможности рефакторинга IDE для автоматического внесения всех необходимых изменений. Чтобы иметь возможность поддерживать этот стиль рефакторинга, IDE необходимо глубокое понимание языка программирования, на программы котором написан исходный код . Инструмент программирования без такого понимания — например, тот, который выполняет простой поиск и замену. вместо этого — может привести к ошибкам. При переименовании read например, инструмент не должен заменять частичное совпадение в переменной, которая может называться readyState, и он не должен заменять часть комментария к коду, содержащую слово «уже». Также не следует переименовывать локальную переменную. read, например, в конечном итоге изменят переменные с одинаковыми именами в других областях видимости .

Обычные компиляторы или интерпретаторы конкретного языка программирования обычно не могут предоставить эти языковые услуги , поскольку они написаны с целью либо преобразования исходного кода в объектный код , либо немедленного выполнения кода. Кроме того, языковые службы должны иметь возможность обрабатывать исходный код, который имеет неправильный формат , например, если программист находится в процессе редактирования и еще не закончил вводить оператор, процедуру или другую конструкцию. Кроме того, небольшие изменения в файле исходного кода, вносимые во время набора текста, обычно меняют семантику программы. Чтобы обеспечить мгновенную обратную связь с пользователем, инструмент редактирования должен иметь возможность очень быстро оценить синтаксические и семантические последствия конкретной модификации. Таким образом, компиляторы и интерпретаторы являются плохими кандидатами для создания информации, необходимой для использования инструментом редактирования. [6]

До разработки и реализации протокола языкового сервера для разработки кода Visual Studio большинство языковых служб обычно были привязаны к определенной IDE или другому редактору. В отсутствие протокола языкового сервера языковые службы обычно реализуются с использованием API расширения для конкретного инструмента. Предоставление того же языкового сервиса другому инструменту редактирования требует усилий по адаптации существующего кода, чтобы сервис мог ориентироваться на интерфейсы расширения второго редактора. [7]

Протокол языкового сервера позволяет отделить языковые службы от редактора, чтобы эти службы могли содержаться на языковом сервере общего назначения . Любой редактор может унаследовать сложную поддержку множества разных языков, используя существующие языковые серверы. Аналогично, программист, занимающийся разработкой нового языка программирования, может сделать службы этого языка доступными для существующих инструментов редактирования. [6] Таким образом, использование языковых серверов через протокол языкового сервера также снижает нагрузку на поставщиков инструментов редактирования, поскольку поставщикам не нужно разрабатывать собственные языковые сервисы для языков, которые поставщик намеревается поддерживать, поскольку языковые серверы уже был реализован. Протокол языкового сервера также позволяет распространять и разрабатывать серверы, предоставляемые заинтересованной третьей стороной, например конечными пользователями, без дополнительного участия со стороны поставщика компилятора используемого языка программирования или поставщика редактора, для которого используется язык. поддержка добавляется. [ нужна цитата ]

LSP не ограничивается языками программирования. Его можно использовать для любого текстового языка, например для спецификаций. [8] или предметно-ориентированные языки (DSL) . [9]

Технический обзор [ править ]

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

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

Протокол языкового сервера определяет сообщения, которыми будут обмениваться клиент и языковой сервер. Это JSON-RPC , которому предшествуют заголовки, аналогичные HTTP. Сообщения могут исходить от сервера или клиента.

Протокол не содержит никаких положений о том, как запросы, ответы и уведомления передаются между клиентом и сервером. Например, клиент и сервер могут быть компонентами одного и того же процесса, обменивающимися строками JSON посредством вызовов методов. Это также могут быть разные процессы на одной или разных машинах, взаимодействующие через сетевые сокеты .

Реестр [ править ]

Существуют списки LSP-совместимых реализаций, поддерживаемые сообществом Langserver.org. [10] или Майкрософт. [11]

Ссылки [ править ]

  1. ^ Перейти обратно: а б Гунасингхе и Маркус 2021 , с. XXI.
  2. ^ Эффтинге, Свен; Спенеманн, Миро (11 декабря 2016 г.). «Объяснение протокола языкового сервера» . Фонд Эклипс . Проверено 25 апреля 2017 г.
  3. ^ Криль, Пол (27 июня 2016 г.). «Протокол языкового сервера, поддерживаемый Microsoft, стремится к совместимости языка и инструментов» . Инфомир . Проверено 26 апреля 2017 г.
  4. ^ Хэнди, Алекс (27 июня 2016 г.). «Codenvy, Microsoft и Red Hat сотрудничают в разработке протокола языкового сервера» . СД Таймс . Проверено 26 апреля 2017 г.
  5. ^ «Microsoft/язык-серверный протокол» . Гитхаб . Проверено 29 марта 2021 г.
  6. ^ Перейти обратно: а б Хуарес, Сет (12 мая 2016 г.). «Андерс Хейлсберг о конструкции современного компилятора» . Майкрософт . Проверено 22 февраля 2017 г.
  7. ^ Эффтинге, Свен (декабрь 2016 г.). «Eclipse изучает новые протоколы» . Проверено 26 апреля 2017 г.
  8. ^ Томассетти, Габриэле (16 февраля 2017 г.). «Почему вам следует знать протокол языкового сервера» . Федерико Томассетти . Проверено 8 мая 2017 г.
  9. ^ Нойманн, Александр (1 июня 2016 г.). «Протокол языкового сервера Xtext 2.11 unterstützt» [Xtext 2.11 поддерживает протокол языкового сервера]. Heise Developer (на немецком языке). Хайзе Медиен . Проверено 8 мая 2017 г.
  10. ^ «Langserver.org» . Langserver.org . Проверено 8 мая 2017 г. - через Sourcegraph.
  11. ^ Гамма, Эрих (21 января 2019 г.). «Языковые серверы» . Майкрософт . Получено 25 января 2019 г. - через GitHub.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 475025DF082A59A52785D3ED1C19FC91__1711443120
URL1:https://en.wikipedia.org/wiki/Language_Server_Protocol
Заголовок, (Title) документа по адресу, URL1:
Language Server Protocol - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)