summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2020-12-10 09:15:44 +0100
committerGitHub <noreply@github.com>2020-12-10 09:15:44 +0100
commita12d38bac308ce2a7346aef48003325077fdb48a (patch)
tree8ecdf6619450df6f177133854cd499b408b47dbc /lua
parent2dd02f74b3e9bf685c86ce9b4962bfc4d6e95f1e (diff)
Fix: filetype guesser (#321)
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/previewers.lua21
1 files changed, 15 insertions, 6 deletions
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua
index f723de5..4616780 100644
--- a/lua/telescope/previewers.lua
+++ b/lua/telescope/previewers.lua
@@ -38,16 +38,24 @@ end
local add_quotes = valuate_shell()
-local all_fts = vim.tbl_filter(function(line)
- return line:find('setf')
-end, vim.fn.split(vim.fn.execute('autocmd filetypedetect'), '\n'))
-
+local all_fts
local ft_cache = {
Makefile = 'make', makefile = 'make', c = 'c', h = 'c', cpp = 'cpp', hpp = 'cpp',
css = 'css', ['CMakeLists.txt'] = 'cmake', Dockerfile = 'dockerfile', go = 'go',
js = 'javascript', lua = 'lua', py = 'python', vim = 'vim'
}
local determine_filetype = function(filepath)
+ if not all_fts then
+ _, all_fts = pcall(vim.fn.execute, 'autocmd filetypedetect')
+ if all_fts then
+ all_fts = vim.tbl_filter(function(line)
+ return line:find('setf') or line:find('set filetype') or line:find('setlocal filetype')
+ end, vim.fn.split(all_fts, '\n'))
+ else
+ all_fts = {}
+ end
+ end
+
local ext = vim.fn.fnamemodify(filepath, ':e')
if ext == '' then
local match = ft_cache[vim.fn.fnamemodify(filepath, ':t')]
@@ -65,14 +73,15 @@ local determine_filetype = function(filepath)
end
if ft_cache[ext] then return ft_cache[ext] end
-
local matchings = vim.tbl_filter(function(val)
- return val:match('.*%*%.' .. ext .. '%s')
+ return val:match('.*%*%.' .. ext .. '%s*.*')
end, all_fts)
local match = ''
if table.getn(matchings) > 1 then
match = matchings[1]:match('.* setf%s([^%s|]*)[%s|]?.*')
+ if not match then match = matchings[1]:match('.* set filetype[%s=]([^%s|]*)[%s|]?.*') end
+ if not match then match = matchings[1]:match('.* setlocal filetype[%s=]([^%s|]*)[%s|]?.*') end
ft_cache[ext] = match
end
return match