patch 9.1.1962: filetype: Erlang application resource files are not recognized

Commit: 
https://github.com/vim/vim/commit/cf5c25526007a5cc39be317b023f55cb266d5ed2
Author: Doug Kearns <[email protected]>
Date:   Sun Dec 7 19:12:33 2025 +0100

    patch 9.1.1962: filetype: Erlang application resource files are not 
recognized
    
    Problem:  filetype: Erlang application resource files are not recognized
    Solution: Add content-based filetype detection for application resource
              files matching extension '*.app' (Doug Kearns)
    
    related: #18835
    closes:  #18842
    
    Signed-off-by: Doug Kearns <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 491521663..56ac56606 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -3,7 +3,7 @@ vim9script
 # Vim functions for file type detection
 #
 # Maintainer:          The Vim Project <https://github.com/vim/vim>
-# Last Change:         2025 Nov 30
+# Last Change:         2025 Dec 07
 # Former Maintainer:   Bram Moolenaar <[email protected]>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -29,6 +29,28 @@ export def Check_inp()
   endif
 enddef
 
+# Erlang Application Resource Files (*.app.src is matched by extension)
+# See: https://erlang.org/doc/system/applications
+export def FTapp()
+  if exists("g:filetype_app")
+    exe "setf " .. g:filetype_app
+    return
+  endif
+  const pat = '^\s*{\s*application\s*,\s*\(''\=\)' .. expand("%:t:r:r") .. ' 
\s*,'
+  var line: string
+  for lnum in range(1, min([line("$"), 100]))
+    line = getline(lnum)
+    # skip Erlang comments, might be something else
+    if line =~ '^\s*%' || line =~ '^\s*$'
+      continue
+    elseif line =~ '^\s*{' &&
+       getline(lnum, lnum + 9)->filter((_, v) => v !~ '^\s*%')->join(' ') =~# 
pat
+      setf erlang
+    endif
+    return
+  endfor
+enddef
+
 # This function checks for the kind of assembly that is wanted by the user, or
 # can be detected from the beginning of the file.
 export def FTasm()
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 5011b0569..8ec0fa43a 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt* For Vim version 9.1.  Last change: 2025 Nov 09
+*filetype.txt* For Vim version 9.1.  Last change: 2025 Dec 07
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -138,6 +138,7 @@ what kind of file it is.  This doesn't always work.  A 
number of global
 variables can be used to overrule the filetype used for certain extensions:
 
        file name       variable ~
+       *.app           g:filetype_app
        *.asa           g:filetype_asa          |ft-aspperl-syntax|
                                                |ft-aspvbs-syntax|
        *.asm           g:asmsyntax             |ft-asm-syntax|
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index c733be61f..c375db3c5 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -427,8 +427,9 @@ au BufNewFile,BufRead *.e,*.E                       call 
dist#ft#FTe()
 " Elm Filter Rules file
 au BufNewFile,BufRead filter-rules             setf elmfilt
 
-" Erlang
+" Erlang Application Resource Files
 au BufNewFile,BufRead *.app.src                        setf erlang
+au BufNewFile,BufRead *.app                    call dist#ft#FTapp()
 
 " ESMTP rc file
 au BufNewFile,BufRead *esmtprc                 setf esmtprc
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index 6a6f5053b..0681afcd6 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -3248,4 +3248,34 @@ func Test_m4_format()
   filetype off
 endfunc
 
+" Erlang Application Resource File
+func Test_app_file()
+  filetype on
+
+  call writefile(['% line comment', '{application, xfile1,'], 'xfile1.app', 
'D')
+  split xfile1.app
+  call assert_equal('erlang', &filetype)
+  bwipe!
+
+  call writefile(['% line comment', "{application, 'Xfile2',"], 'Xfile2.app', 
'D')
+  split Xfile2.app
+  call assert_equal('erlang', &filetype)
+  bwipe!
+
+  call writefile([' % line comment',
+        \ ' ',
+        \ ' % line comment',
+        \ ' { ',
+        \ ' % line comment ',
+        \ ' application , ',
+        \ ' % line comment ',
+        \ ' xfile3 , '],
+        \ 'xfile3.app', 'D')
+  split xfile3.app
+  call assert_equal('erlang', &filetype)
+  bwipe!
+
+  filetype off
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 9a7477253..e9ecbef67 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1962,
 /**/
     1961,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1vSJWF-003bZP-Sj%40256bit.org.

Raspunde prin e-mail lui