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

    Для тех, кто пропустил мои посты:

    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# это не конец, а только начало
    Поделиться публикацией

    Похожие публикации

    Комментарии 44
      +1
      Ничего себе, даже не подозревал, что кто-то взвалит на себя за подобную задачу! Удачи вам, не раз видел юнитологов с дуалбутом в винду на маках из-за Решейпера и VS.
        +2
        Спасибо
          0
          Для этих целей есть parallels desktop
          +4
          Титаническая работа.

          (мечтательно) Может быть вас возьмут на работу в JetBrains и вы ещё сделаете IDE для Go language....
            +1
            Там есть люди которые делают и так. И от JB так же.

            Дело времени — если мои руки буду свободные, тогда доберусь и к Go
              0
              Я слышал, что последнии версии плагина (не stable, а более свежие, из гита) на порядок лучше того, что доступно в репозитории идеи по умолчанию
              0
              А зачем fork? Почему не просто языковой плагин?
              P.S. пропустил старые посты — есть ссылки на них?
                0
                habrahabr.ru/post/235107/ один пост который более-менее актуальный

                Потому что я не юзаю IDEA.
                  0
                  Работа проделана огромная — это бесспорно и вызывает, по меньшей мере, уважение (по коммитам так вообще складывается ощущение, что работают несколько человек:)).
                  Но можно все-таки поподробнее, почему не плагин? API не достаточно гибкое, или в чем проблема?
                  Аргумент «я не юзаю IDEA» звучит очень странно, особенно на фоне того, что ниже вы же написали «Ибо я юзал IDEA как основную IDE».
                    0
                    «Юзал» — акцент на это. Причин много — они все мои. Возращатся к IDEA я не буду.
                0
                Несколько лет программировал на java se/android и очень привык к плюшкам таких IDE как Eclipse и Intellij IDEA.
                Сейчас занимаюсь разработкой на Unity на Mac, по-этому решарпер юзать не получается, а костыли в виде VM часто неудобны.
                Хоть, по вашим словам, debug еще в начальном состоянии, но хорошая навигация по коду и рефакторинг это огромнейший плюс для меня.
                Как жаль что я не знал про вас раньше. Уже устанавливаю.
                P.S. За год так и не смог привык к Xamarin Studio.
                  0
                  Рефакторинг сейчас никакой практически. Ренейм, базовый change signature(не работает на override), да и все. Все другое либо нету — либо закрыто для юзеров(introduce var пока не стабильный поэтому закрыт вне песочницы)

                  Дебаг — очень нестабильный, ибо никто не тестит, и руки к нему не доходят(Unity дебаг это 100% Mono debug)
                  +1
                  Честно сказать, был скептически настроен по поводу проекта, но в текущей ситуации дотнета (поддержка на платформах отличных от винды) он очень может пригодиться! Конечно, сама идея написания IDE под .NET/Mono на джаве для меня все еще звучит дико, но возможно повторное использование кода одной из лучших IDE (IntelliJ IDEA) того стоит.

                  В любом случае, удачи! Продолжайте не слушать тех, кто говорит что это не нужно и идите к цели (релизу).
                    0
                    но возможно повторное использование кода одной из лучших IDE (IntelliJ IDEA) того стоит.


                    Не только самой платформы IntelliJ(или Consulo уже), а и других плагинов. В моих планах, отделить Android от Java, что бы сделать поддержку Xamarin. Ну и все в таком духе:)

                    Ах и да — буду продолжать. Спасибо
                    0
                    Странно, только что скачал чтобы потестить и не видит System.Linq
                      0
                      Добавь в зависимости System.Core

                      how do it
                      image
                        0
                        Пробую добавить зависимости — падает с нехваткой памяти. Курю настройки.
                          0
                          Они все лежат в consulo.exe.vmproperties или consulo64.exe.vmproperties

                          Я увидел проблему — которая жрет памьять, буду исправить в течении недели, пока выход только увеличить.
                      0
                      Если уже отвечали, то просто ссылку дайте, а так вопрос — если уж вы все-равно все пишете заново, почему не плагины-форк Xamarin Studio? Я idea очень уважаю, но сдается что допиливая monodevelop — можно было бы больше кусков переиспользовать.
                        0
                        Ибо я юзал IDEA как основную IDE
                        0
                        А не смотрели в сторону Roslyn? Возможно ли его прикрутить?
                          0
                          Только в виде external tools, а этого я хочу избежать, да и нету смысла
                          +2
                          Мне очень интересно узнать мнение о Java от .NET-чика. Я же правильно понимаю, что вам волей-неволей пришлось к неё погрузиться?
                            0
                            Я больше Java чем .NET, по хронологии так получилось.
                            0
                            Я поражаюсь вашей продуктивности. В свете открытия .NET ваша разработка имеет очень хорошие перспективы. Если прикрутить asp.net vnext и получится добавить все плюшки от JetBrains(для клиентской части) будет очень здорово. Так же нравится идея о Unity и Xamarin. В общем, удачи вам с проектом и побольше энтузиазма.
                              0
                              Если прикрутить asp.net vnext

                              Нехватка рук. Да и нету человека, который бы обьяснил, как все это добро работает, от компиляции до запуска, ибо пока у меня нету времени изучать

                              В общем, удачи вам с проектом и побольше энтузиазма.

                              Спасибо. Энтузиазма хватает — я бы поделился бы с кем то)
                              0
                              Для того чтобы взлетело, прикрути Roslyn и функционал code fix/code refactoring от студии 2015 (которая вот-вот выйдет) и легкую поддержку VSIX. Скоро повыходит куча расширений полезных на студию, которые снизят необходимость решарпера.
                                0
                                Roslyn в любом случаи не будет, ибо всеже CrossPlatform, а таскать с собой Mono не вариант. Да и будет это все в External Tools, ибо Java не работает с .NET напрямую.

                                Code fix / Code refactoring — это все делает и так, и Roslyn не нужен, просто пока я ленюсь.

                                VSIX — даже не задумывался
                                  0
                                  А Roslyn не cross platform или тяжко допиливается? roslyn.codeplex.com/

                                  Code fix / Code refactoring — это все делает и так, и Roslyn не нужен, просто пока я ленюсь.

                                  Суть в том, что будет куча полезных расширений с помощью Microsoft CodeAnalysis, который вроде бы open source. Т.е. можно заюзать extensionы от студии / или девелопить и под студии, и под вашу IDE с минимум затрат. Т.е. это тупо позволит сократить время доведения IDE до ума силами сторонних разработчиков
                                    0
                                    Roslyn — это C#, а что бы запустить, нужно иметь доступ к .NET платформе.

                                    Поэтому и делать намного сложней, чем на базе Visual Studio. Если я не ошибаюсь, тот же Mono Develop тоже не юзает Roslyn
                                      0
                                      Вы не совсем правы. github.com/mono/roslyn. Roslyn еще не совсем зарелизился. Он будет частью Mono после релиза
                                        0
                                        Давайте расмотрим то что сейчас.

                                        Parsing, Resolving, Highlight, Folding, Base Refactoring, Some Quick Fixes — все это есть и так. Зачем Roslyn?

                                        Суть в том — что он будет как external tools, даные будут передаватся либо через TCP, либо через саму консоль. Если выбирать — то я возьму поддержку на родном языке IDE, и пусть я больше времени убью. Это дасть побольше перспектив в будущем.

                                        C# 6.0 — реализация со стороны IDE, это пустяк.
                                          0
                                          Parsing, Resolving, Highlight, Folding

                                          Как насчет полной поддержки языка с корректностью на уровне студии? Т.е. можете ли вы гарантировать что у вас реально корректный код, который покрывает все редкие моменты?

                                          Base Refactoring, Some Quick Fixes

                                          Базы не хватает. Есть очень много всего клевого, что можно реализовать только теми, кто непосредственно разрабатывает какой-то определенный софт на C#. Определенные рефакторинги, определенные сниппеты.
                                          Появляется VS Community Edition, которая для мелких контор бесплатная. Для студентов даже Ultimate версия бесплатная. В саблайм (он правда платный, но не очень) добавляют довольно мощную поддержку C#. Чем ваша среда будет лучше этих двух вариантов?
                                            0
                                            1. Не проблема исправить — то что не работает

                                            2. Я не люблю костыли. Это одна из причин, почему я отошол от IDEA. А это костыль будет. Я имел опыт подобной системы, и повторять я его не буду
                                0
                                Я всё ещё надеюсь увидеть когда-нибудь на странице проекта или среди постов на хабре ссылку на программу поощрения автора(ов). Тем более он же может стать и неким аналогом User voice. Например, я очень хотел бы использовать Consulo уже сейчас, но мир коммерческой разработки таков, что «дешевле» использовать VS. Я надеюсь, что фичи под заказ смогут популяризировать продукт, повлиять на его развитие и получить поддержку не только независимых разработчиков.
                                Напишу сюда список хотелок, которые тормозят лично меня.
                                1. Импорт sln/csproj.
                                2. Экспорт sln/csproj.
                                3. Профили среды. Это значит, что если я запускаю Consulo под Win и создаю C# проект, то по-умолчанию очевидно выставить целевой платформой .net. Или предложить пользователю выбор из имющихся вариантов сразу. Windows это тоже приоритетная платформа :)

                                Это всегда можно взять и реализовать самому, но лучше дать возможность каждому заниматься тем, что у него получается. Вы не думали ещё раз на эту тему?
                                  0
                                  За поощрения — можно узнать у меня лично. Я сейчас не в своей стране, поэтому с банками и меня туго. Есть только электронные виды, а они только нашие СНГ, их я публиковать не хочу.

                                  1. Импорт sln, вообще он есть, но он настолько коряв, что я его решил вырубить. Попросту не доходят руки до него, там «дурацкая» система в csproj, и я пока вариантов как сделать нормальное чтения незнаю

                                  2. Незнаю ли возможно это вообще.

                                  3. Вот за это я не пойму, есть шаблон Hello World (C#), и там сразу создается два профиля Debug/Release также устанавливается все нужные настройки для .NET + C#
                                    0
                                    Я не о индивидуальном подходе имел в виду. О стандартном краудфандинге стоит ли думать не уверен, а вот список тикетов (фич, реквестов), которые, например, лично вам не критичны, но которые могут заинтересовать сообщество, с стоимостью их реализации, может быть интересен. С одной стороны есть возможность доната, но в каком-нибудь Paint.NET это просто способ поблагодарить разработчиков, а здесь это причастность к интересной или хотя бы потенциально интересной для донатера фиче.
                                      0
                                      Да — эти все вещи, у меня в планах, но пока — скоростью разработки, я не могу гарантировать, поэтому ничего нету. И это не ограничивается .NET платформой

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

                                  Конечно очень заманчиво использовать roslyn, это могло бы сэкономить кучу сил, но из java сделать это нормально не выйдет. А жаль.

                                  Еще раз, спасибо, что занимаетесь проектом и не бросаете это.

                                  А можно еще немного подробнее о «Java as .NET»? Что хочется получить в итоге?
                                    0
                                    С одной стороны есть понимание, что проект очень нужный и крайне нужный. С другой, я вижу, что проекту остро не хватает разработчиков и организации. Прислушиваясь к себе, я понимаю, что я не хочу браться за этот проект, потому что у него такой размах, что меня это просто пугает. Я восхищаюсь VISTALL сколько он уже сделал и ещё вкладывает сил, но проект на столько грандиозный, что даже не верится, что его вообще возможно сделать такими малыми силами. В итоге чувствую вину, что очень хочу этот продукт, но боюсь браться за него.


                                    Я где то 3 месяца думал — ли стоит. Одна из причин была — как раз, что я боялся взятся.

                                    А можно еще немного подробнее о «Java as .NET»? Что хочется получить в итоге?


                                    Что бы можно было работать стабильно в Java коде, при этом среда выполнения будет .NET.

                                    Используя профили — можно сейчас, создать проект на Java, который будет работать на JVM, но при переключении на другой профиль будет на .NET

                                    При этом — можно добится возможности, соединения Java + C# модулей, когда они все компилятся на .NET.

                                    Доволи веселая вещь получается
                                      0
                                      Т.е. возможность компилировать java в .net-байткод? Если бы это хорошо работало, то этого бы хватило по минимуму для написания кода для того же юнити на джаве, в том плане, что плагин для джавы сейчас пока сильно лучше проработан, хотя конечно это тоже работа большая и тяжелая — потому что на стыке будет куча проблем.
                                        0
                                        В IKVM.NET сильно большие либы в зависимостях. Там классы с rt.jar. Когда размер либ важен, он проигрывает. Я знаю людей которые юзают транслятор сорс кода Java -> C# для Юнити.

                                        Стык — не такой и проблемный как кажется.
                                          0
                                          Проблема не только в трансляции, ведь хочется еще и при разработке иметь unity-зависимости в автодополнении и другие блага ide. Если есть способ такой разработки, было бы интересно о нем узнать.
                                            +1
                                            Комплишен не теряется. Покажу пример реализации плагина IKVM.NET. Проект создан — в нем есть ссылки только на Microsoft .NET SDK, и на IKVM.NET SDK(он повторяет все Java классы в .NET байткоде). Смотрим

                                            Power of one IDE
                                            image

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое