Как стать автором
Обновить

Neovim: модульность для разработчика

Время на прочтение 3 мин
Количество просмотров 7.3K

В этой статье речь пойдёт про некоторые его преимущества, которые, на мой взгляд, наиболее важны для конечного пользователя.

Нативный LSP-клиент

Language Server Protocol

LSP --- протокол для взаимодействия редактора кода (чаще всего) с сервером языка программирования, позволяющий реализовать такие функции как автодополнение, переход к определению, иерархию вызовов и многое другое.

В 1798 году власти США заключают контракт Эли Уитни, частным репетитором и изобретателем коттон-джин, первой эффективной машины по очистке хлопка, на изготовление 10 тысяч мушкетов.

Коттон-джин 19-века в музее Эли Уитни
Коттон-джин 19-века в музее Эли Уитни

Стоит отметить, что Эли никогда в жизни не изготавливал мушкеты, тем не менее уже в январе 1798 года он получил контракт на доставку 10-15 тысяч мушкетов в 1800 год

Несмотря на то, что господин Уитни и был смышлёным, но оружие никогда не делал, однако у него было преимущество: он видел проблему --- отсутствие стандартизации. Сложно представить, но тогда каждый экземпляр оружия был уникальным, оружейники просто не имели каких-то чётких стандартов или же лекал. Уитни нашёл такой метод изготовления оружия неэффективным, ему удалось его изменить. Уже в 1801 году изобретатель представил Конгрессу США 10 одинаковых пушек, разобрав их, он перетасовал составляющие части. Они подходили, они были взаимозаменяемыми. Конгрессу, к слову, идея понравилась, и он приказал стандартизировать всё снаряжение войск США.

Про контракт

Заказ он выполнил только в 1809 году.

Не думаю, что надо говорить, какой успех нашла эта идея.

Переносимся уже в не такое далёкое прошлое. Чаще всего при работе в редакторе кода вы бы хотели видеть автодополнение или диагностику кода. Раньше, чтобы обеспечить независимость утилиты, которая будет заниматься подобным надо было сделать примерно так:

  1. Написать саму утилиту, которая будет отвечать за необходимые взаимодействия с кодом.

  2. Написать переходники для каждого популярного редактора кода или IDE.

И вы это делаете, просто потому, что хотите популяризировать свою утилиту.

В 2015 году корпорация Microsoft для своего редактора кода Visual Studio Code изобретает LSP, который позже станет открытым стандартом.

Теперь, если вы напишете крутую утилиту для автодополнения, нет нужды поддерживать большое количество редакторов, ведь есть стандарт. Выигрывают ещё и пользователи, которые теперь не будут страдать от качества прослоек.

Вот так стандартизация и взаимозаменяемость пришли в мир редакторов кода.

Поддержка tree-sitter

Про сам tree-sitter

Tree-sitter предоставляет систему парсинга для многих языков программирования, эффективную достаточно для парсинга на лету. Также имеет встроенную библиотеку для подсветки синтаксиса.

Как вы относитесь к подсветке синтаксиса? Я хорошо, это удобно при написании, для навигации, впрочем, не думаю, что это требует объяснения. Поэтому подсветка синтаксиса важна, как и её качество. Проблема в том, что очень сложно хорошо развивать подсветку синтаксиса большинства ЯП в пределах разработки редактора кода, слишком трудозатратно.

Решение --- переложить эту задачу на отдельную библиотеку.

Средства для подсветки синтаксиса должны разрабатываться отдельно от редактора кода и быть универсальными, это позволит обеспечить первоклассную подсветку синтаксиса даже в не самых популярных редакторах.

Tree-sitter: до и после (пример из nvim-treesitter)
Tree-sitter: до и после (пример из nvim-treesitter)

Кстати, tree-sitter используется ещё для подсветки синтаксиса GitHub'ом и в редакторе Atom.

Lua

Исторически так сложилось, что Vim поддерживал (де-факто был таким себе интерпретатором) собственный язык программирования как Vim Script. Но дело в том, что достаточно сложно поддерживать и развивать отдельный язык в рамках проекта по созданию редактора кода.

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

Neovim ♥️ Lua
Neovim ♥️ Lua

Итог --- модульность

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

Теги:
Хабы:
+10
Комментарии 10
Комментарии Комментарии 10

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн