Ă propos de la structure des requĂȘtes de la recherche de code
La syntaxe de recherche de cet article sâapplique uniquement Ă la recherche de code avec la recherche de code GitHub. Notez que la syntaxe et les qualificateurs pour rechercher du contenu autre que du code, comme les problĂšmes, les utilisateurs et les discussions, est diffĂ©rente de la syntaxe pour rechercher du code. Pour plus dâinformations sur la recherche sans code, consultez Ă propos de la recherche sur GitHub et Recherche sur GitHub.
Les requĂȘtes de recherche se composent de termes de recherche, notamment du texte Ă rechercher et de qualificateurs, qui permettent dâaffiner la recherche.
Un terme utilisĂ© en lâĂ©tat, sans qualificateur, est recherchĂ© dans le contenu ou le chemin dâun fichier.
Par exemple, la requĂȘte suivante :
http-push
La requĂȘte ci-dessus va rechercher le fichier docs/http-push.txt
, mĂȘme sâil ne contient pas le terme http-push
. Elle va également rechercher un fichier nommé example.txt
, sâil contient le terme http-push
.
Vous pouvez entrer plusieurs termes séparés par des espaces blancs pour rechercher les documents qui correspondent aux deux termes.
Par exemple, la requĂȘte suivante :
sparse index
Les résultats de la recherche incluent tous les documents contenant les termes sparse
et index
, dans nâimporte quel ordre. Par exemple, la requĂȘte va rechercher un fichier contenant SparseIndexVector
, un fichier avec lâexpression index for sparse trees
et mĂȘme un fichier nommĂ© index.txt
contenant le terme sparse
.
La recherche de plusieurs termes séparés par des espaces blancs équivaut à la recherche hello AND world
. Dâautres opĂ©rations boolĂ©ennes, comme hello OR world
, sont Ă©galement prises en charge. Pour plus dâinformations sur les opĂ©rations boolĂ©ennes, consultez Utilisation des opĂ©rations boolĂ©ennes.
La recherche de code prend Ă©galement en charge la recherche dâune chaĂźne exacte ainsi que les espaces blancs. Pour plus dâinformations, consultez Rechercher une correspondance exacte.
Vous pouvez affiner votre recherche de code Ă lâaide de qualificateurs spĂ©cialisĂ©s, par exemple repo:
, language:
et path:
. Pour plus dâinformations sur les qualificateurs que vous pouvez utiliser dans la recherche de code, consultez Utilisation de qualificateurs.
Vous pouvez Ă©galement utiliser des expressions rĂ©guliĂšres dans vos recherches en plaçant ces expressions entre barres obliques. Pour plus dâinformations sur lâutilisation des expressions rĂ©guliĂšres, consultez Utilisation dâexpressions rĂ©guliĂšres.
Rechercher une correspondance exacte
Pour rechercher une chaĂźne exacte, notamment des espaces blancs, vous pouvez placer la chaĂźne entre guillemets. Par exemple :
"sparse index"
Vous pouvez également utiliser des chaßnes entre guillemets dans les qualificateurs, par exemple :
path:git language:"protocol buffers"
Recherche de guillemets et de barres obliques inverses
Pour rechercher un code contenant un guillemet, vous pouvez Ă©chapper au guillemet Ă lâaide dâune barre oblique inverse. Par exemple, pour trouver la chaĂźne exacte name = "tensorflow"
, vous pouvez effectuer la recherche suivante :
"name = \"tensorflow\""
Pour rechercher un code contenant une barre oblique inverse, \
, utilisez une double barre oblique inverse, \\
.
Les deux sĂ©quences dâĂ©chappement \\
et \"
peuvent Ă©galement ĂȘtre utilisĂ©es en dehors des guillemets. Aucune autre sĂ©quence dâĂ©chappement nâest reconnue. Une barre oblique inverse qui nâest pas suivie de "
ou de \
est incluse dans la recherche, sans modification.
Des sĂ©quences dâĂ©chappement supplĂ©mentaires, telles que \n
pour correspondre Ă un caractĂšre nouvelle ligne, sont prises en charge dans les expressions rĂ©guliĂšres. Consultez Utilisation dâexpressions rĂ©guliĂšres.
Utilisation dâopĂ©rations boolĂ©ennes
La recherche de code prend en charge les expressions booléennes. Vous pouvez utiliser les opérateurs AND
, OR
et NOT
pour combiner les termes de recherche.
Par dĂ©faut, les termes adjacents sĂ©parĂ©s par des espaces blancs Ă©quivalent Ă lâutilisation de lâopĂ©rateur AND
. Par exemple, la requĂȘte de recherche sparse index
est identique Ă sparse AND index
, ce qui signifie que les résultats de la recherche vont inclure tous les documents contenant les termes sparse
et index
, dans nâimporte quel ordre.
Pour rechercher des documents contenant lâun ou lâautre de ces termes, vous pouvez utiliser lâopĂ©rateur OR
. Par exemple, la requĂȘte suivante recherche les documents contenant sparse
ou index
:
sparse OR index
Pour exclure des fichiers des rĂ©sultats de la recherche, vous pouvez utiliser lâopĂ©rateur NOT
. Par exemple, pour supprimer des fichiers dans lâannuaire __testing__
, vous pouvez effectuer une recherche :
"fatal error" NOT path:__testing__
Vous pouvez utiliser des parenthÚses pour exprimer des expressions booléennes plus complexes. Par exemple :
(language:ruby OR language:python) AND NOT path:"/tests/"
Utilisation de qualificateurs
Vous pouvez utiliser des mots clés spécialisés pour qualifier votre recherche.
- Qualificateur de dépÎt
- Qualificateurs dâorganisation et dâutilisateur
- Qualificateur de langage
- Qualificateur de chemin
- Qualificateur de symbole
- Qualificateur de contenu
- Qualificateur is:
Qualificateur de dépÎt
Pour effectuer une recherche dans un dépÎt, utilisez le qualificateur repo:
. Vous devez fournir le nom complet du dépÎt en indiquant également son propriétaire. Par exemple :
repo:github-linguist/linguist
Pour effectuer une recherche dans un ensemble de dépÎts, vous pouvez combiner plusieurs qualificateurs repo:
avec lâopĂ©rateur boolĂ©en OR
. Par exemple :
repo:github-linguist/linguist OR repo:tree-sitter/tree-sitter
Remarque
La recherche de code ne prend pas en charge les expressions réguliÚres ou la correspondance partielle pour les noms de référentiels. Vous devez donc taper le nom complet du référentiel (en indiquant également le préfixe utilisateur) pour que le qualificateur repo:
fonctionne.
Qualificateurs dâorganisation et dâutilisateur
Pour rechercher des fichiers dans une organisation, utilisez le qualificateur org:
. Par exemple :
org:github
Pour rechercher des fichiers dans un compte personnel, utilisez le qualificateur user:
. Par exemple :
user:octocat
Remarque
La recherche de code ne prend pas en charge les expressions rĂ©guliĂšres ou la correspondance partielle pour les noms dâorganisations ou dâutilisateurs. Vous devez donc taper le nom dâorganisation ou le nom dâutilisateur complet pour que le qualificateur fonctionne.
Qualificateur de langage
Pour limiter la recherche à un langage spécifique, utilisez le qualificateur language:
. Par exemple :
language:ruby OR language:cpp OR language:csharp
Pour obtenir la liste complĂšte des noms de langages pris en charge, consultez languages.yaml dans github-linguist/linguist. Si le langage souhaitĂ© ne figure pas dans la liste, vous pouvez ouvrir une demande de tirage (pull request) pour lâajouter.
Qualificateur de chemin
Pour effectuer une recherche dans les chemins de fichiers, utilisez le qualificateur path:
. Cela permet de rechercher les fichiers contenant le terme nâimporte oĂč dans leur chemin. Par exemple, pour rechercher les fichiers contenant le terme unit_tests
dans leur chemin, utilisez :
path:unit_tests
La requĂȘte ci-dessus trouve src/unit_tests/my_test.py
et src/docs/unit_tests.md
, car ils contiennent tous les deux unit_test
dans leur chemin.
Pour chercher uniquement un nom de fichier spécifique (et non une partie du chemin), vous pouvez utiliser une expression réguliÚre :
path:/(^|\/)README\.md$/
Notez que le .
dans le nom de fichier fait lâobjet dâune sĂ©quence dâĂ©chappement, car .
a une signification particuliĂšre pour les expressions rĂ©guliĂšres. Pour plus dâinformations sur lâutilisation des expressions rĂ©guliĂšres, consultez Utilisation dâexpressions rĂ©guliĂšres.
Vous pouvez également utiliser certaines expressions Glob limitées dans le qualificateur path:
.
Par exemple, pour rechercher des fichiers ayant lâextension txt
, vous pouvez utiliser :
path:*.txt
Pour rechercher des fichiers JavaScript dans un répertoire `src`, vous pouvez utiliser :
path:src/*.js
-
Par dĂ©faut, les expressions Glob ne sont pas ancrĂ©es au dĂ©but du chemin. Ainsi, lâexpression ci-dessus recherche toujours un chemin tel que
app/src/main.js
. Toutefois, si vous faites prĂ©cĂ©der lâexpression de/
, elle est ancrée au début. Par exemple :path:/src/*.js
-
Notez que
*
ne correspond pas au caractĂšre/
. Ainsi, pour lâexemple ci-dessus, tous les rĂ©sultats sont des descendants directs du rĂ©pertoiresrc
. Pour rechercher des correspondances dans des sous-répertoires, afin que les résultats incluent des fichiers profondément imbriqués tels que/src/app/testing/utils/example.js
, vous pouvez utiliser**
. Par exemple :path:/src/**/*.js
Vous pouvez également utiliser le caractÚre global ?
. Par exemple, pour rechercher le chemin file.aac
ou file.abc
, vous pouvez utiliser :
path:*.a?c
Pour rechercher un nom de fichier qui contient un caractÚre spécial tel que `*` ou `?`, utilisez simplement une chaßne entre guillemets :
path:"file?"
Les expressions Glob sont dĂ©sactivĂ©es pour les chaĂźnes entre guillemets, la requĂȘte ci-dessus recherche donc uniquement les chemins contenant la chaĂźne littĂ©rale file?
.
Qualificateur de symbole
Vous pouvez rechercher des dĂ©finitions de symboles dans le code, par exemple des dĂ©finitions de fonctions ou de classes, Ă lâaide du qualificateur symbol:
. La recherche de symboles est basĂ©e sur lâanalyse de votre code Ă lâaide de lâĂ©cosystĂšme de lâanalyseur syntaxique open source Tree-sitter. Ainsi, aucune configuration supplĂ©mentaire ou intĂ©gration dâoutil de build nâest nĂ©cessaire.
Par exemple, pour rechercher un symbole appelé WithContext
:
language:go symbol:WithContext
Dans certains langages, vous pouvez rechercher des symboles Ă lâaide dâun prĂ©fixe (par exemple le prĂ©fixe de leur nom de classe). Par exemple, pour une mĂ©thode deleteRows
sur un struct Maint
, vous pouvez rechercher symbol:Maint.deleteRows
en Go, ou symbol:Maint::deleteRows
en Rust.
Vous pouvez Ă©galement utiliser des expressions rĂ©guliĂšres avec le qualificateur de symbole. Par exemple, la requĂȘte suivante permet de trouver les conversions que des utilisateurs ont implĂ©mentĂ©es en Rust pour le type String
:
language:rust symbol:/^String::to_.*/
Notez que ce qualificateur recherche uniquement les dĂ©finitions et non les rĂ©fĂ©rences. De plus, tous les types de symbole et tous les langages ne sont pas encore complĂštement pris en charge. Lâextraction de symboles est prise en charge pour les langages suivants :
- Bash
- C
- C#
- C++
- CodeQL
- Elixir
- Go
- JSX
- Java
- JavaScript
- Lua
- PHP
- Mémoires tampon de protocole
- Python
- R
- Ruby
- Rust
- Scala
- Starlark
- Swift
- Typescript
Nous travaillons Ă la prise en charge dâun plus grand nombre de langages. Si vous souhaitez contribuer Ă cet effort, vous pouvez ajouter la prise en charge de votre langage dans lâĂ©cosystĂšme de lâanalyseur syntaxique open source Tree-sitter, sur lequel est basĂ©e la recherche de symboles.
Qualificateur de contenu
Par dĂ©faut, les termes utilisĂ©s en lâĂ©tat sont recherchĂ©s Ă la fois dans les chemins et les contenus des fichiers. Pour restreindre une recherche afin quâelle corresponde strictement au contenu dâun fichier et non aux chemins de fichiers, utilisez le qualificateur content:
. Par exemple :
content:README.md
Cette requĂȘte recherche uniquement les fichiers contenant le terme README.md
et non les fichiers nommés README.md
.
Qualificateur is:
Pour effectuer un filtrage en fonction des propriétés du référentiel, vous pouvez utiliser le qualificateur is:
. is:
prend en charge les valeurs suivantes :
archived
: restreint la recherche aux référentiels archivés.fork
: restreint la recherche aux référentiels dupliqués.vendored
: restreint la recherche au contenu détecté en tant fournisseur.generated
: restreint la recherche au contenu détecté comme étant généré.
Par exemple :
path:/^MIT.txt$/ is:archived
Notez que le qualificateur is:
peut ĂȘtre inversĂ© par rapport Ă lâopĂ©rateur NOT
. Pour rechercher des dépÎts non archivés, vous pouvez effectuer la recherche suivante :
log4j NOT is:archived
Pour exclure les duplications de vos résultats, vous pouvez rechercher :
log4j NOT is:fork
Utilisation dâexpressions rĂ©guliĂšres
La recherche de code prend en charge les expressions rĂ©guliĂšres pour la recherche de modĂšles dans votre code. Vous pouvez employer des expressions rĂ©guliĂšres dans les termes de recherche utilisĂ©s en lâĂ©tat ainsi que dans de nombreux qualificateurs, en plaçant ces regex entre barres obliques.
Par exemple, pour rechercher lâexpression rĂ©guliĂšre sparse.*index
, vous devez utiliser :
/sparse.*index/
Notez que les barres obliques utilisĂ©es de maniĂšre littĂ©rale doivent faire lâobjet de sĂ©quences dâĂ©chappement au sein de lâexpression rĂ©guliĂšre. Par exemple, pour rechercher des fichiers dans le rĂ©pertoire App/src
, vous devez utiliser :
/^App\/src\//
Ă lâintĂ©rieur dâune expression rĂ©guliĂšre, \n
représente un caractÚre nouvelle ligne, \t
représente une tabulation et \x{hhhh}
peut ĂȘtre utilisĂ© pour Ă©chapper Ă nâimporte quel caractĂšre Unicode. Cela signifie que vous pouvez utiliser des expressions rĂ©guliĂšres pour rechercher des chaĂźnes exactes qui contiennent des caractĂšres que vous ne pouvez pas saisir dans la barre de recherche.
Les fonctionnalités les plus courantes des expressions réguliÚres fonctionnent dans la recherche de code. Toutefois, les assertions « look-around » ne sont pas prises en charge.
Séparation des critÚres de recherche
Toutes les parties dâune recherche, telles que les critĂšres de recherche, les chaĂźnes exactes, les expressions rĂ©guliĂšres, les qualificateurs, les parenthĂšses et les mot clĂ© boolĂ©ens AND
, OR
et NOT
, doivent ĂȘtre sĂ©parĂ©es les unes des autres par des espaces. La seule exception est que les Ă©lĂ©ments entre parenthĂšses, (
)
, nâont pas besoin dâĂȘtre sĂ©parĂ©s des parenthĂšses.
Si votre recherche contient plusieurs composants qui ne sont pas sĂ©parĂ©s par des espaces ou dâautres textes qui ne suivent pas les rĂšgles rĂ©pertoriĂ©es ci-dessus, la recherche de code essaie de deviner ce que vous voulez dire. Elle se contente souvent de traiter cette composante de votre requĂȘte comme le texte exact Ă rechercher. Par exemple, dans la requĂȘte qui suit :
printf("hello world\n");
La recherche de code renoncera à interpréter les parenthÚses et les guillemets comme des caractÚres spéciaux et recherchera plutÎt les fichiers contenant ce code exact.
Si la recherche de code est incorrecte, vous pouvez toujours rechercher en utilisant des guillemets et des espaces pour clarifier le sens.
Respect de la casse
Par dĂ©faut, la recherche de code nâest pas sensible Ă la casse, et les rĂ©sultats incluront Ă la fois les majuscules et les minuscules. Vous pouvez effectuer des recherches sensibles Ă la casse Ă lâaide dâune expression rĂ©guliĂšre dont la sensibilitĂ© Ă la casse est dĂ©sactivĂ©e. Par exemple, pour rechercher la chaĂźne « True », vous devez utiliser :
/(?-i)True/