modemap.vim 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. if exists('g:loaded_syntastic_modemap') || !exists('g:loaded_syntastic_plugin')
  2. finish
  3. endif
  4. let g:loaded_syntastic_modemap = 1
  5. let g:SyntasticModeMap = {}
  6. " Public methods {{{1
  7. function! g:SyntasticModeMap.Instance() abort " {{{2
  8. if !exists('s:SyntasticModeMapInstance')
  9. let s:SyntasticModeMapInstance = copy(self)
  10. call s:SyntasticModeMapInstance.synch()
  11. endif
  12. return s:SyntasticModeMapInstance
  13. endfunction " }}}2
  14. function! g:SyntasticModeMap.synch() abort " {{{2
  15. if exists('g:syntastic_mode_map')
  16. let self._mode = get(g:syntastic_mode_map, 'mode', 'active')
  17. let self._activeFiletypes = copy(get(g:syntastic_mode_map, 'active_filetypes', []))
  18. let self._passiveFiletypes = copy(get(g:syntastic_mode_map, 'passive_filetypes', []))
  19. else
  20. let self._mode = 'active'
  21. let self._activeFiletypes = []
  22. let self._passiveFiletypes = []
  23. endif
  24. endfunction " }}}2
  25. function! g:SyntasticModeMap.allowsAutoChecking(filetype) abort " {{{2
  26. let fts = split(a:filetype, '\m\.')
  27. if self.isPassive()
  28. return self._isOneFiletypeActive(fts)
  29. else
  30. return self._noFiletypesArePassive(fts)
  31. endif
  32. endfunction " }}}2
  33. function! g:SyntasticModeMap.doAutoChecking() abort " {{{2
  34. let local_mode = get(b:, 'syntastic_mode', '')
  35. if local_mode ==# 'active' || local_mode ==# 'passive'
  36. return local_mode ==# 'active'
  37. endif
  38. return self.allowsAutoChecking(&filetype)
  39. endfunction " }}}2
  40. function! g:SyntasticModeMap.isPassive() abort " {{{2
  41. return self._mode ==# 'passive'
  42. endfunction " }}}2
  43. function! g:SyntasticModeMap.toggleMode() abort " {{{2
  44. call self.synch()
  45. if self._mode ==# 'active'
  46. let self._mode = 'passive'
  47. else
  48. let self._mode = 'active'
  49. endif
  50. "XXX Changing a global variable. Tsk, tsk...
  51. if !exists('g:syntastic_mode_map')
  52. let g:syntastic_mode_map = {}
  53. endif
  54. let g:syntastic_mode_map['mode'] = self._mode
  55. endfunction " }}}2
  56. function! g:SyntasticModeMap.echoMode() abort " {{{2
  57. echo 'Syntastic: ' . self._mode . ' mode enabled'
  58. endfunction " }}}2
  59. function! g:SyntasticModeMap.modeInfo(filetypes) abort " {{{2
  60. echomsg 'Syntastic version: ' . g:_SYNTASTIC_VERSION . ' (Vim ' . v:version . ', ' . g:_SYNTASTIC_UNAME . ')'
  61. let type = len(a:filetypes) ? a:filetypes[0] : &filetype
  62. echomsg 'Info for filetype: ' . type
  63. call self.synch()
  64. echomsg 'Global mode: ' . self._mode
  65. if self._mode ==# 'active'
  66. if len(self._passiveFiletypes)
  67. let plural = len(self._passiveFiletypes) != 1 ? 's' : ''
  68. echomsg 'Passive filetype' . plural . ': ' . join(sort(copy(self._passiveFiletypes)))
  69. endif
  70. else
  71. if len(self._activeFiletypes)
  72. let plural = len(self._activeFiletypes) != 1 ? 's' : ''
  73. echomsg 'Active filetype' . plural . ': ' . join(sort(copy(self._activeFiletypes)))
  74. endif
  75. endif
  76. echomsg 'Filetype ' . type . ' is ' . (self.allowsAutoChecking(type) ? 'active' : 'passive')
  77. if !len(a:filetypes)
  78. if exists('b:syntastic_mode') && (b:syntastic_mode ==# 'active' || b:syntastic_mode ==# 'passive')
  79. echomsg 'Local mode: ' . b:syntastic_mode
  80. endif
  81. echomsg 'The current file will ' . (self.doAutoChecking() ? '' : 'not ') . 'be checked automatically'
  82. endif
  83. endfunction " }}}2
  84. " }}}1
  85. " Private methods {{{1
  86. function! g:SyntasticModeMap._isOneFiletypeActive(filetypes) abort " {{{2
  87. return !empty(filter(copy(a:filetypes), 'index(self._activeFiletypes, v:val) != -1'))
  88. endfunction " }}}2
  89. function! g:SyntasticModeMap._noFiletypesArePassive(filetypes) abort " {{{2
  90. return empty(filter(copy(a:filetypes), 'index(self._passiveFiletypes, v:val) != -1'))
  91. endfunction " }}}2
  92. " }}}1
  93. " vim: set sw=4 sts=4 et fdm=marker: