mirror of
https://github.com/neovim/neovim
synced 2025-07-15 16:51:49 +00:00
vim-patch:9.1.0998: filetype: TI assembly files are not recognized (#31929)
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: vim/vim#15827
4f73c07abf
Co-authored-by: Wu, Zhenyu <wuzhenyu@ustc.edu>
This commit is contained in:
18
runtime/ftplugin/tiasm.vim
Normal file
18
runtime/ftplugin/tiasm.vim
Normal file
@ -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
|
@ -1064,11 +1064,11 @@ local extension = {
|
||||
builder = 'ruby',
|
||||
rake = 'ruby',
|
||||
rs = 'rust',
|
||||
sa = detect.sa,
|
||||
sage = 'sage',
|
||||
sls = 'salt',
|
||||
sas = 'sas',
|
||||
sass = 'sass',
|
||||
sa = 'sather',
|
||||
sbt = 'sbt',
|
||||
scala = 'scala',
|
||||
ss = 'scheme',
|
||||
|
@ -34,6 +34,12 @@ local matchregex = vim.filetype._matchregex
|
||||
-- can be detected from the first five lines of the file.
|
||||
--- @type vim.filetype.mapfn
|
||||
function M.asm(path, bufnr)
|
||||
-- tiasm uses `* commment`
|
||||
local lines = table.concat(getlines(bufnr, 1, 10), '\n')
|
||||
if findany(lines, { '^%*', '\n%*', 'Texas Instruments Incorporated' }) then
|
||||
return 'tiasm'
|
||||
end
|
||||
|
||||
local syntax = vim.b[bufnr].asmsyntax
|
||||
if not syntax or syntax == '' then
|
||||
syntax = M.asm_syntax(path, bufnr)
|
||||
@ -1424,6 +1430,15 @@ function M.sig(_, bufnr)
|
||||
end
|
||||
end
|
||||
|
||||
--- @type vim.filetype.mapfn
|
||||
function M.sa(_, bufnr)
|
||||
local lines = table.concat(getlines(bufnr, 1, 4), '\n')
|
||||
if findany(lines, { '^;', '\n;' }) then
|
||||
return 'tiasm'
|
||||
end
|
||||
return 'sather'
|
||||
end
|
||||
|
||||
-- This function checks the first 25 lines of file extension "sc" to resolve
|
||||
-- detection between scala and SuperCollider
|
||||
--- @type vim.filetype.mapfn
|
||||
|
102
runtime/syntax/tiasm.vim
Normal file
102
runtime/syntax/tiasm.vim
Normal file
@ -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"
|
@ -672,7 +672,6 @@ func s:GetFilenameChecks() abort
|
||||
\ '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'],
|
||||
@ -2322,6 +2321,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
|
||||
|
||||
|
Reference in New Issue
Block a user