Semantic highlighting (семантическая подсветка) - что это такое?

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

Пример семантической подсветки © Evan Brooks

Программные реализации:

Sublime

https://www.sublimetext.com/docs/color_schemes.html#hashed_syntax_highlighting - в Sublime Text 3 эта возможность “из коробки”, без плагинов, достаточно лишь задать цвета в цветовой схеме.

Для тёмной темы на hackernews рекомендуют цветовую схему Monnokay (sic!, не Monokai), https://github.com/cixtor/monnokay . Ставится вручную, правда. Скорее всего, можно настроить и лучше, в принципе можно задавать градиент произвольным списком цветов, а в Monnokay только 2.

Не Sublime

В Atom и emacs тоже есть.

Пошло всё вроде как изначально от KDevelop, и потом - статьи Evan Brooks.

В Visual Studio Code есть что-то с таким названием, но я посмотрел доки - эффекта разноцветных переменных там не декларируется. https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide

DrRacket - он для языка Racket (вроде лиспа), но для схожих целей рисует стрелочки между одинаковыми переменными при наведении.

Неактуальное

Плагин для Sublime Colorcoder (последнее обновление в 2014) - у меня не работает, в причинах не разбирался.

Мысли на тему

Довольно случайно и out of serendipity наткнулся на эту красивую идею. Кажется, отсюда может получиться некоторое количество задачек на хеширование для алгоритмических контестов. Возможно, часть из них будет осмысленна.

Я бы поостерёгся делать переменные с близкими названиями почти одноцветными - часто их полезно различать. Кроме того, помимо цвета букв идентификатора может быть ещё и цвет фона - и тут появляются вопросы контрастности, но зато сразу увеличивается вероятность различия раскраски идентификатора. Наконец, можно просто красить в разные цвета и хранить это в дополнительном файле, что позволит поддерживать “разноцветность” и “устойчивость цвета во времени” (это есть и так, но без условия поддержания разноцветности; можно ещё добавить относительно переименований посредством среды разработки, хотя это не особо нужно, кажется), и это нужно будет хранить во внешнем файле каком-то. Что-то вроде .semantic_colors. И не редактировать файлы ничем другим, кроме выбранного редактора.

По ощущениям, чуть-чуть связано с literate programming.