From b50b364ae1eaf41feb88c11dc3e69d6e39f3ac04 Mon Sep 17 00:00:00 2001 From: Luke Kershaw <35707277+l-kershaw@users.noreply.github.com> Date: Fri, 3 Dec 2021 15:29:20 +0000 Subject: [PATCH] fix: check for Windows drive letter when parsing vimgrep (#1494) --- lua/telescope/make_entry.lua | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index 7892e05..ed20eba 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -110,9 +110,29 @@ do ordinal = 1, } + local find = (function() + if Path.path.sep == "\\" then + return function(t) + local start, _, filename, lnum, col, text = string.find(t.value, [[([^:]+):(%d+):(%d+):(.*)]]) + + -- Handle Windows drive letter (e.g. "C:") at the beginning (if present) + if start == 3 then + filename = string.sub(t.value, 1, 3) .. filename + end + + return filename, lnum, col, text + end + else + return function(t) + local _, _, filename, lnum, col, text = string.find(t.value, [[([^:]+):(%d+):(%d+):(.*)]]) + return filename, lnum, col, text + end + end + end)() + -- Gets called only once to parse everything out for the vimgrep, after that looks up directly. local parse = function(t) - local _, _, filename, lnum, col, text = string.find(t.value, [[([^:]+):(%d+):(%d+):(.*)]]) + local filename, lnum, col, text = find(t.value) local ok ok, lnum = pcall(tonumber, lnum)