diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27cc115 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +## Environment normalisation: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ +.vim-flavor diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..c75617f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: ruby +rvm: + - 2.2.3 +script: + rake ci diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..a87f4e1 --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org' + +gem 'vim-flavor', '~> 1.1' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..4573d1a --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,19 @@ +GEM + remote: https://rubygems.org/ + specs: + blankslate (3.1.3) + parslet (1.7.1) + blankslate (>= 2.0, <= 4.0) + thor (0.19.1) + vim-flavor (1.1.5) + parslet (~> 1.0) + thor (~> 0.14) + +PLATFORMS + ruby + +DEPENDENCIES + vim-flavor (~> 1.1) + +BUNDLED WITH + 1.10.6 diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..63a3a36 --- /dev/null +++ b/Rakefile @@ -0,0 +1,11 @@ +#!/usr/bin/env rake + +task :ci => [:dump, :test] + +task :dump do + sh 'vim --version' +end + +task :test do + sh 'bundle exec vim-flavor test' +end diff --git a/VimFlavor b/VimFlavor new file mode 100644 index 0000000..226f354 --- /dev/null +++ b/VimFlavor @@ -0,0 +1,4 @@ +# Since flavorfile is parsed as a Ruby script, +# you can comment out arbitrary lines like this. + +# flavor '$foo_uri', '~> 1.0' diff --git a/VimFlavor.lock b/VimFlavor.lock new file mode 100644 index 0000000..04a9504 --- /dev/null +++ b/VimFlavor.lock @@ -0,0 +1 @@ +kana/vim-vspec (1.6.1) diff --git a/autoload/requirements.vim b/autoload/requirements.vim new file mode 100644 index 0000000..32055a1 --- /dev/null +++ b/autoload/requirements.vim @@ -0,0 +1,33 @@ +" the Requirements File Format syntax support for Vim +" Version: 0.1 +" Author: raimon +" License: MIT LICENSE + +let s:save_cpo = &cpo +set cpo&vim + +if !exists('g:requirements#detect_filename_pattern') + let g:requirements#detect_filename_pattern = '' +endif + + +function! requirements#matched_filename(filename) + if a:filename =~# '\v.*require(ment)?s\.(txt|in)$' + return 1 + endif + + if a:filename =~# '\vrequire(ment)?s/.*\.(txt|in)$' + return 1 + endif + + if len(g:requirements#detect_filename_pattern) + \ && a:filename =~# g:requirements#detect_filename_pattern + return 1 + endif + + return 0 +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo +" vim: et sw=4 ts=4 sts=4: diff --git a/ftdetect/requirements.vim b/ftdetect/requirements.vim index 9acb8f9..268167b 100644 --- a/ftdetect/requirements.vim +++ b/ftdetect/requirements.vim @@ -6,15 +6,7 @@ function! s:isRequirementsFile() let l:filename = expand("%:p") - if l:filename =~# '\v.*require(ment)?s\.(txt|in)' - return 1 - endif - - if l:filename =~# '\v.require(ment)?s/.*\.(txt|in)' - return 1 - endif - - return 0 + return requirements#matched_filename(l:filename) endfunction au BufNewFile,BufRead *.{txt,in} if s:isRequirementsFile() | set ft=requirements diff --git a/plugin/requirements.vim b/plugin/requirements.vim new file mode 100644 index 0000000..d29e691 --- /dev/null +++ b/plugin/requirements.vim @@ -0,0 +1,16 @@ +" the Requirements File Format syntax support for Vim +" Version: 0.1 +" Author: raimon +" License: MIT LICENSE + +if exists('g:loaded_requirements') + finish +endif +let g:loaded_requirements = 1 + +let s:save_cpo = &cpo +set cpo&vim + +let &cpo = s:save_cpo +unlet s:save_cpo +" vim: et sw=4 ts=4 sts=4: diff --git a/t/test_ftdetect.vim b/t/test_ftdetect.vim new file mode 100644 index 0000000..629e731 --- /dev/null +++ b/t/test_ftdetect.vim @@ -0,0 +1,43 @@ +filetype plugin on +runtime! plugin/requirements.vim + +describe 'enable: requirements#matched_filename()' + it 'to enable file type detection: basic filename' + Expect requirements#matched_filename('requirements.txt') to_be_true + Expect requirements#matched_filename('requires.txt') to_be_true + end + + it 'to enable file type detection: pip-tools filename' + Expect requirements#matched_filename('requirements.in') to_be_true + Expect requirements#matched_filename('requires.in') to_be_true + end + + it 'to enable file type detection: directory structure' + Expect requirements#matched_filename('requirements/dev.txt') to_be_true + Expect requirements#matched_filename('requires/tests.in') to_be_true + end +end + +describe 'disable: requirements#matched_filename()' + it 'to enable file type detection: basic filename' + Expect requirements#matched_filename('requirements.text') to_be_false + end + + it 'to enable file type detection: pip-tools filename' + Expect requirements#matched_filename('requirements.ini') to_be_false + end + + it 'to enable file type detection: directory structure' + Expect requirements#matched_filename('require/dev.txt') to_be_false + end +end + +describe 'g:requirements#detect_filename_pattern' + it 'use g:requirements#detect_filename_pattern' + Expect requirements#matched_filename('freeze.txt') to_be_false + let g:requirements#detect_filename_pattern = 'freeze' + Expect requirements#matched_filename('freeze.txt') to_be_true + end +end + +" vim: et sw=4 ts=4 sts=4: