Disallow escaping of meta characters except for spaces
https://github.com/junegunn/fzf/issues/444#issuecomment-321719604
This commit is contained in:
parent
a09e411936
commit
6c76d8cd1c
@ -56,13 +56,11 @@ type Pattern struct {
|
||||
var (
|
||||
_patternCache map[string]*Pattern
|
||||
_splitRegex *regexp.Regexp
|
||||
_escapedPrefixRegex *regexp.Regexp
|
||||
_cache ChunkCache
|
||||
)
|
||||
|
||||
func init() {
|
||||
_splitRegex = regexp.MustCompile(" +")
|
||||
_escapedPrefixRegex = regexp.MustCompile("^\\\\['!^|]")
|
||||
clearPatternCache()
|
||||
clearChunkCache()
|
||||
}
|
||||
@ -179,17 +177,11 @@ func parseTerms(fuzzy bool, caseMode Case, normalize bool, str string) []termSet
|
||||
}
|
||||
|
||||
if text != "$" && strings.HasSuffix(text, "$") {
|
||||
if strings.HasSuffix(text, "\\$") {
|
||||
text = text[:len(text)-2] + "$"
|
||||
} else {
|
||||
typ = termSuffix
|
||||
text = text[:len(text)-1]
|
||||
}
|
||||
}
|
||||
|
||||
if _escapedPrefixRegex.MatchString(text) {
|
||||
text = text[1:]
|
||||
} else if strings.HasPrefix(text, "'") {
|
||||
if strings.HasPrefix(text, "'") {
|
||||
// Flip exactness
|
||||
if fuzzy && !inv {
|
||||
typ = termExact
|
||||
|
@ -1391,24 +1391,10 @@ class TestGoFZF < TestBase
|
||||
writelines tempname, input.lines.map(&:chomp)
|
||||
|
||||
assert_equal input.lines.count, `#{FZF} -f'foo bar' < #{tempname}`.lines.count
|
||||
assert_equal input.lines.count - 1, `#{FZF} -f'^foo bar$' < #{tempname}`.lines.count
|
||||
assert_equal ['foo bar'], `#{FZF} -f'foo\\ bar' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal ['bar foo'], `#{FZF} -f'foo$' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal ['foo$bar'], `#{FZF} -f'foo\\$' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal [], `#{FZF} -f'!bar' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal ['foo!bar'], `#{FZF} -f'\\!bar' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal ['foo bar'], `#{FZF} -f'^foo\\ bar$' < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal [], `#{FZF} -f"'br" < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal ["foo'bar"], `#{FZF} -f"\\'br" < #{tempname}`.lines.map(&:chomp)
|
||||
end
|
||||
|
||||
def test_escaped_meta_characters_only_on_relevant_positions
|
||||
input = <<~EOF
|
||||
\\^
|
||||
^
|
||||
EOF
|
||||
writelines tempname, input.lines.map(&:chomp)
|
||||
assert_equal %w[^ \\^], `#{FZF} -f"\\^" < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal %w[\\^], `#{FZF} -f"'\\^" < #{tempname}`.lines.map(&:chomp)
|
||||
assert_equal input.lines.count - 1, `#{FZF} -f'!^foo\\ bar$' < #{tempname}`.lines.count
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user