metrieke/main.go

86 lines
1.5 KiB
Go

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
}