101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
package metrieke
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
sitter "github.com/smacker/go-tree-sitter"
|
|
)
|
|
|
|
var lang Language
|
|
|
|
func main() {
|
|
var path string
|
|
flag.StringVar(&path, "path", "", "Path to the file or directory for metrics calculation")
|
|
|
|
flag.Parse()
|
|
|
|
if path == "" {
|
|
fmt.Printf("Need a path")
|
|
os.Exit(1)
|
|
}
|
|
|
|
// language detection
|
|
if strings.HasSuffix(path, ".py") {
|
|
fd := NewPythonFile(path)
|
|
fd.Parse()
|
|
fmt.Printf("metrics: %v\n", fd.Metrics)
|
|
|
|
} else if strings.HasSuffix(path, ".java") {
|
|
fd := NewJavaFile(path)
|
|
fd.Parse()
|
|
fmt.Printf("metrics: %v\n", fd.Metrics)
|
|
} else {
|
|
err := filepath.Walk(path,
|
|
func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(path, info.Size())
|
|
if strings.HasSuffix(path, ".java") {
|
|
fd := NewJavaFile(path)
|
|
fd.Parse()
|
|
fmt.Printf("metrics: %v\n", fd.Metrics)
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
fmt.Printf("problem walking directory %v: %v\n", path, err)
|
|
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()
|
|
defer qc.Close()
|
|
qry, err := sitter.NewQuery(pattern, lang)
|
|
defer qry.Close()
|
|
|
|
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
|
|
}
|