0,0
рейтинг
31 декабря 2013 в 19:12

Разработка → Скрипт для облегчения инспекции кода

Мне приходится читать много кода. Разного. Начиная от ассемблерных простыней на много тысяч строк, заканчивая прикладными программами на DSL, про которые никто за границами предметной области не слышал. А найти и настроить себе читалку на все случаи жизни почему-то оказалось задачей нетривиальной. Одна не понимает cp866, другая не умеет подсвечивать файлы с неправильным расширением, третья всем хороша, но на двадцатой тысяче строк начинает неприятно подтормаживать.

Благо, нет такой задачи, которую нельзя было бы решить небольшим скриптом на питоне. Я сделал скрипт, который принимает параметром имя сорца, делает из него красивый HTML, кладет его во временный файл, а файл этот отдает браузеру по умолчанию. То есть читалкой выступает браузер, который берет на себя функции распознавания кодировки и рендера, а скрипт делает подсветку и форматирование кода.

image

Главная фича скрипта — это универсальная подсветка. Подсветка не синтаксическая, цвет слова получается из первого рандомного числа при засевании генератора хешем слова. То есть одинаковые слова подсвечиваются одинаково, разные — настолько разно, насколько повезет.

image

С одной стороны, получается непривычно пестро. С другой — очень удобно, что uint32_t на глаз отличается от int32_t.

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

Еще одна фича разметки — выделение уникальных слов курсивным начертанием. Сама по себе уникальность ничего не говорит, но в определенном контексте может быть хорошим предупреждением. Например, если имя локальной переменной уникально, то она не используется. Если имя библиотечной функции уникально, то она не покрыта модульным тестом.

Третья фича нужна для того, чтобы слать гневные письма автору кода. Номера строк в левой колонке сделаны ссылками на mailto по первому адресу, встречающемуся в тексте, а как правило это почта автора и есть. Там же в теме письма прописаны имя файла и номер строки, а в теле письма — сама строчка. Mailto открывает почтовый клиент по умолчанию, никаких дополнительных настроек ему не надо.

Еще одна мелочь — слабый градиент серого на фоне. Зависит от настройки монитора, конечно, но в идеале его не должно быть заметно среди текста, но видно на пустом месте. Он немного помогает ориентироваться при многочисленных отступах.

Некоторые приятные дополнения дарятся самим браузером. Например, увеличение и уменьшение текста, закладки, история просмотров. Не говоря уже о привычных горячих клавишах и плагинах. Например, Awesome Screenshot позволяет снять кусок страницы и запостить его в Твитер, а Preparera Chinese — разбирать по словам китайские комментарии.

Сам скрипт доступен на Гитхабе под Апачевской лицензией, то есть его можно свободно брать, использовать по назначению и без, переписывать и доделывать под свой вкус беспрепятственно.
Александр Каленюк @akalenuk
карма
85,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (16)

  • 0
    А можно примеры? (внутрь статьи)
    • 0
      Внутрь, наверное, не получится. Лучшее, что я придумал — это скриншоты. Но на Гитхаб закинул пример.
  • +11
    Главная фича скрипта — это универсальная подсветка. Подсветка не синтаксическая, цвет слова получается из первого рандомного числа при засевании генератора хешем слова. То есть одинаковые слова подсвечиваются одинаково, разные — настолько разно, насколько повезет
    А вы знаете, это действительно находка! Мне как-то ни разу не приходила в голову такая версия подсветки, но вот сейчас я вижу, что у нее есть определенный смысл.
    • +4
      Еще бы строки внутри кавычек не включались в рандомную подсветку, было бы удобнее.
    • +1
      Идея безусловно интересная, только вот слишком уж радикально получается. В примере выше — имена модулей питоновских разными цветами… вот если эту идею продумать как следует и реализовать — возможно получится что-то весьма недурственное и удобное.
  • +4
    Для раскрашивания можно использовать цветовое пространство HUSL.
    Ещё нужно комментарии и строки глушить одним цветом, они не читаются. Понимаю, что ничего не зная о синтаксисе исходника, сделать это будет проблематично.
  • 0
    Оригинально, выглядит классно, хотя и сильно пëстро.
    А как насчëт редактирования текста?
    + было бы удобно если бы комменты игнорировались парсером.
    • 0
      Отличная идея, дело за малым, хотя бы перечислить все форматы комментариев на всех языках
      • 0
        Всё уже давно придумано, см тут, например. Правда, потом возникнут другие вопросы (как минимум, юношей пылких со взором горящим будет интересовать как отличать один язык от другого), etc. По мере решения этих вопросов придётся в конечном итоге вернуться к началу и спросить себя: а стоит ли задача такого геморроя? Да и есть ли задача в принципе?

        :-)
        • 0
          Как минимум coffee и haml там нет — я негодую :)
  • +1
    бесполезно.
  • 0
    Идея хороша, но способ хеширования странен — цвета могут поплыть, например, при изменении версии питона. Я бы предпочел что-нибудь более независимое от языка, например, SHA1(word).
  • +1
    Вдохновившись данным скриптом, сделал на коленке:
    github.com/fuCtor/chalks

    Отделяет комментарии и строки от общего потока кода, не участвуют в подсветке.
    Слова выделяются через span + style. К каждому приписывается еще уникальный идентификатор, можно прикрутить какой-нибудь JS код.
    • 0
      С учетом комментариев и строк,

      ruby:
      image

      C++:
      image
  • +1
    Интересная реализация подсветки, но в чистом виде, как мне кажется, будет полезна только узкому кругу (сильно зависит от задач).

    Хотя отдельные идеи (выделение уникальных слов и использование динамической цветовой схемы на основе хеша) — мне очень понравились.

    Что касается вашей задачи, то я не понял каким образом проводится инспекция кода и какие цели преследуются.

    Взгляните на «Colorer».

    Эта библиотека разбора и подсветки синтаксиса с очень гибкой системой настроек. Есть плагины для разных редакторов и программ + API для различных языков.
    Учитывая, что в библиотеку уже встроено более трех сотен схем для различных скриптов — возможно вам будет эта штука полезна.
    (сам использую в FarManager3 и Eclipse IDE)

    colorer.sourceforge.net/
    github.com/colorer/

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