Sto generando del codice sorgente utilizzando il pacchetto templates (esiste un metodo migliore?) E parte del test devo verificare se l'output corrisponde al codice sorgente previsto.Come posso confrontare due file di codice sorgente/ast alberi?
- Ho provato un confronto tra stringhe ma non riesce a causa degli spazi aggiuntivi/nuove linee generate dal pacchetto di modelli. Ho anche provato format.Source con non successo. (FAIL)
Ho cercato di analizzare l'ast di entrambe le fonti (vedi sotto) ma l'ast non corrisponde neanche se il codice è sostanzialmente lo stesso eccetto le nuove linee/spazi. (FAIL)
pacchetto principale
import ( "fmt" "go/parser" "go/token" "reflect" ) func main() { stub1 := `package main func myfunc(s string) error { return nil }` stub2 := `package main func myfunc(s string) error { return nil }` fset := token.NewFileSet() r1, err := parser.ParseFile(fset, "", stub1, parser.AllErrors) if err != nil { panic(err) } fset = token.NewFileSet() r2, err := parser.ParseFile(fset, "", stub2, parser.AllErrors) if err != nil { panic(err) } if !reflect.DeepEqual(r1, r2) { fmt.Printf("e %v, r %s, ", r1, r2) } }
Vuoi confrontare alberi arbitrari, o semplicemente passare alberi che hai analizzato? –
Basta andare codice sorgente/alberi, quindi il tag go – themihai
https://www.diffchecker.com/ – Andrew