From bcffacd9a6f8851aa6f49840c36120aed1f29072 Mon Sep 17 00:00:00 2001 From: Chris Morris Date: Fri, 14 Jun 2019 19:18:18 -0400 Subject: [PATCH] add plugin --- my_plugins/vim-vue-syntastic/README.md | 61 +++++++++++++++ .../syntax_checkers/vue/eslint.vim | 78 +++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 my_plugins/vim-vue-syntastic/README.md create mode 100644 my_plugins/vim-vue-syntastic/syntax_checkers/vue/eslint.vim diff --git a/my_plugins/vim-vue-syntastic/README.md b/my_plugins/vim-vue-syntastic/README.md new file mode 100644 index 00000000..8f3f4618 --- /dev/null +++ b/my_plugins/vim-vue-syntastic/README.md @@ -0,0 +1,61 @@ +# vim-vue-syntastic + +### 1\. What? + +Support for vue components linting with syntastic and eslint + +### 2\. Dependencies + +- [Syntastic](https://github.com/scrooloose/syntastic) +- [ESlint](http://eslint.org/) +- [vim-vue](https://github.com/posva/vim-vue) + +### 2.1\. Installing vim-vue-syntastic with Pathogen + +If you already have [Pathogen][1] working then skip [Step 1](#step1) and go to +[Step 2](#step2). + + + +#### 2.1.1\. Step 1: Install pathogen.vim + +First I'll show you how to install Tim Pope's [Pathogen][1] so that it's easy to +install syntastic. Do this in your terminal so that you get the `pathogen.vim` +file and the directories it needs: +```sh +mkdir -p ~/.vim/autoload ~/.vim/bundle && \ +curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim +``` +Next you *need* to add this to your `~/.vimrc`: +```vim +execute pathogen#infect() +``` + + +#### 2.1.3\. Step 2: Install vim-vue-syntastic as a Pathogen bundle and friends + +You now have pathogen installed and can put syntastic into `~/.vim/bundle` like +this: + +```sh +cd ~/.vim/bundle && \ +git clone https://github.com/sekel/vim-vue-syntastic.git +``` +... and the same song and dance for the dependencies + +#### 2.1.3\. Step 3: Optional configuration to make it work with local project eslint + +Stick this in your `~/.vimrc`: + +```vim +let g:syntastic_javascript_checkers = ['eslint'] +let g:syntastic_vue_checkers = ['eslint'] +let local_eslint = finddir('node_modules', '.;') . '/.bin/eslint' +if matchstr(local_eslint, "^\/\\w") == '' + let local_eslint = getcwd() . "/" . local_eslint +endif +if executable(local_eslint) + let g:syntastic_javascript_eslint_exec = local_eslint + let g:syntastic_vue_eslint_exec = local_eslint +endif +``` diff --git a/my_plugins/vim-vue-syntastic/syntax_checkers/vue/eslint.vim b/my_plugins/vim-vue-syntastic/syntax_checkers/vue/eslint.vim new file mode 100644 index 00000000..c225a9ce --- /dev/null +++ b/my_plugins/vim-vue-syntastic/syntax_checkers/vue/eslint.vim @@ -0,0 +1,78 @@ +"============================================================================ +"File: eslint.vim +"Description: Vue syntax checker - using eslint. +"Maintainer: Sebastian Kellgren sebastian at thriver dot io +"License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +"============================================================================ + +if exists('g:loaded_syntastic_vue_eslint_checker') + finish +endif +let g:loaded_syntastic_vue_eslint_checker = 1 + +if !exists('g:syntastic_vue_eslint_sort') + let g:syntastic_vue_eslint_sort = 1 +endif + +if !exists('g:syntastic_vue_eslint_generic') + let g:syntastic_vue_eslint_generic = 0 +endif + +let s:save_cpo = &cpo +set cpo&vim + +function! SyntaxCheckers_vue_eslint_IsAvailable() dict + if g:syntastic_vue_eslint_generic + call self.log('generic eslint, exec =', self.getExec()) + endif + + if !executable(self.getExec()) + return 0 + endif + return g:syntastic_vue_eslint_generic || syntastic#util#versionIsAtLeast(self.getVersion(), [0, 1]) +endfunction + +function! SyntaxCheckers_vue_eslint_GetLocList() dict + if !g:syntastic_vue_eslint_generic + call syntastic#log#deprecationWarn('vue_eslint_conf', 'vue_eslint_args', + \ "'--config ' . syntastic#util#shexpand(OLD_VAR)") + endif + + let makeprg = self.makeprgBuild({ 'args_before': (g:syntastic_vue_eslint_generic ? '' : '-f compact') }) + + let errorformat = + \ '%E%f: line %l\, col %c\, Error - %m,' . + \ '%W%f: line %l\, col %c\, Warning - %m' + + let loclist = SyntasticMake({ + \ 'makeprg': makeprg, + \ 'errorformat': errorformat, + \ 'postprocess': ['guards'] }) + + if !g:syntastic_vue_eslint_generic + if !exists('s:eslint_new') + let s:eslint_new = syntastic#util#versionIsAtLeast(self.getVersion(), [1]) + endif + + if !s:eslint_new + for e in loclist + let e['col'] += 1 + endfor + endif + endif + + return loclist +endfunction + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'vue', + \ 'name': 'eslint'}) + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: set sw=4 sts=4 et fdm=marker: