/indentationDetector

A program for automatic detection of indentation size for a document with Java source code

Primary LanguageKotlin

Indentation detector

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 просто проходим по нему и выбираем самый популярный тип отступа. Это наводит на возможность дальшейшего апгрейда: например, можно выводить вероятность, с которой выведенный символ является верным