![](https://habrastorage.org/files/663/b8f/e61/663b8fe6101c4ce6a5fccd011aaa8274.jpg)
Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.
Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.
Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.
New Resolving
Начну, пожалуй, с самой объёмной задачи из тех, что стояли перед мной – мне было необходимо полностью переписать синтаксический поиск (неймспейсов, классов, методов, полей в файлах .cs и т.д.).
Pull Request
![](https://habrastorage.org/files/803/c6f/7bb/803c6f7bbed5437e9e9ce394602bf486.png)
До переписи алгоритма — работа с небольшими модулями проходила гладко, но если программа разрасталась до 10 и больше классов, то отзывчивость IDE становилась большой проблемой. Мне даже пришлось ввести возможность опционально отключать поиск, поскольку иначе у пользователей со слабой конфигурацией PC, Consulo постоянно крашилась.
Это был сложный шаг, поскольку мне нужно было переосмыслить существующий алгоритм поиска и переписать его с учетом всех слабых сторон. Первые итерации нельзя назвать успешными, но в конечном итоге мне удалось довести новый алгоритм до ума и удачно смержить этот пулл реквест.
Особое спасибо хочу выразить Денису Шевченко из pragmatix-corp.com, который помогал мне в тестировании плагина.
Generic & Lambdas
Моя головная боль. После реализации нового поиска я взялся за лябмды, которые юзаются, например, в LINQ. Однако для реализации лямбд и LINQ мне было необходимо решить проблемы с поиском Generic Type. В процессе я реализовал базовый инференс для генерик параметров — и лямбды где-то в 50% случаев заработали. На текущий момент осталась не завершенной задача по лямбдам (issue 157), реализация которой, как ожидается, решит все оставшиеся проблемы.
![](https://habrastorage.org/files/a19/8bf/4e9/a198bf4e94764a25b02191b81182012a.png)
Code Style
C самого начала работ над плагином C# я не уделял данному вопросу никакого внимания, поскольку привык к «хардкору», который отображает код следующим образом:
![](https://habrastorage.org/files/891/a5e/553/891a5e553d3b4e63b8fb19e57baf87f0.png)
По просьбе нескольких людей, я обратил на это внимания и добавил в итоге начальные настройки стиля кода C#, и теперь по умолчанию код выглядит в IDE так:
![](https://habrastorage.org/files/6d4/fe5/019/6d4fe50192a5496194489b324f561bfc.png)
LINQ
Эту задачу — я отложил в самый дальний угол, ибо когда-то решил, что это не приоритетная задача. Это было так до вчерашнего дня. Было вот так:
![](https://habrastorage.org/files/1c7/8e3/fbc/1c78e3fbce9f43238d12a07de9e61848.png)
Как-то не очень, правда?
И я так подумал. И решил все же обратить внимания на это, и после одного дня кодинга, все выглядит намного лучше.
![](https://habrastorage.org/files/ca3/96f/af5/ca396faf5582480caf45044cf215ce24.png)
А что ещё?
Я много чего не описал, это ввод поддержки Covariance + Contravariance, перепись поиска методов, переделка системы типов, куча правок во множества подсистем .NET + C# плагинов.
Также не написал о том — как я пытался исправить задачу 140, в итоге все сломал, пришлось сделать откат и перенести все в PR 149.
А что дальше?
А дальше у нас — самое интересное.
NuGet
Была добавлена возможность скачки и автоматического добавления библиотек NuGet, через packages.config. Пока что скачиваются только с nuget.org и нету визуального просмотра библиотек, но — это исправит часть проблем, когда юзаются либы с репозитория.
![image](https://habrastorage.org/getpro/habr/post_images/9ee/730/ea3/9ee730ea3a910053274a246941c176b3.gif)
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# это не конец, а только начало