Задача сделать консольную утилиту для фронтендера.
Утилита будет брать все файлы с расширением .js
в текущей директории, находить в них все комментарии с TODO
. Искать по ним, фильтровать, сортировать.
Мы уже написали за тебя метод для работы с консолью и методы для чтения из файлов. Осталось написать остальное =)
Для запуска используй команду node index.js
При запуске специальный код ждет команды из консоли.
Сейчас он знает только команду exit
, остальные нужно дописать тебе.
- Получи из всех файлов все однострочные комментарии, начинающиеся с
TODO
. Все комментарии имеют одинаковое начало: два слеша, пробел, словоTODO
капсом, снова пробел и дальше текст комментария. Например:
// TODO Переделать это!
- Сейчас метод
processCommand
обрабатывает только командуexit
и завершает процесс в node. Научись обрабатывать еще одну команду из консоли:
show : показать все todo
Выводить нужно стандартным выводом в консоль console.log
. Можешь выводить как угодно твоим эстетическим чувствам: можно выводить просто массив в консоль, можно каждый элемент на новой строчке.
- В комментарии может присутствовать восклицательный знак (!), что означает, что это задача с высоким приоритетом. Научись обрабатывать команду из консоли:
important : показывать только todo, в которых есть восклицательный знак
- Текст в todo может быть представлен обычным текстом.
Или же использовать специальную разметку:
// TODO {Имя автора}; {Дата комментария}; {текст комментария}
После имени и даты обязательно ставится точка с запятой, а вот пробел между ними не обязателен. Научись обрабатывать еще одну команду из консоли:
user {username} : показывать только комментарии от указанного пользователя
Причем имя пользователя должно быть регистронезависимо.
Пример команды: user veronika
- Научись обрабатывать команды
sort {importance | user | date} : выводит отсортированные todo
Если аргумент importance
, то сначала выводятся комментарии с восклицательными знаками, потом все остальные.
Чем больше восклицательных знаков, тем выше приоритет и тем выше в списке этот комментарий.
Если аргумент user
, то выводятся задачи сгрупированные по пользователям, а в конце безымянные.
Если аргумент date
, то выводятся сначала самые новые, потом постарше, потом без дат.
Примеры команд: sort importance
, sort user
, sort date
- * Научись обрабатывать команду:
date {yyyy[-mm[-dd]]}: показывает все комментарии, созданные после переданной даты.
Датой может быть только год, год с месяцем (через дефис) или год с месяцем и днем.
Примеры команд: date 2015
, date 2016-02
, date 2018-03-02
.
- * Научись выводить результаты в консоль в виде таблицы:
- каждая строка отображает один комментарий
- у таблицы должно быть четыре колонки: важность, пользователь, дата, комментарий
- между ячейками должен быть разделитель — вертикальная черта (|). А от вертикальной черты до текста должно быть минимум два пробела отступа. Вот так:
! | pe | 2018-03-02 | sdkhsdfsdf
| pe | 2018-03-02 | sdkhsdfsdf
- если в комментарии есть восклицательные знаки, то в первой колонке нужно поставить символ !, в остальных случаях ничего не ставить
- ширина колонок (не считая отступ до вертикальных черт): 1, 10, 10, 50. При необходимости обрезай значение, поставив в конце многоточие (...), но учти, что обрезанный текст вместе с многоточием должен влезть в максимальную ширину колонки.
- вывод комментариев в командах
show
,important
,user {username}
,sort {type}
иdate {date}
должен отображаться в виде этой таблички.
Для этой задачи тебе может пригодиться метод padEnd
- * Научись подбирать ширину колонкам по самому длинному значению. Вот так:
корова | семья
я | лук
солнце | нехороший человек
Ограничения ширины из прошлого пункта (1, 10, 10, 50) считай за максимум возможной ширины.
- * Добавь таблице заголовок из 4 колонок:
! | user | date | comment
- ширина клеток заголовка тоже должна подбираться по самому длинному значению в этом столбце
- от остальной таблицы заголовок отделяется строкой со знаками минус (-) нужной длины. Должно получиться как-то так:
! | user | date | comment
---------------------------------
| pe | 2012 | dddlsl
| pe | 2012 | dddlsl
-
для создания заголовка переиспользуй уже написанный код для остальных строк таблицы. Если нужно выделить новый метод — делай это.
-
добавь строку из минусов еще и в конце таблицы.
Для этой задачи может пригодиться метод repeat
-
* Выводи в таблицах кроме информации из todo еще и имя файла, в котором этот todo найден. Чтобы выделить имя файла из пути можно воспользоваться модулем path из Node.js:
-
* По условиям задачи все todo имеют вид:
// TODO Переделать это
Но между слешами и todo может не быть пробела, после todo может быть двоеточие и отсутствовать пробел, todo может быть написан в любом регистре и даже в camelCase.
Чтобы учесть все эти вариации, тебе помогут регулярные выражения.
Прочитай про метод match у строк и сделай поиск TODO более универсальным.