Skip to content

Commit

Permalink
fix: rg invert and files-with-matches res line parsing (#2208)
Browse files Browse the repository at this point in the history
(cherry picked from commit 9cf4658)
  • Loading branch information
Conni2461 committed Jan 6, 2023
1 parent 6a67ef3 commit 8944b48
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 10 deletions.
34 changes: 30 additions & 4 deletions lua/telescope/builtin/__files.lua
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,31 @@ local get_open_filelist = function(grep_open_files, cwd)
return filelist
end

local opts_contain_invert = function(args)
local invert = false
local files_with_matches = false

for _, v in ipairs(args) do
if v == "--invert-match" then
invert = true
elseif v == "--files-with-matches" or v == "--files-without-match" then
files_with_matches = true
end

if #v >= 2 and v:sub(1, 1) == "-" and v:sub(2, 2) ~= "-" then
for i = 2, #v do
local vi = v:sub(i, i)
if vi == "v" then
invert = true
elseif vi == "l" then
files_with_matches = true
end
end
end
end
return invert, files_with_matches
end

-- Special keys:
-- opts.search_dirs -- list of directory to search in
-- opts.grep_open_files -- boolean to restrict search to open files
Expand Down Expand Up @@ -96,9 +121,10 @@ files.live_grep = function(opts)
end
end

local live_grepper = finders.new_job(function(prompt)
-- TODO: Probably could add some options for smart case and whatever else rg offers.
local args = flatten { vimgrep_arguments, additional_args }
opts.__inverted, opts.__matches = opts_contain_invert(args)

local live_grepper = finders.new_job(function(prompt)
if not prompt or prompt == "" then
return nil
end
Expand All @@ -111,7 +137,7 @@ files.live_grep = function(opts)
search_list = search_dirs
end

return flatten { vimgrep_arguments, additional_args, "--", prompt, search_list }
return flatten { args, "--", prompt, search_list }
end, opts.entry_maker or make_entry.gen_from_vimgrep(opts), opts.max_results, opts.cwd)

pickers
Expand Down Expand Up @@ -148,7 +174,6 @@ files.grep_string = function(opts)

if search == "" then
search = { "-v", "--", "^[[:space:]]*$" }
opts.__inverted = true
else
search = { "--", search }
end
Expand All @@ -159,6 +184,7 @@ files.grep_string = function(opts)
opts.word_match,
search,
}
opts.__inverted, opts.__matches = opts_contain_invert(args)

if opts.grep_open_files then
for _, file in ipairs(get_open_filelist(opts.grep_open_files, opts.cwd)) do
Expand Down
25 changes: 19 additions & 6 deletions lua/telescope/make_entry.lua
Original file line number Diff line number Diff line change
Expand Up @@ -244,12 +244,23 @@ do
return { filename, lnum, nil, text }
end

local parse_only_filename = function(t)
t.filename = t.value
t.lnum = nil
t.col = nil
t.text = ""

return { t.filename, nil, nil, "" }
end

function make_entry.gen_from_vimgrep(opts)
opts = opts or {}

local mt_vimgrep_entry
local parse = parse_with_col
if opts.__inverted == true then
if opts.__matches == true then
parse = parse_only_filename
elseif opts.__inverted == true then
parse = parse_without_col
end

Expand Down Expand Up @@ -290,7 +301,7 @@ do
end
end

local display_string = "%s:%s%s"
local display_string = "%s%s%s"

mt_vimgrep_entry = {
cwd = vim.fn.expand(opts.cwd or vim.loop.cwd()),
Expand All @@ -300,10 +311,12 @@ do

local coordinates = ""
if not disable_coordinates then
if entry.col then
coordinates = string.format("%s:%s:", entry.lnum, entry.col)
else
coordinates = string.format("%s:", entry.lnum)
if entry.lnum then
if entry.col then
coordinates = string.format(":%s:%s:", entry.lnum, entry.col)
else
coordinates = string.format(":%s:", entry.lnum)
end
end
end

Expand Down

0 comments on commit 8944b48

Please sign in to comment.