Проектная лаборатория

Собственный Shell

0 / 76этапов пройдено

Этап 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 go

2. Откройте папку в IDE

cd ./my-shell

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage bf8

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста