Можно ли сделать прокси между IDE и языковым сервером?

Скажем, я хочу немного изменить поведение какого-то языка.

Можно ли это сделать? Это было сделано раньше?

UPD: Typescript имеет очень ограниченные возможности для работы с именами свойств (например, вы не можете с помощью typecript создать пропропозицию, которая является производной от другого, например, в верхнем регистре или с префиксом), тогда как Javascript (который компилирует Typescript к) очень гибкий. Поэтому я хотел с помощью LSP изменить некоторые сообщения LSP Typescript, которые содержат параметры автозаполнения.

1 ответ

Решение

Да, но как это сделать, зависит от конкретной операционной системы. С точки зрения компилятора, прокси будет отображаться как ваша IDE. LSP - это сетевой протокол

Я хочу немного изменить поведение какого-то языка.

Таким образом, вы хотите изменить семантику некоторого языка (и вы не говорите, какой). Тогда LSP - не лучшее место для этого.

Например, в некоторых простых случаях с GCC написание вашего плагина GCC является более подходящим.

В большинстве случаев изменение "поведения" действительно меняет сам язык. Тогда вам может потребоваться сделать собственную реализацию этого языка. Иногда вы можете исправить существующую свободную программную реализацию исходных языков. В других случаях вам нужно будет самостоятельно реализовать свой язык. Затем прочитайте " Книгу Дракона" и подумайте о компиляции или переносе на C вашего языка в вашей языковой реализации. Обязательно укажите это сначала на бумаге.

Не путайте язык программирования (который является спецификацией, обычно написанной на английском языке - возможно, с некоторой формализацией в некоторой конкретной нотации, например, n1570 для C11, R5RS для Scheme) с его реализацией (которая является программным обеспечением). Прочитайте прагматику языка программирования Скотта.

Не путайте IDE с языковой реализацией. Например, все известные мне компиляторы C или C++ не имеют IDE и являются программами командной строки (например, GCC, Clang и т. Д.), И большинство из них даже не знают о LSP. IDE может запустить компилятор C++, но это не компилятор. Вы можете кодировать (в C, C++, Java, C#, Ocaml, ....) с помощью простого редактора исходного кода (даже простого, не зависящего от языка, такого как Notepad в Windows, Leafpad или nano в Linux).

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

LSP - это предложение протокола между "IDE" и языковыми реализациями.

Обратите внимание, что автозаполнение (упомянутое в вашем комментарии) не является особенностью языка программирования (и не является частью семантики C или C++). Это может быть особенностью некоторых IDE (не всех). Это можно сделать нейтральным языком (например, в Emacs).

Другие вопросы по тегам