Informationen zur Struktur von Codesuchabfragen
Die Suchsyntax in diesem Artikel gilt nur für die Codesuche mit der GitHub-Codesuche. Beachte, dass die Syntax und die Qualifizierer für die Suche nach codefremden Inhalten wie Issues, Benutzern und Diskussionen nicht mit der Syntax der Codesuche identisch sind. Weitere Informationen zur Suche nach codefremden Inhalten findest du unter Informationen zur Suche auf GitHub und Suchvorgänge auf GitHub.
Suchabfragen bestehen aus Suchbegriffen, die Text enthalten, nach dem Sie suchen möchten, sowie aus Qualifizierern, die die Suche einschränken.
Ein reiner Begriff ohne Qualifizierer entspricht entweder dem Inhalt einer Datei oder dem Pfad der Datei.
Beispielsweise wird die folgende Abfrage:
http-push
Die obige Abfrage ermittelt die Datei docs/http-push.txt
, auch wenn sie nicht den Begriff http-push
enthält. Sie ermittelt außerdem eine Datei namens example.txt
, wenn sie den Begriff http-push
enthält.
Sie können mehrere Begriffe durch Leerzeichen getrennt eingeben, um nach Dokumenten zu suchen, die beide Begriffe enthalten.
Beispielsweise wird die folgende Abfrage:
sparse index
Die Suchergebnisse beinhalten alle Dokumente, die die beiden Begriffe sparse
und index
in beliebiger Reihenfolge enthalten. Sie beinhalten beispielsweise eine Datei, die SparseIndexVector
enthält, eine Datei mit dem Ausdruck index for sparse trees
und sogar eine Datei namens index.txt
, die den Begriff sparse
enthält.
Die Suche nach mehreren Begriffen, die durch Leerzeichen getrennt sind, entspricht der Suche nach hello AND world
. Andere boolesche Vorgänge, z. B hello OR world
, werden ebenfalls unterstützt. Weitere Informationen zu booleschen Vorgängen finden Sie unter Verwenden boolescher Vorgänge.
Die Codesuche unterstützt auch die Suche nach einer genauen Zeichenfolge, einschließlich Leerraumzeichen. Weitere Informationen finden Sie unter Abfragen einer genauen Übereinstimmung.
Sie können die Codesuche mit spezialisierten Qualifizierern wie repo:
, language:
und path:
einschränken. Weitere Informationen zu den Qualifizierern, die Sie in der Codesuche verwenden können, finden Sie unter Verwenden von Qualifizierern.
Sie können auch reguläre Ausdrücke in Ihren Suchvorgängen verwenden, indem Sie den Ausdruck in Schrägstriche einschließen. Weitere Informationen zur Verwendung regulärer Ausdrücke finden Sie unter „Verwendung regulärer Ausdrücke“.
Abfragen einer genauen Übereinstimmung
Um nach einer genauen Zeichenfolge zu suchen, einschließlich Leerzeichen, können Sie die Zeichenfolge in Anführungszeichen setzen. Zum Beispiel:
"sparse index"
Sie können auch Zeichenfolgen in Anführungszeichen in Qualifizierern verwenden, z. B.:
path:git language:"protocol buffers"
Suchen nach Anführungszeichen und umgekehrten Schrägstrichen
Um nach einem Code zu suchen, der ein Anführungszeichen enthält, können Sie das Anführungszeichen mit einem umgekehrten Schrägstrich als Escapezeichen versehen. Wenn Sie beispielsweise die genaue Zeichenfolge name = "tensorflow"
finden möchten, können Sie wie folgt suchen:
"name = \"tensorflow\""
Um nach Code zu suchen, der einen umgekehrten Schrägstrich enthält, \
verwenden Sie einen doppelten umgekehrten Schrägstrich. \\
Die beiden Escapesequenzen \\
und \"
können auch außerhalb von Anführungszeichen verwendet werden. Es werden jedoch keine anderen Escapesequenzen erkannt. Ein Backslash, auf den in der Suche weder "
noch \
folgt, bleibt unverändert.
Zusätzliche Escapesequenzen wie z. B. \n
zum Abgleichen eines Zeilenvorschubzeichen, werden in regulären Ausdrücken unterstützt. Siehe „Verwendung regulärer Ausdrücke“.
Verwenden boolescher Vorgänge
Die Codesuche unterstützt boolesche Ausdrücke. Sie können die Operatoren AND
, OR
und NOT
verwenden, um Suchbegriffe zu kombinieren.
Standardmäßig sind benachbarte Begriffe, die durch Leerzeichen getrennt sind, gleichbedeutend mit der Verwendung des AND
-Operators. Die Suchabfrage sparse index
ist beispielsweise identisch mit sparse AND index
. Das bedeutet, dass die Suchergebnisse alle Dokumente beinhalten, die sowohl den Begriff sparse
als auch den Begriff index
in beliebiger Reihenfolge enthalten.
Um nach Dokumenten zu suchen, die entweder den einen oder den anderen Ausdruck enthalten, können Sie den OR
-Operator verwenden. Die folgende Abfrage findet z. B. Dokumente, die entweder sparse
oder index
enthalten:
sparse OR index
Um Dateien aus den Suchergebnissen auszuschließen, können Sie den NOT
-Operator verwenden. Zum Ausschließen von Dateien im Verzeichnis __testing__
können Sie etwa wie folgt suchen:
"fatal error" NOT path:__testing__
Sie können Klammern verwenden, um komplexere boolesche Ausdrücke auszudrücken. Beispiel:
(language:ruby OR language:python) AND NOT path:"/tests/"
Verwenden von Qualifizierern
Sie können spezielle Schlüsselwörter verwenden, um Ihre Suche zu qualifizieren.
- Qualifizierer für Repositorys
- Qualifizierer für Organisationen und Benutzer
- Qualifizierer für Sprachen
- Pfadqualifizierer
- Symbolqualifizierer
- Inhaltsqualifizierer
- Is-Qualifizierer
Qualifizierer für Repositorys
Verwende für die Suche in einem Repository den Qualifizierer repo:
. Sie müssen den vollständigen Repositorynamen angeben, einschließlich des Besitzers. Beispiel:
repo:github-linguist/linguist
Um in mehreren Repositorys zu suchen, können Sie mehrere repo:
-Qualifizierer mit dem booleschen Operator OR
kombinieren. Zum Beispiel:
repo:github-linguist/linguist OR repo:tree-sitter/tree-sitter
Note
Die Codesuche unterstützt derzeit keine regulären Ausdrücke oder Teilübereinstimmungen für Repositorynamen. Daher musst du den gesamten Repositorynamen (einschließlich des Benutzerpräfixes) eingeben, damit der Qualifizierer repo:
funktioniert.
Qualifizierer für Organisationen und Benutzer
Verwende den Qualifizierer org:
, um nach Dateien innerhalb einer Organisation zu suchen. Beispiel:
org:github
Verwende den Qualifizierer user:
, um nach Dateien innerhalb eines persönlichen Kontos zu suchen. Zum Beispiel:
user:octocat
Note
Die Codesuche unterstützt derzeit keine regulären Ausdrücke oder Teilübereinstimmungen für Organisations- oder Benutzernamen. Daher musst du den gesamten Organisations- oder Benutzernamen eingeben, damit der Qualifizierer funktioniert.
Qualifizierer für Sprachen
Verwende den Qualifizierer language:
, um die Suche auf eine bestimmte Sprache einzugrenzen. Beispiel:
language:ruby OR language:cpp OR language:csharp
Eine vollständige Liste der unterstützten Sprachnamen finden Sie in languages.yaml unter github-linguist/linguist. Wenn Ihre bevorzugte Sprache nicht in der Liste enthalten ist, können Sie einen Pull Request öffnen, um sie hinzuzufügen.
Pfadqualifizierer
Verwende den Qualifizierer path:
, um innerhalb von Dateipfaden zu suchen. Dadurch werden Dateien gesucht, die den Begriff an einer beliebigen Stelle im Dateipfad enthalten. Um beispielsweise Dateien zu suchen, die den Begriff unit_tests
in ihrem Pfad enthalten, verwende Folgendes:
path:unit_tests
Die obige Abfrage ermittelt sowohl src/unit_tests/my_test.py
als auchsrc/docs/unit_tests.md
, da beide an einer beliebigen Stelle in ihrem Pfad unit_test
enthalten.
Um nur einen bestimmten Dateinamen (und nicht Teil des Pfads) zu suchen, können Sie einen regulären Ausdruck verwenden:
path:/(^|\/)README\.md$/
Beachte, dass .
im Dateinamen mit Escapezeichen versehen ist, da .
für reguläre Ausdrücke eine besondere Bedeutung hat. Weitere Informationen zur Verwendung regulärer Ausdrücke finden Sie unter Verwendung regulärer Ausdrücke.
Sie können auch einige eingeschränkte Glob-Ausdrücke im Qualifizierer path:
verwenden.
Um beispielsweise nach Dateien mit der Erweiterung txt
zu suchen, können Sie Folgendes verwenden:
path:*.txt
Um in einem Verzeichnis vom Typ `src` nach JavaScript-Dateien zu suchen, können Sie Folgendes verwenden:
path:src/*.js
-
Standardmäßig sind Glob-Ausdrücke nicht am Anfang des Pfads verankert, sodass der obige Ausdruck weiterhin einem Pfad wie
app/src/main.js
entspricht. Wenn Sie dem Ausdruck jedoch das Präfix/
voranstellen, erfolgt die Verankerung am Anfang. Beispiel:path:/src/*.js
-
Beachte, dass
*
nicht dem Zeichen/
entspricht, sodass im obigen Beispiel alle Ergebnisse direkte Nachfolger des Verzeichnissessrc
sind. Zum Abgleich innerhalb von Unterverzeichnissen können Sie**
verwenden, damit die Ergebnisse tief geschachtelte Dateien wie/src/app/testing/utils/example.js
enthalten. Beispiel:path:/src/**/*.js
Sie können auch das globale Zeichen ?
verwenden. Zum Abgleich des Pfads file.aac
oder file.abc
können Sie beispielsweise Folgendes verwenden:
path:*.a?c
Um nach einem Dateinamen zu suchen, der ein Sonderzeichen wie `*` oder `?` enthält, verwende einfach eine Zeichenfolge in Anführungszeichen:
path:"file?"
Glob-Ausdrücke sind für Zeichenfolgen in Anführungszeichen deaktiviert, deshalb gleicht die obige Abfrage nur Pfade ab, die die Literalzeichenfolge file?
enthalten.
Symbolqualifizierer
Sie können mit dem Qualifizierer symbol:
nach Symboldefinitionen im Code suchen, z. B. nach Funktions- oder Klassendefinitionen. Die Symbolsuche basiert auf der Analyse Ihr Codes mithilfe des Open Source-Parserökosystems Tree-Sitter, sodass keine zusätzliche Einrichtung oder Buildtoolintegration erforderlich ist.
So suchen Sie beispielsweise nach einem Symbol namens WithContext
:
language:go symbol:WithContext
In einigen Sprachen können Sie mithilfe eines Präfixes (z. B. einem Präfix ihres Klassennamens) nach Symbolen suchen. Beispielsweise können Sie für die Methode deleteRows
in einer Struktur vom Typ Maint
nach symbol:Maint.deleteRows
suchen, wenn Sie Go verwenden. In Rust können Sie nach symbol:Maint::deleteRows
suchen.
Sie können auch reguläre Ausdrücke mit dem Symbolqualifizierer verwenden. Die folgende Abfrage findet z. B. Konvertierungen, die Personen in Rust für den Typ String
implementiert haben:
language:rust symbol:/^String::to_.*/
Beachte, dass mit diesem Qualifizierer nur nach Definitionen und nicht nach Verweisen gesucht wird und noch nicht alle Symboltypen und Sprachen vollständig unterstützt werden. Die Symbolextraktion wird für die folgenden Sprachen unterstützt:
- Bash
- C
- C#
- C++
- CodeQL
- Elixir
- Go
- JSX
- Java
- JavaScript
- Lua
- PHP
- Protokollpuffer
- Python
- R
- Ruby
- Rust
- Scala
- Starlark
- Swift
- Typescript
Wir arbeiten daran, Unterstützung für weitere Sprachen hinzuzufügen. Wenn Sie uns dabei unterstützen möchten, können Sie Unterstützung für Ihre Sprache im Open Source-Parserökosystem Tree-sitter hinzufügen, auf dem die Symbolsuche basiert.
Inhaltsqualifizierer
Standardmäßig durchsuchen reine Begriffe sowohl Pfade als auch Dateiinhalte. Verwende den Qualifizierer content:
, um eine Suche so einzuschränken, dass sie dem Inhalt einer Datei und nicht den Dateipfaden entspricht. Beispiel:
content:README.md
Diese Abfrage würde nur Dateien ermitteln, die den Begriff README.md
enthalten, und nicht Dateien namens README.md
.
Is-Qualifizierer
Zum Filtern basierend auf Repositoryeigenschaften können Sie den Qualifizierer is:
verwenden. is:
unterstützt die folgenden Werte:
archived
: beschränkt die Suche auf archivierte Repositorys.fork
: beschränkt die Suche auf Verzweigungsrepositorys.vendored
: beschränkt die Suche auf Inhalte, die als Vendoring erkannt wurden.generated
: beschränkt die Suche auf Inhalte, die als generiert erkannt wurden.
Zum Beispiel:
path:/^MIT.txt$/ is:archived
Beachte, dass der Qualifizierer is:
mit dem NOT
-Operator umgekehrt werden kann. Für die Suche nach nicht archivierten Repositorys können Sie Folgendes verwenden:
log4j NOT is:archived
Um Forks aus Ihren Ergebnissen auszuschließen, können Sie folgendermaßen suchen:
log4j NOT is:fork
Verwendung regulärer Ausdrücke
Die Codesuche unterstützt reguläre Ausdrücke, um nach Mustern im Code zu suchen. Sie können reguläre Ausdrücke sowohl in reinen Suchbegriffen als auch in vielen Qualifizierern verwenden, indem Sie den regulären Ausdruck in Schrägstriche setzen.
Um beispielsweise nach dem regulären Ausdruck sparse.*index
zu suchen, verwenden Sie Folgendes:
/sparse.*index/
Beachten Sie, dass Sie alle Schrägstriche innerhalb des regulären Ausdrucks mit Escapezeichen versehen müssen. Um beispielsweise nach Dateien im Verzeichnis App/src
zu suchen, verwenden Sie Folgendes:
/^App\/src\//
Innerhalb eines regulären Ausdrucks steht \n
für ein Zeilenvorschubzeichen, \t
für eine Registerkarte und \x{hhhh}
kann verwendet werden, um jedes Unicode-Zeichen zu escapen. Dies bedeutet, dass Sie reguläre Ausdrücke verwenden können, um nach exakten Zeichenfolgen zu suchen, die Zeichen enthalten, die Sie nicht in die Suchleiste eingeben können.
Die meisten gängigen Features regulärer Ausdrücke funktionieren in der Codesuche. „Look-around“-Assertionen werden dabei jedoch nicht unterstützt.
Trennen von Suchbegriffen
Alle Teile einer Suche, z. B. Suchbegriffe, genaue Zeichenfolgen, reguläre Ausdrücke, Qualifizierer, Klammern und die booleschen Schlüsselwörter AND
, OR
und NOT
, müssen durch Leerzeichen voneinander getrennt werden. Die einzige Ausnahme besteht darin, dass in Klammern gesetzte Elemente, (
)
, nicht von den Klammern getrennt werden müssen.
Wenn Ihre Suche mehrere Komponenten enthält, die nicht durch Leerzeichen getrennt sind, oder anderen Text, der nicht den oben aufgeführten Regeln entspricht, versucht die Codesuche zu erraten, was Sie meinen. Sie greift dabei oft darauf zurück, diese Komponente Ihrer Abfrage als den genauen Text zu behandeln, nach dem gesucht werden soll. Beispielsweise in der folgenden Abfrage:
printf("hello world\n");
Bei der Codesuche werden die Klammern und Anführungszeichen nicht als Sonderzeichen interpretiert; stattdessen wird nach Dateien gesucht, die diesen genauen Code enthalten.
Wenn von der Codesuche der falsche Code erraten wird, können Sie immer noch Anführungszeichen und Leerzeichen einsetzen, um die Bedeutung deutlich zu machen.
Groß- und Kleinschreibung
Standardmäßig wird bei der Codesuche die Groß-/Kleinschreibung nicht beachtet, und die Ergebnisse enthalten sowohl Groß- als auch Kleinbuchstaben. Für Suchvorgänge mit Beachtung der Groß-/Kleinschreibung kannst du einen entsprechenden regulären Ausdruck verwenden. Um beispielsweise nach der Zeichenfolge „True“ zu suchen, würdest du Folgendes verwenden:
/(?-i)True/