func()

in internal/wildcard/matcher.go [67:125]


func (m *Matcher) Match(s string) bool {
	if len(m.parts) == 0 && !m.wildcardBegin && !m.wildcardEnd {
		return s == ""
	}
	if len(m.parts) == 1 && !m.wildcardBegin && !m.wildcardEnd {
		if m.caseSensitive {
			return s == m.parts[0]
		}
		return len(s) == len(m.parts[0]) && hasPrefixLower(s, m.parts[0]) == 0
	}
	parts := m.parts
	if !m.wildcardEnd && len(parts) > 0 {
		part := parts[len(parts)-1]
		if m.caseSensitive {
			if !strings.HasSuffix(s, part) {
				return false
			}
		} else {
			if len(s) < len(part) {
				return false
			}
			if hasPrefixLower(s[len(s)-len(part):], part) != 0 {
				return false
			}
		}
		parts = parts[:len(parts)-1]
	}
	for i, part := range parts {
		j := -1
		if m.caseSensitive {
			if i > 0 || m.wildcardBegin {
				j = strings.Index(s, part)
			} else {
				if !strings.HasPrefix(s, part) {
					return false
				}
				j = 0
			}
		} else {
			off := 0
			for j == -1 && len(s)-off >= len(part) {
				skip := hasPrefixLower(s[off:], part)
				if skip == 0 {
					j = off
				} else {
					if i == 0 && !m.wildcardBegin {
						return false
					}
					off += skip
				}
			}
		}
		if j == -1 {
			return false
		}
		s = s[j+len(part):]
	}
	return true
}