A program for automatic detection of indentation size for a document with Java source code
Если мы хотим уметь обрабатывать ошибки в форматировании документа, необходимо рассматривать весь файл и использовать какую-то метрику, которая будет решать, какой отступ является основным, а какой сделан по ошибке
Будем считать не количество строк, имеющих данный отступ, а количество блоков кода, например таких:
for (symbol in str) {
// some code
// more code
// another line
// ...
// last
}
Тогда, даже если в каком-то блоке программист перепутал размер отступа, это не сильно скажется на всем документе. Кроме того, такой подход решает проблему многострочных комментариев, которые часто имеют отступ в 1 пробел
Вкратце о реализации: Будем в каждой строке смотреть разницу размера её отступа и отступа в предыдущей строке. Тогда пример выше даст вклад в общий вес отступа 4 пробелами 2 условные единицы: в начале и в конце блока. Кроме того, запоминаем и сам символ, который использовался для отступа
Для хранения информации об отступах используется hashMap: {indentSymbol: {indentSize: meetCount}}
Это позволяет за один обход документа получить и информацию о символе, использовавшемся для отступа
После генерации hashMap просто проходим по нему и выбираем самый популярный тип отступа. Это наводит на возможность дальшейшего апгрейда: например, можно выводить вероятность, с которой выведенный символ является верным