]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0998: filetype: TI assembly files are not recognized v9.1.0998
authorWu, Zhenyu <wuzhenyu@ustc.edu>
Wed, 8 Jan 2025 19:20:06 +0000 (20:20 +0100)
committerChristian Brabandt <cb@256bit.org>
Wed, 8 Jan 2025 19:26:38 +0000 (20:26 +0100)
Problem:  filetype: TI assembly files are not recognized
Solution: inspect '*.sa' and assembly files and detect TI assembly
          files, include filetype plugin and syntax script for TI
          assembly files (Wu, Zhenyu)

closes: #15827

Signed-off-by: Wu, Zhenyu <wuzhenyu@ustc.edu>
Signed-off-by: Christian Brabandt <cb@256bit.org>
.github/MAINTAINERS
runtime/autoload/dist/ft.vim
runtime/filetype.vim
runtime/ftplugin/tiasm.vim [new file with mode: 0644]
runtime/syntax/tiasm.vim [new file with mode: 0644]
src/testdir/test_filetype.vim
src/version.c

index 80965385e41256724f827d7c34b7340914bdb517..6052197de55b417ba8f424198b5e00d25c563648 100644 (file)
@@ -292,6 +292,7 @@ runtime/ftplugin/tcsh.vim           @dkearns
 runtime/ftplugin/terraform.vim         @JannoTjarks
 runtime/ftplugin/tf.vim                        @ribru17
 runtime/ftplugin/thrift.vim            @jiangyinzuo
+runtime/ftplugin/tiasm.vim             @Freed-Wu
 runtime/ftplugin/tidy.vim              @dkearns
 runtime/ftplugin/tmux.vim              @ericpruitt
 runtime/ftplugin/toml.vim              @averms
@@ -610,6 +611,7 @@ runtime/syntax/tcsh.vim                     @dkearns
 runtime/syntax/teraterm.vim            @k-takata
 runtime/syntax/terraform.vim           @gpanders
 runtime/syntax/thrift.vim              @jiangyinzuo
+runtime/syntax/tiasm.vim               @Freed-Wu
 runtime/syntax/tidy.vim                        @dkearns
 runtime/syntax/tmux.vim                        @ericpruitt
 runtime/syntax/toml.vim                        @averms
index ce7f44fa65ac8cb0202e5c907d0708f4e8650270..f1e6ee272bbb626d8127b4b8cad6a63cdb86654f 100644 (file)
@@ -3,7 +3,7 @@ vim9script
 # Vim functions for file type detection
 #
 # Maintainer:          The Vim Project <https://github.com/vim/vim>
-# Last Change:         2024 May 23
+# Last Change:         2025 Jan 08
 # Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -32,6 +32,10 @@ enddef
 # This function checks for the kind of assembly that is wanted by the user, or
 # can be detected from the first five lines of the file.
 export def FTasm()
+  # tiasm uses `* commment`
+  if join(getline(1, 10), "\n") =~ '\%(\%(^\|\n\)\*\|Texas Instruments Incorporated\)'
+    setf tiasm
+  endif
   # make sure b:asmsyntax exists
   if !exists("b:asmsyntax")
     b:asmsyntax = ""
@@ -1003,6 +1007,14 @@ export def SQL()
   endif
 enddef
 
+export def FTsa()
+  if join(getline(1, 4), "\n") =~# '\%(^\|\n\);'
+    setf tiasm
+    return
+  endif
+  setf sather
+enddef
+
 # This function checks the first 25 lines of file extension "sc" to resolve
 # detection between scala and SuperCollider.
 # NOTE: We don't check for 'Class : Method', as this can easily be confused
index 737f881000eed78af5c6c620bec944ccaa4731df..154ce79cb6fbe6df6ca25e651bfbf679d8b98101 100644 (file)
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:  The Vim Project <https://github.com/vim/vim>
-" Last Change: 2024 Dec 31
+" Last Change: 2025 Jan 08
 " Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
 " Listen very carefully, I will say this only once
