---
title: Как работает фильтр по паттернам Glob
description: Как Code2Prompt решает, какие файлы сохранить или отбросить, используя glob включений (-i) и исключений (-e).
---

Code2Prompt использует паттерны glob для включения или исключения файлов и директорий, работая аналогично инструментам типа tree или grep. Он позволяет передавать два независимых _списка_ glob паттернов:

- **список включений** (`--include` или `-i`) - "эти паттерны разрешают файлы"
- **список исключений** (`--exclude` или `-e`) - "эти паттерны запрещают файлы"

Code2prompt должен решить для каждого файла в проекте, сохранить его или отбросить. Эта страница объясняет правила и решения дизайна, стоящие за ними.

---

## 1. Множества и Символы

На протяжении всего объяснения мы используем обычную нотацию множеств

| Символ                            | Значение                                                                       |
| --------------------------------- | ------------------------------------------------------------------------------ |
| $A$                               | множество файлов, которые соответствуют **хотя бы одному** паттерну включения  |
| $B$                               | множество файлов, которые соответствуют **хотя бы одному** паттерну исключения |
| $\Omega$                          | всё дерево проекта (_вселенная_)                                               |
| $C = A \cap B$                    | файлы, которые соответствуют обоим спискам (_пересечение_)                     |
| $D = \Omega \setminus (A \cup B)$ | файлы, которые не соответствуют ни одному списку                               |

---

## 2. Четыре Ситуации

### Обзор четырех ситуаций

| Список включений | Список исключений | Сохранённые файлы |
| ---------------- | ----------------- | ----------------- |
| A = ∅            | B = ∅             | Ω                 |
| A = ∅            | B ≠ ∅             | ¬B                |
| A ≠ ∅            | B = ∅             | A                 |
| A ≠ ∅            | B ≠ ∅             | A \ B             |

1. **Нет списка включений, нет списка исключений**

   Если паттерны не указаны, сохраняются все файлы (`Ω`).

2. **Только список исключений**

   В этом случае Code2Prompt действует как чёрный список, удаляя файлы, которые соответствуют исключённым паттернам (` Ω \ B = ¬B`).

3. **Только список включений**

   Если указан только список включений, Code2Prompt действует как белый список, сохраняя только файлы, которые соответствуют включённым паттернам (`A`).

4. **Списки включений _и_ исключений**

   Если указаны оба списка, Code2Prompt сохраняет файлы, которые соответствуют паттернам включения, но удаляет те, которые соответствуют паттернам исключения (`A \ B`).

---

## 3. Подробнее о пересечении

При наличии обоих списков (`A ≠ ∅`, `B ≠ ∅`) у вас есть четыре логические возможности
для пересечения `C` и остатка `D`.

| Нужно `C`? | Нужно `D`? | Разумно?                                                                |
| ---------- | ---------- | ----------------------------------------------------------------------- |
| Нет        | Нет        | Поведение по умолчанию (`A \ B`)                                        |
| Да         | Нет        | То же поведение, что и случай 3 (`A`)                                   |
| Нет        | Да         | удивительно ("отбросить то, что я запросил `C`, сохранить то, что нет") |
| Да         | Да         | То же поведение, что и случай 1 (`Ω`)                                   |

По этой причине была удалена опция `--include-priority`. Потому что это был бы тот же результат, как если бы у вас был только список включений (случай 3).

## 4. Таблица быстрого справочника

| Хотите сохранить…                                    | Используйте        |
| ---------------------------------------------------- | ------------------ |
| всё                                                  | нет `-i`, нет `-e` |
| всё _кроме_ некоторых паттернов                      | только `-e`        |
| _только_ то, что соответствует паттернам             | только `-i`        |
| что соответствует `-i`, минус что соответствует `-e` | `-i` **и** `-e`    |

---

Этот дизайн сохраняет ментальную модель простой:

- Список включений является белым списком, как только он существует.
- Список исключений является чёрным списком, наложенным сверху.
- Пересечение отбрасывается по умолчанию
