Блог пользователя AlexDmitriev

Автор AlexDmitriev, 3 года назад, перевод, По-русски,

Changelog:

  • 0.12
    • Поддержка CLion 2017.1: fix detecting pragma once
  • 0.11
    • Поддержка CLion 2016.3.2: теперь снова меняется только настройка testrunner (теперь это быстро!)
  • 0.10
    • Поддержка CLion 2016.3
      • Сменщик конфигурации теперь меняет глобальную настройку и конфигурацию testrunner'а
      • Переписал код сохранения тасков, теперь рандомные ексепшны не сыплются
  • 0.9.2
    • Поддержка парсеров AtCoder и CodeAcademy
  • 0.9
    • Теперь инлайнятся инклуды, которые ведут куда-то внутрь проекта (а не те, что в кавычках как раньше). Это позволит включать всякие библиотеки, которые инклудят внутри себя с помощью <>

JHelper — это плагин для написания контестов на C++. Он автоматически инлайнит код из вашей библиотеки, при этом в файле для сабмита оказывается только используемый код. Кроме того, он позволяет добавлять тесты для тестирования на них вашего решения. Планируется возможность распарсить контест/задачу, чтобы сепмлы добавлялись автоматически

Доступен для CLion

Естественно плагин бесплатный, IDE стоит 89$/год, бесплатны для студентов, бесплатный триал 30 дней, часто можно бесплатно пользоваться EAP(типа бета)-версиями

Плагин доступен из репозитория плагинов в CLion и на сайте JetBrains

Инструкции по установке/использованию на английском на вики. Спрашивайте, что не понятно.

О багах и пожеланиях можно(и нужно) сообщать сюда ил в трекер.

Буду рад

  • багам и пожеланиям
  • реализации фич, до которых я еще не дошел
  • человеку, который сделает вики понятной :)

Все еще можно сделать этот плагин многоязычным (я имею ввиду поддержать другие языки программирования). Всегда готов обсудить это.

Спасибо Egor'у за идею с его Chelper и abra'е за ревью.

Исходный код | Известные баги | Баг трекер | Инструкции

 
 
 
 
  • Проголосовать: нравится  
  • +64
  • Проголосовать: не нравится  

»
3 года назад, # |
  Проголосовать: нравится -16 Проголосовать: не нравится

Минутка воодушевляющих тегов

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

А почему бы не взять код CHelper, а потом поменять все Java specific на C++ specific? Благо там не очень то и много java specific. Это еще позволит импортировать туда-сюда фичи

А вообще идея чудесная. Я даже буду использовать этот плагин для тех случаев, когда надо попихать

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Какие-то куски кода я беру(+ Парсеры планирую полностью переиспользовать). А вообще, там как раз вроде довольно много вещей Java-specific (например, ты можешь просто взять и из произвольного текста создать Java class и тут же его запустить, что нетривиально(или я не понимаю, как по-человечески) для c++), мне показалось.

    Ну и UI с JB обертками вроде гораздо менее многотекстовое получается.

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

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Ненене, если ты не про рефлекшн, то я нигде такого не делаю (а от рефлекшна там по хорошему надо избавится, перейдя на запуск процесса)

      • »
        »
        »
        »
        3 года назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Я скорее про JavaPsiFacade

        • »
          »
          »
          »
          »
          3 года назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Нету аналогов, которые бы искали нужную функцию/класс? Как-то это не по джетбрейновски

          • »
            »
            »
            »
            »
            »
            3 года назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            Удобно — я не очень понимаю как (ну когда имеешь доступ к Psi-шкам уже можно точно также ReferenceSearch'ем, но вопрос как я понимаю в поиске по имени). Точнее — пока вообще никак не умею.

            Вообще у них нет открытого API, кроме как для IDEA и для PyCharmа, так что C++-specific часть еще и без документации почти.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Понимтся, Jacob пытался сделать что-то подобное для Visual Studio при помощи CLang'а. Так что возможно, он захочет поделиться опытом. Правда, наверное, парсить код через API продуктов JetBrains несколько проще, чем то, что он пытался сделать.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

А в чем принципиальная идея для генерации кода кроме быстрого написания собственного чекера? Не проще ли будет написать плагин, который будет посылать на stdin тест? Тогда отпадет необходимость таскать библиотеки с классами для каждого языка, и можно будет сделать один плагин для всех IDE от Jetbrains. У меня где-то даже есть наработки, вот только я не разобрался, как программно собирать и запускать проект из IDE.

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Вообще идея выдернуть из CHelper некоторый независимый от языка костяк, а языкозависимые фичи сделать отдельно интересна. Возможно в следующем месяце у меня будет время зарефакторить CHelper

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Ага, было бы лучше, чем сейчас.

      Отпишись тут о результатах, если таковые будут, пожалуйста.

»
3 года назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

А как его установить и настроить? Плагин в AppCode добавил, новых менюшек не появилось.

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Нужно добавить в удобное меню/тулбар кнопки(либо настроить шорткаты)

    Чуть подробнее на wiki., см. Configuration, usage. Надеюсь, там что-то понятно:)

»
3 года назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Четкое название)

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    JetBrains Helper

    А вы шо подумали?

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится +17 Проголосовать: не нравится

      Ничего такого :)

      Просто Plugin для Java называется CHelper, в то время как плагин для C++ называется JHelper. Забавно, на мой взгляд)

»
3 года назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

CLion зарелизили http://www.jetbrains.com/clion/

Кстати, а какая политика у JetBrains относительно использования их IDE исключительно в соревнованиях? Какую лицензию покупать надо?

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я не видел их ценовой политики по CLion пока. Наличие VS express может привести к наличию community edition

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Задал вопрос про appcode — personal за 99$, видио и с CLion будет что-то подобное

      • »
        »
        »
        »
        3 года назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится

        Лицензия будет примерно по цене как у AppCode сейчас. Будет тогда, когда будет первая коммерческая 1.0 версия. Пока сроков нет, надо посмотреть на фидбек от public EAP и еще много чего доделать.

        Про скидки тоже пока рано говорить )

        А. Казакова, habr

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Code generation is currently broken in public EAP of CLion. issue on GH

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I was testing and I got a problem, can you help me ?

http://snag.gy/AifUx.jpg

Thanks in advance.

»
3 года назад, # |
  Проголосовать: нравится -13 Проголосовать: не нравится

А что, серьезно кто-то пишет контесты в AppCode или CLion?

Поправьте меня, но мне кажется у 95% олимпиадников стоит Windows или Linux. Тем, кто пишет в блокноте с подсветкой, плагин не нужен, а вот в Visual Studio не помешал бы, хотя мне лично не очень трудно скопипастить пару сэмплов в файл и запускать их до победного конца.

Кроме того, даже когда у меня был Mac, я писал в Sublime, как-то мне кажется все среды разработки для Mac заточены под разработку приложений для iPhone/iPad, но никак не casual консольные программки.

Так что идея хорошая, но вроде проектом будет пользоваться только автор+eps человек.

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    CLion кросс-платформенный. [1]

    Кроме того, CLion работает на модели CMake, поэтому от среды в данном случае не зависит тип поддерживаемых проектов. Думаю, что на CMake вполне можно смоделировать "casual консольную программку", поэтому и в среде тоже можно.

    [1] http://confluence.jetbrains.com/display/CLION/Early+Access+Program

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится +18 Проголосовать: не нравится

    Подозреваю, что в CLion (еще) не пишут. Подсказка: его первая публичная версия(еще даже не бета) вышла позавчера.

    С AppCode'ом есть проблема, что он платный и только под Mac, но я например на рабочем компе только в AppCode и писал (дома в другой IDE ибо Linux).

    Тех, кто пишет в блокноте с подсветкой я не понимаю, ну пишут и пишут пусть. Сам же говоришь, что в VS — нужен. В чем глобальная разница между VS и CLion (кроме того, что у JB, вероятно, получше API для написания такой вещи) в данном смысле?

    И да, VS тоже не для однофайловых программок создан.

    Короче, по-моему, ты странный.

»
3 года назад, # |
  Проголосовать: нравится -16 Проголосовать: не нравится