@@ -2200,8 +2200,8 @@ au BufNewFile,BufRead *.sas                       setf sas
 " Sass
 au BufNewFile,BufRead *.sass                   setf sass
 
-" Sather
-au BufNewFile,BufRead *.sa                     setf sather
+" Sather, TI linear assembly
+au BufNewFile,BufRead *.sa                     call dist#ft#FTsa()
 
 " Scala
 au BufNewFile,BufRead *.scala                  setf scala
diff --git a/runtime/ftplugin/tiasm.vim b/runtime/ftplugin/tiasm.vim
new file mode 100644 (file)
index 0000000..13a3dc6
--- /dev/null
@@ -0,0 +1,18 @@
+" Vim filetype plugin file
+" Language:    TI linear assembly language
+" Maintainer:  Wu, Zhenyu <wuzhenyu@ustc.edu>
+" Last Change: 2025 Jan 08
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal comments=:;
+setlocal commentstring=;\ %s
+
+let b:undo_ftplugin = "setl commentstring< comments<"
+
+if exists("loaded_matchit")
+  let b:match_words = '^\s\+\.if\>:^\s\+\.elseif:^\s\+\.else\>:^\s\+\.endif\>,^\s\+\.group:^\s\+\.gmember:^\s\+\.endgroup,^\s\+\.loop:^\s\+\.break:^\s\+\.endloop,^\s\+\.macro:^\s\+\.mexit:^\s\+\.endm,^\s\+\.asmfunc:^\s\+\.endasmfunc,^\s\+\.c\?struct:^\s\+\.endstruct,^\s\+\.c\?union:^\s\+\.endunion,^\s\+\.c\?proc:^\s\+\.return:^\s\+\.endproc'
+  let b:match_ignorecase = 1
+  let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words"
+endif
diff --git a/runtime/syntax/tiasm.vim b/runtime/syntax/tiasm.vim
new file mode 100644 (file)
index 0000000..bdadc4a
--- /dev/null
@@ -0,0 +1,102 @@
+" Vim syntax file
+" Language:    TI linear assembly language
+" Document:    https://downloads.ti.com/docs/esd/SPRUI03B/#SPRUI03B_HTML/assembler-description.html
+" Maintainer:  Wu, Zhenyu <wuzhenyu@ustc.edu>
+" Last Change: 2025 Jan 08
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn case ignore
+
+" storage types
+syn match tiasmType "\.bits"
+syn match tiasmType "\.byte"
+syn match tiasmType "\.char"
+syn match tiasmType "\.cstring"
+syn match tiasmType "\.double"
+syn match tiasmType "\.field"
+syn match tiasmType "\.float"
+syn match tiasmType "\.half"
+syn match tiasmType "\.int"
+syn match tiasmType "\.long"
+syn match tiasmType "\.short"
+syn match tiasmType "\.string"
+syn match tiasmType "\.ubyte"
+syn match tiasmType "\.uchar"
+syn match tiasmType "\.uhalf"
+syn match tiasmType "\.uint"
+syn match tiasmType "\.ulong"
+syn match tiasmType "\.ushort"
+syn match tiasmType "\.uword"
+syn match tiasmType "\.word"
+
+syn match tiasmIdentifier              "[a-z_][a-z0-9_]*"
+
+syn match tiasmDecimal         "\<[1-9]\d*\>"           display
+syn match tiasmOctal           "\<0[0-7][0-7]\+\>\|\<[0-7]\+[oO]\>"     display
+syn match tiasmHexadecimal     "\<0[xX][0-9a-fA-F]\+\>\|\<[0-9][0-9a-fA-F]*[hH]\>" display
+syn match tiasmBinary          "\<0[bB][0-1]\+\>\|\<[01]\+[bB]\>"       display
+
+syn match tiasmFloat           "\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display
+syn match tiasmFloat           "\<\d\%(e[+-]\=\d\+\)\>"          display
+
+syn match tiasmCharacter               "'.'\|''\|'[^']'"
+
+syn region tiasmString         start="\"" end="\"" skip="\"\""
+
+syn match tiasmFunction                "\$[a-zA-Z_][a-zA-Z_0-9]*\ze("
+
+syn keyword tiasmTodo                  contained TODO FIXME XXX NOTE
+syn region tiasmComment                        start=";" end="$" keepend contains=tiasmTodo,@Spell
+syn match tiasmComment                 "^[*!].*" contains=tiasmTodo,@Spell
+syn match tiasmLabel                   "^[^ *!;][^ :]*"
+
+syn match tiasmInclude         "\.include"
+syn match tiasmCond            "\.if"
+syn match tiasmCond            "\.else"
+syn match tiasmCond            "\.endif"
+syn match tiasmMacro           "\.macro"
+syn match tiasmMacro           "\.endm"
+
+syn match tiasmDirective               "\.[A-Za-z][0-9A-Za-z-_]*"
+
+syn case match
+
+hi def link tiasmLabel         Label
+hi def link tiasmComment               Comment
+hi def link tiasmTodo          Todo
+hi def link tiasmDirective     Statement
+
+hi def link tiasmInclude               Include
+hi def link tiasmCond          PreCondit
+hi def link tiasmMacro         Macro
+
+if exists('g:tiasm_legacy_syntax_groups')
+  hi def link hexNumber                Number
+  hi def link decNumber                Number
+  hi def link octNumber                Number
+  hi def link binNumber                Number
+  hi def link tiasmHexadecimal hexNumber
+  hi def link tiasmDecimal     decNumber
+  hi def link tiasmOctal               octNumber
+  hi def link tiasmBinary              binNumber
+else
+  hi def link tiasmHexadecimal Number
+  hi def link tiasmDecimal     Number
+  hi def link tiasmOctal               Number
+  hi def link tiasmBinary              Number
+endif
+hi def link tiasmFloat         Float
+
+hi def link tiasmString                String
+hi def link tiasmStringEscape  Special
+hi def link tiasmCharacter     Character
+hi def link tiasmCharacterEscape       Special
+
+hi def link tiasmIdentifier    Identifier
+hi def link tiasmType          Type
+hi def link tiasmFunction      Function
+
+let b:current_syntax = "lineartiasm"
index 8f2fb4fc9ccb948d17bddf2491f80047da4e6607..6d64d9df6ede32cfbe89207b5453b6fbecd74f3c 100644 (file)
@@ -676,7 +676,6 @@ def s:GetFilenameChecks(): dict<list<string>>
     samba: ['smb.conf'],
     sas: ['file.sas'],
     sass: ['file.sass'],
-    sather: ['file.sa'],
     sbt: ['file.sbt'],
     scala: ['file.scala'],
     scheme: ['file.scm', 'file.ss', 'file.sld', 'file.stsg', 'any/local/share/supertux2/config', '.lips_repl_history'],
@@ -2331,6 +2330,22 @@ func Test_cmd_file()
   filetype off
 endfunc
 
+func Test_sa_file()
+  filetype on
+
+  call writefile([';* XXX-a.sa: XXX for TI C6000 DSP *;', '.no_mdep'], 'Xfile.sa')
+  split Xfile.sa
+  call assert_equal('tiasm', &filetype)
+  bwipe!
+
+  call writefile(['-- comment'], 'Xfile.sa')
+  split Xfile.sa
+  call assert_equal('sather', &filetype)
+  bwipe!
+
+  filetype off
+endfunc
+
 func Test_sig_file()
   filetype on
 
index 22efc7e6bb8fb44dcd1ec97ed5bc15c5c0d82101..49a3523a21b9a6e3c34e56440abfc7a1f09ed00b 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    998,
 /**/
     997,
 /**/