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/linguist

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

repo:github-linguist/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/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\//