294 lines
19 KiB
Markdown
294 lines
19 KiB
Markdown
---
|
||
title: Основные сведения о синтаксисе поиска кода GitHub (бета-версия)
|
||
intro: 'Вы можете создавать поисковые запросы для нужных результатов с помощью специализированных квалификаторов кода, регулярных выражений и логических операций.'
|
||
allowTitleToDifferFromFilename: true
|
||
versions:
|
||
feature: github-code-search
|
||
topics:
|
||
- GitHub search
|
||
ms.openlocfilehash: 098da2b7fe8a8c5466805c583e6b029b5b9b58c1
|
||
ms.sourcegitcommit: e8c012864f13f9146e53fcb0699e2928c949ffa8
|
||
ms.translationtype: MT
|
||
ms.contentlocale: ru-RU
|
||
ms.lasthandoff: 11/09/2022
|
||
ms.locfileid: '148160066'
|
||
---
|
||
{% note %}
|
||
|
||
**Примечание.** {% data reusables.search.code-search-code-view-beta-note %}
|
||
|
||
{% data reusables.search.code-search-link %} {% data reusables.search.code-view-link %}
|
||
|
||
{% endnote %}
|
||
|
||
## Сведения о новой структуре запросов поиска кода (бета-версия)
|
||
|
||
Синтаксис поиска в этой статье применяется только к коду с включенным новым поиском кода (бета-версия). {% data reusables.search.non-code-search-explanation %}
|
||
|
||
Поисковые запросы состоят из условий поиска, содержащих текст, который требуется найти, и квалификаторов, которые сужают область поиска.
|
||
|
||
Пустой термин без квалификаторов будет соответствовать содержимому файла или пути к файлу.
|
||
|
||
Например, следующий запрос:
|
||
|
||
```
|
||
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`, также поддерживаются в новом поиске кода (бета-версия). Дополнительные сведения о логических операциях см. в разделе [Использование логических операций](#using-boolean-operations).
|
||
|
||
Новый поиск кода (бета-версия) также поддерживает поиск точной строки, включая пробелы. Дополнительные сведения см. в разделе [Запрос точного соответствия](#query-for-an-exact-match).
|
||
|
||
Поиск кода можно сузить с помощью специализированных квалификаторов, таких как `repo:`, `language:` и `path:`. Дополнительные сведения о квалификаторах, которые можно использовать в новом поиске кода (бета-версия), см. в разделе [Использование квалификаторов](#using-qualifiers).
|
||
|
||
Вы также можете использовать регулярные выражения в поисках, окружив выражение в обратных косых чертах. Дополнительные сведения об использовании регулярных выражений см. в разделе [Использование регулярных выражений](#using-regular-expressions).
|
||
|
||
## Запрос точного соответствия
|
||
|
||
Чтобы найти точную строку, включая пробелы, можно заключить строку в кавычки. Например:
|
||
|
||
```
|
||
"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/"
|
||
```
|
||
|
||
## Использование квалификаторов
|
||
|
||
Для уточнения поиска можно использовать специализированные ключевые слова.
|
||
- [Квалификатор репозитория](#repository-qualifier)
|
||
- [Квалификаторы организации и пользователей](#organization-and-user-qualifiers)
|
||
- [Квалификатор языка](#language-qualifier)
|
||
- [Квалификатор пути](#path-qualifier)
|
||
- [Квалификатор символов](#symbol-qualifier)
|
||
- [Квалификатор содержимого](#content-qualifier)
|
||
- [Квалификатор is](#is-qualifier)
|
||
|
||
### Квалификатор репозитория
|
||
|
||
Для поиска в репозитории `repo:` используйте квалификатор. Необходимо указать полное имя репозитория, включая владельца. Например:
|
||
|
||
```
|
||
repo:github/linguist
|
||
```
|
||
|
||
Для поиска в наборе репозиториев можно объединить несколько `repo:` квалификаторов с логическим оператором `OR`. Пример:
|
||
|
||
```
|
||
repo:github/linguist OR repo:tree-sitter/tree-sitter
|
||
```
|
||
|
||
{% note %}
|
||
|
||
**Примечание:** Новая бета-версия поиска кода в настоящее время не поддерживает регулярные выражения или частичное сопоставление имен репозитория, поэтому для работы квалификатора необходимо ввести все имя репозитория (включая префикс `repo:` пользователя).
|
||
|
||
{% endnote %}
|
||
|
||
### Квалификаторы организации и пользователей
|
||
|
||
Для поиска файлов в организации используйте `org:` квалификатор. Например:
|
||
|
||
```
|
||
org:github
|
||
```
|
||
|
||
Для поиска файлов в личной учетной записи используйте `user:` квалификатор. Пример:
|
||
|
||
```
|
||
user:octocat
|
||
```
|
||
|
||
{% note %}
|
||
|
||
**Примечание:** Новая бета-версия поиска кода в настоящее время не поддерживает регулярные выражения или частичное сопоставление для имен организаций или пользователей, поэтому вам придется ввести всю организацию или имя пользователя, чтобы квалификатор работал.
|
||
|
||
{% endnote %}
|
||
|
||
|
||
### Квалификатор языка
|
||
|
||
Чтобы сузить область до определенных языков, используйте `language:` квалификатор. Например:
|
||
|
||
```
|
||
language: ruby OR language:cpp OR language:csharp
|
||
```
|
||
|
||
Полный список поддерживаемых имен языков см. в разделе [languages.yaml](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) в [github/linguist](https://github.com/github/linguist). Если предпочитаемый язык отсутствует в списке, можно открыть запрос на вытягивание, чтобы добавить его.
|
||
|
||
### Квалификатор пути
|
||
|
||
Для поиска в путях к файлам `path:` используйте квалификатор. Это будет соответствовать файлам, содержащим термин в любом месте пути к файлу. Например, чтобы найти файлы, содержащие термин `unit_tests` в пути, используйте:
|
||
|
||
```
|
||
path:unit_tests
|
||
```
|
||
Приведенный выше запрос будет соответствовать обоим `src/unit_tests/my_test.py` и `src/docs/unit_tests.md` , так как оба они содержат `unit_test` где-то в своем пути.
|
||
|
||
Чтобы сопоставить только определенное имя файла (а не часть пути), можно использовать регулярное выражение:
|
||
|
||
```
|
||
path:/(^|\/)README\.md$/
|
||
```
|
||
Обратите внимание, что `.` в имени файла экранируется, так как `.` имеет особое значение для регулярных выражений. Дополнительные сведения об использовании регулярных выражений см. в разделе [Использование регулярных выражений](#using-regular-expressions).
|
||
|
||
<br>
|
||
|
||
В квалификаторе также можно использовать некоторые ограниченные `path:` выражения glob.
|
||
|
||
Например, для поиска файлов с расширением `txt`можно использовать:
|
||
|
||
```
|
||
path:*.txt
|
||
```
|
||
<br>
|
||
Для поиска файлов JavaScript в каталоге `src` можно использовать:
|
||
|
||
```
|
||
path:src/*.js
|
||
```
|
||
|
||
- По умолчанию выражения glob не привязаны к началу пути, поэтому приведенное выше выражение по-прежнему будет соответствовать пути, например `app/src/main.js`. Но если префикс выражения с `/`помощью , оно будет привязано к началу. Например:
|
||
|
||
```
|
||
path:/src/*.js
|
||
```
|
||
- Обратите внимание, что `*` не соответствует символу `/` , поэтому в приведенном выше примере все результаты будут прямыми `src` потомками каталога. Для сопоставления в подкаталогах, чтобы результаты включали глубоко вложенные файлы, такие как `/src/app/testing/utils/example.js`, можно использовать .`**` Например:
|
||
|
||
```
|
||
path:/src/**/*.js
|
||
```
|
||
<br>
|
||
|
||
Можно также использовать глобальный `?` символ. Например, чтобы сопоставить путь `file.aac` или `file.abc`, можно использовать:
|
||
|
||
```
|
||
path:*.a?c
|
||
```
|
||
<br>
|
||
Чтобы найти имя файла, содержащее специальный символ, например `*` или `?`, просто используйте строку в кавычках:
|
||
|
||
```
|
||
path:"file?"
|
||
```
|
||
|
||
Так как выражения glob отключены для строк в кавычках, приведенный выше запрос будет соответствовать только путям, содержащим строку `file?`литерала .
|
||
|
||
### Квалификатор символов
|
||
|
||
Вы можете искать определения символов в коде, например определения функций или классов, с помощью `symbol:` квалификатора. Поиск символов основан на анализе кода с помощью экосистемы средства синтаксического анализа открытый код [Tree-sitter](https://github.com/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](https://github.com/tree-sitter), на которой основан поиск символов.
|
||
|
||
### Квалификатор содержимого
|
||
|
||
По умолчанию голые термины ищут как пути, так и содержимое файла. Чтобы ограничить поиск только содержимым файла, а не путями к файлу `content:` , используйте квалификатор. Например:
|
||
|
||
```
|
||
content:README.md
|
||
```
|
||
|
||
Этот запрос будет сопоставлять только файлы, содержащие термин `README.md`, а не соответствующие файлы с именем `README.md`.
|
||
|
||
### Является квалификатором
|
||
|
||
Для фильтрации по свойствам `is:` документа можно использовать квалификатор. В настоящее время в этом квалификаторе поддерживается `archived`только значение , которое ограничивает поиск архивными репозиториями. Например:
|
||
|
||
```
|
||
path:/MIT.txt is:archived
|
||
```
|
||
|
||
Обратите внимание, что `is:` квалификатор можно инвертировать с помощью `NOT` оператора . Для поиска неархивированных репозиториев можно выполнить поиск:
|
||
|
||
```
|
||
log4j NOT is:archived
|
||
```
|
||
|
||
## Использование регулярных выражений
|
||
|
||
Новый поиск кода (бета-версия) поддерживает регулярные выражения для поиска шаблонов в коде. Регулярные выражения можно использовать в терминах поиска на пустом языке, а также во многих квалификаторов, окружив регулярное выражение в обратных косых чертах.
|
||
|
||
Например, для поиска регулярного выражения `sparse.*index`следует использовать:
|
||
|
||
```
|
||
/sparse.*index/
|
||
```
|
||
|
||
Обратите внимание, что вам придется экранировать все косые черты в регулярном выражении. Например, для поиска файлов в каталоге `App/src` используется:
|
||
|
||
```
|
||
/^App\/src\//
|
||
```
|