summaryrefslogtreecommitdiffstatshomepage
path: root/runtime/filetype.lua
AgeCommit message (Collapse)AuthorFiles
2026-03-12docs: use "ev" convention in event-handlersJustin M. Keyes1
Problem: In autocmd examples, using "args" as the event-object name is vague and may be confused with a user-command. Solution: Use "ev" as the conventional event-object name.
2025-10-28fix(filetype): move fallback logic to vim.filetype.match() #30141Jonny Kong1
Problem: Previously, the fallback logic to ".conf" was located outside of `vim.filetype.match()` and directly within the AutoCmd definition. As a result, `vim.filetype.match()` would return nil instead of ".conf" for fallback cases (#30100). Solution: Added a boolean return value to `vim.filetype.match()` that indicates whether the match was the result of fallback. If true, the filetype will be set using `setf FALLBACK <ft>` instead of `setf <ft>`.
2024-12-06fix(filetype): make filetype detection work with :doautocmd (#31470)zeertzjq1
2024-06-28refactor: use `vim._with` where possibledundargoc1
This mostly means replacing `nvim_buf_call` and `nvim_win_call` with `vim._with`.
2024-06-22fix(filetype): source ftdetect/* after creating scripts.vim autocmds (#29445)zeertzjq1
2024-03-23fix(filetype): use unexpanded file name (#27931)zeertzjq1
When the edited file is a symlink, the unexpanded file name is needed to to achieve the same behavior as the autocommand pattern matching in Vim. Neither args.file nor args.match are guaranteed to be unexpanded, so use bufname() instead.
2023-08-30fix(filetype): make sure buffer is valid before call nvim_buf_call (#24922)Hongbo Liu1
2023-08-24fix(filetype): call on_detect before setting buffer filetypeGregory Anders1
The on_detect functions returned by filetype.lua set buffer local variables which are often used by filetype plugins. For example, the on_detect function for shell buffers sets variables such as b:is_bash or b:is_sh, which are used by the sh ftplugin. When called after setting the buffer's filetype, these variables cannot be used by the ftplugin (because they are not yet defined). Instead, call on_detect before setting the buffer filetype so that any buffer variables set by on_detect can be used in the ftplugin.
2023-07-14fix(runtime): respect 'rtp' order for all runtime files (#24335)zeertzjq1
2022-10-17feat(runtime)!: remove filetype.vim (#20428)Christian Clason1
Made obsolete by now graduated `filetype.lua` (enabled by default). Note that changes or additions to the filetype detection still need to be made through a PR to vim/vim as we port the _logic_ as well as tests.
2022-09-25fix(filetype): use :setf instead of nvim_buf_set_option (#20334)zeertzjq1
2022-09-03fix(filetype): run filetype.match on StdinReadPost (#20070)Christian Clason1
Problem: filetype detection does not run on piped input Solution: add `StdinReadPost` to main filetype.lua autocommand Rationale: legacy filetype detection checked contents by sourcing `scripts.vim` in separate autocommands, including on `StdinReadPost`. For Lua filetype detection, this was moved into the main autocommand, with bundled `scripts.vim` gated behind `g:do_legacy_filetype` (i.e., only user `scripts.vim` are sourced for compatibility by default). Adding `StdinReadPost` to the main autocommand again runs content checks on piped input without requiring code duplication and low-payoff refactoring.
2022-07-07feat(runtime)!: enable filetype.lua by default (#19216)Christian Clason1
* revert to filetype.vim by setting `g:do_legacy_filetype` * skip either filetype.lua or filetype.vim via `g:did_load_filetypes` (Running both is no longer required and therefore no longer supported.)
2022-07-06fix(filetype): remove call to vim.fn.resolve and pass filename to match functionsmjonas1
For example on MacOS, /etc/hostname.file is symlinked to /private/etc/hostname.file. We only care about the original file path though.
2022-07-06fix(filetype): fix filetype patternssmjonas1
2022-06-26refactor(filetype)!: allow vim.filetype.match to use different strategies ↵Gregory Anders1
(#18895) This enables vim.filetype.match to match based on a buffer (most accurate) or simply a filename or file contents, which are less accurate but may still be useful for some scenarios. When matching based on a buffer, the buffer's name and contents are both used to do full filetype matching. When using a filename, if the file exists the file is loaded into a buffer and full filetype detection is performed. If the file does not exist then filetype matching is only performed against the filename itself. Content-based matching does the equivalent of scripts.vim, and matches solely based on file contents without any information from the name of the file itself (e.g. for shebangs). BREAKING CHANGE: use `vim.filetype.match({buf = bufnr})` instead of `vim.filetype.match(name, bufnr)`
2022-06-09feat(filetype): remove side effects from vim.filetype.match (#18894)Gregory Anders1
Many filetypes from filetype.vim set buffer-local variables, meaning vim.filetype.match cannot be used without side effects. Instead of setting these buffer-local variables in the filetype detection functions themselves, have vim.filetype.match return an optional function value that, when called, sets these variables. This allows vim.filetype.match to work without side effects.
2022-05-09chore: format runtime with styluaChristian Clason1
2022-04-23fix(ftdetect): source plugins in autogroup (#18237)Christian Clason1
In `filetype.lua`, source runtime `ftdetect` scripts within the `filetypedetect` augroup, same as `filetype.vim` (and only do so if `g:did_load_ftdetect` does not exist).
2022-03-13refactor: use Lua autocommands in filetype.lua (#17711)Gregory Anders1
2022-02-24feat(filetype): support scripts.vim with filetype.lua (#17517)Gregory Anders1
When filetype.vim is disabled, create the autocommand that runs scripts.vim in filetype.lua.
2022-01-05fix(filetype): match on <afile> rather than <abuf> (#16943)Gregory Anders1
Filetype detection runs on BufRead and BufNewFile autocommands, both of which can fire without an underlying buffer, so it's incorrect to use <abuf> to determine the file path. Instead, match on <afile> and assume that the buffer we're operating on is the current buffer. This is the same assumption that filetype.vim makes, so it should be safe.
2022-01-04fix(filetype): set default ft_ignore_pat in filetype.lua (#16917)Gregory Anders1
This default value is also set in filetype.vim, but if filetype.vim is disabled the variable is never defined, which causes errors in some of the dist#ft detection functions.
2022-01-04feat: filetype.lua (#16600)Gregory Anders1
Adds a new vim.filetype module that provides support for filetype detection in Lua.