[llvm] r235369 - Enhanced vim support.

Matthias Braun matze at braunis.de
Mon Apr 20 18:35:43 PDT 2015


Author: matze
Date: Mon Apr 20 20:35:42 2015
New Revision: 235369

URL: http://llvm.org/viewvc/llvm-project?rev=235369&view=rev
Log:
Enhanced vim support.

This brings the utils/vim folder into a more vim-like format by moving
the syntax hightlighting files into a syntax subdirectory. It adds
some minimal settings that everyone should agree on to ftdetect/ftplugin and
features a new indentation plugin for .ll files.

Added:
    llvm/trunk/utils/vim/ftdetect/
    llvm/trunk/utils/vim/ftdetect/llvm.vim
    llvm/trunk/utils/vim/ftdetect/tablegen.vim
    llvm/trunk/utils/vim/ftplugin/
    llvm/trunk/utils/vim/ftplugin/llvm.vim
    llvm/trunk/utils/vim/ftplugin/tablegen.vim
    llvm/trunk/utils/vim/indent/
    llvm/trunk/utils/vim/indent/llvm.vim
    llvm/trunk/utils/vim/syntax/
    llvm/trunk/utils/vim/syntax/llvm.vim
      - copied, changed from r235367, llvm/trunk/utils/vim/llvm.vim
    llvm/trunk/utils/vim/syntax/tablegen.vim
      - copied, changed from r235367, llvm/trunk/utils/vim/tablegen.vim
Removed:
    llvm/trunk/utils/vim/llvm.vim
    llvm/trunk/utils/vim/tablegen.vim
Modified:
    llvm/trunk/utils/vim/README

Modified: llvm/trunk/utils/vim/README
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/README?rev=235369&r1=235368&r2=235369&view=diff
==============================================================================
--- llvm/trunk/utils/vim/README (original)
+++ llvm/trunk/utils/vim/README Mon Apr 20 20:35:42 2015
@@ -1,33 +1,12 @@
 -*- llvm/utils/vim/README -*-
 
-These are syntax highlighting files for the VIM editor. Included are:
+This directory contains settings for the vim editor to work on llvm *.ll and
+tablegen *.td files. It comes with filetype detection rules in the (ftdetect),
+syntax highlighting (syntax), some minimal sensible default settings (ftplugin)
+and indentation plugins (indent).
 
-* llvm.vim
-
-  Syntax highlighting mode for LLVM assembly files. To use, copy `llvm.vim' to
-  ~/.vim/syntax and add this code to your ~/.vimrc :
-
-  augroup filetype
-    au! BufRead,BufNewFile *.ll     set filetype=llvm
-  augroup END
-
-* tablegen.vim
-
-  Syntax highlighting mode for TableGen description files. To use, copy
-  `tablegen.vim' to ~/.vim/syntax and add this code to your ~/.vimrc :
-
-  augroup filetype
-    au! BufRead,BufNewFile *.td     set filetype=tablegen
-  augroup END
-
-
-If you prefer, instead of making copies you can make symlinks from
-~/.vim/syntax/... to the syntax files in your LLVM source tree. Apparently
-this did not work with older versions of vim however, so if this doesn't
-work you may need to make actual copies of the files.
-
-Another option, if you do not already have a ~/.vim/syntax directory, is
-to symlink ~/.vim/syntax itself to llvm/utils/vim .
+To install copy all subdirectories to your $HOME/.vim or if you prefer create
+symlinks to the files here. Do not copy the vimrc file here it is only meant as an inspiration and starting point for those working on llvm c++ code.
 
 Note: If you notice missing or incorrect syntax highlighting, please contact
 <llvmbugs [at] cs.uiuc.edu>; if you wish to provide a patch to improve the

Added: llvm/trunk/utils/vim/ftdetect/llvm.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ftdetect/llvm.vim?rev=235369&view=auto
==============================================================================
--- llvm/trunk/utils/vim/ftdetect/llvm.vim (added)
+++ llvm/trunk/utils/vim/ftdetect/llvm.vim Mon Apr 20 20:35:42 2015
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.ll set filetype=llvm

