[vim] Add initial syntax definition for .mir files

This initial definition handles the yaml container and the embedding of
the inner IRs. As a stopgap, this reuses the LLVM IR syntax highlighting
for the MIR function bodies--even though it's not technically correct,
it produces decent highlighting for a first pass.

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D95552
This commit is contained in:
Cassie Jones 2021-02-17 02:38:08 -05:00
parent 0984b8de0b
commit c6a96df375
4 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1 @@
au BufRead,BufNewFile *.mir set filetype=mir

View File

@ -0,0 +1,13 @@
" Vim filetype plugin file
" Language: LLVM Machine IR
" Maintainer: The LLVM team, http://llvm.org/
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal softtabstop=2 shiftwidth=2
setlocal expandtab
setlocal comments+=:;

View File

@ -0,0 +1,11 @@
" Vim syntax file
" Language: mir
" Maintainer: The LLVM team, http://llvm.org/
" Version: $Revision$
" FIXME: MIR doesn't actually match LLVM IR. Reimplement this.
" See the MIR LangRef: https://llvm.org/docs/MIRLangRef.html
unlet b:current_syntax " Unlet so that the LLVM syntax will load
runtime! syntax/llvm.vim
unlet b:current_syntax
let b:current_syntax = "mir"

View File

@ -0,0 +1,48 @@
" Vim syntax file
" Language: mir
" Maintainer: The LLVM team, http://llvm.org/
" Version: $Revision$
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
syn case match
" MIR is embedded in a yaml container, so we load all of the yaml syntax.
runtime! syntax/yaml.vim
unlet b:current_syntax
" The first document of a file is allowed to contain an LLVM IR module inside
" a top-level yaml block string.
syntax include @LLVM syntax/llvm.vim
" FIXME: This should only be allowed for the first document of the file
syntax region llvm start=/\(^---\s*|\)\@<=/ end=/\(^\.\.\.\)\@=/ contains=@LLVM
" The `body:` field of a document contains the MIR dump of the function
syntax include @MIR syntax/machine-ir.vim
syntax region mir start=/\(^body:\s*|\)\@<=/ end=/\(^[^[:space:]]\)\@=/ contains=@MIR
" Syntax-highlight lit test commands and bug numbers.
syn match mirSpecialComment /#\s*PR\d*\s*$/
syn match mirSpecialComment /#\s*REQUIRES:.*$/
syn match mirSpecialComment /#\s*RUN:.*$/
syn match mirSpecialComment /#\s*ALLOW_RETRIES:.*$/
syn match mirSpecialComment /#\s*CHECK:.*$/
syn match mirSpecialComment "\v#\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$"
syn match mirSpecialComment /#\s*XFAIL:.*$/
if version >= 508 || !exists("did_c_syn_inits")
if version < 508
let did_c_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink mirSpecialComment SpecialComment
endif
let b:current_syntax = "mir"