Skip to main content

Présentation de la syntaxe de GitHub Code Search

Vous pouvez crĂ©er des requĂȘtes de recherche pour les rĂ©sultats souhaitĂ©s Ă  l’aide de qualificateurs de code spĂ©cialisĂ©s, d’expressions rĂ©guliĂšres et d’opĂ©rations boolĂ©ennes.

À 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

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Ă©pertoire src. 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/