Pull to refresh

Адаптация Visual Studio для разработки под Salesforce — Введение

Reading time 5 min
Views 6.4K
Disclaimer: Данный топик не содержит реализации того, что указано в заголовке, и не содержит технических деталей. Тут всего лишь перечислены проблемы, которые я собираюсь решать и краткий план как это должно быть реализовано. Учитывая новизну темы и неплохой уровень сложности для меня, я не ручаюсь что эта статья не будет первой и последней. Но мне честно хотелось-бы довести это начинание до конца, паралельно освещая его здесь. Эта статья выступает, в том числе, и дополнительной мотивацией.

Вступление к вступлению


Так уж сложилось что несколько недель назад мне пришлось переучиваться с C# разработчика на Salesforce разработчика. И я бы не прочь сказать что это оказалось просто и увлекательно (хотя это во многом так и есть), но один факт регулярно продолжает мне портить настроение и заставляет вспоминать любимый .NET. Последние 5 лет я работал исключительно с VisualStudio — раработка WinForms приложений, SIlverlight, чисто C# бекенд, TypeScript в качестве хобби. И я воспринимал сей инструмент как то, что будет со мной всегда, как то, что делает разработку комфортной, и глупо считал что остальные IDE находятся примерно на том же уровне развития (я упорно старался забыть свой опыт работы с каким-то Flex IDE на базе Eclipse).

И тут бац… Force.com IDE — IDE на базе Eclipse для работы с Salesforce либо Mavensmate плагин к Sublime Text.

Краткий ликбез

Разработка под Salesforce ведётся с использованием двух основных языков/технологий — Apex code на базе Java, и VisualForce — фреймворком для построения кастомной веб-части «приложений».
Особенность использования всей платформы Salesforce — облачность головного мозга (не в упрёк — просто факт), а именно — компиляция кода Apex выполняется в облаке (причём локально это сделать невозможно) а разработка может вестись и, непосредственно, в браузере с помощью т.н. Developer Console, которая представляет из себя слабое подобие IDE.

Ну ок, классно, бери любой IDE для Java и работай в нём. Нельзя, ибо язык действительно отличается, а вышеуказанная ОГМ обязывает нас каждый чих сохранять в облако и компилировать его там.

Зачем?


Вполне резонный вопрос — а почему, собственно, не переучиться на новую IDE как нормальный человек? Тут, для меня, всё довольно просто:
  • Глупая привычка к хорошему инструменту
  • Возможность выучить что-то новое
  • Идея part-time проекта, которая не будет «проект ради проекта»
  • Возможность попробовать свои силы
  • Возможность сделать мир лучше?
  • Неудобство доступных инструментов


Последний пункт стоит рассмотреть немного детальнее — так как я всего пару недель как начал этим интересоваться, список у меня накопился небольшой, но достаточный для меня:
  • Отсутствие достойной альтернативы IntelliSense в Force.com IDE — ищет по первым буквам, сильно тормозит, не очень в курсе про кастомные классы и их свойства/методы (тут может быть я что-то и неправильно сказал, но у меня получилось именно так). Зато более-менее неплохо работает в Mavensmate
  • Отсутствие подсветки синтаксических ошибок в Mavensmate — сохраняем, отправляем в облако, ждём секунд 20-30 и узнаём что забыли точку с запятой. В следующий раз мы узнаём что забыли ещё одну точку с запятой парой строк ниже. Зато неплохо работает в Force.com IDE
  • Полное остутствие возможности группировать файлы (классы/триггеры/страницы в их терминологии) хотя-бы по папкам — есть три системных папки в которых файлы лежат согласно их категории, ВСЁ. Действительно глупо видеть в 2014м году названия файлов вида "AAAAClassName", "AAALessImportantClassName" и т.п… Такова структура кода в Salesforce, но раз уж у нас отдельный софт — можно было бы и побороться с этим (хотя-бы с помощью симлинков).
  • Каждое сохранение файла приводит к тому что он отправляется в Salesforce и там компилируется. Извините, но у меня есть дурацкая привычка нажимать Ctrl+S после каждой строчки. А если я задумаюсь о чём-то в середине строки — я могу нажимать Ctrl+S пока не вернусь в реальность. Извините, но компиляция и сохранение файлов это не одно и тоже в моём мире.
  • Неадекватный механизм взаимодействия с Salesforce у Mavensmate — генерируемые странички, которые открываются в браузере и отображают результаты взаимодействия с SF (запуски тестов, логи и т.п.)

