--- 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).
В квалификаторе также можно использовать некоторые ограниченные `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](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\// ```