Проектная лаборатория
Собственный Shell
Этап 35 · Дополнение имён файлов
Дополнение нескольких аргументов
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы расширите автодополнение по Tab, чтобы оно работало для любого аргумента
Дополнение аргумента в любой позиции
Пока ваша оболочка дополняет первый аргумент после команды.
На этом этапе дополнение должно таким же образом работать для любого последующего аргумента:
- Извлеките текст после последнего пробела.
- Сопоставьте его с элементами текущего рабочего каталога.
- Дополните его по тем же правилам (наибольший общий префикс, звуковой сигнал при нескольких совпадениях, завершающий пробел или косая черта).
Например, если в текущем каталоге есть foo (файл) и bar/ (каталог):
$ ls b<TAB>
# Completes to bar/ (directory, no trailing space)
$ ls bar/
# User types space and f
$ ls bar/ f<TAB>
# Completes to foo (file, with trailing space)
$ ls bar/ foo
# User types space and x
$ ls bar/ foo x<TAB>
# No match, bell rings, input unchanged
$ ls bar/ foo xПроверки
Тестирующая система создаст элементы в текущем каталоге (например, foo и bar/) и запустит вашу программу следующим образом:
$ ./your_program.shЗатем она проверит дополнение аргументов в разных позициях:
$ ls <TAB><TAB>
bar/ foo
$ ls
$ ls b<TAB>
$ ls bar/
$ ls bar/ f<TAB>
$ ls bar/ foo
$ ls bar/ foo x<TAB>
$ ls bar/ foo xТестирующая система проверит, что:
- Дополнение корректно работает для первого аргумента.
- Дополнение корректно работает для последующих аргументов.
- Поведение при отсутствии совпадений (звуковой сигнал) работает в любой позиции аргумента.
- Все ранее реализованные возможности дополнения (наибольший общий префикс, несколько совпадений и т. д.) работают в любой позиции.
Примечания
- Каждый аргумент дополняется независимо по текущему рабочему каталогу. Предшествующий аргумент-каталог (например,
bar/) не меняет каталог поиска для последующих аргументов. Например, вls bar/ f<TAB>символfсопоставляется с элементами текущего рабочего каталога, а не с содержимымbar/. - Вся логика дополнения из предыдущих этапов применяется к каждой позиции аргумента.
Проверка в вашей 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 bf8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.