Можно ли сделать прокси между 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).