summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoyalsoldier <[email protected]>2023-10-29 15:37:22 +0800
committerLoyalsoldier <[email protected]>2023-10-29 15:37:22 +0800
commit82bc6a9f3ccf028ff4c01849b4aee33a0c0bd94d (patch)
tree9fe3f104f4f232bb4fb81c92dabeb9e4dc087430
parentcbbee50da7d45aad95c2700bc7148e0636170c62 (diff)
Feat: skip comment within a line in plaintext formats automatically
content starts with `#` `//` `/*` within a line will be treated as comment and be ignored
-rw-r--r--lib/error.go1
-rw-r--r--lib/lib.go12
-rw-r--r--plugin/plaintext/common_in.go25
3 files changed, 30 insertions, 8 deletions
diff --git a/lib/error.go b/lib/error.go
index c990d367..1b8e4518 100644
--- a/lib/error.go
+++ b/lib/error.go
@@ -11,4 +11,5 @@ var (
ErrInvalidIPLength = errors.New("invalid IP address length")
ErrInvalidIPNet = errors.New("invalid IPNet address")
ErrInvalidPrefixType = errors.New("invalid prefix type")
+ ErrCommentLine = errors.New("comment line")
)
diff --git a/lib/lib.go b/lib/lib.go
index 1f039051..430a39f3 100644
--- a/lib/lib.go
+++ b/lib/lib.go
@@ -164,6 +164,14 @@ func (e *Entry) processPrefix(src any) (*netip.Prefix, IPType, error) {
}
case string:
+ src, _, _ = strings.Cut(src, "#")
+ src, _, _ = strings.Cut(src, "//")
+ src, _, _ = strings.Cut(src, "/*")
+ src = strings.TrimSpace(src)
+ if src == "" {
+ return nil, "", ErrCommentLine
+ }
+
_, network, err := net.ParseCIDR(src)
switch err {
case nil:
@@ -256,7 +264,7 @@ func (e *Entry) remove(prefix *netip.Prefix, ipType IPType) error {
func (e *Entry) AddPrefix(cidr any) error {
prefix, ipType, err := e.processPrefix(cidr)
- if err != nil {
+ if err != nil && err != ErrCommentLine {
return err
}
if err := e.add(prefix, ipType); err != nil {
@@ -267,7 +275,7 @@ func (e *Entry) AddPrefix(cidr any) error {
func (e *Entry) RemovePrefix(cidr string) error {
prefix, ipType, err := e.processPrefix(cidr)
- if err != nil {
+ if err != nil && err != ErrCommentLine {
return err
}
if err := e.remove(prefix, ipType); err != nil {
diff --git a/plugin/plaintext/common_in.go b/plugin/plaintext/common_in.go
index c8bfe367..0c146ae1 100644
--- a/plugin/plaintext/common_in.go
+++ b/plugin/plaintext/common_in.go
@@ -44,6 +44,13 @@ func (t *textIn) scanFileForTextIn(reader io.Reader, entry *lib.Entry) error {
if line == "" {
continue
}
+ line, _, _ = strings.Cut(line, "#")
+ line, _, _ = strings.Cut(line, "//")
+ line, _, _ = strings.Cut(line, "/*")
+ line = strings.TrimSpace(line)
+ if line == "" {
+ continue
+ }
if err := entry.AddPrefix(line); err != nil {
return err
}
@@ -70,7 +77,11 @@ func (t *textIn) scanFileForClashRuleSetIn(reader io.Reader, entry *lib.Entry) e
}
for _, cidrStr := range payload.Payload {
- if err := entry.AddPrefix(strings.TrimSpace(cidrStr)); err != nil {
+ cidrStr = strings.TrimSpace(cidrStr)
+ if cidrStr == "" {
+ continue
+ }
+ if err := entry.AddPrefix(cidrStr); err != nil {
return err
}
}
@@ -88,11 +99,13 @@ func (t *textIn) scanFileForClashClassicalRuleSetInAndSurgeIn(reader io.Reader,
switch {
case strings.HasPrefix(line, "ip-cidr,"), strings.HasPrefix(line, "ip-cidr6,"):
- parts := strings.Split(line, ",")
- if len(parts) > 1 {
- if err := entry.AddPrefix(strings.TrimSpace(parts[1])); err != nil {
- return err
- }
+ _, line, _ = strings.Cut(line, ",")
+ line = strings.TrimSpace(line)
+ if line == "" {
+ continue
+ }
+ if err := entry.AddPrefix(line); err != nil {
+ return err
}
default:
continue