Added: llvm/trunk/utils/vim/ftdetect/tablegen.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ftdetect/tablegen.vim?rev=235369&view=auto
==============================================================================
--- llvm/trunk/utils/vim/ftdetect/tablegen.vim (added)
+++ llvm/trunk/utils/vim/ftdetect/tablegen.vim Mon Apr 20 20:35:42 2015
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.td set filetype=tablegen

Added: llvm/trunk/utils/vim/ftplugin/llvm.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ftplugin/llvm.vim?rev=235369&view=auto
==============================================================================
--- llvm/trunk/utils/vim/ftplugin/llvm.vim (added)
+++ llvm/trunk/utils/vim/ftplugin/llvm.vim Mon Apr 20 20:35:42 2015
@@ -0,0 +1,11 @@
+" Vim filetype plugin file
+" Language: LLVM Assembly
+" 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

Added: llvm/trunk/utils/vim/ftplugin/tablegen.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ftplugin/tablegen.vim?rev=235369&view=auto
==============================================================================
--- llvm/trunk/utils/vim/ftplugin/tablegen.vim (added)
+++ llvm/trunk/utils/vim/ftplugin/tablegen.vim Mon Apr 20 20:35:42 2015
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: LLVM TableGen
+" Maintainer: The LLVM team, http://llvm.org/
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+setlocal matchpairs+=<:>
+setlocal softtabstop=2 shiftwidth=2
+setlocal expandtab

Added: llvm/trunk/utils/vim/indent/llvm.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/indent/llvm.vim?rev=235369&view=auto
==============================================================================
--- llvm/trunk/utils/vim/indent/llvm.vim (added)
+++ llvm/trunk/utils/vim/indent/llvm.vim Mon Apr 20 20:35:42 2015
@@ -0,0 +1,72 @@
+" Vim indent file
+" Language:   llvm
+" Maintainer: The LLVM team, http://llvm.org/
+" What this indent plugin currently does:
+"  - If no other rule matches copy indent from previous non-empty,
+"    non-commented line
+"  - On '}' align the same as the line containing the matching '{'
+"  - If previous line ends with ':' increase indentation
+"  - If the current line ends with ':' indent at the same level as the
+"    enclosing '{'/'}' block
+" Stuff that would be nice to add:
+"  - Continue comments on next line
+"  - If there is an opening+unclosed parenthesis on previous line indent to that
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal shiftwidth=2 expandtab
+
+setlocal indentkeys=0{,0},<:>,!^F,o,O,e
+setlocal indentexpr=GetLLVMIndent()
+
+if exists("*GetLLVMIndent")
+  finish
+endif
+
+function! FindOpenBracket(lnum)
+  call cursor(a:lnum, 1)
+  return searchpair('{', '', '}', 'bW')
+endfun
+
+function! GetLLVMIndent()
+  " On '}' align the same as the line containing the matching '{'
+  let thisline = getline(v:lnum)
+  if thisline =~ '^\s*}'
+    call cursor(v:lnum, 1)
+    silent normal %
+    let opening_lnum = line('.')
+    if opening_lnum != v:lnum
+      return indent(opening_lnum)
+    endif
+  endif
+
+  " Indent labels the same as the current opening block
+  if thisline =~ ':\s*$'
+    let blockbegin = FindOpenBracket(v:lnum)
+    if blockbegin > 0
+      return indent(blockbegin)
+    endif
+  endif
+
+  " Find a non-blank not-completely commented line above the current line.
+  let prev_lnum = prevnonblank(v:lnum - 1)
+  while prev_num > 0 && synIDattr(synID(prev_lnum, indent(prev_lnum)+1, 0), "name") =? "string\|comment"
+    let prev_lnum = prevnonblank(prev_lnum-1)
+  endwhile
+  " Hit the start of the file, use zero indent.
+  if prev_lnum == 0
+    return 0
+  endif
+
+  let ind = indent(prev_lnum)
+  let prevline = getline(prev_lnum)
+
+  " Add a 'shiftwidth' after lines that start a block or labels
+  if prevline =~ '{\s*$' || prevline =~ ':\s*$'
+    let ind = ind + &shiftwidth
+  endif
+
+  return ind
+endfunction

