aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/filetype
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-01-25 18:31:31 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-01-25 18:31:31 +0000
commit9243becbedbb6a1592208051f8fa2b090dcc5e7d (patch)
tree607c2a862ec3f4399b8766383f6f8e04c4aa43b4 /runtime/lua/vim/filetype
parent9e40b6e9e1bc67f2d856adb837ee64dd0e25b717 (diff)
parent3c48d3c83fc21dbc0841f9210f04bdb073d73cd1 (diff)
downloadrneovim-usermarks.tar.gz
rneovim-usermarks.tar.bz2
rneovim-usermarks.zip
Merge remote-tracking branch 'upstream/master' into usermarksusermarks
Diffstat (limited to 'runtime/lua/vim/filetype')
-rw-r--r--runtime/lua/vim/filetype/detect.lua79
1 files changed, 51 insertions, 28 deletions
diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua
index 2be9dcff88..edffdde9c7 100644
--- a/runtime/lua/vim/filetype/detect.lua
+++ b/runtime/lua/vim/filetype/detect.lua
@@ -181,7 +181,7 @@ function M.cls(bufnr)
return vim.g.filetype_cls
end
local line = getlines(bufnr, 1)
- if line:find('^%%') then
+ if line:find('^[%%\\]') then
return 'tex'
elseif line:find('^#') and line:lower():find('rexx') then
return 'rexx'
@@ -634,6 +634,19 @@ function M.lpc(bufnr)
return 'c'
end
+function M.lsl(bufnr)
+ if vim.g.filetype_lsl then
+ return vim.g.filetype_lsl
+ end
+
+ local line = nextnonblank(bufnr, 1)
+ if findany(line, { '^%s*%%', ':%s*trait%s*$' }) then
+ return 'larch'
+ else
+ return 'lsl'
+ end
+end
+
function M.m(bufnr)
if vim.g.filetype_m then
return vim.g.filetype_m
@@ -1084,11 +1097,10 @@ function M.sc(bufnr)
for _, line in ipairs(getlines(bufnr, 1, 25)) do
if
findany(line, {
- '[A-Za-z0-9]*%s:%s[A-Za-z0-9]',
'var%s<',
'classvar%s<',
'%^this.*',
- '|%w*|',
+ '|%w+|',
'%+%s%w*%s{',
'%*ar%s',
})
@@ -1153,13 +1165,14 @@ function M.sh(path, contents, name)
vim.b[b].is_bash = nil
vim.b[b].is_sh = nil
end
- elseif vim.g.bash_is_sh or matchregex(name, [[\<bash\>]]) or matchregex(name, [[\<bash2\>]]) then
+ elseif vim.g.bash_is_sh or matchregex(name, [[\<\(bash\|bash2\)\>]]) then
on_detect = function(b)
vim.b[b].is_bash = 1
vim.b[b].is_kornshell = nil
vim.b[b].is_sh = nil
end
- elseif matchregex(name, [[\<sh\>]]) then
+ -- Ubuntu links sh to dash
+ elseif matchregex(name, [[\<\(sh\|dash\)\>]]) then
on_detect = function(b)
vim.b[b].is_sh = 1
vim.b[b].is_kornshell = nil
@@ -1194,6 +1207,19 @@ function M.shell(path, contents, name)
return name
end
+-- Swift Intermediate Language or SILE
+function M.sil(bufnr)
+ for _, line in ipairs(getlines(bufnr, 1, 100)) do
+ if line:find('^%s*[\\%%]') then
+ return 'sile'
+ elseif line:find('^%s*%S') then
+ return 'sil'
+ end
+ end
+ -- No clue, default to "sil"
+ return 'sil'
+end
+
-- SMIL or SNMP MIB file
function M.smi(bufnr)
local line = getlines(bufnr, 1)
@@ -1230,17 +1256,15 @@ end
-- 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
-- 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
function M.tex(path, bufnr)
- local format = getlines(bufnr, 1):find('^%%&%s*(%a+)')
- if format then
+ local matched, _, format = getlines(bufnr, 1):find('^%%&%s*(%a+)')
+ if matched then
format = format:lower():gsub('pdf', '', 1)
- if format == 'tex' then
- return 'tex'
- elseif format == 'plaintex' then
- return 'plaintex'
- end
elseif path:lower():find('tex/context/.*/.*%.tex') then
return 'context'
else
+ -- Default value, may be changed later:
+ format = vim.g.tex_flavor or 'plaintex'
+
local lpat = [[documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>]]
local cpat =
[[start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>]]
@@ -1249,26 +1273,25 @@ function M.tex(path, bufnr)
-- Find first non-comment line
if not l:find('^%s*%%%S') then
-- Check the next thousand lines for a LaTeX or ConTeXt keyword.
- for _, line in ipairs(getlines(bufnr, i + 1, i + 1000)) do
- local lpat_match, cpat_match =
- matchregex(line, [[\c^\s*\\\%(]] .. lpat .. [[\)\|^\s*\\\(]] .. cpat .. [[\)]])
- if lpat_match then
+ for _, line in ipairs(getlines(bufnr, i, i + 1000)) do
+ if matchregex(line, [[\c^\s*\\\%(]] .. lpat .. [[\)]]) then
return 'tex'
- elseif cpat_match then
+ elseif matchregex(line, [[\c^\s*\\\%(]] .. cpat .. [[\)]]) then
return 'context'
end
end
end
end
- -- TODO: add AMSTeX, RevTex, others?
- if not vim.g.tex_flavor or vim.g.tex_flavor == 'plain' then
- return 'plaintex'
- elseif vim.g.tex_flavor == 'context' then
- return 'context'
- else
- -- Probably LaTeX
- return 'tex'
- end
+ end -- if matched
+
+ -- Translation from formats to file types. TODO: add AMSTeX, RevTex, others?
+ if format == 'plain' then
+ return 'plaintex'
+ elseif format == 'plaintex' or format == 'context' then
+ return format
+ else
+ -- Probably LaTeX
+ return 'tex'
end
end
@@ -1434,8 +1457,8 @@ local function match_from_hashbang(contents, path)
name = 'wish'
end
- if matchregex(name, [[^\(bash\d*\|\|ksh\d*\|sh\)\>]]) then
- -- Bourne-like shell scripts: bash bash2 ksh ksh93 sh
+ if matchregex(name, [[^\(bash\d*\|dash\|ksh\d*\|sh\)\>]]) then
+ -- Bourne-like shell scripts: bash bash2 dash ksh ksh93 sh
return require('vim.filetype.detect').sh(path, contents, first_line)
elseif matchregex(name, [[^csh\>]]) then
return require('vim.filetype.detect').shell(path, contents, vim.g.filetype_csh or 'csh')