Consulo: ~1000 коммитов, или как прошла осень

663b8fe6101c4ce6a5fccd011aaa8274.jpgДля тех, кто пропустил мои посты: Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET (C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript (NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.

Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.

Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.

New ResolvingНачну, пожалуй, с самой объёмной задачи из тех, что стояли перед мной — мне было необходимо полностью переписать синтаксический поиск (неймспейсов, классов, методов, полей в файлах .cs и т.д.).Pull Request803c6f7bbed5437e9e9ce394602bf486.png

До переписи алгоритма — работа с небольшими модулями проходила гладко, но если программа разрасталась до 10 и больше классов, то отзывчивость IDE становилась большой проблемой. Мне даже пришлось ввести возможность опционально отключать поиск, поскольку иначе у пользователей со слабой конфигурацией PC, Consulo постоянно крашилась.

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

Особое спасибо хочу выразить Денису Шевченко из pragmatix-corp.com, который помогал мне в тестировании плагина.

Generic & Lambdas Моя головная боль. После реализации нового поиска я взялся за лябмды, которые юзаются, например, в LINQ. Однако для реализации лямбд и LINQ мне было необходимо решить проблемы с поиском Generic Type. В процессе я реализовал базовый инференс для генерик параметров — и лямбды где-то в 50% случаев заработали. На текущий момент осталась не завершенной задача по лямбдам (issue 157), реализация которой, как ожидается, решит все оставшиеся проблемы.a198bf4e94764a25b02191b81182012a.png

Code Style C самого начала работ над плагином C# я не уделял данному вопросу никакого внимания, поскольку привык к «хардкору», который отображает код следующим образом: 891a5e553d3b4e63b8fb19e57baf87f0.png

По просьбе нескольких людей, я обратил на это внимания и добавил в итоге начальные настройки стиля кода C#, и теперь по умолчанию код выглядит в IDE так:

6d4fe50192a5496194489b324f561bfc.png

LINQ Эту задачу — я отложил в самый дальний угол, ибо когда-то решил, что это не приоритетная задача. Это было так до вчерашнего дня. Было вот так: 1c78e3fbce9f43238d12a07de9e61848.png

Как-то не очень, правда?

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

ca396faf5582480caf45044cf215ce24.png

А что ещё? Я много чего не описал, это ввод поддержки Covariance + Contravariance, перепись поиска методов, переделка системы типов, куча правок во множества подсистем .NET + C# плагинов.Также не написал о том — как я пытался исправить задачу 140, в итоге все сломал, пришлось сделать откат и перенести все в PR 149.

А что дальше? А дальше у нас — самое интересное.NuGet Была добавлена возможность скачки и автоматического добавления библиотек NuGet, через packages.config. Пока что скачиваются только с nuget.org и нету визуального просмотра библиотек, но — это исправит часть проблем, когда юзаются либы с репозитория.image

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. К сожалению — дебаг очень далек к идеалу, много проблем со стабильностью, запускается не с первого захода. Но начало положено.image

Java as .NET app (IKVM.NET) Я также смотрю в эту сторону, пытаюсь довести до ума, реализацию. Сейчас работает статичная и динамичная компиляция Java кода. При этом частично поиск. Но на этом заканчиваются хорошие новости. Есть проблемы в стабильности, IKVM.NET плагин может запросто положить Consulo на лопатки (или пользователя : D). В планах — сделать поддержку дебаггера .NET в Java коде (ждем свежий билд Mono для Windows).Конец? Только конец статьи. Я буду продолжать делать то, что делал. В планах — довести до ума, то что уже есть.Хоть я и делаю все сам, у меня есть много «дыр» в местах, куда руки попросту не до хотят.

Если у кого то есть желания помощь мне с сайтом, с написанием плагинов (Java язык, но также нужны люди знающие C# для написания Microsoft Debugger), или с тестированием — пишите мне в диалоги на Хабр, или на почту

Спасибо.

PS:

C# это не конец, а только начало

© Habrahabr.ru