Pull to refresh

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

Reading time 3 min
Views 16K
Для тех, кто пропустил мои посты:

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

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


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

New Resolving


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

Pull Request


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

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# это не конец, а только начало
Tags:
Hubs:
+52
Comments 44
Comments Comments 44

Articles