Неспешно идет к релизу разработка плагина для IntelliJ IDEA для Parser 3.
На данный момент реализован автокомплит по большей части конструкций языка, подсветка синтаксиса, просмотр структуры парсерных файлов с классами и их методами (включая статические), форматирование и индексация кода, базовый рефакторинг и анализ ошибок. В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio.
Плагин интегрируется с HTML плагином и по сути предоставляет также все фичи IDEA по редактированию самого HTML.
Наиболее стабильно на данный момент плагин работает с IntelliJ IDEA Ultimate, и alpha сборки собираются именно на ней.
Скачать плагин для тестирования можно здесь:
Либо установить плагин из самой IDEA, он там называется Parser for IDEA
Сначала хочется сказать большое спасибо, что занимаетесь этой задачей. Парсеру всегда нехватало поддержки нормальной ide, что тоже не в лучшую сторону влияло на развитие сообщества. Альфу наверное комментировать не стоит, на то она и альфа. Нехватает многово, и на самом деле вместо написани трактатов, чего не хватает, хочется услышать от вас, что планируется в самое-самое ближайшее время.
Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов. И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает: ^hash::sql[] а не ^hash::sql{}[] Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя. Дайте знать, вообще стоит ли вам писать о подобном или пока закрывать глаза (ведь альфа).
> Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов.
В alpha13 (сегодня) появятся.
> И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает: > ^hash::sql[] > а не ^hash::sql{}[] > Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя.
Про sql понял, а вот про одно двоеточие - неочень :) С одним - выдается подсказка по методам (статическим и динамическим), с двумя - конструкторам. Может быть, хотели сказать, что в подсказках по основным классам мешает мешанина статических и динамических методов в автокомплите? Тогда проблема понятна. Или имелось ввиду, что с двумя двоеточиями у вас не выводится ничего вообще? Тогда баг.
С двоеточиями выводится, именно багов с этим пока не заметил. Имел в виду как раз смешение базовых классов и пользовательских. Например, если я набираю: ^hash то явно хочу получить один из конструкторов ^hash::create[] или ^hash::sql[] Соотв. вполне логично при автокомплите сразу получить ^hash:: и дать выбор между create и sql Конечно кто-то может задумать перекрывать базовые классы, но это думаю ооочень редкое исключение.
Синтаксис, предложенный вами, мне кажется слишком многословным, особенно указание типа. Есть подозрение, что такой синтаксис будет скрывать, особенно от новичков возможности "утиной типизации", которая является крайне мощным инструментом языка.
> ... не совсем понятно как ваш синтаксис позволит описать передачу параметров в виде хеша (объекта), что используется очень часто. > @method[aOptions] > $aOptions.type > $aOptions.id
А вот этот момент пока на этапе проектирования, тем не менее мне понравился ваш пример в предыдущем комментарии :)
Я, пожалуй, оставлю подход с "над определением класса" и разрешу другой стиль - внутри класса опционально (так как, честно говоря, являюсь сторонником внешних определений).
Но есть еще один момент...
...по поводу типизации - IDE строит по ней autocomplete, поэтому она и была введена...
...без нее - совершенно непонятно, как IDE сможет определить ВСЕ ветки развития кода (даже если пытаться интерпретировать Parser на-лету, не удастся строить вменяемый и полный автокомплит).
#:result не подсвечивается так же, как и construtor и param, при наведении пишет, что Cannot find declaration to go to При вызове ^testMethod[] я закономерно получу exception, а по задумке идея должна кричать и вопить, что нельзя так использовать ^isBollean[]
, а я результа работы этого метода присваиваю переменной
$counter(^myMethod[])
то по задумке ide должна "кричать", что метод возвращает не выражение, а string.
Или метод возвращает bool, а я его вызывают где-нить в @main[] :-) и конечно же при запуске получу exception :-) :-) А по задумке ide должна сообращать, что я дурю. И пр. случаи, когда заведомо ясно, что будет ошибка.
> то по задумке ide должна "кричать", что метод возвращает не выражение, а string
До детального "анализа" кода как раз еще и не дошли, но планируется ближе к бете, скорее :)
Сейчас много дополнен автокомплит - но еще не разнесен по "областям" - то есть можно в [] получить eq/lt автокомплит, например. Активно работаю сейчас именно над этим, хотя в целом, постарался, чтобы автокомплит максимум возможных вариантов сейчас выводил, где возможно.
Ясно, я так и понял про приоритеты. Еще просьба про Colors & Fonts
Сейчас методы нельзя малевать в свои цвета.
Например, @myMethod[] @ — меняется в Parser key at sign а myMethod вечно зеленый :-) и сколько не копал, так и не нашел где можно было б его перекрасить
У меня есть мнение на этот счет - на крупных проектах (десятки тысяч строк кода), те, кого не устраивают существующие ИСР, сделают свои на базе того же vim :)
Тем не менее по опыту разработки плагина, я бы очень скучал без автоматического рефакторинга IDEA - он аккуратный и точный. На написание аналогичных перл скриптов я бы потратил на порядок больше времени (часы, а не секунды).
Но это все флейм. :)
Серьезно, есть идея по делу - так это по "is type" проверять классы, для которых тип не указан плюс стандартные классы можно отличить по методам (тот же хеш), поэтому, в IDEA нестрогой типизации все же быть.
Ведь у всех свои привычки и подстраиваться под другие схемы очень тяжело. Например, я привык писать с использованием шрифта Monaco. Очень красивый, легко читаемый и удобный шрифт. Но у него одна "особенность": нет болдового начертания. А при регулярном написании цвет выглядит чуть иначе, он становится менее контрастным. Единственный способ решения этой проблемы: использовать более контрастную расцветку и без такой возможности довольно непросто. Тем более мониторы и цветовые профили у всех разные.
Спасибо за комментарий! Появится в ближайшем обновлении.
P. S. Кстати, по поводу шрифта - попробуйте IDEA 10.5 EAP (если Mac OS X), со стандартными шрифтами в ней уже все хорошо (используется новый monospace шрифт как в XCode). До нее тоже на Monaco сидел.
string может автоматически преобразовываться в int/bool в выражениях. hash/table могут возвращать разные типы в разных контекстах $oMyObjext благодаря @GET может возвращать разные типы значение в разных контекстах
хотя в некоторых случаях (таких как приведённый вами MAIN), да, это поможет.
Это уже частично учитывается и совершенствуется. Хотя это ближе к реализации стандарта языка, нежели пользовательских фич (по крайней мере, в текущем контексте разговора).
Возможно стоит подумать над #:param param1 type Type1|Type2 и выводить смежную выборку (так делает netbeans для языка ruby), но не уверен, что это стилистически хороший подход...
С другой стороны можно анализировать is type конструкции и внутри них делать приведения (но это уже совсем стиль кода)
..и понимались под необходимостью строгой типизации. У всех случаи конечно свои, а у меня так частенько бывает потребность. Очень уж это помогает, когда кода много или когда код написан "не вчера" или "писал его не ты". Вот как раз эта возможность и хорошая тем, что она на уровне ide.
Есть такое явление, как наследование/передача классов/методов/переменных, и причем происходит это до "пицот-пятого поколения" наследников, что концы с концами явно не сыщешь. Типичный пример: обертки для sql. Переменная с экземпляром класса объявляется в auto.p и пускается во все грешные по всему проекту. Чертовски удобно. Но вот загвоздка: пишешь ^CSQL :-) где-нить "внутри" и конечно же этот экземпляр для плагина не известен. Получается, надо каждый чих делать а-ля #:use / #:import , но с другой стороны это же с ума сойдешь. Уважаемые, какие планы/думы на этот счет?
Сначала была версия, которая работала и с WebStorm и с PhpStorm - но смысла было мало из-за невозможности создать под ними проект типа Parser Project.
Мы обсуждали в компании плюсы и минусы WebStorm и решили просто платформу deployment'а портировать в плагин Parser'а (единственное преимущество перед IDEA на мой взгляд). Поэтому необходимость в прямой установке на WebStorm отпадает.
В этой редакции мне не хватает прямой работы с проектом расположенным на удаленном сервере через sftp|ftp
Проекты не такие большие, да и способа для полноценного использования cvs, svn, git не нашел. Не удобно как-то получается, если все пишется локально, потом идет коммит, на сервере этот коммит ловится и что-то делается. Пока все это живет через winscp и notepad++, но понимаю, что мне этого мало ). Хочется IDE.
Вот это +) В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio. Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант.
Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант.
Стоит различать "возможность удаленных проектов через ftp|sftp" и "мастер deployment'а" (которым и отличается PhpStorm от WebStorm).
Ведение проектов на удаленном ftp и sftp возможно и в IDEA (посмотрите Tools / Deployment). Лично я так и работаю на "небольших" проектах с опцией Automatic Upload.
P. S. Хотя лично больше предпочитаю иметь git-репозиторий, к которому подключены удаленные ветки на development и production серверах и хуки, автоматически обновляющие удаленные директории при коммитах. Считаю эту схему наиболее профессиональной для крупных проектов, где ошибка в коде, пишущимся напрямую на ftp - недопустима.
Английский в общем-то понимает большинство. А вот русский - только русские :) Я просто не хочу обрезать возможность вхождения людей с другим языком в проект (т. к. parser.ru/en/ все же существует)
alpha все же для доработки и доточки
Когда созреем до beta - все материалы сопроводительные переведу и на русский