feat: add linsters
This commit is contained in:
@ -20,7 +20,7 @@ func (A *AND) ShouldFindProcess() bool {
|
||||
}
|
||||
|
||||
func NewAND(payload string, adapter string,
|
||||
parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*AND, error) {
|
||||
parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*AND, error) {
|
||||
and := &AND{Base: &common.Base{}, payload: payload, adapter: adapter}
|
||||
rules, err := ParseRuleByPayload(payload, parse)
|
||||
if err != nil {
|
||||
|
@ -9,7 +9,7 @@ import (
|
||||
_ "unsafe"
|
||||
)
|
||||
|
||||
func ParseRuleByPayload(payload string, parseRule func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) ([]C.Rule, error) {
|
||||
func ParseRuleByPayload(payload string, parseRule func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) ([]C.Rule, error) {
|
||||
regex, err := regexp.Compile("\\(.*\\)")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -59,7 +59,7 @@ func payloadToRule(subPayload string, parseRule func(tp, payload, target string,
|
||||
return parseRule(tp, param[0], "", param[1:])
|
||||
}
|
||||
|
||||
func parseLogicSubRule(parseRule func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) func(tp, payload, target string, params []string) (parsed C.Rule, parseErr error) {
|
||||
func parseLogicSubRule(parseRule func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) func(tp, payload, target string, params []string) (parsed C.Rule, parseErr error) {
|
||||
return func(tp, payload, target string, params []string) (parsed C.Rule, parseErr error) {
|
||||
switch tp {
|
||||
case "MATCH", "SUB-RULE":
|
||||
|
@ -17,7 +17,7 @@ func (not *NOT) ShouldFindProcess() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func NewNOT(payload string, adapter string, parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*NOT, error) {
|
||||
func NewNOT(payload string, adapter string, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*NOT, error) {
|
||||
not := &NOT{Base: &common.Base{}, adapter: adapter}
|
||||
rule, err := ParseRuleByPayload(payload, parse)
|
||||
if err != nil {
|
||||
|
@ -45,7 +45,7 @@ func (or *OR) ShouldResolveIP() bool {
|
||||
return or.needIP
|
||||
}
|
||||
|
||||
func NewOR(payload string, adapter string, parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*OR, error) {
|
||||
func NewOR(payload string, adapter string, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*OR, error) {
|
||||
or := &OR{Base: &common.Base{}, payload: payload, adapter: adapter}
|
||||
rules, err := ParseRuleByPayload(payload, parse)
|
||||
if err != nil {
|
||||
|
@ -12,13 +12,13 @@ type SubRule struct {
|
||||
payload string
|
||||
payloadRule C.Rule
|
||||
subName string
|
||||
subRules *map[string][]C.Rule
|
||||
subRules map[string][]C.Rule
|
||||
shouldFindProcess *bool
|
||||
shouldResolveIP *bool
|
||||
}
|
||||
|
||||
func NewSubRule(payload, subName string, sub *map[string][]C.Rule,
|
||||
parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*SubRule, error) {
|
||||
func NewSubRule(payload, subName string, sub map[string][]C.Rule,
|
||||
parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (*SubRule, error) {
|
||||
payloadRule, err := ParseRuleByPayload(fmt.Sprintf("(%s)", payload), parse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -45,8 +45,8 @@ func (r *SubRule) Match(metadata *C.Metadata) (bool, string) {
|
||||
return match(metadata, r.subName, r.subRules)
|
||||
}
|
||||
|
||||
func match(metadata *C.Metadata, name string, subRules *map[string][]C.Rule) (bool, string) {
|
||||
for _, rule := range (*subRules)[name] {
|
||||
func match(metadata *C.Metadata, name string, subRules map[string][]C.Rule) (bool, string) {
|
||||
for _, rule := range subRules[name] {
|
||||
if m, a := rule.Match(metadata); m {
|
||||
if rule.RuleType() == C.SubRules {
|
||||
match(metadata, rule.Adapter(), subRules)
|
||||
@ -61,7 +61,7 @@ func match(metadata *C.Metadata, name string, subRules *map[string][]C.Rule) (bo
|
||||
func (r *SubRule) ShouldResolveIP() bool {
|
||||
if r.shouldResolveIP == nil {
|
||||
s := false
|
||||
for _, rule := range (*r.subRules)[r.subName] {
|
||||
for _, rule := range r.subRules[r.subName] {
|
||||
s = s || rule.ShouldResolveIP()
|
||||
}
|
||||
r.shouldResolveIP = &s
|
||||
@ -73,7 +73,7 @@ func (r *SubRule) ShouldResolveIP() bool {
|
||||
func (r *SubRule) ShouldFindProcess() bool {
|
||||
if r.shouldFindProcess == nil {
|
||||
s := false
|
||||
for _, rule := range (*r.subRules)[r.subName] {
|
||||
for _, rule := range r.subRules[r.subName] {
|
||||
s = s || rule.ShouldFindProcess()
|
||||
}
|
||||
r.shouldFindProcess = &s
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
RP "github.com/Dreamacro/clash/rules/provider"
|
||||
)
|
||||
|
||||
func ParseRule(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error) {
|
||||
func ParseRule(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error) {
|
||||
switch tp {
|
||||
case "DOMAIN":
|
||||
parsed = RC.NewDomain(payload, target)
|
||||
|
@ -66,7 +66,7 @@ func ruleParse(ruleRaw string) (string, string, []string) {
|
||||
return "", "", nil
|
||||
}
|
||||
|
||||
func NewClassicalStrategy(parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) *classicalStrategy {
|
||||
func NewClassicalStrategy(parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) *classicalStrategy {
|
||||
return &classicalStrategy{rules: []C.Rule{}, parse: func(tp, payload, target string, params []string) (parsed C.Rule, parseErr error) {
|
||||
switch tp {
|
||||
case "MATCH", "SUB-RULE":
|
||||
|
@ -17,7 +17,7 @@ type ruleProviderSchema struct {
|
||||
Interval int `provider:"interval,omitempty"`
|
||||
}
|
||||
|
||||
func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) {
|
||||
func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) {
|
||||
schema := &ruleProviderSchema{}
|
||||
decoder := structure.NewDecoder(structure.Option{TagName: "provider", WeaklyTypedInput: true})
|
||||
if err := decoder.Decode(mapping, schema); err != nil {
|
||||
|
@ -103,7 +103,7 @@ func (rp *ruleSetProvider) MarshalJSON() ([]byte, error) {
|
||||
}
|
||||
|
||||
func NewRuleSetProvider(name string, behavior P.RuleType, interval time.Duration, vehicle P.Vehicle,
|
||||
parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) P.RuleProvider {
|
||||
parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) P.RuleProvider {
|
||||
rp := &ruleSetProvider{
|
||||
behavior: behavior,
|
||||
}
|
||||
@ -126,7 +126,7 @@ func NewRuleSetProvider(name string, behavior P.RuleType, interval time.Duration
|
||||
return wrapper
|
||||
}
|
||||
|
||||
func newStrategy(behavior P.RuleType, parse func(tp, payload, target string, params []string, subRules *map[string][]C.Rule) (parsed C.Rule, parseErr error)) ruleStrategy {
|
||||
func newStrategy(behavior P.RuleType, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) ruleStrategy {
|
||||
switch behavior {
|
||||
case P.Domain:
|
||||
strategy := NewDomainStrategy()
|
||||
|
Reference in New Issue
Block a user