Проектная лаборатория
Собственный Shell
Этап 31 · Дополнение имён файлов
Дополнение каталогов
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку дополнения имён каталогов.
Дополнение имён каталогов
Пока оболочка дополняет имена и пути файлов. Теперь вы расширите её для дополнения каталогов.
Дополнение каталогов помогает пользователям переходить в подкаталоги без ввода полного пути.
Когда пользователь нажимает <TAB>, а совпадение является каталогом:
- Дополните токен совпавшим именем каталога.
- Добавьте завершающую
/без пробела.
Например:
$ cd proj<TAB>
$ cd project/
# ^ note the trailing slash (no space)Завершающая / позволяет сразу снова нажать Tab, чтобы дополнить следующий уровень пути.
Ещё несколько примеров:
# Example 1: Complete a directory
$ rmdir p<TAB>
$ rmdir pig/
# Example 2: Complete into a directory
$ rmdir pig/<TAB>
$ rmdir pig/dog/Во втором примере пользователь уже ввёл pig/, затем нажимает Tab, чтобы дополнить до pig/dog/.
Проверки
Тестирующая система создаст вложенные каталоги (например, pig/dog/) и запустит вашу программу следующим образом:
$ ./your_program.shЗатем она имитирует пользовательский ввод:
$ ls <TAB>
$ ls pig/
$ ls pig/<TAB>
$ ls pig/dog/Тестирующая система проверит, что:
- Первое нажатие Tab после команды (например,
ls) дополняет ввод до первого каталога с косой чертой в конце. - Второе нажатие Tab дополняет ввод до вложенного каталога с косой чертой в конце.
- После косых черт не добавляется пробел.
Примечания
- Пока достаточно обработать случай с ровно одним совпавшим элементом. Несколько совпадений мы рассмотрим на следующих этапах.
- Должно работать дополнение и файлов, и каталогов. Файлы получают завершающий пробел, а каталоги — косую черту без пробела.
- Проверить, является ли элемент каталогом, можно средствами работы с файловой системой вашего языка (например,
os.path.isdir()в Python,fs.statSync().isDirectory()в Node.js).
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init shell ./my-shell --language go2. Откройте папку в IDE
cd ./my-shellРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage lc6Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.