Riferimento della modalità di output
Il formato .skt (skeleton) è un formato di testo compatto e leggibile dall’uomo utilizzato da codeknit per rappresentare la struttura del codice estratta. Contiene simboli, relazioni e metadati in una forma minimale adatta al consumo da parte di LLM e all’analisi strutturale.
Un file .skt è diviso in sezioni. Ogni sezione inizia con un’intestazione tra parentesi quadre. Le sezioni possono apparire in qualsiasi ordine, anche se [symbols] tipicamente viene per prima.
[symbols]
Sezione intitolata “[symbols]”La sezione [symbols] elenca tutti i simboli estratti raggruppati per file di origine. Ogni file è introdotto con un’intestazione ## seguita dal percorso del file.
Formato della riga
Sezione intitolata “Formato della riga”Ogni simbolo è rappresentato su una singola riga con la seguente struttura:
ShortID categoria/tipo Linizio-Lfine firma {proprietà}- ShortID: Un identificatore sequenziale assegnato a ogni simbolo (es.
S1,S2,S3). Utilizzato come riferimento negli archi e in altre sezioni. - categoria/tipo: Una coppia separata da slash che indica la categoria del simbolo e il tipo specifico.
- Linizio-Lfine: L’intervallo di righe nel file sorgente in cui il simbolo è definito (es.
L10-L15). - firma: Il nome del simbolo e le informazioni sul tipo. Il formato dipende dal simbolo:
nome— per tipi, valori, modulinome(parametri)— per callable senza tipo di ritornonome(parametri) -> tipoRitorno— per callable con tipo di ritorno
- {proprietà}: Metadati opzionali racchiusi tra parentesi graffe. Più proprietà sono separate da virgole.
Parametri
Sezione intitolata “Parametri”- In linguaggi non tipizzati:
nomeParametro - In linguaggi tipizzati:
nomeParametro: tipo - I riferimenti ai tipi che corrispondono a simboli noti sono sostituiti con i loro ShortID (es.
config: S5invece diconfig: Config).
Proprietà
Sezione intitolata “Proprietà”Proprietà comuni includono:
async:trueofalseexported:trueofalsestatic: presente se il simbolo è staticovisibility=public|private|protectedreceiver=*NomeTipo: per i metodi, indica il tipo del receiver
Categorie e tipi di simboli
Sezione intitolata “Categorie e tipi di simboli”| Categoria | Tipi | Esempi |
|---|---|---|
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 |
Esempio
Sezione intitolata “Esempio”[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]
Sezione intitolata “[edges]”La sezione [edges] definisce le relazioni tra i simboli utilizzando i loro ShortID.
Formato della riga
Sezione intitolata “Formato della riga”DaID --tipo--> AID1, AID2Più ID di destinazione sono separati da virgole. Ogni riga rappresenta una relazione direzionale.
Tipi di arco
Sezione intitolata “Tipi di arco”| Tipo | Significato |
|---|---|
calls |
invocazione di funzione/metodo |
contains |
classe contiene metodo, modulo contiene funzione |
inherits |
classe estende un’altra classe |
implements |
classe implementa interfaccia |
overrides |
metodo sovrascrive metodo genitore |
references |
simbolo fa riferimento a un altro simbolo |
imports |
modulo importa un altro modulo |
decorates |
decoratore applicato a un simbolo |
Esempio
Sezione intitolata “Esempio”[edges]S2 --contains--> S4S4 --calls--> S5S10 --inherits--> S2S24 --implements--> S19[errors]
Sezione intitolata “[errors]”La sezione [errors] elenca i file che non sono stati analizzati completamente.
Formato
Sezione intitolata “Formato”Ogni riga inizia con - seguito dal percorso del file e dal messaggio di errore:
- percorso/al/file.go: errore di sintassi alla riga 42Esempio
Sezione intitolata “Esempio”[errors]- src/broken.go: unexpected token at line 10- tests/corner_case.py: unterminated string literalLa sezione [dict] appare solo quando viene utilizzata l’opzione --minify. Mappa codici brevi del dizionario a token stringa ripetuti per ridurre la dimensione dell’output.
Formato
Sezione intitolata “Formato”Ogni riga mappa un codice del dizionario (d0, d1, ecc.) al suo valore espanso:
- d0: async=false- d1: callable/method- d2: exportedNel resto del file, questi codici sostituiscono i loro valori completi.
Esempio
Sezione intitolata “Esempio”[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, S3Esempio completo
Sezione intitolata “Esempio completo”[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