diff --git a/src/pattern.go b/src/pattern.go index dbb3983..8de15b9 100644 --- a/src/pattern.go +++ b/src/pattern.go @@ -54,15 +54,13 @@ type Pattern struct { } var ( - _patternCache map[string]*Pattern - _splitRegex *regexp.Regexp - _escapedPrefixRegex *regexp.Regexp - _cache ChunkCache + _patternCache map[string]*Pattern + _splitRegex *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] - } + 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 diff --git a/test/test_go.rb b/test/test_go.rb index f8bd6b0..27c2a93 100644 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -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