Примечание. Новый поиск кода и представление кода находятся в общедоступной бета-версии.
Дополнительные сведения о новом поиске кода см. в разделе Сведения о поиске кода 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/"
Использование квалификаторов
Для уточнения поиска можно использовать специализированные ключевые слова.
- Квалификатор репозитория
- Квалификаторы организации и пользователей
- Квалификатор языка
- Квалификатор пути
- Квалификатор символов
- Квалификатор содержимого
- Квалификатор is
Квалификатор репозитория
Для поиска в репозитории 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\//