summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2020-12-17 09:27:11 +0100
committerGitHub <noreply@github.com>2020-12-17 09:27:11 +0100
commite5233f39c50b723c562e6a6390ecf46b0237be68 (patch)
treede06c23e8e12ddb156e7be8170433e1d6549cb2b /lua
parentb5ff9de13d4b15e78e9d3433d6bf085601f62a5d (diff)
Fix: Use plenary.filetype.detect and remove own filetype detect (#326)
requires newest plenary.nvim version or you will have a bad day
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/path.lua16
-rw-r--r--lua/telescope/previewers.lua55
2 files changed, 4 insertions, 67 deletions
diff --git a/lua/telescope/path.lua b/lua/telescope/path.lua
index 0a47a83..1630ae7 100644
--- a/lua/telescope/path.lua
+++ b/lua/telescope/path.lua
@@ -56,22 +56,6 @@ path.normalize = function(filepath, cwd)
return filepath
end
-path.read_last_line = function(filepath)
- local fd = vim.loop.fs_open(filepath, "r", 438)
- if fd == nil then return '' end
- local stat = assert(vim.loop.fs_fstat(fd))
- local data = ''
- local index = stat.size - 2
- while true do
- local char = assert(vim.loop.fs_read(fd, 1, index))
- if char == '\n' then break end
- data = char .. data
- index = index - 1
- end
- assert(vim.loop.fs_close(fd))
- return data
-end
-
path.read_file = function(filepath)
local fd = vim.loop.fs_open(filepath, "r", 438)
if fd == nil then return '' end
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua
index 9344b2f..2ac33c1 100644
--- a/lua/telescope/previewers.lua
+++ b/lua/telescope/previewers.lua
@@ -6,6 +6,8 @@ local from_entry = require('telescope.from_entry')
local utils = require('telescope.utils')
local path = require('telescope.path')
+local pfiletype = require('plenary.filetype')
+
local has_ts, _ = pcall(require, 'nvim-treesitter')
local _, ts_highlight = pcall(require, 'nvim-treesitter.highlight')
local _, ts_parsers = pcall(require, 'nvim-treesitter.parsers')
@@ -38,57 +40,8 @@ end
local add_quotes = valuate_shell()
-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')]
- if match then return match else return '' end
- end
-
- if ext == 'txt' then
- local match = ft_cache[vim.fn.fnamemodify(filepath, ':t')]
- if match then return match end
- -- Take a look at end of file for vim:noet:tw=78:ts=8:ft=help:norl:
- local tail = path.read_last_line(filepath)
- if tail:sub(1, 5) == ' vim:' then
- return tail:match('.*:ft=([^:]*):.*$')
- end
- end
-
- if ft_cache[ext] then return ft_cache[ext] end
- local matchings = vim.tbl_filter(function(val)
- 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
-end
-
local file_maker_async = function(filepath, bufnr, bufname, callback)
- local ft = determine_filetype(filepath)
+ local ft = pfiletype.detect(filepath)
if bufname ~= filepath then
path.read_file_async(filepath, vim.schedule_wrap(function(data)
@@ -110,7 +63,7 @@ local file_maker_async = function(filepath, bufnr, bufname, callback)
end
local file_maker_sync = function(filepath, bufnr, bufname)
- local ft = determine_filetype(filepath)
+ local ft = pfiletype.detect(filepath)
if bufname ~= filepath then
local data = path.read_file(filepath)
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, vim.split(data, "\n"))