В качестве темы для обсуждения было-бы интересно узнать — а как Вы относитесь к подобным особенностям IDE?

И как мы это будем решать?


Из заголовка и предыстории потяне общий вектор — расширение для Visual Studio, которое позволит нам полноценно работать с Salesforce кодом. Если разобрать концепцию на принципиальные блоки — я бы выделил вот что (именно в таком порядке):
  1. Подсветка синтаксиса Apex
  2. Подсветка синтаксиса VisualForce
  3. Поддержка «проектов» Salesforce (включая разделение понятий Save и Compile)
  4. Имплементация IntelliSense
  5. Отображение синтаксических ошибок
  6. Панели для работы с юнит-тестами и логами Salesforce
  7. Сборка Visual Studio for Salesforce на базе Visual Studio Shell для свободного standalon распостранения
  8. Остальной сахар по мере сил и возможностей


Интересные задачи на первые этапы

Одной из самых интересных проблем (спасибо Salesforce) является отсутствие где-либо грамматики как самого Apex так и VisualForce. Да, Apex построен на базе Java, но изменений там прилично и строить грамматику основываясь на оной из Java и текстовом reference Apex'a долгая и нудная задача… Но иных вариантов я не нашёл, поэтому процесс запущен.
Что важно при формализации грамматики — на чём в дальнейшем будет строиться лексер — ANTLR либо Irony (два самых интересных проекта). У ANTLR мне намного больше нравится формат задания грамматики (он намного более привычен для меня, ибо не смешивается с кодом), но подход самого проекта мне не нравится — Java приложение которое генерирует лексер автоматически (на Java либо C#). Irony намного более гибок и свободен в выборе как и что реализовывать, но задание грамматики мне не нравится — ужасный микс кода и BNF правил.
Буду благодарен за любую дополнительную информацию по подобным инструментам для .Net в комментариях

Вторая проблема с которой я столкнулся за неделю изучения материалов и неспешного ковыряния во внутреностях VS SDK — документация и примеры. Я серьёзно всегда считал документацию на msdn одним из лучших примеров. Всё есть, отличные туториалы, примеры, детальная информация. В данном же случае — полная фигня. Примеры из статей msdn не компилируются (ну фиг с ними), после банального исправления тупых ошибок код просто не работает. Информация (которой кот наплакал) размазана по разным местам и важные нюансы можно собирать по десятку разных материалов. VS SDK 2013 (а именно под эту версию я собираюсь разрабатывать расширение) примерами не снабжается, а примеры из VS SDK 2010 неполные и устаревшие (используются старые подходы без Managed Package Framework а сам лексер так вообще не включён в пример — приходится использовать .NET Reflector для выковыривания кода.

Следующие шаги


Как я уже писал — я не уверен в том, что смогу довести данный проект до адекватного вида, но, надеюсь, это случится. Сейчас я выковыриваю информацию по Syntax Highlighting и, паралельно, работаю над грамматикой Apex. При хорошем стечении обстоятельств примерно через месяц я бы хотел поделиться с вами прогрессом, если же через месяц ничего не произойдёт, знайте — я пал под давлением Apex либо Visual Studio :)

Буду благодарен за полезные ресурсы, статьи, советы, примеры реализации Language Service для Visual Studio 2010+ (IronPython не вариант) и вообще по теме.

Спасибо за внимание.
Only registered users can participate in poll. Log in, please.
Интересно ли вам продолжение темы (с техническими особенностями, само собой)?
75% Да 36
25% Нет 12
48 users voted. 17 users abstained.
Only registered users can participate in poll. Log in, please.
Стоит ли заморачиваться подобным расширение?
17.5% Нет, ибо качественно не получится 7
15% Нет, лучше переучиться и не напрягаться 6
7.5% Нет (другие причины) 3
60% Да (уточните в комментариях, если есть какие-то интересные причины) 24
40 users voted. 21 users abstained.
Tags:
Hubs:
+6
Comments 5
Comments Comments 5

Articles