...

воскресенье, 20 апреля 2014 г.

[Из песочницы] Удобная разработка в Notepad++

Прежде чем начать, хочу сразу пояснить, что в данной статье я не предлагаю использовать Notepad++ вместо каких-либо IDE, заточенная под свои цели IDE всегда будет лучше обычного текстового редактора, даже несмотря на то что большинство из них написаны на Java, отжирают от 2 гигов оперативки, и вообще безумно тормозные. Однако глубокая интеграция IDE с системами контроля версий, дебаггерами, функциями «Goto definition» и прочим делают их незаменимыми.

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



Немного информации о движке FOnline:


  • для своих скриптов использует известную в узких кругах библиотеку AngelScript

  • имеет развитое API

  • для предварительной проверки скриптов на синтаксические ошибки имеется отдельный компилятор




Процесс написания скриптов на текущий момент состоит из следующих этапов:


  • написать скрипт

  • проверить компилируется ли он хотя бы

  • подключить скрипт к серверу

  • проверить скрипт в игре




Разумеется в таких условиях довольно сложно разрабатывать что-либо, нет ни готового фреймворка для проведения тестов (никакого TDD), ни дебаггера.

Но некоторые удобства с некоторыми ограничениями в Notepad++ таки удается реализовать:


  • Подсветка синтаксиса

  • Автодополнение

  • Компиляция с возможностью перейти в место ошибки по двойному клику

  • Функция «Go to definition»

  • Отображение классов, переменных и тп

  • Карта документа

  • Быстрый переход к предыдущему положению курсора

  • Более или менее удобная реализация двойных разделителей (одинарные кавычки, двойные кавычки и тп)




Конечно этого далеко недостаточно для удобной разработки, но уже хоть что-то.

Далее в этой статье я хочу подробно рассказать о том, как все это реализовать в Notepad++, но чтобы не возникало лишних вопросов сначала расскажу какие функции я бы хотел видеть в npp, но которые мне НЕ удалось реализовать:


  • Интеграция с системами контроля версий

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

    Подобный плагин есть например для Sublime — http://ift.tt/1mqPTRR разумеется только для git.

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

    Но нечто похожее для notepad++ все таки есть — плагин Location Navigate. Который кроме своей основной функции журналирования позиции курсора (для перехода вперед-назад), еще и отображает измененные за сеанс строки, к системе контроля версий не имеет никакого отношения, но хоть что-то.

  • Автодополнение для реализованных в скрипте сущностей

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

  • Дебаггер

    Но это и не удивительно, у нас и самого дебаггера-то нету…

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




Теперь по порядку.
Подсветка синтаксиса



Базовая возможность notepad++. Настраивается в том числе и через интерфейс самого npp.



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

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

Примечание:

Не пробуйте руками редактировать настройки UDL при запущенном npp, он затрет все изменения при выходе из программы.


Автодополнение



Так же — базовая возможность npp, но уже не редактируется в интерфейсе, на этот раз нужно уже руками править xml.

Основные возможности: автокомплит зарезервированных слов и функций, создание описания для них, подсказки параметров функций и информация о возвращаемых значениях. Кроме того поддерживаются перегруженные функции

подробности о настройке тут

Примечание:

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


Умная обработка вывода компилятора



Когда я только начинал реализацию окружения для разработки скриптов FOnline, для синтаксической проверки скриптов я долгое время пользовался обычным вызовом батника с передачей ему пути к скрипту. Однако потом один из участников нашего сообщества выложил инструкцию по настройке EditPlus для работы с фонлайном. Оказалось что в данном редакторе возможность парсинга вывода компиляторов есть из коробки. На тот момент я был уверен, что такие возможности бывают только в IDE и никто не будет париться с данным функционалом для текстового редактора. Однако если такой функционал есть в EditPlus, я все же решил еще раз пройтись по плагинам N++. К моему удивлению решение для notepad++ нашлось — плагин NppExec.

Настройки довольно гибкие, не буду описывать процесс, там все довольно просто, просто покажу результат:


Примечание

Плагин не позволяет добавить кнопку для запуска компилятора на тулбар, однако с этой задачей отлично справляется плагин Custom toolbar.


Функция «Go to definition» и отображение списка сущностей



Если говорить коротко для этой цели подходит плагин SourceCookifier.

Возможности:


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

  • Отображение всего этого в списке

  • Переход к определению слова по ctrl+click




Но если говорить более подробно, нельзя не сказать о минусах:


  • ctrl+click в пределах одного файла

  • группы сущностей чисто формальные и вообще задаются пользователем, таким образом, по крайней мере для UDL, не получится увидеть древовидную структуру классов, переменных и тп.




Примечание:


  1. Хочу признать, что еще не сильно разбирался с SourceCookifier и не могу гарантировать, что вышеперечисленное верно на 100%. Если кто-то заметит ошибки, буду рад информации.

  2. Если вам нужна функция «go to definition» для какого-либо более или менее известного языка, стоит посмотреть плагин TagsJump, там уже есть и быстрые переходы между файлами.




Карта документа



С недавних пор данный модный функционал имеется в n++ прямо из коробки.

Работает.
Быстрый переход к предыдущему положению курсора



Плагин Location Navigate.

Работает в пределах одного файла.

Кроме того, подсвечивает сохраненные и несохраненные изменения файла произошедшие с момента запуска n++.

Примечание:

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


Скобки, кавычки...



Расстановка парных кавычек и закрывающих скобок осуществляется плагином XBrackets Lite. Решение далеко не идеальное, но хоть какое-то.

Примечание:

В настройках голого n++ так же можно включить автоматическую подстановку парных символов, но там эта функция реализована совсем топорно и скорее будет раздражать.


Послесловие




На текущий момент это практически все что мне удалось выжать из старого доброго Notepad++.

Конечно, можно много жаловаться на то, что Notepad++ существует только под Windows, на то что sublime во многом превосходит Notepad++. Можно советовать переходить на EditPlus или полноценные IDE (для которых естественно придется своими силами реализовать большую часть необходимого функционала). Можно вспомнить про Geany с его немалыми возможностями по расширению функционала. Но, исходя из личного опыта, для описанных выше задач notepad++ подходит лучше всего. Возможно я ошибаюсь, могу даже предположить что описанное выше уже, без слишком больших затрат, реализуемо в Sublime. Но, как и в случае с notepad++, весь этот функционал чаще всего разбросан по куче плагинов и по различным документациям. И, если это так, я с удовольствием почитал бы о них подробнее.

Спасибо за внимание, будьте здоровы.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий