mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04: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