Referenz zum Ausgabefomat
Das .skt-Format (Skeleton) ist ein kompaktes, menschenlesbares Textformat, das von codeknit verwendet wird, um extrahierte Codestruktur darzustellen. Es enthält Symbole, Beziehungen und Metadaten in einer minimalen Form, die für die Verarbeitung durch LLMs und strukturelle Analysen geeignet ist.
Eine .skt-Datei ist in Abschnitte unterteilt. Jeder Abschnitt beginnt mit einer Überschrift in eckigen Klammern. Die Abschnitte können in beliebiger Reihenfolge erscheinen, wobei [symbols] typischerweise zuerst kommt.
[symbols]
Abschnitt betitelt „[symbols]“Der Abschnitt [symbols] listet alle extrahierten Symbole, gruppiert nach ihrer Quelldatei. Jede Datei wird mit einer ##-Überschrift eingeleitet, gefolgt vom Dateipfad.
Zeilenformat
Abschnitt betitelt „Zeilenformat“Jedes Symbol wird in einer einzelnen Zeile mit folgender Struktur dargestellt:
ShortID category/kind Lstart-Lend Signatur {Eigenschaften}- ShortID: Ein sequenzieller Identifikator, der jedem Symbol zugewiesen wird (z. B.
S1,S2,S3). Wird als Referenz in Kanten und anderen Abschnitten verwendet. - category/kind: Ein durch Schrägstrich getrenntes Paar, das die Kategorie und die spezifische Art des Symbols angibt.
- Lstart-Lend: Der Zeilenbereich im Quellcode, in dem das Symbol definiert ist (z. B.
L10-L15). - Signatur: Der Name und die Typinformationen des Symbols. Das Format hängt vom Symbol ab:
name— für Typen, Werte, Modulename(params)— für Callables ohne Rückgabetypname(params) -> Rückgabetyp— für Callables mit Rückgabetyp
- {Eigenschaften}: Optionale Metadaten, die in geschweiften Klammern eingeschlossen sind. Mehrere Eigenschaften werden durch Kommas getrennt.
Parameter
Abschnitt betitelt „Parameter“- In untypisierten Sprachen:
Parametername - In typisierten Sprachen:
Parametername: Typ - Typreferenzen, die bekannten Symbolen entsprechen, werden durch ihre ShortIDs ersetzt (z. B.
config: S5stattconfig: Config).
Eigenschaften
Abschnitt betitelt „Eigenschaften“Häufige Eigenschaften sind:
async:trueoderfalseexported:trueoderfalsestatic: vorhanden, wenn das Symbol statisch istvisibility=public|private|protectedreceiver=*Typname: für Methoden, gibt den Empfängertyp an
Symbolkategorien und -arten
Abschnitt betitelt „Symbolkategorien und -arten“| Kategorie | Arten | Beispiele |
|---|---|---|
callable |
function, method, constructor | callable/function, callable/method |
type |
class, interface, struct, enum | type/class, type/interface |
value |
variable, constant, field | value/variable, value/constant |
module |
package, namespace | module/package |
meta |
type parameters, metadata | meta/type_parameter |
Beispiel
Abschnitt betitelt „Beispiel“[symbols]## pkg/services/auth.goS1 module/package L1-L1 services {}S2 type/struct L5-L8 AuthService {exported}S3 callable/function L10-L12 NewAuthService(secret: string, ttl: int) -> *S2 {exported}S4 callable/method L14-L19 Authenticate(token: string) {exported, receiver=*AuthService}S5 callable/function L29-L31 verifyToken(token: string) -> bool {exported=false}[edges]
Abschnitt betitelt „[edges]“Der Abschnitt [edges] definiert Beziehungen zwischen Symbolen unter Verwendung ihrer ShortIDs.
Zeilenformat
Abschnitt betitelt „Zeilenformat“VonID --Art--> NachID1, NachID2Mehrere Ziel-IDs werden durch Kommas getrennt. Jede Zeile stellt eine gerichtete Beziehung dar.
Kantenarten
Abschnitt betitelt „Kantenarten“| Art | Bedeutung |
|---|---|
calls |
Aufruf einer Funktion/Methode |
contains |
Klasse enthält Methode, Modul enthält Funktion |
inherits |
Klasse erweitert eine andere Klasse |
implements |
Klasse implementiert Interface |
overrides |
Methode überschreibt Elternmethode |
references |
Symbol referenziert ein anderes Symbol |
imports |
Modul importiert ein anderes Modul |
decorates |
Dekorator wird auf ein Symbol angewendet |
Beispiel
Abschnitt betitelt „Beispiel“[edges]S2 --contains--> S4S4 --calls--> S5S10 --inherits--> S2S24 --implements--> S19[errors]
Abschnitt betitelt „[errors]“Der Abschnitt [errors] listet Dateien auf, die nicht vollständig geparst werden konnten.
Jede Zeile beginnt mit -, gefolgt vom Dateipfad und der Fehlermeldung:
- Pfad/zur/Datei.go: Syntaxfehler in Zeile 42Beispiel
Abschnitt betitelt „Beispiel“[errors]- src/broken.go: unexpected token at line 10- tests/corner_case.py: unterminated string literalDer Abschnitt [dict] erscheint nur, wenn das Flag --minify verwendet wird. Er bildet kurze Dictionary-Codes auf wiederholte String-Tokens ab, um die Ausgabegröße zu reduzieren.
Jede Zeile bildet einen Dictionary-Code (d0, d1 usw.) auf seinen erweiterten Wert ab:
- d0: async=false- d1: callable/method- d2: exportedIm Rest der Datei ersetzen diese Codes ihre vollständigen Werte.
Beispiel
Abschnitt betitelt „Beispiel“[dict]- d0: async=false- d1: callable/method- d2: exported
[symbols]## src/handler.pyS1 type/class L1-L6 Handler {}S2 d1 L2-L3 __init__(name) {d0}S3 d1 L5-L6 handle(request) {d0}
[edges]S1 --contains--> S2, S3Vollständiges Beispiel
Abschnitt betitelt „Vollständiges Beispiel“[dict]- d0: exported- d1: callable/function
[symbols]## main.goS1 module/package L1-L1 main {}S2 type/struct L5-L8 Server {d0}S3 d1 L10-L12 NewServer(addr: string) -> *S2 {d0}S4 callable/method L14-L20 Serve() {d0, receiver=*Server}S5 callable/function L22-L25 handleError(err: error) -> bool {}
[edges]S2 --contains--> S4S4 --calls--> S5S3 --returns--> S2
[errors]- utils/broken.go: syntax error at line 5