mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
patch 8.2.0003: Build file dependencies are incomplete
Problem: Build file dependencies are incomplete. Solution: Fix the dependencies. (Ken Takata, closes #5356)
This commit is contained in:
73
runtime/autoload/dist/ft.vim
vendored
73
runtime/autoload/dist/ft.vim
vendored
@ -107,6 +107,25 @@ export def BindzoneCheck(default = '')
|
||||
endif
|
||||
enddef
|
||||
|
||||
# Returns true if file content looks like RAPID
|
||||
def IsRapid(sChkExt: string = ""): bool
|
||||
if sChkExt == "cfg"
|
||||
return getline(1) =~? '\v^%(EIO|MMC|MOC|PROC|SIO|SYS):CFG'
|
||||
endif
|
||||
# called from FTmod, FTprg or FTsys
|
||||
return getline(nextnonblank(1)) =~? '\v^\s*%(\%{3}|module\s+\k+\s*%(\(|$))'
|
||||
enddef
|
||||
|
||||
export def FTcfg()
|
||||
if exists("g:filetype_cfg")
|
||||
exe "setf " .. g:filetype_cfg
|
||||
elseif IsRapid("cfg")
|
||||
setf rapid
|
||||
else
|
||||
setf cfg
|
||||
endif
|
||||
enddef
|
||||
|
||||
export def FTlpc()
|
||||
if exists("g:lpc_syntax_for_c")
|
||||
var lnum = 1
|
||||
@ -168,7 +187,7 @@ enddef
|
||||
|
||||
export def FTent()
|
||||
# This function checks for valid cl syntax in the first five lines.
|
||||
# Look for either an opening comment, '#', or a block start, '{".
|
||||
# Look for either an opening comment, '#', or a block start, '{'.
|
||||
# If not found, assume SGML.
|
||||
var lnum = 1
|
||||
while lnum < 6
|
||||
@ -410,6 +429,36 @@ export def FTmm()
|
||||
setf nroff
|
||||
enddef
|
||||
|
||||
# Returns true if file content looks like LambdaProlog
|
||||
def IsLProlog(): bool
|
||||
# skip apparent comments and blank lines, what looks like
|
||||
# LambdaProlog comment may be RAPID header
|
||||
var l: number = nextnonblank(1)
|
||||
while l > 0 && l < line('$') && getline(l) =~ '^\s*%' # LambdaProlog comment
|
||||
l = nextnonblank(l + 1)
|
||||
endwhile
|
||||
# this pattern must not catch a go.mod file
|
||||
return getline(l) =~ '\<module\s\+\w\+\s*\.\s*\(%\|$\)'
|
||||
enddef
|
||||
|
||||
# Determine if *.mod is ABB RAPID, LambdaProlog, Modula-2, Modsim III or go.mod
|
||||
export def FTmod()
|
||||
if exists("g:filetype_mod")
|
||||
exe "setf " .. g:filetype_mod
|
||||
elseif IsLProlog()
|
||||
setf lprolog
|
||||
elseif getline(nextnonblank(1)) =~ '\%(\<MODULE\s\+\w\+\s*;\|^\s*(\*\)'
|
||||
setf modula2
|
||||
elseif IsRapid()
|
||||
setf rapid
|
||||
elseif expand("<afile>") =~ '\<go.mod$'
|
||||
setf gomod
|
||||
else
|
||||
# Nothing recognized, assume modsim3
|
||||
setf modsim3
|
||||
endif
|
||||
enddef
|
||||
|
||||
export def FTpl()
|
||||
if exists("g:filetype_pl")
|
||||
exe "setf " .. g:filetype_pl
|
||||
@ -526,6 +575,18 @@ export def FTpp()
|
||||
endif
|
||||
enddef
|
||||
|
||||
# Determine if *.prg is ABB RAPID. Can also be Clipper, FoxPro or eviews
|
||||
export def FTprg()
|
||||
if exists("g:filetype_prg")
|
||||
exe "setf " .. g:filetype_prg
|
||||
elseif IsRapid()
|
||||
setf rapid
|
||||
else
|
||||
# Nothing recognized, assume Clipper
|
||||
setf clipper
|
||||
endif
|
||||
enddef
|
||||
|
||||
export def FTr()
|
||||
var max = line("$") > 50 ? 50 : line("$")
|
||||
|
||||
@ -572,7 +633,7 @@ export def McSetf()
|
||||
return
|
||||
endif
|
||||
endfor
|
||||
setf m4 " Default: Sendmail .mc file
|
||||
setf m4 # Default: Sendmail .mc file
|
||||
enddef
|
||||
|
||||
# Called from filetype.vim and scripts.vim.
|
||||
@ -735,6 +796,14 @@ export def FTperl(): number
|
||||
return 0
|
||||
enddef
|
||||
|
||||
export def FTsys()
|
||||
if IsRapid()
|
||||
setf rapid
|
||||
else
|
||||
setf bat
|
||||
endif
|
||||
enddef
|
||||
|
||||
# Choose context, plaintex, or tex (LaTeX) based on these rules:
|
||||
# 1. Check the first line of the file for "%&<format>".
|
||||
# 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
|
||||
|
@ -148,6 +148,7 @@ variables can be used to overrule the filetype used for certain extensions:
|
||||
*.i g:filetype_i |ft-progress-syntax|
|
||||
*.inc g:filetype_inc
|
||||
*.m g:filetype_m |ft-mathematica-syntax|
|
||||
*.mod g:filetype_mod
|
||||
*.p g:filetype_p |ft-pascal-syntax|
|
||||
*.pl g:filetype_pl
|
||||
*.pp g:filetype_pp |ft-pascal-syntax|
|
||||
|
@ -205,11 +205,13 @@ au BufNewFile,BufRead *.iba,*.ibi setf ibasic
|
||||
" FreeBasic file (similar to QBasic)
|
||||
au BufNewFile,BufRead *.fb setf freebasic
|
||||
|
||||
" Batch file for MSDOS.
|
||||
au BufNewFile,BufRead *.bat,*.sys setf dosbatch
|
||||
" Batch file for MSDOS. See dist#ft#FTsys for *.sys
|
||||
au BufNewFile,BufRead *.bat setf dosbatch
|
||||
" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
|
||||
au BufNewFile,BufRead *.cmd
|
||||
\ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
|
||||
" ABB RAPID or Batch file for MSDOS.
|
||||
au BufNewFile,BufRead *.sys\c call dist#ft#FTsys()
|
||||
|
||||
" Batch file for 4DOS
|
||||
au BufNewFile,BufRead *.btm call dist#ft#FTbtm()
|
||||
@ -360,13 +362,8 @@ au BufNewFile,BufRead *.eni setf cl
|
||||
" Clever or dtd
|
||||
au BufNewFile,BufRead *.ent call dist#ft#FTent()
|
||||
|
||||
" Clipper (or FoxPro; could also be eviews)
|
||||
au BufNewFile,BufRead *.prg
|
||||
\ if exists("g:filetype_prg") |
|
||||
\ exe "setf " . g:filetype_prg |
|
||||
\ else |
|
||||
\ setf clipper |
|
||||
\ endif
|
||||
" Clipper, FoxPro, ABB RAPID or eviews
|
||||
au BufNewFile,BufRead *.prg\c call dist#ft#FTprg()
|
||||
|
||||
" Clojure
|
||||
au BufNewFile,BufRead *.clj,*.cljs,*.cljx,*.cljc setf clojure
|
||||
@ -444,7 +441,7 @@ au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake
|
||||
au BufNewFile,BufRead *.qc setf c
|
||||
|
||||
" Configure files
|
||||
au BufNewFile,BufRead *.cfg setf cfg
|
||||
au BufNewFile,BufRead *.cfg\c call dist#ft#FTcfg()
|
||||
|
||||
" Cucumber
|
||||
au BufNewFile,BufRead *.feature setf cucumber
|
||||
@ -980,7 +977,7 @@ au BufNewFile,BufRead *.latte,*.lte setf latte
|
||||
" Limits
|
||||
au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf setf limits
|
||||
|
||||
" LambdaProlog (*.mod too, see Modsim)
|
||||
" LambdaProlog (see dist#ft#FTmod for *.mod)
|
||||
au BufNewFile,BufRead *.sig setf lprolog
|
||||
|
||||
" LDAP LDIF
|
||||
@ -1143,18 +1140,11 @@ au BufNewFile,BufRead *.mms call dist#ft#FTmms()
|
||||
" Symbian meta-makefile definition (MMP)
|
||||
au BufNewFile,BufRead *.mmp setf mmp
|
||||
|
||||
" Modsim III (or LambdaProlog)
|
||||
au BufNewFile,BufRead *.mod
|
||||
\ if expand("<afile>") =~ '\<go.mod$' |
|
||||
\ setf gomod |
|
||||
\ elseif getline(1) =~ '\<module\>' |
|
||||
\ setf lprolog |
|
||||
\ else |
|
||||
\ setf modsim3 |
|
||||
\ endif
|
||||
" ABB Rapid, Modula-2, Modsim III or LambdaProlog
|
||||
au BufNewFile,BufRead *.mod\c call dist#ft#FTmod()
|
||||
|
||||
" Modula-2 (.md removed in favor of Markdown)
|
||||
au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.mi setf modula2
|
||||
" Modula-2 (.md removed in favor of Markdown, see dist#ft#FTmod for *.MOD)
|
||||
au BufNewFile,BufRead *.m2,*.DEF,*.mi setf modula2
|
||||
|
||||
" Modula-3 (.m3, .i3, .mg, .ig)
|
||||
au BufNewFile,BufRead *.[mi][3g] setf modula3
|
||||
|
@ -99,7 +99,7 @@ let s:filename_checks = {
|
||||
\ 'cdrtoc': ['file.toc'],
|
||||
\ 'cf': ['file.cfm', 'file.cfi', 'file.cfc'],
|
||||
\ 'cfengine': ['cfengine.conf'],
|
||||
\ 'cfg': ['file.cfg', 'file.hgrc', 'filehgrc', 'hgrc', 'some-hgrc'],
|
||||
\ 'cfg': ['file.hgrc', 'filehgrc', 'hgrc', 'some-hgrc'],
|
||||
\ 'ch': ['file.chf'],
|
||||
\ 'chaiscript': ['file.chai'],
|
||||
\ 'chaskell': ['file.chs'],
|
||||
@ -150,7 +150,7 @@ let s:filename_checks = {
|
||||
\ 'dircolors': ['.dir_colors', '.dircolors', '/etc/DIR_COLORS', 'any/etc/DIR_COLORS'],
|
||||
\ 'dnsmasq': ['/etc/dnsmasq.conf', '/etc/dnsmasq.d/file', 'any/etc/dnsmasq.conf', 'any/etc/dnsmasq.d/file'],
|
||||
\ 'dockerfile': ['Containerfile', 'Dockerfile', 'file.Dockerfile', 'Dockerfile.debian', 'Containerfile.something'],
|
||||
\ 'dosbatch': ['file.bat', 'file.sys'],
|
||||
\ 'dosbatch': ['file.bat'],
|
||||
\ 'dosini': ['.editorconfig', '/etc/pacman.conf', '/etc/yum.conf', 'file.ini', 'npmrc', '.npmrc', 'php.ini', 'php.ini-5', 'php.ini-file', '/etc/yum.repos.d/file', 'any/etc/pacman.conf', 'any/etc/yum.conf', 'any/etc/yum.repos.d/file', 'file.wrap'],
|
||||
\ 'dot': ['file.dot', 'file.gv'],
|
||||
\ 'dracula': ['file.drac', 'file.drc', 'filelvs', 'filelpe', 'drac.file', 'lpe', 'lvs', 'some-lpe', 'some-lvs'],
|
||||
@ -616,7 +616,7 @@ let s:filename_checks = {
|
||||
\ }
|
||||
|
||||
let s:filename_case_checks = {
|
||||
\ 'modula2': ['file.DEF', 'file.MOD'],
|
||||
\ 'modula2': ['file.DEF'],
|
||||
\ 'bzl': ['file.BUILD', 'BUILD'],
|
||||
\ }
|
||||
|
||||
@ -832,6 +832,36 @@ func Test_bas_file()
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
" Test dist#ft#FTcfg()
|
||||
func Test_cfg_file()
|
||||
filetype on
|
||||
|
||||
" *.cfg defaults to cfg
|
||||
call writefile(['looks like cfg'], 'cfgfile.cfg')
|
||||
split cfgfile.cfg
|
||||
call assert_equal('cfg', &filetype)
|
||||
|
||||
let g:filetype_cfg = 'other'
|
||||
edit
|
||||
call assert_equal('other', &filetype)
|
||||
bwipe!
|
||||
unlet g:filetype_cfg
|
||||
|
||||
" RAPID cfg
|
||||
let ext = 'cfg'
|
||||
for i in ['EIO', 'MMC', 'MOC', 'PROC', 'SIO', 'SYS']
|
||||
call writefile([i .. ':CFG'], 'cfgfile.' .. ext)
|
||||
execute "split cfgfile." .. ext
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('cfgfile.' .. ext)
|
||||
" check different case of file extension
|
||||
let ext = substitute(ext, '\(\l\)', '\u\1', '')
|
||||
endfor
|
||||
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_d_file()
|
||||
filetype on
|
||||
|
||||
@ -1278,6 +1308,81 @@ func Test_m_file()
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_mod_file()
|
||||
filetype on
|
||||
|
||||
" *.mod defaults to Modsim III
|
||||
call writefile(['locks like Modsim III'], 'modfile.mod')
|
||||
split modfile.mod
|
||||
call assert_equal('modsim3', &filetype)
|
||||
bwipe!
|
||||
|
||||
" Users preference set by g:filetype_mod
|
||||
let g:filetype_mod = 'lprolog'
|
||||
split modfile.mod
|
||||
call assert_equal('lprolog', &filetype)
|
||||
unlet g:filetype_mod
|
||||
bwipe!
|
||||
|
||||
" RAPID header start with a line containing only "%%%",
|
||||
" but is not always present.
|
||||
call writefile(['%%%'], 'modfile.mod')
|
||||
split modfile.mod
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('modfile.mod')
|
||||
|
||||
" RAPID supports umlauts in module names, leading spaces,
|
||||
" the .mod extension is not case sensitive.
|
||||
call writefile([' module ÜmlautModule'], 'modfile.Mod')
|
||||
split modfile.Mod
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('modfile.Mod')
|
||||
|
||||
" RAPID is not case sensitive, embedded spaces, sysmodule,
|
||||
" file starts with empty line(s).
|
||||
call writefile(['', 'MODULE rapidmödüle (SYSMODULE,NOSTEPIN)'], 'modfile.MOD')
|
||||
split modfile.MOD
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
|
||||
" Modula-2 MODULE not start of line
|
||||
call writefile(['IMPLEMENTATION MODULE Module2Mod;'], 'modfile.MOD')
|
||||
split modfile.MOD
|
||||
call assert_equal('modula2', &filetype)
|
||||
bwipe!
|
||||
|
||||
" Modula-2 with comment and empty lines prior MODULE
|
||||
call writefile(['', '(* with', ' comment *)', '', 'MODULE Module2Mod;'], 'modfile.MOD')
|
||||
split modfile.MOD
|
||||
call assert_equal('modula2', &filetype)
|
||||
bwipe!
|
||||
call delete('modfile.MOD')
|
||||
|
||||
" LambdaProlog module
|
||||
call writefile(['module lpromod.'], 'modfile.mod')
|
||||
split modfile.mod
|
||||
call assert_equal('lprolog', &filetype)
|
||||
bwipe!
|
||||
|
||||
" LambdaProlog with comment and empty lines prior module
|
||||
call writefile(['', '% with', '% comment', '', 'module lpromod.'], 'modfile.mod')
|
||||
split modfile.mod
|
||||
call assert_equal('lprolog', &filetype)
|
||||
bwipe!
|
||||
call delete('modfile.mod')
|
||||
|
||||
" go.mod
|
||||
call writefile(['module example.com/M'], 'go.mod')
|
||||
split go.mod
|
||||
call assert_equal('gomod', &filetype)
|
||||
bwipe!
|
||||
call delete('go.mod')
|
||||
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_patch_file()
|
||||
filetype on
|
||||
|
||||
@ -1346,6 +1451,50 @@ func Test_pp_file()
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
" Test dist#ft#FTprg()
|
||||
func Test_prg_file()
|
||||
filetype on
|
||||
|
||||
" *.prg defaults to clipper
|
||||
call writefile(['looks like clipper'], 'prgfile.prg')
|
||||
split prgfile.prg
|
||||
call assert_equal('clipper', &filetype)
|
||||
bwipe!
|
||||
|
||||
" Users preference set by g:filetype_prg
|
||||
let g:filetype_prg = 'eviews'
|
||||
split prgfile.prg
|
||||
call assert_equal('eviews', &filetype)
|
||||
unlet g:filetype_prg
|
||||
bwipe!
|
||||
|
||||
" RAPID header start with a line containing only "%%%",
|
||||
" but is not always present.
|
||||
call writefile(['%%%'], 'prgfile.prg')
|
||||
split prgfile.prg
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('prgfile.prg')
|
||||
|
||||
" RAPID supports umlauts in module names, leading spaces,
|
||||
" the .prg extension is not case sensitive.
|
||||
call writefile([' module ÜmlautModule'], 'prgfile.Prg')
|
||||
split prgfile.Prg
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('prgfile.Prg')
|
||||
|
||||
" RAPID is not case sensitive, embedded spaces, sysmodule,
|
||||
" file starts with empty line(s).
|
||||
call writefile(['', 'MODULE rapidmödüle (SYSMODULE,NOSTEPIN)'], 'prgfile.PRG')
|
||||
split prgfile.PRG
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('prgfile.PRG')
|
||||
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_src_file()
|
||||
filetype on
|
||||
|
||||
@ -1379,6 +1528,42 @@ func Test_src_file()
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_sys_file()
|
||||
filetype on
|
||||
|
||||
" *.sys defaults to Batch file for MSDOS
|
||||
call writefile(['looks like dos batch'], 'sysfile.sys')
|
||||
split sysfile.sys
|
||||
call assert_equal('bat', &filetype)
|
||||
bwipe!
|
||||
|
||||
" RAPID header start with a line containing only "%%%",
|
||||
" but is not always present.
|
||||
call writefile(['%%%'], 'sysfile.sys')
|
||||
split sysfile.sys
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('sysfile.sys')
|
||||
|
||||
" RAPID supports umlauts in module names, leading spaces,
|
||||
" the .sys extension is not case sensitive.
|
||||
call writefile([' module ÜmlautModule'], 'sysfile.Sys')
|
||||
split sysfile.Sys
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('sysfile.Sys')
|
||||
|
||||
" RAPID is not case sensitive, embedded spaces, sysmodule,
|
||||
" file starts with empty line(s).
|
||||
call writefile(['', 'MODULE rapidmödüle (SYSMODULE,NOSTEPIN)'], 'sysfile.SYS')
|
||||
split sysfile.SYS
|
||||
call assert_equal('rapid', &filetype)
|
||||
bwipe!
|
||||
call delete('sysfile.SYS')
|
||||
|
||||
filetype off
|
||||
endfunc
|
||||
|
||||
func Test_tex_file()
|
||||
filetype on
|
||||
|
||||
|
@ -746,6 +746,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4720,
|
||||
/**/
|
||||
4719,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user