Skip to content

Instantly share code, notes, and snippets.

@alextretyak
Last active August 22, 2019 01:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alextretyak/da360485bb54fba78e8ac3ee5ecaaa15 to your computer and use it in GitHub Desktop.
Save alextretyak/da360485bb54fba78e8ac3ee5ecaaa15 to your computer and use it in GitHub Desktop.
Заметки для редактора исходного кода ([[[новой ]]]среды разработки)
[[[
[[[Хабы: Ненормальное программирование]]]
[[[Заголовок: Заметки для редактора исходного кода ([[[новой ]]]среды разработки)]]]
[[[Метки: среда разработки, редактор исходного кода, двойная статья]]]
]]]
В данной статье речь пойдёт об улучшательствах и украшательствах, которые могли бы дополнить и без того достаточно продвинутую среду разработки.
[[[К]]]КДПВ[‘[[[Красивый ]]]Код для привлечения внимания’]:
Р‘https://gist.githubusercontent.com/alextretyak/da360485bb54fba78e8ac3ee5ecaaa15/raw/9cffeb487dc82cc3e73dddc3c320e966bc3777e5/codesample.png’
'‘<cut />’'
Н‘Правило -‘одного окна’ одной кнопки’
[[[[Речь идёт о кнопке F1.]
]]]Это главная идея, которую, как я считаю, следовало бы перенять как существующим средам разработки, так и новым, находящимся ещё только на стадии проектирования. Количество настроек в существующих IDE выросло настолько, что в них стало очень трудно ориентироваться. Спасение в данной ситуации [применительно к настройкам отображения] я вижу в системе визуально-контекстно-зависимых настроек. В двух словах, следует зарезервировать две кнопки: одну для курсора редактирования (каретки\caret), например F1, а другую для курсора/указателя мыши (mouse pointer), например F4 {в принципе, можно отказаться от F4 в пользу только одной кнопки [F1], если получится на ~100% угадывать намерение пользователя, а именно отслеживать последнее движение [[[— в зависимости от того,]]]и смотреть было последнее действие связано с перемещением курсора редактирования, либо с перемещением курсора мыши}.
Нажатие на F1 открывает окно с краткой справкой, а также с кнопкой настроек, относящихся только к области, огороженной рамками текущего символа, на который указывает курсор редактирования. Так было бы очень удобно настраивать отображение, например, цвет фона строки с точкой останова (breakpoint) и вообще любых элементов текста программы, которые попадают в квадратик, очерченный габаритами символа под курсором, то есть получается такое как бы "увеличительное стекло".
‘Пример практической пользы от настройки посредством F1’{
В языке PHP мне не нравится знак доллара перед именем переменных. Чтобы он не раздражал так сильно, его можно сделать полупрозрачным.
Например: Р‘https://gist.githubusercontent.com/alextretyak/da360485bb54fba78e8ac3ee5ecaaa15/raw/3b86f0f8a9f5de7fb5fdd07a7b611424b972e183/php.png’.
Все 3 знака $ в данной строке кода отображаются различным цветом и с помощью правила одной кнопки настроить их отображение будет очень просто.
}
Нажатие на F4 открывает аналогичное окно, только относящееся к круговой области [диаметром ~10 пикселей] вокруг курсора мыши. Таким способом было бы легко отключить все лишние элементы интерфейса (а также включить, наведя указатель мыши на то место, где они были), например отображение добавленных/изменённых строк, которое почему-то до сих пор ‘невозможно отключить в PyCharm и PhpStorm’[https://intellij-support.jetbrains.com/hc/en-us/community/posts/206335969-Remove-the-colors-in-indicating-changed-files-when-using-GIT-VCS [[[<- google:‘pycharm turn off version control bars’]]]].
Н‘Красивое отображение кода’
Во-первых, как видно на рисунке в начале статьи, я предлагаю, помимо вертикальных "линеек", отображающихся во многих IDE, добавить ещё горизонтальные.
Во-вторых, многие двойные операторы можно отображать как единые символы: ══ вместо ==, ≠ вместо != и т.д. (Где-то на Хабре была статья, посвящённая таким украшательствам (не эта[https://habrahabr.ru/post/243005], но похожая), к сожалению, сейчас уже не могу найти.) Такую настройку хорошо спрятать под единую кнопку F1 — так можно будет легко отключить замену для конкретного символа (например, замену C на ∈) или же отключить все замены сразу.
Н‘Отладка. HTML Watch, виртуальные свойства\properties и заморозка\freeze’
Поле ввода для кода, генерирующего HTML, который отображается в отдельном окошке, которое можно перемещать или прикреплять к существующим элементам среды разработки.
(Потребность возникла, когда я отлаживал лексический анализатор[[[ (scopes_determinator.py) —]]], я подумал о том, что было бы удобно видеть не просто целочисленную переменную, показывающую текущую позицию, а отслеживать текущее положение визуально.)
[Разумеется, должна быть [её нет в PyCharm] возможность отображать многострочные строки также как в MS Visual Studio.]
Вообще, в качестве workaround'а можно использовать HTML Visualizer в MS Visual Studio указав имя специально добавленной для этого функции на Python. [Собственно я предлагаю дать возможность вставлять многострочный код в Watch.]
Когда смотришь [[[properties\]]]свойства (члены-данные) объекта, я предлагаю добавить в конце [после всех [[[действительных/]]]реальных свойств] плюсик для добавления выражений [виртуальных свойств], например: при просмотре переменной `node_expression` типа SymbolNode[https://sourceforge.net/u/t-a-v/11l/python_to_11l/ci/d20354b8b59267e901e49fff8cffb837a0edf38f/tree/parse.py#l117 <- https://bitbucket.org/11l-lang/python_to_11l/src/d20354b8b59267e901e49fff8cffb837a0edf38f/parse.py?at=default#lines-117] удобно добавить виртуальное свойство value, вычисляющееся как `self.token.value(source)`. Также нужен механизм группировки, так как большинство [[[properties\]]]свойств объекта нужно не часто смотреть и их можно было бы спрятать под группу.
Ещё одна фича, которой мне не хватает в существующих отладчиках, это "заморозка" значений выражений. К примеру есть такая функция на Python:
#(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), и особенно для тех, кто ‘различает отступ и выравнивание’[https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces [[[<- google:‘tabs indent alignment’]]]]. Суть идеи в том, чтобы в поле tab size\размер табуляции можно было вводить дробное количество символов. Как вам табуляция, скажем, в 3 с половиной символа? Или π (пи) символов?
[[[Впрочем, эта идея конфликтует с ‘[-...-]’ и я не рассматриваю её слишком всерьёз.
]]]
Н‘Дерево Undo/Redo’
Сталкивались ли вы с ситуацией, когда после отката на продолжительное количество шагов операцией Undo, вместо Redo по ошибке нажимали какую-либо клавишу на клавиатуре, что сразу же приводило к невозможности операции Redo?
Лично я пользуюсь операцией Undo достаточно часто с целью review\просмотреть последние сделанные в текущем файле изменения, и был бы рад если не полноценной замене двух стеков Undo и Redo на дерево изменений, то хотя бы наличию механизма защиты от потери изменений из-за случайного нажатия клавиши. В качестве такого механизма и для совместимости с существующим поведением в большинстве текстовых редакторов, я предлагаю задействовать новое сочетание клавиш Ctrl+Shift+Y, которое сначала отменит случайное нажатие клавиши (не помещая его в Redo-стек), а затем продолжит операцию Redo.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment