aboutsummaryrefslogtreecommitdiff
path: root/runtime/filetype.lua
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2022-07-18 19:37:18 +0000
committerJosh Rahm <rahm@google.com>2022-07-18 19:37:18 +0000
commit308e1940dcd64aa6c344c403d4f9e0dda58d9c5c (patch)
tree35fe43e01755e0f312650667004487a44d6b7941 /runtime/filetype.lua
parent96a00c7c588b2f38a2424aeeb4ea3581d370bf2d (diff)
parente8c94697bcbe23a5c7b07c292b90a6b70aadfa87 (diff)
downloadrneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.tar.gz
rneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.tar.bz2
rneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.zip
Merge remote-tracking branch 'upstream/master' into rahm
Diffstat (limited to 'runtime/filetype.lua')
-rw-r--r--runtime/filetype.lua57
1 files changed, 41 insertions, 16 deletions
diff --git a/runtime/filetype.lua b/runtime/filetype.lua
index fcfc5701f0..9f5b5fd0dc 100644
--- a/runtime/filetype.lua
+++ b/runtime/filetype.lua
@@ -1,26 +1,51 @@
-if vim.g.did_load_filetypes and vim.g.did_load_filetypes ~= 0 then
+-- Skip if legacy filetype is enabled or filetype detection is disabled
+if vim.g.do_legacy_filetype or vim.g.did_load_filetypes then
return
end
+vim.g.did_load_filetypes = 1
--- For now, make this opt-in with a global variable
-if vim.g.do_filetype_lua ~= 1 then
- return
-end
+vim.api.nvim_create_augroup('filetypedetect', { clear = false })
-vim.cmd [[
-augroup filetypedetect
-au BufRead,BufNewFile * call v:lua.vim.filetype.match(expand('<afile>'))
+vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
+ group = 'filetypedetect',
+ callback = function(args)
+ local ft, on_detect = vim.filetype.match({ filename = args.match, buf = args.buf })
+ if not ft then
+ -- Generic configuration file used as fallback
+ ft = require('vim.filetype.detect').conf(args.file, args.buf)
+ if ft then
+ vim.api.nvim_cmd({ cmd = 'setf', args = { 'FALLBACK', ft } }, {})
+ end
+ else
+ vim.api.nvim_buf_set_option(args.buf, 'filetype', ft)
+ if on_detect then
+ on_detect(args.buf)
+ end
+ end
+ end,
+})
-" These *must* be sourced after the autocommand above is created
-runtime! ftdetect/*.vim
-runtime! ftdetect/*.lua
+-- These *must* be sourced after the autocommand above is created
+if not vim.g.did_load_ftdetect then
+ vim.cmd([[
+ augroup filetypedetect
+ runtime! ftdetect/*.vim
+ runtime! ftdetect/*.lua
+ augroup END
+ ]])
+end
-" Set a marker so that the ftdetect scripts are not sourced a second time by filetype.vim
-let g:did_load_ftdetect = 1
+-- Set up the autocmd for user scripts.vim
+vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
+ group = 'filetypedetect',
+ command = "if !did_filetype() && expand('<amatch>') !~ g:ft_ignore_pat | runtime! scripts.vim | endif",
+})
-augroup END
-]]
+vim.api.nvim_create_autocmd('StdinReadPost', {
+ group = 'filetypedetect',
+ command = 'if !did_filetype() | runtime! scripts.vim | endif',
+})
if not vim.g.ft_ignore_pat then
- vim.g.ft_ignore_pat = "\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$"
+ vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
end