У меня есть видение прекрасного будущего.

Будущее без споров о camelCase и snake_case.

Будущее без споров о табах и пробелах.

Будущее без заставления людей писать код в стиле, который им не нравится.

Будущее без линтеров.

"Невозможно!" С балкона слышу, на что отвечаю: нет.

Я провел прошлую неделю в Лос-Анджелесе на RubyConf (это было здорово! Все доклады будут опубликованы в ближайшие несколько недель, и вы должны их проверить), и было удивительно много разговоров о линтерах — в значительной степени спровоцированных к выпуску Standard, гем, предоставляющего рекомендуемый набор правил для линтера RuboCop.

Дело в том, что мы очень близки к моменту (если не к нему или уже прошли), когда наши инструменты позволят нам переформатировать код на лету; есть много исследований по этому поводу в сообществе #MLonCode (машинное обучение кода). Это позволило бы разработчикам писать код в любом стиле, который им нравится; затем код будет сохранен — вероятно, в более общей форме — и когда он будет загружен для чтения или редактирования, он может быть автоматически переформатирован, чтобы соответствовать предпочтительному стилю читателя.

Итак, я пишу свой Ruby с помощью мягких вкладок с двумя пробелами для отступов, но тот, кто предпочитает Python, увидит его с жесткими вкладками. Я пишу свой JavaScript только с теми терминальными точками с запятой, которые необходимы для функциональности, но кто-то, кто более осторожен, увидит, что каждый полный оператор заканчивается точкой с запятой.

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

Мир, в котором каждый может писать код в своем собственном идиоматическом стиле, и в котором весь код, который они видят, написан в том же идиоматическом стиле, просто избегает проблемы, для решения которой созданы линтеры. .

Как мы реализуем это утопическое видение? Нам понадобится несколько вещей:

  • Во-первых, редакторы должны будут уметь переформатировать на лету (от идиоматического к общему и обратно).
  • Во-вторых, приложения, в которых мы можем просматривать код (GitHub, Bitbucket), должны иметь возможность принимать идиоматические предпочтения и применять их, когда люди просматривают код.
  • И в-третьих, нам придется автоматизировать генерацию этих настроек — и здесь в дело вступает машинное обучение. Должна быть возможность определить личный стиль кодирования на основе прошлого написанного вами кода, чтобы вы могли указать алгоритму на ваш старый код и заставить его сгенерировать файл, который поможет редакторам и онлайн-приложениям отображать ваш код (и с помощью этого алгоритма, интегрированного в ваш редактор, он также может узнать, как ваши предпочтения меняются с течением времени)

Итак, разработчики редакторов и исследователи #MLonCode, давайте сделаем это! Давайте уничтожим линтеры, закончим дебаты о стиле, на которые ушло бесчисленное количество часов, предотвратим тривиальные, бесполезные комментарии и отправимся в будущее вместе!