Как работает фильтр по паттернам Glob
Code2Prompt использует паттерны glob для включения или исключения файлов и директорий, работая аналогично инструментам типа tree или grep. Он позволяет передавать два независимых списка glob паттернов:
- список включений (
--includeили-i) - “эти паттерны разрешают файлы” - список исключений (
--excludeили-e) - “эти паттерны запрещают файлы”
Code2prompt должен решить для каждого файла в проекте, сохранить его или отбросить. Эта страница объясняет правила и решения дизайна, стоящие за ними.
1. Множества и Символы
Заголовок раздела «1. Множества и Символы»На протяжении всего объяснения мы используем обычную нотацию множеств
| Символ | Значение |
|---|---|
| множество файлов, которые соответствуют хотя бы одному паттерну включения | |
| множество файлов, которые соответствуют хотя бы одному паттерну исключения | |
| всё дерево проекта (вселенная) | |
| файлы, которые соответствуют обоим спискам (пересечение) | |
| файлы, которые не соответствуют ни одному списку |
2. Четыре Ситуации
Заголовок раздела «2. Четыре Ситуации»Обзор четырех ситуаций
Заголовок раздела «Обзор четырех ситуаций»| Список включений | Список исключений | Сохранённые файлы |
|---|---|---|
| A = ∅ | B = ∅ | Ω |
| A = ∅ | B ≠ ∅ | ¬B |
| A ≠ ∅ | B = ∅ | A |
| A ≠ ∅ | B ≠ ∅ | A \ B |
-
Нет списка включений, нет списка исключений
Если паттерны не указаны, сохраняются все файлы (
Ω). -
Только список исключений
В этом случае Code2Prompt действует как чёрный список, удаляя файлы, которые соответствуют исключённым паттернам (
Ω \ B = ¬B). -
Только список включений
Если указан только список включений, Code2Prompt действует как белый список, сохраняя только файлы, которые соответствуют включённым паттернам (
A). -
Списки включений и исключений
Если указаны оба списка, Code2Prompt сохраняет файлы, которые соответствуют паттернам включения, но удаляет те, которые соответствуют паттернам исключения (
A \ B).
3. Подробнее о пересечении
Заголовок раздела «3. Подробнее о пересечении»При наличии обоих списков (A ≠ ∅, B ≠ ∅) у вас есть четыре логические возможности
для пересечения C и остатка D.
Нужно C? | Нужно D? | Разумно? |
|---|---|---|
| Нет | Нет | Поведение по умолчанию (A \ B) |
| Да | Нет | То же поведение, что и случай 3 (A) |
| Нет | Да | удивительно (“отбросить то, что я запросил C, сохранить то, что нет”) |
| Да | Да | То же поведение, что и случай 1 (Ω) |
По этой причине была удалена опция --include-priority. Потому что это был бы тот же результат, как если бы у вас был только список включений (случай 3).
4. Таблица быстрого справочника
Заголовок раздела «4. Таблица быстрого справочника»| Хотите сохранить… | Используйте |
|---|---|
| всё | нет -i, нет -e |
| всё кроме некоторых паттернов | только -e |
| только то, что соответствует паттернам | только -i |
что соответствует -i, минус что соответствует -e | -i и -e |
Этот дизайн сохраняет ментальную модель простой:
- Список включений является белым списком, как только он существует.
- Список исключений является чёрным списком, наложенным сверху.
- Пересечение отбрасывается по умолчанию