mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-13 03:56:39 +00:00
113 lines
1.9 KiB
Go
113 lines
1.9 KiB
Go
|
package ir
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type File struct {
|
||
|
PkgPath string
|
||
|
|
||
|
RuleGroups []RuleGroup
|
||
|
|
||
|
CustomDecls []string
|
||
|
|
||
|
BundleImports []BundleImport
|
||
|
}
|
||
|
|
||
|
type BundleImport struct {
|
||
|
Line int
|
||
|
|
||
|
PkgPath string
|
||
|
Prefix string
|
||
|
}
|
||
|
|
||
|
type RuleGroup struct {
|
||
|
Line int
|
||
|
Name string
|
||
|
MatcherName string
|
||
|
|
||
|
DocTags []string
|
||
|
DocSummary string
|
||
|
DocBefore string
|
||
|
DocAfter string
|
||
|
DocNote string
|
||
|
|
||
|
Imports []PackageImport
|
||
|
|
||
|
Rules []Rule
|
||
|
}
|
||
|
|
||
|
type PackageImport struct {
|
||
|
Path string
|
||
|
Name string
|
||
|
}
|
||
|
|
||
|
type Rule struct {
|
||
|
Line int
|
||
|
|
||
|
SyntaxPatterns []PatternString
|
||
|
CommentPatterns []PatternString
|
||
|
|
||
|
ReportTemplate string
|
||
|
SuggestTemplate string
|
||
|
|
||
|
WhereExpr FilterExpr
|
||
|
|
||
|
LocationVar string
|
||
|
}
|
||
|
|
||
|
type PatternString struct {
|
||
|
Line int
|
||
|
Value string
|
||
|
}
|
||
|
|
||
|
// stringer -type=FilterOp -trimprefix=Filter
|
||
|
|
||
|
//go:generate go run ./gen_filter_op.go
|
||
|
type FilterOp int
|
||
|
|
||
|
func (op FilterOp) String() string { return filterOpNames[op] }
|
||
|
|
||
|
type FilterExpr struct {
|
||
|
Line int
|
||
|
|
||
|
Op FilterOp
|
||
|
Src string
|
||
|
Value interface{}
|
||
|
Args []FilterExpr
|
||
|
}
|
||
|
|
||
|
func (e FilterExpr) IsValid() bool { return e.Op != FilterInvalidOp }
|
||
|
|
||
|
func (e FilterExpr) IsBinaryExpr() bool { return filterOpFlags[e.Op]&flagIsBinaryExpr != 0 }
|
||
|
func (e FilterExpr) IsBasicLit() bool { return filterOpFlags[e.Op]&flagIsBasicLit != 0 }
|
||
|
func (e FilterExpr) HasVar() bool { return filterOpFlags[e.Op]&flagHasVar != 0 }
|
||
|
|
||
|
func (e FilterExpr) String() string {
|
||
|
switch e.Op {
|
||
|
case FilterStringOp:
|
||
|
return `"` + e.Value.(string) + `"`
|
||
|
case FilterIntOp:
|
||
|
return fmt.Sprint(e.Value.(int64))
|
||
|
}
|
||
|
parts := make([]string, 0, len(e.Args)+2)
|
||
|
parts = append(parts, e.Op.String())
|
||
|
if e.Value != nil {
|
||
|
parts = append(parts, fmt.Sprintf("[%#v]", e.Value))
|
||
|
}
|
||
|
for _, arg := range e.Args {
|
||
|
parts = append(parts, arg.String())
|
||
|
}
|
||
|
if len(parts) == 1 {
|
||
|
return parts[0]
|
||
|
}
|
||
|
return "(" + strings.Join(parts, " ") + ")"
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
flagIsBinaryExpr uint64 = 1 << iota
|
||
|
flagIsBasicLit
|
||
|
flagHasVar
|
||
|
)
|