Last active
August 22, 2019 01:07
-
-
Save alextretyak/da360485bb54fba78e8ac3ee5ecaaa15 to your computer and use it in GitHub Desktop.
Заметки для редактора исходного кода ([[[новой ]]]среды разработки)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[[ | |
[[[Хабы: Ненормальное программирование]]] | |
[[[Заголовок: Заметки для редактора исходного кода ([[[новой ]]]среды разработки)]]] | |
[[[Метки: среда разработки, редактор исходного кода, двойная статья]]] | |
]]] | |
В данной статье речь пойдёт об улучшательствах и украшательствах, которые могли бы дополнить и без того достаточно продвинутую среду разработки. | |
[[[К]]]КДПВ[‘[[[Красивый ]]]Код для привлечения внимания’]: | |
Р‘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