Я большой поклонник документирования правильного поведения функций IDE, которые оказывают незначительное, но значительное влияние на поток кодирования - такие вещи, как автозавершение и комментирование/раскомментирование кода, которые вы, возможно, не понимаете, вы используете, но на в конце дня вы получили немного больше, чем вы могли бы сделать. Я делаю это в надежде, что другие языковые услуги, которые я должен использовать, включают функцию (-ы), впоследствии улучшая мою повседневную жизнь кодирования. "Настоящий" Smart Indent, т.е. Редактор Visual Studio 2008 С#, является одной из этих функций.
Отступ в базовом блочном коде достаточно прост и может быть взломан вместе в разумный промежуток времени достаточно хорошо, чтобы выполнить работу. С другой стороны, True Smart Indent - это, пожалуй, самая технически сложная задача, которую мне пришлось реализовать в IDE на сегодняшний день, и я реализовал свою справедливую долю. Даже полномасштабное автоматическое форматирование кода на лету проще; он просто отдает предпочтение Smart Indent для тяжелого подъема.
Я ищу обсуждения на высоком уровне алгоритмов Smart Indent общего назначения. В частности, я ищу либо исследование стратегий интеллектуального отступа, либо объективное описание всех нормальных и "крайних" случаев, которые можно было протестировать для обеспечения повторяемости результатов без ошибок. В конце концов, я "Я хотел бы предоставить как подробный рабочий процесс функциональности, конкретную основу для фактического внедрения этой функции, так и, наконец, сборку конкретной версии для этого языка и интеграцию ее в мои языковые службы.
PS: Редактор Visual Studio 2010 С# имеет несколько небольших ошибок в этой функции. Внедрив его сам, у меня есть совершенно новое уважение к работе, которую он выполняет, чтобы отполировать его.
Изменить (8/25): Мне удалось записать проект правил для того, как я думаю вещи следует обрабатывать, когда интеллектуальный отступ находится внутри комментария кода. Я, вероятно, буду работать с точки зрения С++/С# в правилах, но позже они должны быть параметризованы для аспектов других языков.