]> granicus.if.org Git - vim/commitdiff
patch 8.2.4746: supercollider filetype not recognized v8.2.4746
authorranjithshegde <ranjithshegde@gmail.com>
Wed, 13 Apr 2022 14:29:21 +0000 (15:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 13 Apr 2022 14:29:21 +0000 (15:29 +0100)
Problem:    Supercollider filetype not recognized.
Solution:   Match file extentions and check file contents to detect
            supercollider. (closes #10142)

runtime/autoload/dist/ft.vim
runtime/filetype.vim
src/testdir/test_filetype.vim
src/version.c

index 3bf552a1a5c53739f9739faaa6e85b1d955ba78c..ff554dfe834fe1a8d704d1682280155d6762d25c 100644 (file)
@@ -769,6 +769,28 @@ export def SQL()
   endif
 enddef
 
+# This function checks the first 25 lines of file extension "sc" to resolve
+# detection between scala and SuperCollider
+export def FTsc()
+  for lnum in range(1, min([line("$"), 25]))
+    if getline(lnum) =~# '[A-Za-z0-9]*\s:\s[A-Za-z0-9]\|var\s<\|classvar\s<\|\^this.*\||\w*|\|+\s\w*\s{\|\*ar\s'
+      setf supercollider
+      return
+    endif
+  endfor
+  setf scala
+enddef
+
+# This function checks the first line of file extension "scd" to resolve
+# detection between scdoc and SuperCollider
+export def FTscd()
+  if getline(1) =~# '\%^\S\+(\d[0-9A-Za-z]*)\%(\s\+\"[^"]*\"\%(\s\+\"[^"]*\"\)\=\)\=$'
+    setf scdoc
+  else
+    setf supercollider
+  endif
+enddef
+
 # If the file has an extension of 't' and is in a directory 't' or 'xt' then
 # it is almost certainly a Perl test file.
 # If the first line starts with '#' and contains 'perl' it's probably a Perl
index 62afb375cba441ca764726935aa235991d27e30e..500f4692368d3312fe645a1857a1287d2615101e 100644 (file)
@@ -206,12 +206,12 @@ au BufNewFile,BufRead *.iba,*.ibi         setf ibasic
 au BufNewFile,BufRead *.fb                     setf freebasic
 
 " Batch file for MSDOS. See dist#ft#FTsys for *.sys
-au BufNewFile,BufRead *.bat                    setf dosbatch
+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()
+au BufNewFile,BufRead *.sys\c                  call dist#ft#FTsys()
 
 " Batch file for 4DOS
 au BufNewFile,BufRead *.btm                    call dist#ft#FTbtm()
@@ -1144,7 +1144,7 @@ au BufNewFile,BufRead *.mms                       call dist#ft#FTmms()
 au BufNewFile,BufRead *.mmp                    setf mmp
 
 " ABB Rapid, Modula-2, Modsim III or LambdaProlog
-au BufNewFile,BufRead *.mod\c                  call dist#ft#FTmod()
+au BufNewFile,BufRead *.mod\c                  call dist#ft#FTmod()
 
 " Modula-2  (.md removed in favor of Markdown, see dist#ft#FTmod for *.MOD)
 au BufNewFile,BufRead *.m2,*.DEF,*.mi          setf modula2
@@ -1634,16 +1634,22 @@ au BufNewFile,BufRead *.sass                    setf sass
 au BufNewFile,BufRead *.sa                     setf sather
 
 " Scala
-au BufNewFile,BufRead *.scala,*.sc             setf scala
+au BufNewFile,BufRead *.scala                  setf scala
 
 " SBT - Scala Build Tool
 au BufNewFile,BufRead *.sbt                    setf sbt
 
+" SuperCollider
+au BufNewFile,BufRead *.sc                     call dist#ft#FTsc()
+
+au BufNewFile,BufRead *.quark                  setf supercollider
+
+" scdoc
+au BufNewFile,BufRead *.scd                    call dist#ft#FTscd()
+
 " Scilab
 au BufNewFile,BufRead *.sci,*.sce              setf scilab
 
-" scdoc
-au BufNewFile,BufRead *.scd                    setf scdoc
 
 " SCSS
 au BufNewFile,BufRead *.scss                   setf scss
index a609de784d55cdc02cc3019a977badd27f3b1de2..34868d60149c46cb2eb85045fd08ae627b714338 100644 (file)
@@ -464,12 +464,11 @@ let s:filename_checks = {
     \ 'sass': ['file.sass'],
     \ 'sather': ['file.sa'],
     \ 'sbt': ['file.sbt'],
-    \ 'scala': ['file.scala', 'file.sc'],
+    \ 'scala': ['file.scala'],
     \ 'scheme': ['file.scm', 'file.ss', 'file.sld', 'file.rkt', 'file.rktd', 'file.rktl'],
     \ 'scilab': ['file.sci', 'file.sce'],
     \ 'screen': ['.screenrc', 'screenrc'],
     \ 'sexplib': ['file.sexp'],
-    \ 'scdoc': ['file.scd'],
     \ 'scss': ['file.scss'],
     \ 'sd': ['file.sd'],
     \ 'sdc': ['file.sdc'],
@@ -517,6 +516,7 @@ let s:filename_checks = {
     \ 'stata': ['file.ado', 'file.do', 'file.imata', 'file.mata'],
     \ 'stp': ['file.stp'],
     \ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp', '/etc/sudoers', 'any/etc/sudoers.d/file'],
+    \ 'supercollider': ['file.quark'], 
     \ 'surface': ['file.sface'],
     \ 'svg': ['file.svg'],
     \ 'svn': ['svn-commitfile.tmp', 'svn-commit-file.tmp', 'svn-commit.tmp'],
@@ -1497,6 +1497,54 @@ func Test_prg_file()
   filetype off
 endfunc
 
+" Test dist#ft#FTsc()
+func Test_sc_file()
+  filetype on
+
+  " SC file mehtods are defined 'Class : Method'
+  call writefile(['SCNvimDocRenderer : SCDocHTMLRenderer {'], 'srcfile.sc')
+  split srcfile.sc
+  call assert_equal('supercollider', &filetype)
+  bwipe!
+  call delete('srcfile.sc')
+
+  " SC classes are defined with '+ Class {}'
+  call writefile(['+ SCNvim {', '*methodArgs {|method|'], 'srcfile.sc')
+  split srcfile.sc
+  call assert_equal('supercollider', &filetype)
+  bwipe!
+  call delete('srcfile.sc')
+
+  " Some SC class files start with comment and define methods many lines later
+  call writefile(['// Query', '//Method','^this {'], 'srcfile.sc')
+  split srcfile.sc
+  call assert_equal('supercollider', &filetype)
+  bwipe!
+  call delete('srcfile.sc')
+
+  " Some SC class files put comments between method declaration after class
+  call writefile(['PingPong {', '//comment','*ar { arg'], 'srcfile.sc')
+  split srcfile.sc
+  call assert_equal('supercollider', &filetype)
+  bwipe!
+  call delete('srcfile.sc')
+
+  filetype off
+endfunc
+
+" Test dist#ft#FTscd()
+func Test_scd_file()
+  filetype on
+
+  call writefile(['ijq(1)'], 'srcfile.scd')
+  split srcfile.scd
+  call assert_equal('scdoc', &filetype)
+  bwipe!
+  call delete('srcfile.scd')
+
+  filetype off
+endfunc
+
 func Test_src_file()
   filetype on
 
index 7a8f52f7a73d8ba96a6ff8f7001c27805365c129..e3ba0c89fedfd3034ba30dbfdec7d139dc776ecf 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4746,
 /**/
     4745,
 /**/