Dokumentation

Sprachen

greppy bringt tree-sitter-Parser für mehr als 60 Sprachen mit. Die Unterstützung hat drei Stufen, und jede ist gemessen.

Stufe Sprachen Was funktioniert
Graph vollständig geprüft Rust, Python, Java, JavaScript, TypeScript, Go, C++, C#, Kotlin, Swift, Ruby alles; Aufrufer, Aufgerufene, Nutzungen und Impact sind in Testgittern pro Sprache geprüft
Graph-Beziehungen weitere Programmiersprachen, zum Beispiel Elixir, Scala, PHP und Haskell Symbole, Definitions- und Textsuche, dazu Aufruf-, Nutzungs- und Import-Beziehungen
Symbole und Text deklarative Formate wie JSON, YAML, TOML und Markdown Symbole und Textsuche; einen Aufrufgraphen haben diese Formate von Natur aus nicht

Drei Sprachen in einem Repository

Ein kleines Projekt in Python, Go und TypeScript hat je Sprache eine Funktion und ihren Aufrufer in einer zweiten Datei. Hier sind die sechs Dateien, gekürzt auf die Zeilen, die das Beispiel tragen:

py/pricing.py   def apply_discount(price, percent)
py/cart.py      from pricing import apply_discount  ·  Cart.total() ruft apply_discount
go/tax.go       func ApplyTax(net float64) float64
go/invoice.go   func (i Invoice) Total() ruft ApplyTax
ts/format.ts    export function formatPrice(cents: number)
ts/receipt.ts   import { formatPrice } from "./format"  ·  renderReceipt() ruft formatPrice

Ein Index deckt alle drei Sprachen ab:

$ greppy index .
indexed 6 files (0 unsupported, 0 unreadable, 0 oversize, 0 file-limit, 0 time-budget); 9 nodes extracted; generation 1 (project: shop)
embedded 9 code spans (0 local-store reused, 9 global-cache hits, 0 inference misses, 25 considered, 16 non-definition skipped, 0 missing-file, 0 invalid-span, 0 oversize, 0 failed, 0 stale pruned)

Ein Aufruf fragt nach den Aufrufern in allen drei Sprachen. Bei Python erscheint zusätzlich der Import auf Dateiebene:

$ greppy who-calls apply_discount ApplyTax formatPrice
apply_discount
py/cart.py:1  __file__
py/cart.py:9  Cart::total

ApplyTax
go/invoice.go:7  Invoice::Total

formatPrice
ts/receipt.ts:3  renderReceipt

Die semantische Suche rankt über alle Sprachen hinweg:

$ greppy search "add VAT to a net amount"
go/invoice.go:7  Invoice::Total — returns the total by applying tax to Net
go/tax.go:4  ApplyTax — returns the net value multiplied by 1.19
go/invoice.go:3  Invoice
ts/format.ts:1  formatPrice — formats a number of cents as a two-decimal EUR string
ts/receipt.ts:3  renderReceipt — formats a list of line pairs into a single string
py/pricing.py:1  apply_discount — reduces a price by a percentage and rounds the result
py/cart.py:9  Cart::total — computes the total price by summing item prices and applying a discount
py/cart.py:4  Cart

greppy where-am-i nennt in der ersten Zeile die Sprachen deines Repositorys, für dieses Projekt go, python, typescript, 6 files, 9 definitions, für serde 1.0.229 rust, toml, markdown, 339 files, 3,908 definitions.

Jede Sprache

greppy 0.4.1 erkennt und indexiert diese 63 Sprachen. Jede ist mit einer Beispieldatei und der angegebenen Endung geprüft:

