Перейти к содержимому

Как работает фильтр по паттернам Glob

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

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

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


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

СимволЗначение
множество файлов, которые соответствуют хотя бы одному паттерну включения
множество файлов, которые соответствуют хотя бы одному паттерну исключения
всё дерево проекта (вселенная)
файлы, которые соответствуют обоим спискам (пересечение)
файлы, которые не соответствуют ни одному списку

Список включенийСписок исключенийСохранённые файлы
A = ∅B = ∅Ω
A = ∅B ≠ ∅¬B
A ≠ ∅B = ∅A
A ≠ ∅B ≠ ∅A \ B
  1. Нет списка включений, нет списка исключений

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

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

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

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

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

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

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


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

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

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

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

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

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