mirror of
https://github.com/neovim/neovim.git
synced 2025-10-22 17:11:49 +00:00
feat(filetype): convert more patterns to filetype.lua
This commit is contained in:

committed by
Kesse Jones

parent
d092e377c4
commit
b66e9e0baa
@@ -23,12 +23,15 @@ local function starsetf(ft)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
local function getline(bufnr, lnum)
|
local function getline(bufnr, start_lnum, end_lnum)
|
||||||
return api.nvim_buf_get_lines(bufnr, lnum - 1, lnum, false)[1] or ''
|
end_lnum = end_lnum or start_lnum
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(bufnr, start_lnum - 1, end_lnum, false)
|
||||||
|
return table.concat(lines) or ''
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Filetypes based on file extension
|
-- Filetypes based on file extension
|
||||||
-- luacheck: push no unused args
|
-- luacheck: push no unused args
|
||||||
|
---@diagnostic disable: unused-local
|
||||||
local extension = {
|
local extension = {
|
||||||
-- BEGIN EXTENSION
|
-- BEGIN EXTENSION
|
||||||
['8th'] = '8th',
|
['8th'] = '8th',
|
||||||
@@ -52,8 +55,17 @@ local extension = {
|
|||||||
art = 'art',
|
art = 'art',
|
||||||
asciidoc = 'asciidoc',
|
asciidoc = 'asciidoc',
|
||||||
adoc = 'asciidoc',
|
adoc = 'asciidoc',
|
||||||
|
asa = function(path, bufnr)
|
||||||
|
if vim.g.filetype_asa then
|
||||||
|
return vim.g.filetype_asa
|
||||||
|
end
|
||||||
|
return 'aspvbs'
|
||||||
|
end,
|
||||||
['asn1'] = 'asn',
|
['asn1'] = 'asn',
|
||||||
asn = 'asn',
|
asn = 'asn',
|
||||||
|
asp = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').asp(bufnr)
|
||||||
|
end,
|
||||||
atl = 'atlas',
|
atl = 'atlas',
|
||||||
as = 'atlas',
|
as = 'atlas',
|
||||||
ahk = 'autohotkey',
|
ahk = 'autohotkey',
|
||||||
@@ -92,7 +104,6 @@ local extension = {
|
|||||||
cho = 'chordpro',
|
cho = 'chordpro',
|
||||||
chordpro = 'chordpro',
|
chordpro = 'chordpro',
|
||||||
eni = 'cl',
|
eni = 'cl',
|
||||||
dcl = 'clean',
|
|
||||||
icl = 'clean',
|
icl = 'clean',
|
||||||
cljx = 'clojure',
|
cljx = 'clojure',
|
||||||
clj = 'clojure',
|
clj = 'clojure',
|
||||||
@@ -129,7 +140,7 @@ local extension = {
|
|||||||
hxx = 'cpp',
|
hxx = 'cpp',
|
||||||
hpp = 'cpp',
|
hpp = 'cpp',
|
||||||
cpp = function(path, bufnr)
|
cpp = function(path, bufnr)
|
||||||
if vim.g.cynlib_syntax_for_cc then
|
if vim.g.cynlib_syntax_for_cpp then
|
||||||
return 'cynlib'
|
return 'cynlib'
|
||||||
end
|
end
|
||||||
return 'cpp'
|
return 'cpp'
|
||||||
@@ -688,6 +699,16 @@ local extension = {
|
|||||||
bbl = 'tex',
|
bbl = 'tex',
|
||||||
latex = 'tex',
|
latex = 'tex',
|
||||||
sty = 'tex',
|
sty = 'tex',
|
||||||
|
cls = function(path, bufnr)
|
||||||
|
local line = getline(bufnr, 1)
|
||||||
|
if line:find('^%%') then
|
||||||
|
return 'tex'
|
||||||
|
elseif line:find('^#') and line:lower():find('rexx') then
|
||||||
|
return 'rexx'
|
||||||
|
else
|
||||||
|
return 'st'
|
||||||
|
end
|
||||||
|
end,
|
||||||
texi = 'texinfo',
|
texi = 'texinfo',
|
||||||
txi = 'texinfo',
|
txi = 'texinfo',
|
||||||
texinfo = 'texinfo',
|
texinfo = 'texinfo',
|
||||||
@@ -766,6 +787,12 @@ local extension = {
|
|||||||
csproj = 'xml',
|
csproj = 'xml',
|
||||||
wpl = 'xml',
|
wpl = 'xml',
|
||||||
xmi = 'xml',
|
xmi = 'xml',
|
||||||
|
xpm = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):find('XPM2') then
|
||||||
|
return 'xpm2'
|
||||||
|
end
|
||||||
|
return 'xpm'
|
||||||
|
end,
|
||||||
['xpm2'] = 'xpm2',
|
['xpm2'] = 'xpm2',
|
||||||
xqy = 'xquery',
|
xqy = 'xquery',
|
||||||
xqm = 'xquery',
|
xqm = 'xquery',
|
||||||
@@ -1009,6 +1036,145 @@ local extension = {
|
|||||||
return 'text'
|
return 'text'
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
cmd = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):find('^/%*') then
|
||||||
|
return 'rexx'
|
||||||
|
end
|
||||||
|
return 'dosbatch'
|
||||||
|
end,
|
||||||
|
rul = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').rul(bufnr)
|
||||||
|
end,
|
||||||
|
cpy = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):find('^##') then
|
||||||
|
return 'python'
|
||||||
|
end
|
||||||
|
return 'cobol'
|
||||||
|
end,
|
||||||
|
dsl = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):find('^%s*<!') then
|
||||||
|
return 'dsl'
|
||||||
|
end
|
||||||
|
return 'structurizr'
|
||||||
|
end,
|
||||||
|
edf = 'edif',
|
||||||
|
edfi = 'edif',
|
||||||
|
edo = 'edif',
|
||||||
|
edn = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').edn(bufnr)
|
||||||
|
end,
|
||||||
|
smil = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):find('<%?%s*xml.*%?>') then
|
||||||
|
return 'xml'
|
||||||
|
end
|
||||||
|
return 'smil'
|
||||||
|
end,
|
||||||
|
smi = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').smi(bufnr)
|
||||||
|
end,
|
||||||
|
install = function(path, bufnr)
|
||||||
|
if getline(bufnr, 1):lower():find('<%?php') then
|
||||||
|
return 'php'
|
||||||
|
end
|
||||||
|
return require('vim.filetype.detect').sh(path, bufnr, 'bash')
|
||||||
|
end,
|
||||||
|
pm = function(path, bufnr)
|
||||||
|
local line = getline(bufnr, 1)
|
||||||
|
if line:find('XPM2') then
|
||||||
|
return 'xpm2'
|
||||||
|
elseif line:find('XPM') then
|
||||||
|
return 'xpm'
|
||||||
|
else
|
||||||
|
return 'perl'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
me = function(path, bufnr)
|
||||||
|
local filename = vim.fn.fnamemodify(path, ':t'):lower()
|
||||||
|
if filename ~= 'read.me' and filename ~= 'click.me' then
|
||||||
|
return 'nroff'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
reg = function(path, bufnr)
|
||||||
|
local line = getline(bufnr, 1):lower()
|
||||||
|
if line:find('^regedit[0-9]*%s*$') or line:find('^windows registry editor version %d*%.%d*%s*$') then
|
||||||
|
return 'registry'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
decl = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').decl(bufnr)
|
||||||
|
end,
|
||||||
|
dec = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').decl(bufnr)
|
||||||
|
end,
|
||||||
|
dcl = function(path, bufnr)
|
||||||
|
local decl = require('vim.filetype.detect').decl(bufnr)
|
||||||
|
if decl then
|
||||||
|
return decl
|
||||||
|
end
|
||||||
|
return 'clean'
|
||||||
|
end,
|
||||||
|
web = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').web(bufnr)
|
||||||
|
end,
|
||||||
|
ttl = function(path, bufnr)
|
||||||
|
local line = getline(bufnr, 1):lower()
|
||||||
|
if line:find('^@?prefix') or line:find('^@?base') then
|
||||||
|
return 'turtle'
|
||||||
|
end
|
||||||
|
return 'teraterm'
|
||||||
|
end,
|
||||||
|
am = function(path, bufnr)
|
||||||
|
if not path:lower():find('makefile%.am$') then
|
||||||
|
return 'elf'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
['m4'] = function(path, bufnr)
|
||||||
|
local path_lower = path:lower()
|
||||||
|
if not path_lower:find('html%.m4$') and not path_lower:find('fvwm2rc') then
|
||||||
|
return 'm4'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
hw = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').hw(bufnr)
|
||||||
|
end,
|
||||||
|
module = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').hw(bufnr)
|
||||||
|
end,
|
||||||
|
pkg = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').hw(bufnr)
|
||||||
|
end,
|
||||||
|
ms = function(path, bufnr)
|
||||||
|
if not require('vim.filetype.detect').nroff(bufnr) then
|
||||||
|
return 'xmath'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
t = function(path, bufnr)
|
||||||
|
if not require('vim.filetype.detect').nroff(bufnr) and not require('vim.filetype.detect').perl(path, bufnr) then
|
||||||
|
return 'tads'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
class = function(path, bufnr)
|
||||||
|
-- Check if not a Java class (starts with '\xca\xfe\xba\xbe')
|
||||||
|
if not getline(bufnr, 1):find('^\202\254\186\190') then
|
||||||
|
return 'stata'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
sgml = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').sgml(bufnr)
|
||||||
|
end,
|
||||||
|
sgm = function(path, bufnr)
|
||||||
|
return require('vim.filetype.detect').sgml(bufnr)
|
||||||
|
end,
|
||||||
|
rc = function(path, bufnr)
|
||||||
|
if not path:find('/etc/Muttrc%.d/') then
|
||||||
|
return 'rc'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
rch = function(path, bufnr)
|
||||||
|
if not path:find('/etc/Muttrc%.d/') then
|
||||||
|
return 'rc'
|
||||||
|
end
|
||||||
|
end,
|
||||||
-- END EXTENSION
|
-- END EXTENSION
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1421,6 +1587,7 @@ local pattern = {
|
|||||||
['.*/boot/grub/grub%.conf'] = 'grub',
|
['.*/boot/grub/grub%.conf'] = 'grub',
|
||||||
['.*/boot/grub/menu%.lst'] = 'grub',
|
['.*/boot/grub/menu%.lst'] = 'grub',
|
||||||
['.*/etc/grub%.conf'] = 'grub',
|
['.*/etc/grub%.conf'] = 'grub',
|
||||||
|
[vim.env.VIMRUNTIME .. '/doc/.*%.txt'] = 'help',
|
||||||
['hg%-editor%-.*%.txt'] = 'hgcommit',
|
['hg%-editor%-.*%.txt'] = 'hgcommit',
|
||||||
['.*/etc/host%.conf'] = 'hostconf',
|
['.*/etc/host%.conf'] = 'hostconf',
|
||||||
['.*/etc/hosts%.deny'] = 'hostsaccess',
|
['.*/etc/hosts%.deny'] = 'hostsaccess',
|
||||||
@@ -1475,6 +1642,7 @@ local pattern = {
|
|||||||
['.*/etc/passwd'] = 'passwd',
|
['.*/etc/passwd'] = 'passwd',
|
||||||
['.*/etc/passwd%.edit'] = 'passwd',
|
['.*/etc/passwd%.edit'] = 'passwd',
|
||||||
['.*/etc/shadow-'] = 'passwd',
|
['.*/etc/shadow-'] = 'passwd',
|
||||||
|
['.*%.php%d'] = 'php',
|
||||||
['.*/%.pinforc'] = 'pinfo',
|
['.*/%.pinforc'] = 'pinfo',
|
||||||
['.*/etc/pinforc'] = 'pinfo',
|
['.*/etc/pinforc'] = 'pinfo',
|
||||||
['.*/etc/protocols'] = 'protocols',
|
['.*/etc/protocols'] = 'protocols',
|
||||||
@@ -1707,6 +1875,8 @@ local pattern = {
|
|||||||
['.*%.[Ss][Yy][Ss]'] = function(path, bufnr)
|
['.*%.[Ss][Yy][Ss]'] = function(path, bufnr)
|
||||||
return require('vim.filetype.detect').sys(bufnr)
|
return require('vim.filetype.detect').sys(bufnr)
|
||||||
end,
|
end,
|
||||||
|
['%.?gitolite%.rc'] = 'perl',
|
||||||
|
['example%.gitolite%.rc'] = 'perl',
|
||||||
-- Neovim only
|
-- Neovim only
|
||||||
['.*/queries/.*%.scm'] = 'query', -- tree-sitter queries
|
['.*/queries/.*%.scm'] = 'query', -- tree-sitter queries
|
||||||
-- END PATTERN
|
-- END PATTERN
|
||||||
|
@@ -983,6 +983,77 @@ function M.y(bufnr)
|
|||||||
return 'yacc'
|
return 'yacc'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.decl(bufnr)
|
||||||
|
for _, line in ipairs(getlines(bufnr, 1, 3)) do
|
||||||
|
if line:lower():find('^<!sgml') then
|
||||||
|
return 'sgmldecl'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.sgml(bufnr)
|
||||||
|
local lines = table.concat(getlines(bufnr, 1, 5))
|
||||||
|
if lines:find('linuxdoc') then
|
||||||
|
return 'smgllnx'
|
||||||
|
elseif lines:find('<!DOCTYPE.*DocBook') then
|
||||||
|
vim.b[bufnr].docbk_type = 'sgml'
|
||||||
|
vim.b[bufnr].docbk_ver = 4
|
||||||
|
return 'docbk'
|
||||||
|
else
|
||||||
|
return 'sgml'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.web(bufnr)
|
||||||
|
for _, line in ipairs(getlines(bufnr, 1, 5)) do
|
||||||
|
if line:find('^%%') then
|
||||||
|
return 'web'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 'winbatch'
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.rul(bufnr)
|
||||||
|
if table.concat(getlines(bufnr, 1, 6)):lower():find('installshield') then
|
||||||
|
return 'ishd'
|
||||||
|
end
|
||||||
|
return 'diva'
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.asp(bufnr)
|
||||||
|
if vim.g.filetype_asp then
|
||||||
|
return vim.g.filetype_asp
|
||||||
|
elseif table.concat(getlines(bufnr, 1, 3)):lower():find('perlscript') then
|
||||||
|
return 'aspperl'
|
||||||
|
else
|
||||||
|
return 'aspvbs'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.edn(bufnr)
|
||||||
|
local line = getlines(bufnr, 1)
|
||||||
|
if matchregex(line, [[\c^\s*(\s*edif\>]]) then
|
||||||
|
return 'edif'
|
||||||
|
else
|
||||||
|
return 'clojure'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.smi(bufnr)
|
||||||
|
local line = getlines(bufnr, 1)
|
||||||
|
if matchregex(line, [[\c\<smil\>]]) then
|
||||||
|
return 'smil'
|
||||||
|
else
|
||||||
|
return 'mib'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.hw(bufnr)
|
||||||
|
if getlines(bufnr, 1):lower():find('<%?php') then
|
||||||
|
return 'php'
|
||||||
|
end
|
||||||
|
return 'virata'
|
||||||
|
end
|
||||||
-- luacheck: pop
|
-- luacheck: pop
|
||||||
-- luacheck: pop
|
-- luacheck: pop
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user