Skip to content

Commit

Permalink
qll库模块生成路径支持自定义
Browse files Browse the repository at this point in the history
  • Loading branch information
hudangwei committed Mar 15, 2022
1 parent 29ee2ed commit ea77992
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 8 deletions.
16 changes: 12 additions & 4 deletions cmd/codemillx/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ import (
)

var moduleName string
var customizeCodeQLAction bool
var output string

func init() {
flag.StringVar(&moduleName, "module", "", "module name")
flag.StringVar(&moduleName, "module", "Customizations", "module name")
flag.BoolVar(&customizeCodeQLAction, "customizeCodeQLAction", false, "customize CodeQL Action")
flag.StringVar(&output, "output", "Customizations.qll", "output file name")
}

func main() {
Expand All @@ -25,10 +29,14 @@ func main() {

codeqlModuleSpec := codemillx.ExtractCodeqlModuleSpec(moduleName, pkgs)

ouputPath, err := codemill.GenerateCodeQL(codeqlModuleSpec)
if err != nil {
if customizeCodeQLAction {
if customizeFile := codemillx.FindCustomizationsQllFile(); len(customizeFile) > 0 {
output = customizeFile
}
}

if err := codemill.GenerateCodeQL(codeqlModuleSpec, output); err != nil {
fmt.Println("GenerateCodeQL with error:", err)
return
}
fmt.Println(ouputPath)
}
8 changes: 4 additions & 4 deletions codemill/codeql.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/gagliardetto/utilz"
)

func GenerateCodeQL(module CodeqlModuleSpec) (string, error) {
func GenerateCodeQL(module CodeqlModuleSpec, output string) error {
cqlFile := cqljen.NewFile()
cqlFile.Import("go")
cqlFile.Private().Module().Id(utilz.ToCamel(module.ModuleName)).BlockFunc(func(moduleGroup *cqljen.Group) {
Expand Down Expand Up @@ -39,12 +39,12 @@ func GenerateCodeQL(module CodeqlModuleSpec) (string, error) {
}
})

codeqlFile, err := os.Create(module.ModuleName + ".qll")
codeqlFile, err := os.Create(output)
if err != nil {
return "", err
return err
}
defer codeqlFile.Close()
return codeqlFile.Name(), cqlFile.Render(codeqlFile)
return cqlFile.Render(codeqlFile)
}

func GetFuncQualifierCodeElements(qual *FuncQualifier) []cqljen.Code {
Expand Down
29 changes: 29 additions & 0 deletions util.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package codemillx

import (
"os"
"path/filepath"
)

func FindCustomizationsQllFile() string {
matches, err := filepath.Glob("/opt/hostedtoolcache/CodeQL/*/x64/codeql/qlpacks/codeql/go-all/*")
if err != nil || len(matches) == 0 {
return ""
}
for _, v := range matches {
f := filepath.Join(v, "Customizations.qll")
if FileExists(f) {
return f
}
}
return ""
}

func FileExists(name string) bool {
if _, err := os.Stat(name); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}

0 comments on commit ea77992

Please sign in to comment.