Пакет унифицирует вход: открыть файл, собрать директорию в corpus или материализовать stdin во временный snapshot и вернуть единый Handle/Source.
См. также doc/architecture.md.
- открыть входной path из
--path/--file; - рекурсивно собрать директорию в список текстовых файлов и synthetic corpus;
- при отсутствии пути сохранить
stdinво временный файл; - вернуть immutable
Sourceс metadata,SnapshotPath()иOpen(); - удалить временный файл при cleanup.
Open(path, stdin)HandleSourceSourceMeta/SnapshotSource/FileBackedSource
Входящие:
internal/app
Исходящие:
- стандартная библиотека
internal/localize
- Если path указывает на файл, пакет валидирует его и возвращает single-file
Source. - Если path указывает на директорию, пакет рекурсивно собирает пригодные text files.
- Для директории строится synthetic corpus с file-boundary headers и отдельным snapshot path.
- Если path не задан, читается
stdinи материализуется во временный файл. Handle.Close()удаляет временный файл, если он был создан пакетом.
- Все режимы получают path-aware источник даже при работе через
stdin. - Методы
InputPath(),SnapshotPath(),DisplayName(),BackingFiles()иOpen()отделяют user-facing metadata от технического snapshot path. - Для
stdinDisplayName()равенstdin,InputPath()пустой, аSnapshotPath()указывает на temp file. - Для директорий
InputPath()остаётся root path,SnapshotPath()указывает на synthetic corpus, аBackingFiles()хранит actual path + relative display path. - Из директории включаются только regular text files; dot-directories, symlink-объекты и файлы с non-text MIME пропускаются.
- Ошибки открытия, записи, закрытия и проверки повторного открытия локализуются.
- открытие файлов и обработка отсутствующего файла;
- рекурсивный обход директорий и relative display paths;
- пропуск hidden/binary/symlink entries;
- materialized snapshot для file/stdin/directory и cleanup temp file;
- error paths при create/read/close/reopen temp file;
- безопасный
Close()на nil/empty handle.
- Любая новая политика работы с директориями,
stdinили temp files должна жить здесь, а не в режимах. - Если меняется форма
Source, проверьте все mode-пакеты иinternal/app. - Новые локализованные ошибки пакета добавляйте в
i18n/{en,ru}.toml.