CHelper for Java and JHelper for C++. Interesting names :D

»
3 года назад, # |
Rev. 15   Проголосовать: нравится 0 Проголосовать: не нравится

Hello Alex, Thanks for making such a tool, and I am trying to set it up to use with CLion. I am having trouble setting up the plugin to generate the code. I have tried following the instructions on the wiki but unfortunately I do not fully understand them I think. I get the following error: Task file not found: Seems your task is in inconsistent state If you could provide any help it would be very much appreciated. Thanks again for the time you spent making this tool!

  • »
    »
    3 года назад, # ^ |
    Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

    Well, you need to create files that are in those boxes and add them in CMakeLists to appropriate configurations.

    I've created example project where it's seems to work: Link to Github

    • »
      »
      »
      3 года назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Awesome thank you so much for quick response and help! I downloaded the repository and imported it as a new project and everything works now! Have been using java for all my contests so far with Chelper, but can't wait to now to get better at c++ and use it in contest too with your plugin. Again many thanks for your work!

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Also, just one more quick question if you don't mind. In Chelper there is archive button for tasks that one is done with. What is the best way of replicating that workflow in JHelper? Does one just create a folder and then drag the Task.cpp file and Task.task file there when you are done with problem? Thanks!

      • »
        »
        »
        »
        3 года назад, # ^ |
        Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

        Probably, right now is the easiest way to do that. I'm going to implement this in more convenient way but I'm afraid it'll happen not very soon. I usually just delete them:)

        • »
          »
          »
          »
          »
          3 года назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Right, makes sense. Just out of curiosity how much work was it to get the plugin to the current state in terms of hours? At some point I would be interested in trying myself to port JHelper/CHelper to PyCharm for use with Python. I imagine it is a decent amount of work to get everything functional, yes?

          • »
            »
            »
            »
            »
            »
            3 года назад, # ^ |
              Проголосовать: нравится +1 Проголосовать: не нравится

            Well, it took some time:)

            But I believe it will be easier to port my code to python then Java code to C++.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Added parsers from CHelper(currently only parser from IDE, not from Chrome) including CodeForces.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Chrome extension supported.

For those who use other browsers (Firefox?): it should be quite easy to write similar extension. Almost no logic is required.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Can this be integrated with sublime too?

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Could you please give me some hints about how can I add a problem / contest, how to solve the problem (coding, testing and submitting) with JHelpr in Clion?
I've study your wiki, but I need more obvious details!
Thanks...

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    First of all you should configure project (or you may download example project from github)

    To add new task you need either use "Add Task" (manually add name and tests) action or Parse contest action (parse tests from Online judge). To make them available you should either add them on toolbar/menu or enable shortcuts for them.

    Fro wiki:

    Make possible to call JHelper action. Yo should do one or both of the following:

    • Add icons of actions to menu or toolbar. Click to the toolbar-Customize menus and toolbars-Main menu/toolbar-Add after-Plugins-JHelper-select all
    • Add shortcuts for actions. Preferences-Keymap-Plugins-JHelper

    Then cpp file with class will be created, you should code here. To run you just choose run configuration and run:)

    Feel free to ask for clarification if it's not clear (but it's better to try first all because some actions are harder to explain than to do:) )

»
3 года назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

CLion version 1.0 is released

»
3 года назад, # |
Rev. 6   Проголосовать: нравится 0 Проголосовать: не нравится

Awesome work! Couple of questions:
1. Does Topcoder work with this?
2. What is the usual workflow? For every problem(or contest I parse), it tries to make it TaskA, so should I delete my TaskA every-time.
3. I keep getting many "IllegalArgumentException: childPath should be inside a parentPath", though nothing breaks.
4. Where to write stress-test code(like brute-force program and tester/generator)?
5. In GCJ contest, if I select multi-tests with number of tests known, how to get test case number?
6. Where to write pre-processing code, common to all test cases.

  • »
    »
    3 года назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Hi

    1. TopCoder is currently not supported. It is in plans but it doesn't really make sense to do it right now while unused coffee elimination is so unstable due to unused code rule
    2. Usually I just delete all tasks between contests. I'm going to do some sort of archivation, but it haven't been done yet.
    3. Could you post stack trace and say when it happens?
    4. Unfortunately there's currently no convenient way to do that. I'm open to your ideas.
      6. You may either put the code in the ctor of solver (and save in member vars) or do that during first function call with static boolean var like
    static bool needcalculate = true;
    if(need calculate) {
    needcalculate = false;
    //calc what you need
    }
    

    The first way is preferable because it will be called for each test (I mean for each test consisting of several test cases).

    5. See 6, you should have testNumber var status either filled by ctor or static var.