Removed: llvm/trunk/utils/vim/llvm.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/llvm.vim?rev=235368&view=auto
==============================================================================
--- llvm/trunk/utils/vim/llvm.vim (original)
+++ llvm/trunk/utils/vim/llvm.vim (removed)
@@ -1,119 +0,0 @@
-" Vim syntax file
-" Language:   llvm
-" Maintainer: The LLVM team, http://llvm.org/
-" Version:      $Revision$
-
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
-endif
-
-syn case match
-
-" Types.
-" Types also include struct, array, vector, etc. but these don't
-" benefit as much from having dedicated highlighting rules.
-syn keyword llvmType void half float double x86_fp80 fp128 ppc_fp128
-syn keyword llvmType label metadata x86_mmx
-syn keyword llvmType type label opaque
-syn match   llvmType /\<i\d\+\>/
-
-" Instructions.
-" The true and false tokens can be used for comparison opcodes, but it's
-" much more common for these tokens to be used for boolean constants.
-syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw
-syn keyword llvmStatement bitcast br call cmpxchg eq exact extractelement
-syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext
-syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub getelementptr
-syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue
-syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min
-syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole
-syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select
-syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem
-syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult
-syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg
-syn keyword llvmStatement xchg xor zext
-
-" Keywords.
-syn keyword llvmKeyword acq_rel acquire sanitize_address addrspace alias align
-syn keyword llvmKeyword alignstack alwaysinline appending arm_aapcs_vfpcc
-syn keyword llvmKeyword arm_aapcscc arm_apcscc asm atomic available_externally
-syn keyword llvmKeyword blockaddress byval c catch cc ccc cleanup coldcc common
-syn keyword llvmKeyword constant datalayout declare default define deplibs
-syn keyword llvmKeyword distinct dllexport dllimport except extern_weak external
-syn keyword llvmKeyword externally_initialized fastcc filter gc global hidden
-syn keyword llvmKeyword initialexec inlinehint inreg intel_ocl_bicc inteldialect
-syn keyword llvmKeyword internal linkonce linkonce_odr localdynamic localexec
-syn keyword llvmKeyword minsize module monotonic msp430_intrcc naked nest
-syn keyword llvmKeyword noalias nocapture noimplicitfloat noinline nonlazybind
-syn keyword llvmKeyword noredzone noreturn nounwind optnone optsize personality
-syn keyword llvmKeyword private protected ptx_device ptx_kernel readnone
-syn keyword llvmKeyword readonly release returns_twice sanitize_thread
-syn keyword llvmKeyword sanitize_memory section seq_cst sideeffect signext
-syn keyword llvmKeyword singlethread spir_func spir_kernel sret ssp sspreq
-syn keyword llvmKeyword sspstrong tail target thread_local to triple
-syn keyword llvmKeyword unnamed_addr unordered uwtable volatile weak weak_odr
-syn keyword llvmKeyword x86_fastcallcc x86_stdcallcc x86_thiscallcc
-syn keyword llvmKeyword x86_64_sysvcc x86_64_win64cc zeroext uselistorder
-syn keyword llvmKeyword uselistorder_bb
-
-" Obsolete keywords.
-syn keyword llvmError  getresult begin end
-
-" Misc syntax.
-syn match   llvmNoName /[%@!]\d\+\>/
-syn match   llvmNumber /-\?\<\d\+\>/
-syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
-syn match   llvmFloat  /\<0x\x\+\>/
-syn keyword llvmBoolean true false
-syn keyword llvmConstant zeroinitializer undef null
-syn match   llvmComment /;.*$/
-syn region  llvmString start=/"/ skip=/\\"/ end=/"/
-syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
-syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
-
-" Named metadata and specialized metadata keywords.
-syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
-syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
-syn match   llvmType /!\zs\a\+\ze\s*(/
-syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
-syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
-syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
-syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
-syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
-syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
-
-" Syntax-highlight dejagnu test commands.
-syn match  llvmSpecialComment /;\s*RUN:.*$/
-syn match  llvmSpecialComment /;\s*PR\d*\s*$/
-syn match  llvmSpecialComment /;\s*END\.\s*$/
-syn match  llvmSpecialComment /;\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 llvmType Type
-  HiLink llvmStatement Statement
-  HiLink llvmNumber Number
-  HiLink llvmComment Comment
-  HiLink llvmString String
-  HiLink llvmLabel Label
-  HiLink llvmKeyword Keyword
-  HiLink llvmBoolean Boolean
-  HiLink llvmFloat Float
-  HiLink llvmNoName Identifier
-  HiLink llvmConstant Constant
-  HiLink llvmSpecialComment SpecialComment
-  HiLink llvmError Error
-  HiLink llvmIdentifier Identifier
-
-  delcommand HiLink
-endif
-
-let b:current_syntax = "llvm"

Copied: llvm/trunk/utils/vim/syntax/llvm.vim (from r235367, llvm/trunk/utils/vim/llvm.vim)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/syntax/llvm.vim?p2=llvm/trunk/utils/vim/syntax/llvm.vim&p1=llvm/trunk/utils/vim/llvm.vim&r1=235367&r2=235369&rev=235369&view=diff
==============================================================================
    (empty)

Copied: llvm/trunk/utils/vim/syntax/tablegen.vim (from r235367, llvm/trunk/utils/vim/tablegen.vim)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/syntax/tablegen.vim?p2=llvm/trunk/utils/vim/syntax/tablegen.vim&p1=llvm/trunk/utils/vim/tablegen.vim&r1=235367&r2=235369&rev=235369&view=diff
==============================================================================
    (empty)

Removed: llvm/trunk/utils/vim/tablegen.vim
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/tablegen.vim?rev=235368&view=auto
==============================================================================
--- llvm/trunk/utils/vim/tablegen.vim (original)
+++ llvm/trunk/utils/vim/tablegen.vim (removed)
@@ -1,54 +0,0 @@
-" Vim syntax file
-" Language:   TableGen
-" Maintainer: The LLVM team, http://llvm.org/
-" Version:    $Revision$
-
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
-endif
-
-" May be changed if you have a really slow machine
-syntax sync minlines=100
-
-syn case match
-
-syn keyword tgKeyword   def let in code dag field include defm foreach
-syn keyword tgType      class int string list bit bits multiclass
-
-syn match   tgNumber    /\<\d\+\>/
-syn match   tgNumber    /\<\d\+\.\d*\>/
-syn match   tgNumber    /\<0b[01]\+\>/
-syn match   tgNumber    /\<0x[0-9a-fA-F]\+\>/
-syn region  tgString    start=/"/ skip=/\\"/ end=/"/    oneline
-
-syn region  tgCode      start=/\[{/ end=/}\]/
-
-syn keyword tgTodo             contained TODO FIXME
-syn match   tgComment   /\/\/.*$/         contains=tgTodo
-" Handle correctly imbricated comment
-syn region  tgComment2 matchgroup=tgComment2  start=+/\*+ end=+\*/+ contains=tgTodo,tgComment2
-
-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 tgKeyword Statement
-  HiLink tgType Type
-  HiLink tgNumber Number
-  HiLink tgComment Comment
-  HiLink tgComment2 Comment
-  HiLink tgString String
-  " May find a better Hilight group...
-  HiLink tgCode Special
-  HiLink tgTodo Todo
-
-  delcommand HiLink
-endif
-
-let b:current_syntax = "tablegen"





More information about the llvm-commits mailing list