Поддержка .NET на базе IntelliJ — реальность?

    Поговорим про поддержку .NET на IntelliJ платформе. После прочтения вы сами решите: реальность ли?

    Сделаем обычный Hello World. Что для проверки нам нужно?
    1. Скачать билд Consulo (мой форк IntelliJ IDEA, почему форк – иная тема).

    2. Запускаем bin\consulo.exe(win 32), bin\consulo64.exe(win 64), Consulo.app(mac), bin/consulo.sh(linux). Я рекомендую проверять на Windows, хотя я и проверял билды на Линуксе и Маке, но они менее стабильные, да и есть пару проблем (например, с Mac + Mono). Если все прошло гладко — имеем:

    image

    3. Кликаем на Actions -> Configure -> Plugins. Видим там пустой список. Нажимаем browse repositories…. Появится диалог, через секунд 10 появится список доступных плагинов (задержка — плохая реализация плагин репозитория). Ищем там Microsoft .NET или Mono .NET и устанавливаем. В итоге мы должны иметь:

    image

    4. Actions -> Create Project -> OK . Мы имеем пустой проект. Идем в настройки проекта. Ищем наш модуль и выбираем вкладку Extensions. Там выбираем Microsoft .NET -> C# (или Mono .NET -> C#). Structurable экстеншены дают возможность настроить проект, подобный Java (с Source + Test папками, с поддержкой пакетов как у Java):

    image

    5. После того, как нажмем OK, будет задержка и пройдет индексация. Я не исключаю, что во время индексация вылетит Exception, если будет – отправьте мне через интерфейс.
    Для проверки, нормально ли все, делаем Ctrl + N -> Console. Если вы перейдете к классу System.Console, значит все хорошо, и можно продолжать, если нет, прошу отписаться в комментариях.

    6. Создаем класс. В дереве проекта делаем New -> C# Class -> `Program` -> OK и пишем обычный Hello World:

    using System;
    
    public class Program
    {
        public static void Main(String[] arg)
        {
            Console.WriteLine("Hello World");
        }
    }
    


    7. Теперь нам нужно этот код запустить. Заходим в Edit Configurations -> Add -> .NET Application. Больше ничего не нужно изменять.

    ”image”

    Сохраняем и нажимаем Run:

    ”image”

    На этом наш тест закончен.

    Хотелось бы уточнить, что это лишь начальная реализация, которую я делаю в соло режиме (почти 500 коммитов).
    Она поддерживает:
    • Макросы;
    • Декомпиляция .NET библиотек;
    • Профили (возможность смены СДК, переменных, прочее);
    • Базовый поиск методов, классов, переменных, прочее;
    • Подсветка, частичное заполнения, фолдинг;
    • Практически весь синтаксис C#.

    Но при этом, есть баги:
    • Бинарные операции возвращают неверный тип;
    • Макросы #if имеют привычку ломаться в больших файлах;
    • Inner методы и энумы, не участвуют в поиске;
    • Декомпиляция не идеальная.

    Что у меня в планах?
    • Исправлять баги;
    • Debugging;
    • NUnit, Unity, NAnt, Vistual Studio Importer, IronRuby, IronPython, и ….

    Бросать я не собираюсь, время на разработку пока есть. Все ссылки можно найти в моем профиле на гитхабе.

    Only registered users can participate in poll. Log in, please.

    Поддержка .NET на IntelliJ платформе – реальность?

    • 62.4%Да294
    • 11.7%Нет55
    • 25.9%Не сейчас122

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 52

      0
      Хм, а с Xamarin эту штуку можно подружить?
        +5
        Возможно все — нужно желания, и время. Пока я хочу закончить с .Net + C#, потом уже выбор
        +1
        реальность или миф

        Да

        Нет

        эмм?))

        а вообще выглядит впечатляюще.
          0
          Вот и вопрос — да или нет. Ктото считает что нет. Я показал, что для меня это не миф. Я попросту пока не успеваю сделать все, а хочется :)
            +1
            Хм.
            bool @real = random_bool;
            bool unreal = !@real;
            Console.WriteLine((@real || unreal) == true);
            
            Output:
            true
            
              0
              Напоминает бородатый анегдот про Петьку и приборы. Вопрос «реальность или миф?» не подразумевает ответов «да/нет».
                0
                Пока что — это среднее. Много проблем. Сейчас можно сказать — что это фундамент.
                  +4
                  Кажется, это обычная манера топикстартера задавать вопросы и вести дискуссию =)
                  • UFO just landed and posted this here
              +2
              Пара вопросов:

              1. А как это связано с Unity3d, собственно? (статья в хабе Unity3d).

              2. В чем смысл проекта? На странице в гитхабе надпись «Targeting to create one IDE for all languages». Не слишком амбициозно сразу?

              В целом могу сказать, что прект в теории нужный, т.к. Visual Studio закрытый и платный (бесплатный обрубок IDE не в счет), а MonoDevelop aka Xamarin по качеству — не бей лежачего.
                0
                1. Unity это одна из целей. Я уже расмотрел СДК и имею уже планы по реализации плагина. Главное это допилить поддержку Шарпа.

                2. Для меня — нет. У меня все мои проекты уже в Consulo, IDEA я уже не использую. Пока приоритет это плагин.НЕТ + платформа.

                (угу я знаю всю картину)
                  0
                  а MonoDevelop aka Xamarin по качеству — не бей лежачего.
                  Ну как. За счёт использования NRefactory оно умеет строить полноценное AST, что даёт адекватный автокомплит, семантическую подсветку и базовый набор инструментов рефакторинга кода (до R# как до луны на тракторе, но тем не менее), адекватно поддерживает MSBuild, обеспечивает какую-никакую, а интеграцию с NuGet, имеет свой собственный отладчик (интегрирован в рантайм Mono). Всё это самостоятельно сделать можно, но только вот займёт десятки человеко-месяцев времени.
                    +1
                    Mono дебагер — это аналог с явы. Для microsoft — есть исходники дебагера на шарпе, нужно будет просто переписать с CommandLine -> transport передачу даных

                    Никто не говорит что все будет сразу. Вы правы, что зависит от рук. Чем больше рук тем быстрей будет.
                      0
                      Поддержу свои слова

                      Mono

                      вот

                      Microsoft исходники этого дебагера открыты
                      0
                      К сожалению, не смотрел под капот, сужу чисто по user experience, в чем он, имхо сильно проигрывает всем известным IDE от Visual Studio до Eclipse.
                      При выполнении обычных действий в IDE часто выскакивали Null pointer exception (в Xamarin), пресловутый NuGet add-in имеет банальные UI-баги (точно не назову, нету под рукой, но если вы вдруг связаны с проектом, могу потом в личку, а то я в Gtk# ни в зуб ногой), и т.д.

                      Кстати, насчет IntelliJ очевидный минус в том, что для разработки на .NET/Mono JRE по-хорошему не должен быть нужен.
                        0
                        Консула занимает 50 мб, без плагинов. JRE можно поставлять как bundled, и проблем не будет.
                          0
                          А не пробовали заводить через IKVM? Тогда можно будет через автоматически сгенерированные прокси использовать дотнетные библиотеки.
                            0
                            Consulo — это не .NET IDE. Я например пишу Java в ней тоже:

                            image

                            И не только Java
                              0
                              И как это мешает запуску средствами IKVM? IKVM — полноценная реализация JRE же.
                                0
                                А в чем выгода? Ради одной библиотекы — сменить VM? Декомпиляция работает и так. Consulo работает на mac-win-linux. Сейчас разбирать проблемы с их переносимость я не буду, я ж работаю сам.

                                Сейчас поддержка .NET работает на 3х ОСях, и поддерживает Mono .NET + Microsoft .NEТ. Я доволен этим.

                                Смена VM — планируется, но в далеком будущем.
                                  0
                                  Это позволит использовать дотнетные библиотеки (тот же NRefactory для построения AST) напрямую, а не изобретать инструментарий для работы с C# самостоятельно. Можно это сделать даже в out-of-process режиме.
                                    0
                                    Ну а кто говорит что это нужно? External процесс, это головная боль. Всеодно часть нужно будет писать, для заполнения, фординга, резолвинга, прочее
                                      0
                                      NRefactory многое из всего этого из коробки умеет же, в том и соль.
                                        –3
                                        Давайте закроем этот разговор.
                                          +2
                                          Многое, но не все. Это лишняя зависимость и звено, которое может иметь свои баги и ограничения. Захотел бы автор запустить, например, среду не только на OSx\nix\Windows а на какой-нибудь www.haiku-os.org/ (по секрету скажу, что Consulo на ней запускается) и этот звено бы этому помешало. Вообщем на вкус и цвет — фломастеры разные, как делается так и делается — не вижу никаких минусов в подходе «сделать все с нуля».
                                            +1
                                            Захотел бы автор запустить, например, среду не только на OSx\nix\Windows а на какой-нибудь www.haiku-os.org/

                                            А смысл запускать .NET-плугин к IDE на платформе, где нельзя не то что запустить, а даже скомпилировать .NET-сборки?
                                            не вижу никаких минусов в подходе «сделать все с нуля».
                                            w:NIH
                                              0
                                              Собрать mono под nix-подобную систему, поминая какую-либо мать, никто не отменял.
                                                0
                                                Мало собрать — оно активно /proc эксплуатирует, так что нужно на портирование кода время потратить.
                                    0
                                    Полная реализация? Я давно смотрел на IKVM, ради ответа — скачал и попробывал запустить(хотя мне это не нужно было)

                                    Но

                                    Internal error. Please report to http://napile.myjetbrains.com/youtrack/ com.intellij.ide.plugins.PluginManager$StartupAbortedException: java.lang.reflect.InvocationTargetException at com.intellij.ide.plugins.PluginManager$2.run(PluginManager.java:91) at java.lang.Thread.run(Thread.java:935) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.ide.plugins.PluginManager$2.run(PluginManager.java:88) ... 1 more Caused by: ikvm.internal.NotYetImplementedError: This method has not yet been implemented in IKVM.NET. at sun.font.SunFontManager.registerFont(SunFontManager.java:401) at java.awt.GraphicsEnvironment.registerFont(GraphicsEnvironment.java:370) at com.intellij.ui.AppUIUtil.registerFont(AppUIUtil.java:145) at com.intellij.ui.AppUIUtil.registerBundledFonts(AppUIUtil.java:130) at com.intellij.idea.StartupUtil.prepareAndStart(StartupUtil.java:102) at com.intellij.idea.MainImpl.start(MainImpl.java:30) ... 3 more

                                    Дальше думаю обьяснять не стоит?
                                      0
                                      Out-of-process плагину, которому не нужно работать со шрифтами, это как-то мешает? Хотя, хотите городить велосипеды — городите, время ваше, вам и решать, на что его тратить.
                                        0
                                        Угу, Вы правы — время мое. Я видел плагин с out-of-process анализатором. Поверь проблем было много. Для шарпа даже не стоит такого делать. Вон Ruby — Python — PHP, чтоль отдельным анализатором — нет.
                          +1
                          А SharpDevelop почему списали со счетов?
                          Вполне годная IDE. На порядки лучше чем MonoDevelop.
                          0
                          Visual editor планируется?
                            0
                            Вообще — да. Но моих рук мало, поэтому не скоро будет
                            +1
                            мой форк IntelliJ IDEA, почему форк – иная тема

                            Так почему форк? Почему не просто плагин? По моему плагин был бы более интересным…
                              –1
                              Много претензий к реализации.
                                0
                                Linq вообще нормально не видит и поэтому не компилируется =(
                                  0
                                  Как раз это сейчас не в приоритете. Не доходят руки. Кстати интересно, почему не хочет компилится. Нужно будет хотя бы посмотреть. Мб седня гляну
                                    0
                                    Пример
                                    image


                                    Все работает. Только вот using System.Linq нужно добавить
                                      0
                                      Перепешите ваш пример в лямбда нотации, в ней он не работает
                                        0
                                        Все работает. Только вот using System.Linq нужно добавить


                                        Если я точно помню, Select и другие методы, это Extension methods, которые сейчас не поддерживаются
                                0
                                Дело годное, нужное! Очень люблю Idea и давно мечтаю о плагине .Net с возможностью работы в Unity.
                                  +1
                                  Дело, конечно полезное, но, если честно, я бы предпочел чтоб к моно прикрутили полноценный WPF и его-же позволили использовать на Android/iOS через Xamarin или как-нибудь ещё.

                                  (Понимаю, что речь идет о совсем других материях)
                                    0
                                    Благое дело, конечно, тем более, что сам jetbrains этим по каким-то соображениям заниматься не хочет. Но по силам ли это одному человеку? Тем более, что еще и с переписыванием кода idea. С форком конечно темная история, можно подробнее, что за претензии, что потребовался форк? Просто интересно. Ну и конечно обязательно поставлю и попробую использовать как только будет поддержка extension methods. Даже как-то странно, что их реализация имеет такой низкий приоритет, хотя это важная часть языка и стандартной библиотеки. Когда это можно ожидать? В любом случае спасибо за работу и опенсорс.
                                      0
                                      Низкий приоритет в том что, я не могу понять как они хранятся в байткоде.

                                      Точнее аргументы аттрибутов. Да и декомпиляторы на Шарпе чтото не помогают. Видимо пойму со временем.

                                      Форк — сделан по многих причинах. Если хотите — я напишу вам в диалоги(пм мне и я напишу), сильно много вещей я хочу изменить.
                                        0
                                        Не в курсе тонкостей, но могу порекомендовать изучение исходников уже существующих опенсорсных библиотек вроде этой. В наше время всегда очень велика вероятность, что кто-то до тебя уже занимался тем же самым, только чуть под другим углом.
                                          0
                                          Спасибо — посмотрю. Я разбираю код ILSpy, но там куча всего, трудно найти, притом юзаю студию
                                            0
                                            Спасибо ещё раз — доволи понятный код. Уже тестю нормальную декомпиляцию аттрибутов
                                              0
                                              не за что, надеюсь, у вас получится реализовать вашу безумную задумку. А где можно подписаться на новости по поводу вашего проекта?
                                                0
                                                Я частично пишу в блоге на лж, но там часть написана. Сейчас консула + все плагины, доступна практически в режиме Live, я ниче не прячу. После того как я залил — минут через 10, можно будет увидить это в плагин репозите
                                        0
                                        Кто не видел, часть того что я не написал, выложено тут habrahabr.ru/post/215571/
                                          0
                                          Mono дебагер теперь поддерживается. www.youtube.com/watch?v=QVTMlE-ua8E

                                          Only users with full accounts can post comments. Log in, please.