»
2 года назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

This is the screenshot: http://postimg.org/image/8gw88dl4b/

This error is on the left side.

C:\Users\Bat-Orgil.clion10\system\cygwin_cmake\bin\cmake.exe --build C:\Users\Bat-Orgil.clion10\system\cmake\generated\cc361857\cc361857\Debug --target all -- -j 4 Scanning dependencies of target output Scanning dependencies of target test Scanning dependencies of target testrunner [ 33%] [ 66%] [100%] Building CXX object CMakeFiles/output.dir/output/main.cpp.o Building CXX object CMakeFiles/test.dir/tasks/TaskA.cpp.o Building CXX object CMakeFiles/testrunner.dir/testrunner/main.cpp.o Linking CXX executable output.exe Linking CXX executable test.exe /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/libcygwin.a(libcmain.o): In function main': /usr/src/debug/cygwin-2.2.0-1/winsup/cygwin/lib/libcmain.c:39: undefined reference toWinMain' /usr/src/debug/cygwin-2.2.0-1/winsup/cygwin/lib/libcmain.c:39:(.text.startup+0x7f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain' collect2: error: ld returned 1 exit status [100%] Linking CXX executable testrunner.exe CMakeFiles/test.dir/build.make:85: recipe for target 'test.exe' failed make[2]: *** [test.exe] Error 1 CMakeFiles/Makefile2:95: recipe for target 'CMakeFiles/test.dir/all' failed make[1]: *** [CMakeFiles/test.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... Built target output [100%] Built target testrunner Makefile:75: recipe for target 'all' failed make: *** [all] Error 2

Other side has this error for every 5 seconds.

2:00:54 PM NullPointerException: update failed for AnAction with ID=name.admitriev.jhelper.actions.SwitchCMakeConfigurationAction

I think I have sth wrong with run/debug configuration. Can you check it? Thanks. Let me know if you need any other details.

  • »
    »
    2 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    First of all, change target (on the setting page opened on the screenshot) from build all to testrunner. If that doesn't help please post content of testrunner/main.cpp

  • »
    »
    2 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    As for right side: it should not affect anything, but please post stack trace so that I am able to identify the error (click on error message for that)

»
23 месяца назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

Спасибо за плагин.

  1. При запуске вот этого таска : http://pastie.org/10653080 генерируется некомпилируемый C++11 код: http://pastie.org/10653082 (Проблема в том, что в сгенерированном классе не присутствует default конструктор event(){};, необходимый для инициализации массива event evs[2000005]; Думаю, проблема в том, что конструктор почему то считается unused code.

  2. Планируется ли поддержка topcoder? Выше есть комментарий про unstable unused code. Думаю, плагин будет очень полезен и без удаления unused code, хотя бы для парсинга тестов и создания соотвествущего таска.

  • »
    »
    23 месяца назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Да, дефолтный конструктор, видимо, выпиливается как unused.
    Сам я сейчас выключаю удаление unused код(есть галочка в настройках), потому что многовато все-таки false positive

    Топкодер, когда-нибудь, может быть, поддержу:) Пока советую mojmoj :)

    • »
      »
      »
      23 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      О, спасибо, не знал про галочку в настройках.

»
23 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Released support for local regex input type. Tested only on MacOS, should probably work on Linux.

Please let me know if somebody was able to run it under Windows :)

»
12 месяцев назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

Currently it's known not to work correctly with CLion 2016.3, I'll try to fix this ASAP

»
10 дней назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is there any way to disable the auto comment system?