86 lines
1.5 KiB
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
|
|
}
|