Pull to refresh

Заметки для редактора исходного кода (среды разработки)

Reading time 4 min
Views 4.7K

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

КДПВ:


Правило одного окна одной кнопки


Это главная идея, которую, как я считаю, следовало бы перенять как существующим средам разработки, так и новым, находящимся ещё только на стадии проектирования. Количество настроек в существующих IDE выросло настолько, что в них стало очень трудно ориентироваться. Спасение в данной ситуации [применительно к настройкам отображения] я вижу в системе визуально-контекстно-зависимых настроек. В двух словах, следует зарезервировать две кнопки: одну для курсора редактирования (каретки\caret), например F1, а другую для курсора/указателя мыши (mouse pointer), например F4 {в принципе, можно отказаться от F4 в пользу только одной кнопки [F1], если получится на ~100% угадывать намерение пользователя, а именно отслеживать последнее движение и смотреть было последнее действие связано с перемещением курсора редактирования, либо с перемещением курсора мыши}.

Нажатие на F1 открывает окно с краткой справкой, а также с кнопкой настроек, относящихся только к области, огороженной рамками текущего символа, на который указывает курсор редактирования. Так было бы очень удобно настраивать отображение, например, цвет фона строки с точкой останова (breakpoint) и вообще любых элементов текста программы, которые попадают в квадратик, очерченный габаритами символа под курсором, то есть получается такое как бы "увеличительное стекло".
Пример практической пользы от настройки посредством F1
В языке PHP мне не нравится знак доллара перед именем переменных. Чтобы он не раздражал так сильно, его можно сделать полупрозрачным.
Например: .
Все 3 знака $ в данной строке кода отображаются различным цветом и с помощью правила одной кнопки настроить их отображение будет очень просто.

Нажатие на F4 открывает аналогичное окно, только относящееся к круговой области [диаметром ~10 пикселей] вокруг курсора мыши. Таким способом было бы легко отключить все лишние элементы интерфейса (а также включить, наведя указатель мыши на то место, где они были), например отображение добавленных/изменённых строк, которое почему-то до сих пор невозможно отключить в PyCharm и PhpStorm.

Красивое отображение кода


Во-первых, как видно на рисунке в начале статьи, я предлагаю, помимо вертикальных "линеек", отображающихся во многих IDE, добавить ещё горизонтальные.
Во-вторых, многие двойные операторы можно отображать как единые символы: ══ вместо ==, ≠ вместо != и т.д. (Где-то на Хабре была статья, посвящённая таким украшательствам (не эта, но похожая), к сожалению, сейчас уже не могу найти.) Такую настройку хорошо спрятать под единую кнопку F1 — так можно будет легко отключить замену для конкретного символа (например, замену C на ∈) или же отключить все замены сразу.

Отладка. HTML Watch, виртуальные свойства\properties и заморозка\freeze


Поле ввода для кода, генерирующего HTML, который отображается в отдельном окошке, которое можно перемещать или прикреплять к существующим элементам среды разработки.
(Потребность возникла, когда я отлаживал лексический анализатор, я подумал о том, что было бы удобно видеть не просто целочисленную переменную, показывающую текущую позицию, а отслеживать текущее положение визуально.)
[Разумеется, должна быть [её нет в PyCharm] возможность отображать многострочные строки также как в MS Visual Studio.]
Вообще, в качестве workaround'а можно использовать HTML Visualizer в MS Visual Studio указав имя специально добавленной для этого функции на Python. [Собственно я предлагаю дать возможность вставлять многострочный код в Watch.]

Когда смотришь свойства (члены-данные) объекта, я предлагаю добавить в конце [после всех реальных свойств] плюсик для добавления выражений [виртуальных свойств], например: при просмотре переменной node_expression типа SymbolNode удобно добавить виртуальное свойство value, вычисляющееся как self.token.value(source). Также нужен механизм группировки, так как большинство свойств объекта нужно не часто смотреть и их можно было бы спрятать под группу.

Ещё одна фича, которой мне не хватает в существующих отладчиках, это "заморозка" значений выражений. К примеру есть такая функция на Python:
def set_scope_recursive(sn, scope):
    sn.scope = scope
    for child in sn.children:
        set_scope_recursive(child, scope)
Находясь на строчке for child in sn.children: добавляем в окно Watch выражение sn.children. Затем на строчке set_scope_recursive(child, scope) нажимаем F11 (Step Into). Теперь sn.children в окне Watch обновится. А в данном случае удобнее было бы если бы оно не обновлялось, а осталось "замороженным", чтобы можно было видеть на каком узле из оригинального массива sn.children мы находимся на данный момент. С точки зрения интерфейса правый клик мышью на выражении и пункт контекстного меню Freeze\Заморозить.
[Возможно, более правильно будет не замораживать/фиксировать заданные выражения, а привязывать их к уровню call stack, так как при попадании внутрь какой-либо функции все выражения в окне Watch, основанные на локальных переменных, ломаются [{и чтобы они не ломались, их можно привязать к уровню call stack, на котором они были добавлены}].]

Сообщения об ошибках компиляции


Я считаю, что не имеет смысла показывать много ошибок списком, а имеет смысл показывать одну наиболее точную ошибку, причём сразу же устанавливать курсор [и показывать это место файла] на эту ошибку после нажатия F5 (Run/Debug). Ведь вернуться к предыдущему виду всегда можно нажав Ctrl+- или другое настроенное сочетание клавиш.

Произвольный размера таба


Подарок для тех, кто любит табы вместо пробелов для отступа (indentation), и особенно для тех, кто различает отступ и выравнивание. Суть идеи в том, чтобы в поле tab size\размер табуляции можно было вводить дробное количество символов. Как вам табуляция, скажем, в 3 с половиной символа? Или π (пи) символов?

Дерево Undo/Redo


Сталкивались ли вы с ситуацией, когда после отката на продолжительное количество шагов операцией Undo, вместо Redo по ошибке нажимали какую-либо клавишу на клавиатуре, что сразу же приводило к невозможности операции Redo?
Лично я пользуюсь операцией Undo достаточно часто с целью review\просмотреть последние сделанные в текущем файле изменения, и был бы рад если не полноценной замене двух стеков Undo и Redo на дерево изменений, то хотя бы наличию механизма защиты от потери изменений из-за случайного нажатия клавиши. В качестве такого механизма и для совместимости с существующим поведением в большинстве текстовых редакторов, я предлагаю задействовать новое сочетание клавиш Ctrl+Shift+Y, которое сначала отменит случайное нажатие клавиши (не помещая его в Redo-стек), а затем продолжит операцию Redo.
Tags:
Hubs:
-5
Comments 7
Comments Comments 7

Articles