Инструменты рабочего пространства

TODO в коде

TODO — это обещание, которое человек дал себе и потерял. Оно пишется там, где проблема, то есть ровно там, куда больше никто не заглядывает, а к моменту, когда оно важно, автор уже в другой команде. Grep их находит, но тысяча строк вывода grep равносильна тому, чтобы не найти ничего.

Вкладка TODO в доке анализатора читает их все и делает то, чего grep не умеет: группирует. Откройте док из строки состояния или из палитры команд (TODO в коде) и переключитесь на вторую вкладку.

Строка состояния считает метки рядом с ошибками и предупреждениями анализаторов; щелчок по этому счётчику открывает эту вкладку.

Вкладка TODO, сгруппированная по владельцу

Что считается меткой

Тег, внутри комментария, в файле, который Git отслеживает или стал бы отслеживать:

Написано Прочитано как
// TODO: выкатить метка TODO, без владельца
//todo выкатить то же самое — двоеточие и пробел необязательны
# todo выкатить то же самое — регистр и язык не важны
/* TODO(cgm): выкатить */ метка TODO, владелец cgm
-- TODO (CGM) выкатить тот же владелец: cgm, (CGM) и [cgm] — один человек
<!-- TODO: @cgm выкатить --> и снова то же самое

Теги: TODO, FIXME, BUG, HACK, XXX, NOTE, OPTIMIZE, REVIEW, REFACTOR, DEPRECATED, QUESTION, IDEA, WIP и TEMP. Первые четыре раскрашены, потому что «здесь сломано» и «здесь у меня была идея» не должны выглядеть одинаково в одном списке.

Тег обязан стоять после начала комментария — //, #, --, ;, %, /*, *, <!--, """. Больше ничего не считается: todo = [l for l in lines] — это код, а панель, записывающая присваивание переменной в долг, — панель, которой не поверят во второй раз. То же правило не пускает в список функцию с именем reviewNotes.

Группировка и есть смысл

Четыре оси, по одному щелчку:

Группировать по Отвечает на вопрос
Метке Какой долг тащит этот репозиторий?
Владельцу Что оставил каждый — и что лежит в куче без владельца?
Папке Какой угол дерева гниёт?
Файлу Обычный список, когда вы и так знаете, куда идёте.

Без владельца — настоящая группа, а не остаток: метки, под которыми никто не поставил имя, — это те, которые никто никогда не подбирает, и увидеть их посчитанными и есть смысл.

Чипы меток сверху фильтруют список; то же делает щелчок по значку владельца в строке и поле поиска, которое ищет по тексту, файлу, метке и владельцу. Только изменённые сужает список до файлов, которые вы правили и ещё не зафиксировали, — последняя проверка перед пушем, когда // FIXME, оставленный час назад, вот-вот станет постоянным.

Щелчок по строке открывает файл на нужной строке.

Чего он не делает

  • Он читает и никогда не пишет. Никакой отметки «сделано»: закрыть TODO — значит удалить строку и зафиксировать это. Список, который Gitcito ведёт за вас, — это todos, совсем другая вещь: личные заметки, живущие в приложении, а не в коде.
  • Игнорируемые файлы пропускаются, вместе с node_modules, что бы ни говорили метки внутри. Неотслеживаемые файлы, наоборот, входят: метка, написанная пять минут назад, важнее всех.
  • Он не отличает комментарий от строки. Строка const banner = "// TODO" для сканирования — метка. У него нет парсера сорока языков, и он его не изображает.
  • Сканирование — это снимок. Отредактируйте файл, и панель сохранит прежние числа до следующего сканирования; кнопка обновления — вся история целиком.
  • Он останавливается на 5000 метках. У репозитория за этой чертой проблема с долгом, которую не решит никакая панель.

Где он выполняется

Один git grep по рабочему дереву — поэтому миллисекунды там, где вкладка Проблемы тратит секунды: ничего не компилируется, никакой тулчейн не участвует, а поиск пропускает бинарники и игнорируемые пути, потому что Git уже знает, какие это.

Улучшить этот перевод на GitHub