Skip to main content

Общие сведения о синтаксисе поиска кода GitHub

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

Сведения о структуре запросов поиска кода

Синтаксис поиска в этой статье применяется только к поиску кода с помощью GitHub поиска кода. Обратите внимание, что синтаксис и квалификаторы для поиска содержимого, отличного от кода, таких как проблемы, пользователи и обсуждения, не совпадают с синтаксисом для поиска кода. Дополнительные сведения о поиске, отличном от кода, см. в разделе "[AUTOTITLE" и "Сведения о поиске в GitHub](/search-github/searching-on-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"

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

path:git language:"protocol buffers"

Поиск кавычки и обратных косых кавычек

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

"name = \"tensorflow\""

Для поиска кода, содержащего обратную косую черту, \используйте двойную обратную косую черту. \\

Две escape-последовательности и \" могут использоваться вне кавычки\\. Однако другие escape-последовательности не распознаются. Обратная косая черта, за которой не следует " или \ включена в поиск, без изменений.

Дополнительные escape-последовательности, такие как \n сопоставление нового символа, поддерживаются в регулярных выражениях. См. раздел "Использование регулярных выражений".

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

Поиск кода поддерживает логические выражения. Операторы можно использовать и NOT объединить термины AND``ORпоиска.

По умолчанию смежные термины, разделенные пробелами, эквивалентны использованию 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

Note

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

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

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

org:github

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

user:octocat

Note

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

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

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

language:ruby OR language:cpp OR language:csharp

Полный список поддерживаемых имен языков см . в разделе language.yaml в github-linguist/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: .

Например, для поиска файлов с расширением 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: квалификатор. Поиск символов основан на анализе кода с помощью экосистемы синтаксического анализа дерева открытый код, поэтому дополнительная настройка или интеграция средств сборки не требуется.

Например, для поиска символа с именем WithContext:

language:go symbol:WithContext

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

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

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

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

  • Bash
  • C
  • C#
  • C++
  • CodeQL
  • Elixir
  • Go
  • JSX
  • Java
  • JavaScript
  • Lua
  • PHP
  • Protocol Buffers
  • Python
  • R
  • Ruby
  • Rust
  • Scala
  • Starlark
  • Swift
  • Typescript

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

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

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

content:README.md

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

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

Для фильтрации на основе свойств репозитория можно использовать is: квалификатор. is: поддерживает следующие значения:

  • archived: ограничивает поиск архивными репозиториями.
  • fork: ограничивает поиск вилками репозиториев.
  • vendored: ограничивает поиск контентом, обнаруженным как поставщик.
  • generated: ограничивает поиск содержимого, обнаруженного как созданное.

Например:

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

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

log4j NOT is:archived

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

log4j NOT is:fork

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

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

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

/sparse.*index/

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

/^App\/src\//

Внутри регулярного выражения обозначает \n новый символ строки, \t обозначает вкладку и \x{hhhh} может использоваться для экранирования любого символа Юникода. Это означает, что вы можете использовать регулярные выражения для поиска точных строк, содержащих символы, которые нельзя вводить в строку поиска.

Наиболее распространенные функции регулярных выражений работают в поиске кода. Однако утверждения "осматривать вокруг" не поддерживаются.

Разделение терминов поиска

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

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

printf("hello world\n");

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

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

Учет регистра

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

/(?-i)True/