Этот пост в блоге посвящен моей работе, проделанной в период кодирования GSoC (23 мая — 15 августа). Выполнение GSoC было одним из самых удивительных событий в моей жизни. Спасибо PSF и коала за предоставленную мне возможность работать над удивительным проектом с открытым исходным кодом. Также большое спасибо Google за запуск GSoC и развитие культуры участия в Open Source. За короткие три месяца я узнал так много вещей, которые определенно помогут мне расти как разработчику.

Это изменение +2411/-495 за три месяца 😲

Генератор шаблонов угольных медведей

coala-bears-create — это инструмент, который позволяет вам легко создавать Bears, задавая вам вопросы и заполняя стандартный файл конфигурации. Сгенерированные файлы можно затем быстро использовать, заполнив дополнительные данные, чтобы ваш Bear заработал в кратчайшие сроки. Интерфейс командной строки реализован с помощью Python Prompt Toolkit, который помог мне подключить такие функции, как раскрывающийся список, строку состояния и метод подсказок для вопросов пользователю.

Шаблоны находятся в каталоге scaffolding-templates. Пользователю предлагается войти в каталог, в котором он хочет создать Медведя, и после того, как пользователь закончит отвечать на все вопросы, данные берутся из шаблонов строительных лесов, ответы пользователя заполняются в шаблонах и для пользователя создается новая папка с Файлы Bear и BearTest.

Преимущество/мотивация:

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



Подсветка синтаксиса в коале

В настоящее время коала отображает такие результаты:

Задача этого проекта состояла в том, чтобы внедрить подсветку синтаксиса для затронутого кода, что вносит некоторые визуальные улучшения для пользователя. Эта задача была не такой тривиальной, так как у нас не было информации о языке анализируемого файла, а также о том, что нам нужна была двойная подсветка (цвета переднего плана и фона)

Цель задачи состояла в том, чтобы выделить часть, которая находится в исходном диапазоне, и обеспечить подсветку синтаксиса для остальной части, поскольку выделение текста и добавление цветов поверх него не работает. Мне также пришлось найти способ, как я могу печатать пробелы и табуляции в юникоде, как в предыдущей версии. Я начал искать библиотеку для подсветки синтаксиса, так как правило №1 в разработке программного обеспечения — использовать то, что уже существует. Наконец-то я обнаружил, что библиотека Pygments идеально подходит для этой задачи.

Я использовал getlexerforfilename и передал ему sourcerange.file, чтобы получить соответствующий lexer на основе языка файла. Однако, если подходящего лексера не найдено, возникает исключение, которое я перехватываю и делаю TextLexer (текстовый лексер) по умолчанию. Я использовал метод highlight из библиотеки Pygments, чтобы получить объект str, который в основном представляет собой управляющие последовательности ANSI, обернутые в мою строку. Я использовал TerminalTrueColorFormatter для печати результатов в терминале. Был еще один форматтер TerminalFormatter, но после некоторого выдергивания волос (читай отладка) я понял, что не могу использовать его для подсветки фона.

До сих пор я мог раскрашивать результаты, но одна важная задача, которая отсутствовала, заключалась в том, что в строках не было маркеров пробелов/табуляции. В старом исходном коде была пользовательская функция, которая перебирала строку, и если пробел или табуляция были найдены, они заменялись символом юникода, который выглядит как маркер в терминале для пробела и двойные стрелки вправо для табуляции. Я не мог этого сделать, потому что объект str, который у меня был сейчас, также был обернут escape-последовательностями кода ANSI, и я потратил почти полдня, пытаясь найти обходной путь для этого.

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

Я изменил тесты, чтобы они могли работать с подсветкой Pygments, и немного рефакторил код, что уменьшило дублирование длинных методов подсветки.



Веб-сайт документации медведя

Задача состояла в том, чтобы создать сайт для всей документации по коала-медведям. Сначала я не знал, какой стек выбрать, но после некоторого обсуждения с Tushar Gautam и Lasse Schuirmann я решил использовать потрясающий AngularJS(https://angular.io /) из-за его настраиваемых фильтров. Я использовал coala — show-bears json, чтобы получить вывод JSON со всеми деталями/конфигурациями присутствующих медведей. Я проанализировал эти данные и использовал Materiallize, чтобы отобразить их в списке карточек, где пользователь мог прочитать больше о медведе на следующей странице или мог увидеть некоторые важные детали в присутствующей опции отображения карты.

Вы можете взглянуть на веб-сайт здесь.

Этот сайт будет развернут вместе с coala-website, который является проектом Тушара.

Несколько угольных медведей, которые я сделал

Мне нравится создавать новых медведей для коала, так как я неукоснительно использую их в своих сторонних проектах. Во время моего периода GSoC я создал несколько медведей. Некоторые из них завершены и объединены, в то время как некоторые из них все еще открыты, и я продолжу работу над ними после того, как мой GSoC закончится.

Их список доступен вверху поста.

Что я не мог сделать

Я смог выполнить большую часть своих задач по предложению, и мне пришлось столкнуться с некоторыми трудностями в ходе проекта, но, тем не менее, большая часть важной работы была завершена и объединена. Однако я не смог выполнить навигацию по результатам и встроенный анализ исходного кода, которые упоминались в моем проекте. Я надеюсь продолжить работу над ними после того, как мой проект завершится, поскольку философия GSoC заключается в том, чтобы впитать культуру постоянного вклада в Open Source, а не покончить с этим за 3 месяца.

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

Проблема с Embedded Source Code Linting заключалась в том, что не было хорошего способа выяснить, какой язык анализируется в данный момент. Я открыл вопрос для задачи, связанной с этим, в которой пользователю будет представлено сообщение об ошибке, если он попытается использовать неправильный линтер, но статус PR был изменен на не происходит/не будет исправлено. Это связано с тем, что не существует единого точного подхода к получению языка, даже данные MIME в большинстве случаев не работают. Из-за этих причин и препятствий эти задачи не были выполнены, но я уверен, что мы можем придумать несколько лучших альтернатив для достижения этих целей, установив более достижимую цель.

Другие классные вещи, которые я сделал

Я хотел добавить URL-адреса ASCIINEMA на веб-сайт документации медведя, но не было ни одной точки, где я мог бы получить к ним доступ, поскольку все они были опубликованы в твиттере. Я написал скрипт, чтобы собрать все твиты и отфильтровать те, в которых есть URL-адрес asciinema.

Для развлечения я также написал скрипт, который подсчитывает, сколько раз вас упомянул @coala-analyzer.

Все они находятся в репозитории Twitter Scripts в моей ветке.

Кредиты

БОЛЬШОЕ спасибо инструментам, которые помогли мне решить мои задачи

Также спасибо моему наставнику ManoranjanP, со-наставнику Lasse, Mischa, AbdealiJK и остальному замечательному сообществу coala за помощь мне на протяжении всего проекта и предоставление замечательных и полезных отзывов обо всех моих PR. Я планирую оставаться на связи с сообществом коала после закрытия GSoC, чтобы мы могли снова надрать кому-нибудь задницу.

Удачного программирования!