Gruppe Sprachen
Systeme und Hardware C (.c, .h), C++ (.cpp, .hpp), CUDA (.cu), Objective-C (.m), D (.d), Rust (.rs), Zig (.zig), Go (.go), Swift (.swift), Ada (.adb), Fortran (.f90), Pascal (.pas), GLSL (.glsl), Verilog (.sv), VHDL (.vhd)
JVM und .NET Java (.java), Kotlin (.kt), Scala (.scala), Groovy (.groovy), Clojure (.clj), C# (.cs), F# (.fs)
Web JavaScript (.js, .jsx, .mjs), TypeScript (.ts, .tsx), Vue (.vue), Svelte (.svelte), CSS (.css), PHP (.php), Dart (.dart), Solidity (.sol)
Skriptsprachen Python (.py), Ruby (.rb), Crystal (.cr), Lua (.lua), Bash (.sh), PowerShell (.ps1), R (.R), Julia (.jl), MATLAB (.matlab), GDScript (.gd)
Funktional Haskell (.hs), OCaml (.ml), Elixir (.ex), Erlang (.erl), Elm (.elm), Gleam (.gleam), PureScript (.purs), Racket (.rkt), Scheme (.scm), Common Lisp (.lisp, .cl), Nix (.nix)
Daten, Schema und Build JSON, YAML, TOML, Markdown (.md), SQL, GraphQL, Protobuf (.proto), Prisma, HCL (.tf, .hcl), CMake (.cmake), Make (Makefile, .mk), Dockerfile (.dockerfile)

In jeder dieser Sprachen arbeiten search, search-symbol, search-pattern, read und die Edit-Befehle auf den indexierten Definitionen. greppy diagnostics listet für dein Repository jede erkannte Sprache mit der Zahl ihrer indexierten Dateien.

Aufrufgraph

Die Beispieldateien enthalten je eine Funktion add und eine zweite Funktion, die sie aufruft. greppy who-calls findet diesen Aufruf ohne weitere Einrichtung in 33 Sprachen:

Bash, C, C++, C#, Clojure, Crystal, CUDA, D, Dart, Elixir, F#, GDScript, Gleam, GLSL, Go, Groovy, Haskell, Java, JavaScript, Kotlin, Lua, OCaml, PHP, Python, R, Racket, Ruby, Rust, Scala, Scheme, Swift, TypeScript, Zig.

Damit arbeiten dort auch callees, path und impact. Außerhalb der vollständig geprüften Sprachen ist der Graph ein starker Hinweis; prüfe ihn am Quelltext.

Vollständig geprüfter Graph

Elf Sprachen haben einen vollständig geprüften Graphen:

  • Rust
  • Python
  • Java
  • JavaScript
  • TypeScript
  • Go
  • C++
  • C#
  • Kotlin
  • Swift
  • Ruby

Jede ist über ein Gitter mit 12 Zellen pro Sprache vollständig geprüft: dateiübergreifende CALLS-, USAGE-, TYPE_REF- und IMPORTS-Kanten, dazu Stabilität beim Neuindexieren und Frische-Verhalten, zusammen mit Sprach-Fixtures und Tests an echten Repositorys. Gitter und Fixtures sind Integrationstests in crates/cli/tests/, zum Beispiel graph_nav.rs und graph_grid_ruby.rs. Die übrigen Programmiersprachen folgen in Wellen.

Semantische Suche

search arbeitet auf Definitionen in jeder indexierten Sprache: EmbeddingGemma bettet die Definitionen ein, und der Navigationshinweis unter jedem Treffer kommt von greppys feinabgestimmtem Qwen3.5-Modell. Die semantische Suche hängt nicht an Graphkanten und findet deshalb auch Code, den der Graph nicht verbindet.

Was kein Parser sieht

Statische Analyse kann Reflection, Dependency Injection zur Laufzeit, generierten Code, Makro-Expansion, Monkeypatching und dynamischen Dispatch übersehen, in jeder Sprache. Die Frische der Belege ist fail-closed: greppy gibt keine wissentlich veralteten Quelltext-Belege aus. Prüfe vorgeschlagene Änderungen mit der Toolchain der Sprache und der Testsuite. Siehe Grenzen.

Repositories mit mehreren Paketen

Ein Repository mit mehreren Paketen, etwa ein Cargo-, npm- oder Go-Workspace, bekommt einen Index. where-am-i, search, search-symbol und search-pattern decken alle Pakete in einem Aufruf ab. Bei serde stehen serde/, serde_core/, serde_derive/, serde_derive_internals/ und test_suite/ in einer Übersicht.

Eine Sprache hinzufügen

Das Repository enthält ADDING_A_LANGUAGE.md, eine in sich geschlossene Anleitung: Extraktion für eine Sprache ergänzen, sie bis zur Korrektheitsgrenze des Projekts prüfen und einen Pull Request öffnen. Beiträge folgen CONTRIBUTING.md.