package metrieke import ( "flag" "fmt" "os" "strings" sitter "github.com/smacker/go-tree-sitter" "github.com/smacker/go-tree-sitter/java" "github.com/smacker/go-tree-sitter/python" ) var lang Language func main() { var file string flag.StringVar(&file, "file", "", "Path to the file for metrics calculation") flag.Parse() if file == "" { fmt.Printf("Need a file path") os.Exit(1) } // language detection if strings.HasSuffix(file, ".py") { lang = Language{ Name: "python", Language: python.GetLanguage(), } } else if strings.HasSuffix(file, ".java") { lang = Language{ Name: "java", Language: java.GetLanguage(), } } else { fmt.Printf("unknown file ending\n") os.Exit(1) } //f, err := LoadFile(file, lang) //if err != nil { //fmt.Printf("error getting metrics %v\n", err) //os.Exit(1) //} fmt.Printf("lang: %v\n", lang.Name) //fmt.Printf("%v\n", f) } func queryChildNodes(pattern []byte, lang *sitter.Language, node *sitter.Node, callback func(*sitter.Node)) { qc := sitter.NewQueryCursor() qry, err := sitter.NewQuery(pattern, lang) if err != nil { fmt.Println("error querying", err) return } qc.Exec(qry, node) match, idx, found := qc.NextCapture() for found == true { node := match.Captures[idx].Node callback(node) match, idx, found = qc.NextCapture() } } type Language struct { Name string Language *sitter.Language } type Metrics struct { Name string Language string NumMethods int LOC int LLOC int CLOC int McCC int NL int }