parserALT
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 600 | Дальше →

Parser3-плагин для IntelliJ IDEA

#1dwr
14.04.11 16:39 / 16:40
www.parser.ru → | ответить → | в избранное →

Parser3-плагин для IntelliJ IDEA

Неспешно идет к релизу разработка плагина для IntelliJ IDEA для Parser 3.

На данный момент реализован автокомплит по большей части конструкций языка, подсветка синтаксиса, просмотр структуры парсерных файлов с классами и их методами (включая статические), форматирование и индексация кода, базовый рефакторинг и анализ ошибок. В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio.

Плагин интегрируется с HTML плагином и по сути предоставляет также все фичи IDEA по редактированию самого HTML.

Наиболее стабильно на данный момент плагин работает с IntelliJ IDEA Ultimate, и alpha сборки собираются именно на ней.

Скачать плагин для тестирования можно здесь:
http://plugins.intellij.net/plugin/?idea&id=6006

Либо установить плагин из самой IDEA, он там называется Parser for IDEA

Исходники здесь:
https://github.com/codingbox/idea-parser3

Сообщать о багах можно в эту ветку форума, либо писать в JIRA http://codingbox.org/jira/, либо мне на e-mail.

Скачиваем и тестируем :)
#2Ivan Sergeev
→ dwr [#1] | 14.04.11 18:22
www.parser.ru → | ответить → | в избранное →

Спасибо, очень интересно, пощупаем-пощупаем

#3Ivan Sergeev
→ dwr [#1] | 14.04.11 19:56
www.parser.ru → | ответить → | в избранное →

Первая ласточка

Создал новый проект, жму New -> Parser class, вылезает ошибка:
Cannot Create File
Unable to parse template "Parser class"
Error message: Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 9, column 4. Encountered: <EOF> after : ""

Добавил в шаблон Parser class перевод строки после ### в
@auto[]
###

и все заработало.
#4dwr
→ Ivan Sergeev [#3] | 14.04.11 20:16
www.parser.ru → | ответить → | в избранное →
> Добавил в шаблон Parser class перевод строки после ### в
> @auto[]
> ###
>
> и все заработало.

Спасибо! Добавил в плагин исправление.
#5Ivan Sergeev
→ dwr [#1] | 15.04.11 02:52
www.parser.ru → | ответить → | в избранное →

Спустя день использования

Сначала хочется сказать большое спасибо, что занимаетесь этой задачей. Парсеру всегда нехватало поддержки нормальной ide, что тоже не в лучшую сторону влияло на развитие сообщества.
Альфу наверное комментировать не стоит, на то она и альфа. Нехватает многово, и на самом деле вместо написани трактатов, чего не хватает, хочется услышать от вас, что планируется в самое-самое ближайшее время.

Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов. И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает:
^hash::sql[]
а не ^hash::sql{}[]
Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя.
Дайте знать, вообще стоит ли вам писать о подобном или пока закрывать глаза (ведь альфа).

Еще раз спасибо!!!
#6dwr
→ Ivan Sergeev [#5] | 15.04.11 16:09 / 16:09
www.parser.ru → | ответить → | в избранное →
> Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов.

В alpha13 (сегодня) появятся.

> И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает:
> ^hash::sql[]
> а не ^hash::sql{}[]
> Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя.

Про sql понял, а вот про одно двоеточие - неочень :) С одним - выдается подсказка по методам (статическим и динамическим), с двумя - конструкторам. Может быть, хотели сказать, что в подсказках по основным классам мешает мешанина статических и динамических методов в автокомплите? Тогда проблема понятна. Или имелось ввиду, что с двумя двоеточиями у вас не выводится ничего вообще? Тогда баг.

Спасибо за тестирование :)
#7Ivan Sergeev
→ dwr [#6] | 15.04.11 16:40
www.parser.ru → | ответить → | в избранное →

Re: Двоеточия

С двоеточиями выводится, именно багов с этим пока не заметил.
Имел в виду как раз смешение базовых классов и пользовательских.
Например, если я набираю:
^hash
то явно хочу получить один из конструкторов
^hash::create[] или ^hash::sql[]
Соотв. вполне логично при автокомплите сразу получить ^hash:: и дать выбор между create и sql
Конечно кто-то может задумать перекрывать базовые классы, но это думаю ооочень редкое исключение.
#8Ivan Sergeev
→ Ivan Sergeev [#7] | 16.04.11 00:02
www.parser.ru → | ответить → | в избранное →

Опечатался с ^hash::sql{}

#9dwr
→ dwr [#1] | 16.04.11 13:51
www.parser.ru → | ответить → | в избранное →

Про формат ParserDoc

Есть способ аннотации методов, заключается он в следующей конструкции, обозначенной в комментариях:

#:constructor
#:param param1 type hash
#:param param2 type MyUserClass
@mymethod[param1;param2]

###

Это помогает среде определять тип параметра, если явно его определять неоткуда.
#10Sumo
→ dwr [#9] | 16.04.11 18:18
www.parser.ru → | ответить → | в избранное →

Он работает только снаружи метода?

Мне кажется, что для Парсеровского синтаксиса логичнее и удобнее писать док-стринги после определения метода/класса.
#11dwr
→ Sumo [#10] | 16.04.11 18:24
www.parser.ru → | ответить → | в избранное →
Хм, а можно пример?
#12Sumo
→ dwr [#11] | 16.04.11 18:39
www.parser.ru → | ответить → | в избранное →

Мой подход...

... можно посмотреть на таком примере: http://code.google.com/p/parser3-pf/source/browse/trunk/pf/sql/generics/tags/pfSQLTags.p

Синтаксис, предложенный вами, мне кажется слишком многословным, особенно указание типа. Есть подозрение, что такой синтаксис будет скрывать, особенно от новичков возможности "утиной типизации", которая является крайне мощным инструментом языка.
#13Sumo
→ dwr [#11] | 16.04.11 18:43
www.parser.ru → | ответить → | в избранное →

Кроме того...

... не совсем понятно как ваш синтаксис позволит описать передачу параметров в виде хеша (объекта), что используется очень часто.
@method[aOptions]
  $aOptions.type
  $aOptions.id
#14dwr
→ Sumo [#13] | 16.04.11 18:54
www.parser.ru → | ответить → | в избранное →
> ... не совсем понятно как ваш синтаксис позволит описать передачу параметров в виде хеша (объекта), что используется очень часто.
> @method[aOptions]
> $aOptions.type
> $aOptions.id

А вот этот момент пока на этапе проектирования, тем не менее мне понравился ваш пример в предыдущем комментарии :)

Я, пожалуй, оставлю подход с "над определением класса" и разрешу другой стиль - внутри класса опционально (так как, честно говоря, являюсь сторонником внешних определений).

Но есть еще один момент...

...по поводу типизации - IDE строит по ней autocomplete, поэтому она и была введена...

...без нее - совершенно непонятно, как IDE сможет определить ВСЕ ветки развития кода (даже если пытаться интерпретировать Parser на-лету, не удастся строить вменяемый и полный автокомплит).
#15Sumo
→ dwr [#14] | 16.04.11 19:34
www.parser.ru → | ответить → | в избранное →

Про автокомплит как раз все понятно... Теперь пора открыть флейм по поводу вреда ИСР для развития программистов. ;-)

#16Ivan Sergeev
→ dwr [#9] | 16.04.11 19:49
www.parser.ru → | ответить → | в избранное →

А есть ли в планах добавление #:result ... ?

#:constructor
#:param param1 type hash
#:param param2 type MyUserClass
#:result boolean
@mymethod[param1;param2]

$result(true)


Опционально конечно. Но частенько нужен этот "жесткий" контроль.
#17dwr
→ Ivan Sergeev [#16] | 16.04.11 22:53
www.parser.ru → | ответить → | в избранное →
Добавил в alpha15, уже в репозиториях IntelliJ.
#18dwr
→ Ivan Sergeev [#7] | 16.04.11 22:58
www.parser.ru → | ответить → | в избранное →
У парсера нет ключа @dynamic:, чтобы однозначно исключить методы из статической области.

Наверное, нужно аннотацию в ParserDoc вида:

#:dynamic

также ввести. Попробую к alpha16 решить эту проблему окончательно. :)
#19dwr
→ Ivan Sergeev [#8] | 16.04.11 22:58
www.parser.ru → | ответить → | в избранное →
При выборе конструктора sql теперь автодополняется {} вместо []
#20dwr
→ dwr [#18] | 16.04.11 23:38
www.parser.ru → | ответить → | в избранное →

Re: alpha16 и :: в классах без статических методов

> Попробую к alpha16 решить эту проблему окончательно. :)

Решил, в репозиториях IDEA.
#21Ivan Sergeev
→ dwr [#17] | 16.04.11 23:50
www.parser.ru → | ответить → | в избранное →

Странное

Обновился до alpha15
Пишу:
#:constructor
#:result boolean
@isBollean[]

	$result(false)

@testMethod[]

	^isBollean[]



#:result не подсвечивается так же, как и construtor и param, при наведении пишет, что Cannot find declaration to go to
При вызове ^testMethod[] я закономерно получу exception, а по задумке идея должна кричать и вопить, что нельзя так использовать ^isBollean[]

Или я что-то не понял и делаю не правильно?
#22Ivan Sergeev
→ dwr [#19] | 16.04.11 23:51
www.parser.ru → | ответить → | в избранное →

Спасибо!

#23dwr
→ Ivan Sergeev [#21] | 16.04.11 23:52
www.parser.ru → | ответить → | в избранное →
> Или я что-то не понял и делаю не правильно?

Класса boolean не бывает, есть bool.
#24Ivan Sergeev
→ dwr [#23] | 16.04.11 23:58
www.parser.ru → | ответить → | в избранное →

Упс. Обновился до alpha16 — работает. Но ошибку позволяет делать, как я понимаю обработка потом будет сделана.

#25dwr
→ Ivan Sergeev [#24] | 16.04.11 23:59 / 17.04.11 00:03
www.parser.ru → | ответить → | в избранное →
> Упс. Обновился до alpha16 — работает. Но ошибку позволяет делать, как я понимаю обработка потом будет сделана.

Это насчет несуществования класса?

На Mac OS X 10.6.7 не удалось получить exception с некорректным классом. Если есть - то лучше stack trace выложить.
#26Ivan Sergeev
→ dwr [#25] | 17.04.11 00:09
www.parser.ru → | ответить → | в избранное →
#:result по идее нужен для "жесткого" контроля на уровне ide
Например, если у меня некий метод возвращает string

#:constructor
#:result string
@myMethod[]
$result[abc]

, а я результа работы этого метода присваиваю переменной

$counter(^myMethod[])

то по задумке ide должна "кричать", что метод возвращает не выражение, а string.

Или метод возвращает bool, а я его вызывают где-нить в @main[] :-) и конечно же при запуске получу exception :-) :-) А по задумке ide должна сообращать, что я дурю.
И пр. случаи, когда заведомо ясно, что будет ошибка.
#27dwr
→ Ivan Sergeev [#26] | 17.04.11 00:12
www.parser.ru → | ответить → | в избранное →
> то по задумке ide должна "кричать", что метод возвращает не выражение, а string

До детального "анализа" кода как раз еще и не дошли, но планируется ближе к бете, скорее :)

Сейчас много дополнен автокомплит - но еще не разнесен по "областям" - то есть можно в [] получить eq/lt автокомплит, например. Активно работаю сейчас именно над этим, хотя в целом, постарался, чтобы автокомплит максимум возможных вариантов сейчас выводил, где возможно.
#28Ivan Sergeev
→ dwr [#27] | 17.04.11 00:21
www.parser.ru → | ответить → | в избранное →

Ясно, я так и понял про приоритеты. Еще просьба про Colors & Fonts

Сейчас методы нельзя малевать в свои цвета.

Например, @myMethod[]
@ — меняется в Parser key at sign
а myMethod вечно зеленый :-) и сколько не копал, так и не нашел где можно было б его перекрасить

Незабудьте плз про это.
Спасибо-спасибо-спасибо!
#29
→ Ivan Sergeev [#28] | 17.04.11 01:27
www.parser.ru → | ответить → | в избранное →
Суть просьбы ясна. Есть возможность красить конструкторы, статические, динамические и обычные методы в разные цвета. Стоит и будет ли востребовано?
#30dwr
→ Sumo [#15] | 17.04.11 01:34
www.parser.ru → | ответить → | в избранное →
У меня есть мнение на этот счет - на крупных проектах (десятки тысяч строк кода), те, кого не устраивают существующие ИСР, сделают свои на базе того же vim :)

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

Но это все флейм. :)

Серьезно, есть идея по делу - так это по "is type" проверять классы, для которых тип не указан плюс стандартные классы можно отличить по методам (тот же хеш), поэтому, в IDEA нестрогой типизации все же быть.
#31dwr
→ dwr [#30] | 17.04.11 01:35
www.parser.ru → | ответить → | в избранное →
Дополнение - не только стандартные классы.
#32Ivan Sergeev
17.04.11 01:43
www.parser.ru → | ответить → | в избранное →

Как раз это в первую очередь и востребовано

Ведь у всех свои привычки и подстраиваться под другие схемы очень тяжело.
Например, я привык писать с использованием шрифта Monaco. Очень красивый, легко читаемый и удобный шрифт. Но у него одна "особенность": нет болдового начертания. А при регулярном написании цвет выглядит чуть иначе, он становится менее контрастным. Единственный способ решения этой проблемы: использовать более контрастную расцветку и без такой возможности довольно непросто. Тем более мониторы и цветовые профили у всех разные.
#33dwr
→ Ivan Sergeev [#32] | 17.04.11 01:50
www.parser.ru → | ответить → | в избранное →
Спасибо за комментарий! Появится в ближайшем обновлении.

P. S. Кстати, по поводу шрифта - попробуйте IDEA 10.5 EAP (если Mac OS X), со стандартными шрифтами в ней уже все хорошо (используется новый monospace шрифт как в XCode). До нее тоже на Monaco сидел.
#34Misha v.3
→ Ivan Sergeev [#26] | 17.04.11 01:55
www.parser.ru → | ответить → | в избранное →

а как-же автоматическое приведение типов?

string может автоматически преобразовываться в int/bool в выражениях.
hash/table могут возвращать разные типы в разных контекстах
$oMyObjext благодаря @GET может возвращать разные типы значение в разных контекстах

хотя в некоторых случаях (таких как приведённый вами MAIN), да, это поможет.
#35dwr
→ Misha v.3 [#34] | 17.04.11 02:08
www.parser.ru → | ответить → | в избранное →
Это уже частично учитывается и совершенствуется.
Хотя это ближе к реализации стандарта языка, нежели пользовательских фич (по крайней мере, в текущем контексте разговора).

Возможно стоит подумать над
#:param param1 type Type1|Type2
и выводить смежную выборку (так делает netbeans для языка ruby), но не уверен, что это стилистически хороший подход...

С другой стороны можно анализировать is type конструкции и внутри них делать приведения (но это уже совсем стиль кода)
#36Ivan Sergeev
→ Misha v.3 [#34] | 17.04.11 02:10
www.parser.ru → | ответить → | в избранное →

Угу, как раз "некоторые случаи"

..и понимались под необходимостью строгой типизации. У всех случаи конечно свои, а у меня так частенько бывает потребность. Очень уж это помогает, когда кода много или когда код написан "не вчера" или "писал его не ты".
Вот как раз эта возможность и хорошая тем, что она на уровне ide.
#37Ivan Sergeev
→ dwr [#33] | 17.04.11 02:19
www.parser.ru → | ответить → | в избранное →

Увы, сейчас как пользователю trial версии мне это пока не доступно.

Но судя по всему, уже пора смотреть на лицензию. И все это благодаря исключительно вам.

Спасибо! Очень радует, что скоро совсем будет хорошо.
#38Ivan Sergeev
→ dwr [#1] | 17.04.11 03:53
www.parser.ru → | ответить → | в избранное →

Проблема прелестей наследования

Есть такое явление, как наследование/передача классов/методов/переменных, и причем происходит это до "пицот-пятого поколения" наследников, что концы с концами явно не сыщешь. Типичный пример: обертки для sql. Переменная с экземпляром класса объявляется в auto.p и пускается во все грешные по всему проекту. Чертовски удобно. Но вот загвоздка: пишешь ^CSQL :-) где-нить "внутри" и конечно же этот экземпляр для плагина не известен.
Получается, надо каждый чих делать а-ля #:use / #:import , но с другой стороны это же с ума сойдешь.
Уважаемые, какие планы/думы на этот счет?
#39dwr
→ Ivan Sergeev [#38] | 17.04.11 09:21
www.parser.ru → | ответить → | в избранное →
А на этот счет, скорее всего, с моей стороны недоработка. Распознать всю цепочку наследования IDE в силе, но я ничего не делал с методами $MAIN.
#40dwr
→ Ivan Sergeev [#37] | 17.04.11 11:50
www.parser.ru → | ответить → | в избранное →

Теперь plugin стабильно работает и с Community Edition.

> Но судя по всему, уже пора смотреть на лицензию. И все это благодаря исключительно вам.

Протестировал alpha15 - теперь работает "на ура" с Community Edition.

EAP тут:
http://confluence.jetbrains.net/display/IDEADEV/IDEA+10.5+EAP
#41dwr
→ Ivan Sergeev [#28] | 17.04.11 12:54
www.parser.ru → | ответить → | в избранное →

Re: Сейчас методы нельзя малевать в свои цвета.

> Сейчас методы нельзя малевать в свои цвета.

Добавлено в alpha18.

В alpha18 также исправлен баг с #:result
#42Ivan Sergeev
→ dwr [#40] | 17.04.11 19:20
www.parser.ru → | ответить → | в избранное →

Ок, перешел, теперь буду тестить из под него. Спасибо!

#43Ivan Sergeev
→ dwr [#41] | 17.04.11 19:20
www.parser.ru → | ответить → | в избранное →

Супер! Спасибо!

#44Ivan Sergeev
→ dwr [#41] | 17.04.11 20:12
www.parser.ru → | ответить → | в избранное →

Замечено

Нельзя изменить свойства расцветки системной переменной $self
#45dwr
→ Ivan Sergeev [#44] | 17.04.11 21:28
www.parser.ru → | ответить → | в избранное →
> Нельзя изменить свойства расцветки системной переменной $self

Обновляйтесь, добавил.
#46max_rip
→ dwr [#1] | 21.04.11 14:58
www.parser.ru → | ответить → | в избранное →

А данный плагин, будет работать с webstorm?

#47dwr
→ max_rip [#46] | 25.04.11 14:11
www.parser.ru → | ответить → | в избранное →
Сначала была версия, которая работала и с WebStorm и с PhpStorm - но смысла было мало из-за невозможности создать под ними проект типа Parser Project.

Мы обсуждали в компании плюсы и минусы WebStorm и решили просто платформу deployment'а портировать в плагин Parser'а (единственное преимущество перед IDEA на мой взгляд). Поэтому необходимость в прямой установке на WebStorm отпадает.
#48max_rip
→ dwr [#47] | 25.04.11 17:59
www.parser.ru → | ответить → | в избранное →

В этой редакции мне не хватает прямой работы с проектом расположенным на удаленном сервере через sftp|ftp

Проекты не такие большие, да и способа для полноценного использования cvs, svn, git не нашел. Не удобно как-то получается, если все пишется локально, потом идет коммит, на сервере этот коммит ловится и что-то делается. Пока все это живет через winscp и notepad++, но понимаю, что мне этого мало ). Хочется IDE.
#49dwr
→ max_rip [#48] | 25.04.11 18:00
www.parser.ru → | ответить → | в избранное →
Именно об этой фиче в релиз я и говорил.
#50max_rip
→ dwr [#49] | 27.04.11 15:19
www.parser.ru → | ответить → | в избранное →

Как вы думаете, сколько вам понадобиться времени для создание полноценной IDE?

#51
→ max_rip [#50] | 27.04.11 15:21
www.parser.ru → | ответить → | в избранное →
Что имеется ввиду?
IDE с нуля или плагина для IDEA? :)
#52max_rip
27.04.11 16:08
www.parser.ru → | ответить → | в избранное →
Вот это +)
В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio.
Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант.
#53dwr
→ max_rip [#52] | 27.04.11 16:15
www.parser.ru → | ответить → | в избранное →
Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант.

Стоит различать "возможность удаленных проектов через ftp|sftp" и "мастер deployment'а" (которым и отличается PhpStorm от WebStorm).

Ведение проектов на удаленном ftp и sftp возможно и в IDEA (посмотрите Tools / Deployment). Лично я так и работаю на "небольших" проектах с опцией Automatic Upload.

P. S. Хотя лично больше предпочитаю иметь git-репозиторий, к которому подключены удаленные ветки на development и production серверах и хуки, автоматически обновляющие удаленные директории при коммитах. Считаю эту схему наиболее профессиональной для крупных проектов, где ошибка в коде, пишущимся напрямую на ftp - недопустима.
#54max_rip
→ dwr [#53] | 27.04.11 16:17
www.parser.ru → | ответить → | в избранное →

А как вы решаете вопросы с SQL изменениями?

И можете поделится, хуками?).
#55dwr
→ max_rip [#54] | 27.04.11 16:46
www.parser.ru → | ответить → | в избранное →
А как вы решаете вопросы с SQL изменениями?

Миграциями.

И можете поделится, хуками?).

В базовом варианте можете воспользоваться вот этим скриптом:
https://github.com/dwr/git-deployment-hooks/blob/master/create-remote-git-repositories.sh

Он создает и подключает development и production репозитории на соответствующих серверах и сам создает нужные хуки внутри.
#56dwr
→ dwr [#1] | 30.04.11 21:53
www.parser.ru → | ответить → | в избранное →

Более-менее описал плагин :)

http://www.codingbox.org/?page_id=2
#57Sumo
→ dwr [#56] | 30.04.11 22:00
www.parser.ru → | ответить → | в избранное →

А почему на вражьем языке-то?

Или есть большое количество англоязычных пользователей? :)
#58dwr
→ Sumo [#57] | 30.04.11 23:57 / 01.05.11 00:05
www.parser.ru → | ответить → | в избранное →
Английский в общем-то понимает большинство. А вот русский - только русские :) Я просто не хочу обрезать возможность вхождения людей с другим языком в проект (т. к. parser.ru/en/ все же существует)

alpha все же для доработки и доточки

Когда созреем до beta - все материалы сопроводительные переведу и на русский
#59Ivan Sergeev
→ Sumo [#57] | 02.05.11 01:05
www.parser.ru → | ответить → | в избранное →

Ну вот и на русском выложено. Особой выгоды в этом пока явно нет.

#60fastzum
→ dwr [#56] | 06.05.11 14:03
www.parser.ru → | ответить → | в избранное →
нормально
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 600 | Дальше →