Skip to content

Commit

Permalink
fix(filetype.lua): escape expansion of ~ when used as a pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
jamessan committed May 2, 2022
1 parent e5f6f20 commit 88595fb
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
16 changes: 13 additions & 3 deletions runtime/lua/vim/filetype.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1480,8 +1480,18 @@ end
local pattern_sorted = sort_by_priority(pattern)

---@private
local function normalize_path(path)
return (path:gsub("\\", "/"):gsub("^~", vim.env.HOME))
local function normalize_path(path, as_pattern)
local normal = path:gsub("\\", '/')
if normal:find('^~') then
if as_pattern then
-- Escape Lua's metacharacters when $HOME is used in a pattern.
-- The rest of path should already be properly escaped.
normal = vim.env.HOME:gsub('[-^$()%%.%[%]+?]', '%%%0') .. normal:sub(2)
else
normal = vim.env.HOME .. normal:sub(2)
end
end
return normal
end

--- Add new filetype mappings.
Expand Down Expand Up @@ -1550,7 +1560,7 @@ function M.add(filetypes)
end

for k, v in pairs(filetypes.pattern or {}) do
pattern[normalize_path(k)] = v
pattern[normalize_path(k, true)] = v
end

if filetypes.pattern then
Expand Down
1 change: 1 addition & 0 deletions test/functional/lua/filetype_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ describe('vim.filetype', function()
it('works with patterns', function()
eq('markdown', exec_lua([[
local root = ...
vim.env.HOME = '/a-funky+home%dir'
vim.filetype.add({
pattern = {
['~/blog/.*%.txt'] = 'markdown',
Expand Down

0 comments on commit 88595fb

Please sign in to comment.