Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Основные сведения о синтаксисе поиска кода GitHub (бета-версия)

Вы можете создавать поисковые запросы для нужных результатов с помощью специализированных квалификаторов кода, регулярных выражений и логических операций.

Примечание. Новый поиск кода и представление кода находятся в общедоступной бета-версии.

Дополнительные сведения о новом поиске кода см. в разделе Сведения о поиске кода GitHub (бета-версия). Дополнительные сведения о новом представлении кода см. в разделе Навигация по файлам с помощью нового представления кода (бета-версия).

Сведения о новой структуре запросов поиска кода (бета-версия)

Синтаксис поиска в этой статье применяется только к коду с включенным новым поиском кода (бета-версия). Обратите внимание, что синтаксис и квалификаторы для поиска содержимого, не являющегося кодом, например проблем, пользователей и обсуждений, работают так же, как и раньше. Дополнительные сведения о поиске, отличном от кода, см. в разделах Сведения о поиске в GitHub и Поиск в GitHub.

Поисковые запросы состоят из условий поиска, содержащих текст, который требуется найти, и квалификаторов, которые сужают область поиска.

Пустой термин без квалификаторов будет соответствовать содержимому файла или пути к файлу.

Например, следующий запрос:

http-push

Приведенный выше запрос будет соответствовать файлу docs/http-push.txt, даже если он не содержит термин http-push. Он также будет соответствовать файлу с именем example.txt , если он содержит термин http-push.

Вы можете ввести несколько терминов, разделенных пробелами, чтобы найти документы, удовлетворяющие обоим условиям.

Например, следующий запрос:

sparse index

Результаты поиска будут включать все документы, содержащие термины sparse и index, в любом порядке. В качестве примеров он будет соответствовать файлу с , файлу SparseIndexVectorс фразой index for sparse treesи даже файлу с именем index.txt , который содержит термин sparse.

Поиск нескольких терминов, разделенных пробелами, эквивалентен поиску hello AND world. Другие логические операции, такие как hello OR world, также поддерживаются в новом поиске кода (бета-версия). Дополнительные сведения о логических операциях см. в разделе Использование логических операций.

Новый поиск кода (бета-версия) также поддерживает поиск точной строки, включая пробелы. Дополнительные сведения см. в разделе Запрос точного соответствия.

Поиск кода можно сузить с помощью специализированных квалификаторов, таких как repo:, language: и path:. Дополнительные сведения о квалификаторах, которые можно использовать в новом поиске кода (бета-версия), см. в разделе Использование квалификаторов.

Вы также можете использовать регулярные выражения в поисках, заключив выражение в косую черту. Дополнительные сведения об использовании регулярных выражений см. в разделе Использование регулярных выражений.

Запрос точного соответствия

Чтобы найти точную строку, включая пробелы, можно заключить строку в кавычки. Пример:

"sparse index"

Чтобы найти фразу, содержащую кавычки, можно экранировать кавычки с помощью обратной косой черты. Например, чтобы найти точную строку name = "tensorflow", можно выполнить поиск:

"name = \"tensorflow\""

Строки в кавычках также можно использовать в квалификаторах, например:

path: git language: "protocol buffers"

Использование логических операций

Новый поиск кода (бета-версия) поддерживает логические выражения. Операторы AND, ORи NOT можно использовать для объединения условий поиска.

По умолчанию смежные термины, разделенные пробелами, эквивалентны использованию AND оператора . Например, поисковый запрос sparse index совпадает sparse AND indexс , а это означает, что результаты поиска будут включать все документы, содержащие как термины sparse , так и index, в любом порядке.

Для поиска документов, содержащих один или другой термин, можно использовать OR оператор . Например, следующий запрос будет соответствовать документам, содержащим или sparse index:

sparse OR index

Чтобы исключить файлы из результатов поиска, можно использовать NOT оператор . Например, чтобы исключить файл в каталоге __testing__ , можно выполнить поиск:

"fatal error" NOT path:__testing__

Круглые скобки можно использовать для выражения более сложных логических выражений. Пример:

(language:ruby OR language:python) AND NOT path:"/tests/"

Использование квалификаторов

Для уточнения поиска можно использовать специализированные ключевые слова.

Квалификатор репозитория

Для поиска в репозитории repo: используйте квалификатор. Необходимо указать полное имя репозитория, включая владельца. Пример:

repo:github/linguist

Для поиска в наборе репозиториев можно объединить несколько repo: квалификаторов с логическим оператором OR. Пример:

repo:github/linguist OR repo:tree-sitter/tree-sitter

Примечание: Новая бета-версия поиска кода в настоящее время не поддерживает регулярные выражения или частичное сопоставление имен репозитория, поэтому для работы квалификатора необходимо ввести все имя репозитория (включая префикс repo: пользователя).

Квалификаторы организации и пользователей

Для поиска файлов в организации используйте org: квалификатор. Пример:

org:github

Для поиска файлов в личной учетной записи используйте user: квалификатор. Пример:

user:octocat

Примечание: Новая бета-версия поиска кода в настоящее время не поддерживает регулярные выражения или частичное сопоставление для имен организаций или пользователей, поэтому вам придется ввести всю организацию или имя пользователя, чтобы квалификатор работал.

Квалификатор языка

