Для тех, кто пропустил мои посты:
Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.
Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.
Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.
New Resolving
Начну, пожалуй, с самой объёмной задачи из тех, что стояли перед мной – мне было необходимо полностью переписать синтаксический поиск (неймспейсов, классов, методов, полей в файлах .cs и т.д.).
До переписи алгоритма — работа с небольшими модулями проходила гладко, но если программа разрасталась до 10 и больше классов, то отзывчивость IDE становилась большой проблемой. Мне даже пришлось ввести возможность опционально отключать поиск, поскольку иначе у пользователей со слабой конфигурацией PC, Consulo постоянно крашилась.
Это был сложный шаг, поскольку мне нужно было переосмыслить существующий алгоритм поиска и переписать его с учетом всех слабых сторон. Первые итерации нельзя назвать успешными, но в конечном итоге мне удалось довести новый алгоритм до ума и удачно смержить этот пулл реквест.
Особое спасибо хочу выразить Денису Шевченко из pragmatix-corp.com, который помогал мне в тестировании плагина.
Generic & Lambdas
Моя головная боль. После реализации нового поиска я взялся за лябмды, которые юзаются, например, в LINQ. Однако для реализации лямбд и LINQ мне было необходимо решить проблемы с поиском Generic Type. В процессе я реализовал базовый инференс для генерик параметров — и лямбды где-то в 50% случаев заработали. На текущий момент осталась не завершенной задача по лямбдам (issue 157), реализация которой, как ожидается, решит все оставшиеся проблемы.
Code Style
C самого начала работ над плагином C# я не уделял данному вопросу никакого внимания, поскольку привык к «хардкору», который отображает код следующим образом:
По просьбе нескольких людей, я обратил на это внимания и добавил в итоге начальные настройки стиля кода C#, и теперь по умолчанию код выглядит в IDE так:
LINQ
Эту задачу — я отложил в самый дальний угол, ибо когда-то решил, что это не приоритетная задача. Это было так до вчерашнего дня. Было вот так:
Как-то не очень, правда?
И я так подумал. И решил все же обратить внимания на это, и после одного дня кодинга, все выглядит намного лучше.
А что ещё?
Я много чего не описал, это ввод поддержки Covariance + Contravariance, перепись поиска методов, переделка системы типов, куча правок во множества подсистем .NET + C# плагинов.
Также не написал о том — как я пытался исправить задачу 140, в итоге все сломал, пришлось сделать откат и перенести все в PR 149.
А что дальше?
А дальше у нас — самое интересное.
NuGet
Была добавлена возможность скачки и автоматического добавления библиотек NuGet, через packages.config. Пока что скачиваются только с nuget.org и нету визуального просмотра библиотек, но — это исправит часть проблем, когда юзаются либы с репозитория.
Unity3D
Да Unity3D. Я наконец то решил посмотреть в эту сторону. Что было сделано
- Отдельный Module Extension, забываем что юзали Mono .NET
- Поддержка Unity бандла отдельно от Mono .NET SDK, терь никаких прямых путей
- (inital support) Поддержка компиляции проекта Unity
- (inital support) Поддержка дебагга Unity игры, пока только локальные(android & ios пока ждут), при этом нужно использовать билд с Unity Editor. Пока неясно — как набросить флаг Debug через command line project compilation. К сожалению — дебаг очень далек к идеалу, много проблем со стабильностью, запускается не с первого захода. Но начало положено.
Java as .NET app (IKVM.NET)
Я также смотрю в эту сторону, пытаюсь довести до ума, реализацию. Сейчас работает статичная и динамичная компиляция Java кода. При этом частично поиск. Но на этом заканчиваются хорошие новости. Есть проблемы в стабильности, IKVM.NET плагин может запросто положить Consulo на лопатки (или пользователя :D). В планах — сделать поддержку дебаггера .NET в Java коде (ждем свежий билд Mono для Windows).
Конец?
Только конец статьи. Я буду продолжать делать то, что делал. В планах — довести до ума, то что уже есть.
Хоть я и делаю все сам, у меня есть много «дыр» в местах, куда руки попросту не до хотят.
Если у кого то есть желания помощь мне с сайтом, с написанием плагинов (Java язык, но также нужны люди знающие C# для написания Microsoft Debugger), или с тестированием — пишите мне в диалоги на Хабр, или на почту
Спасибо.
PS:
C# это не конец, а только начало
Автор: VISTALL