Coder Social home page Coder Social logo

todo-statistic's Introduction

Задача сделать консольную утилиту для фронтендера.

Утилита будет брать все файлы с расширением .js в текущей директории, находить в них все комментарии с TODO. Искать по ним, фильтровать, сортировать.

Мы уже написали за тебя метод для работы с консолью и методы для чтения из файлов. Осталось написать остальное =)

Для запуска используй команду node index.js При запуске специальный код ждет команды из консоли.

Сейчас он знает только команду exit, остальные нужно дописать тебе.

    1. Получи из всех файлов все однострочные комментарии, начинающиеся с TODO. Все комментарии имеют одинаковое начало: два слеша, пробел, слово TODO капсом, снова пробел и дальше текст комментария. Например:
    // TODO Переделать это!
    1. Сейчас метод processCommand обрабатывает только команду exit и завершает процесс в node. Научись обрабатывать еще одну команду из консоли:
    show : показать все todo

Выводить нужно стандартным выводом в консоль console.log. Можешь выводить как угодно твоим эстетическим чувствам: можно выводить просто массив в консоль, можно каждый элемент на новой строчке.

    1. В комментарии может присутствовать восклицательный знак (!), что означает, что это задача с высоким приоритетом. Научись обрабатывать команду из консоли:
    important : показывать только todo, в которых есть восклицательный знак
    1. Текст в todo может быть представлен обычным текстом. Или же использовать специальную разметку: // TODO {Имя автора}; {Дата комментария}; {текст комментария} После имени и даты обязательно ставится точка с запятой, а вот пробел между ними не обязателен. Научись обрабатывать еще одну команду из консоли:
    user {username} : показывать только комментарии от указанного пользователя

Причем имя пользователя должно быть регистронезависимо. Пример команды: user veronika

    1. Научись обрабатывать команды
    sort {importance | user | date} : выводит отсортированные todo

Если аргумент importance, то сначала выводятся комментарии с восклицательными знаками, потом все остальные.

Чем больше восклицательных знаков, тем выше приоритет и тем выше в списке этот комментарий.

Если аргумент user, то выводятся задачи сгрупированные по пользователям, а в конце безымянные.

Если аргумент date, то выводятся сначала самые новые, потом постарше, потом без дат.

Примеры команд: sort importance, sort user, sort date

    1. * Научись обрабатывать команду:
    date {yyyy[-mm[-dd]]}: показывает все комментарии, созданные после переданной даты.

Датой может быть только год, год с месяцем (через дефис) или год с месяцем и днем.

Примеры команд: date 2015, date 2016-02, date 2018-03-02.

    1. * Научись выводить результаты в консоль в виде таблицы:
  • каждая строка отображает один комментарий
  • у таблицы должно быть четыре колонки: важность, пользователь, дата, комментарий
  • между ячейками должен быть разделитель — вертикальная черта (|). А от вертикальной черты до текста должно быть минимум два пробела отступа. Вот так:
  !  |  pe          |  2018-03-02  |  sdkhsdfsdf
     |  pe          |  2018-03-02  |  sdkhsdfsdf
  • если в комментарии есть восклицательные знаки, то в первой колонке нужно поставить символ !, в остальных случаях ничего не ставить
  • ширина колонок (не считая отступ до вертикальных черт): 1, 10, 10, 50. При необходимости обрезай значение, поставив в конце многоточие (...), но учти, что обрезанный текст вместе с многоточием должен влезть в максимальную ширину колонки.
  • вывод комментариев в командах show, important, user {username}, sort {type} и date {date} должен отображаться в виде этой таблички.

Для этой задачи тебе может пригодиться метод padEnd

    1. * Научись подбирать ширину колонкам по самому длинному значению. Вот так:
  корова  |  семья
  я       |  лук
  солнце  |  нехороший человек

Ограничения ширины из прошлого пункта (1, 10, 10, 50) считай за максимум возможной ширины.

    1. * Добавь таблице заголовок из 4 колонок:
  !  |  user  |  date  | comment
  • ширина клеток заголовка тоже должна подбираться по самому длинному значению в этом столбце
  • от остальной таблицы заголовок отделяется строкой со знаками минус (-) нужной длины. Должно получиться как-то так:
 !  |  user  |  date  | comment
---------------------------------
    |  pe    |  2012  | dddlsl
    |  pe    |  2012  | dddlsl
  • для создания заголовка переиспользуй уже написанный код для остальных строк таблицы. Если нужно выделить новый метод — делай это.

  • добавь строку из минусов еще и в конце таблицы.

Для этой задачи может пригодиться метод repeat

  1. * Выводи в таблицах кроме информации из todo еще и имя файла, в котором этот todo найден. Чтобы выделить имя файла из пути можно воспользоваться модулем path из Node.js:
    1. * По условиям задачи все todo имеют вид:
    // TODO Переделать это

Но между слешами и todo может не быть пробела, после todo может быть двоеточие и отсутствовать пробел, todo может быть написан в любом регистре и даже в camelCase.

Чтобы учесть все эти вариации, тебе помогут регулярные выражения.

Прочитай про метод match у строк и сделай поиск TODO более универсальным.

todo-statistic's People

Contributors

aminopyridin avatar nulladdict avatar disturm avatar makzar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.