Чтобы сузить область до определенных языков, используйте language: квалификатор. Пример:

language: ruby OR language:cpp OR language:csharp

Полный список поддерживаемых имен языков см. в разделе languages.yaml в github/linguist. Если предпочитаемый язык отсутствует в списке, можно открыть запрос на вытягивание, чтобы добавить его.

Квалификатор пути

Для поиска в путях к файлам path: используйте квалификатор. Это будет соответствовать файлам, содержащим термин в любом месте пути к файлу. Например, чтобы найти файлы, содержащие термин unit_tests в пути, используйте:

path:unit_tests

Приведенный выше запрос будет соответствовать обоим src/unit_tests/my_test.py и src/docs/unit_tests.md , так как оба они содержат unit_test где-то в своем пути.

Чтобы сопоставить только определенное имя файла (а не часть пути), можно использовать регулярное выражение:

path:/(^|\/)README\.md$/

Обратите внимание, что . в имени файла экранируется, так как . имеет особое значение для регулярных выражений. Дополнительные сведения об использовании регулярных выражений см. в разделе Использование регулярных выражений.


В квалификаторе также можно использовать некоторые ограниченные path: выражения glob.

Например, для поиска файлов с расширением txtможно использовать:

path:*.txt

Для поиска файлов JavaScript в каталоге `src` можно использовать:
path:src/*.js
  • По умолчанию выражения glob не привязаны к началу пути, поэтому приведенное выше выражение по-прежнему будет соответствовать пути, например app/src/main.js. Но если префикс выражения с /помощью , оно будет привязано к началу. Пример:

    path:/src/*.js
    
  • Обратите внимание, что * не соответствует символу / , поэтому в приведенном выше примере все результаты будут прямыми src потомками каталога. Для сопоставления в подкаталогах, чтобы результаты включали глубоко вложенные файлы, такие как /src/app/testing/utils/example.js, можно использовать .** Пример:

    ```
    path:/src/**/*.js
    ```
    

Можно также использовать глобальный ? символ. Например, чтобы сопоставить путь file.aac или file.abc, можно использовать:

path:*.a?c

Чтобы найти имя файла, содержащее специальный символ, например `*` или `?`, просто используйте строку в кавычках:
path:"file?"

Выражения glob отключены для строк в кавычках, поэтому приведенный выше запрос будет соответствовать только путям, содержащим строку file?литерала .

Квалификатор символов

Вы можете искать определения символов в коде, например определения функций или классов, с помощью symbol: квалификатора. Поиск символов основан на анализе кода с помощью экосистемы средства синтаксического анализа открытый код Tree-sitter, поэтому дополнительная настройка или интеграция средств сборки не требуется.

Например, чтобы найти символ с именем WithContext:

language:go symbol:WithContext

В некоторых языках можно искать символы с помощью префикса (например, префикса имени класса). Например, для метода deleteRows в структуре Maintможно выполнить поиск symbol:Maint.deleteRows , если вы используете Go, или symbol:Maint::deleteRows в Rust.

Также можно использовать регулярные выражения с квалификатором символов. Например, следующий запрос найдет преобразования, реализованные людьми в Rust для String типа :

language:rust symbol:/^String::to_.*/

Обратите внимание, что этот квалификатор выполняет поиск только определений, а не ссылок, и пока не все типы символов или языки полностью поддерживаются. Извлечение символов поддерживается для следующих языков.

  • C#
  • Python
  • Go
  • Java
  • JavaScript
  • TypeScript
  • PHP
  • Protocol Buffers
  • Ruby
  • Rust

Мы работаем над добавлением поддержки дополнительных языков. Если вы хотите внести свой вклад в эту работу, вы можете добавить поддержку своего языка в экосистеме средства синтаксического анализа открытый код Tree-sitter, на которой основан поиск символов.

Квалификатор содержимого

По умолчанию голые термины выполняют поиск как по путям, так и по содержимому файла. Чтобы ограничить поиск в строгом соответствии с содержимым файла, а не путями к файлу content: , используйте квалификатор. Пример:

content:README.md

Этот запрос будет сопоставлять только файлы, содержащие термин README.md, а не соответствующие файлы с именем README.md.

Квалификатор is

Для фильтрации по свойствам is: репозитория можно использовать квалификатор. В настоящее время is: поддерживает два значения: archived, который ограничивает поиск архивными репозиториями, и fork, который ограничивает поиск вилками репозиториев. Пример:

path:/^MIT.txt$/ is:archived

Обратите внимание, что is: квалификатор можно инвертировать с помощью NOT оператора . Для поиска неархивированных репозиториев можно выполнить поиск:

log4j NOT is:archived

Чтобы исключить вилки из результатов, можно выполнить поиск:

log4j NOT is:fork

Использование регулярных выражений

Новый поиск кода (бета-версия) поддерживает регулярные выражения для поиска шаблонов в коде. Регулярные выражения можно использовать как в терминах поиска, так и в нескольких квалификаторов, заключив регулярное выражение в косую черту.

Например, для поиска регулярного выражения sparse.*indexиспользуется:

/sparse.*index/

Обратите внимание, что вам придется экранировать все косые черты в регулярном выражении. Например, для поиска файлов в каталоге App/src используется:

/^App\/src\//