Split vim projects into separate repos.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,23 @@
+PLUGIN = specky
+
+SOURCE = syntax/rdoc.vim
+SOURCE += syntax/specrun.vim
+SOURCE += syntax/specrun1.vim
+SOURCE += syntax/rspec.vim
+SOURCE += ftdetect/rspec.vim
+SOURCE += ftplugin/rspec.vim
+SOURCE += doc/specky.txt
+SOURCE += plugin/specky.vim
+SOURCE += snippets/rspec.snippets
+SOURCE += ruby/specky_formatter.rb
+
+
+${PLUGIN}.vba: ${SOURCE}
+ - vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
+ gzip ${PLUGIN}.vba
+
+install:
+ rsync -Rv ${SOURCE} ${HOME}/.vim/
+
+clean:
+ rm ${PLUGIN}.vba.gz
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,5 @@
+let g:vimball_home="."
+e Makefile
+v/^SOURCE/d
+%s/^SOURCE\s\++\?=\s\+//
+execute '%MkVimball!' . g:plugin_name
--- a/colorschemes/deveiate.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-"
-" Vim color theme: DevEiate
-"
-" Gvim color definition file, based loosely on Michael Granger's
-" eye-pleasing theme for Textmate of the same name.
-" Mahlon E. Smith <mahlon@martini.nu>
-" Michael Granger <ged@faeriemud.org>
-"
-" Drop this into your ~/.vim/colors directory, then load it via
-" :colorscheme deveiate
-"
-" $Id$
-
-
-" ----------------------------------------
-" Color definition reference
-" ----------------------------------------
-" :help group-name
-" :help highlight-groups
-" :help cterm-colors
-
-set background=dark
-highlight clear
-let g:colors_name="deveiate"
-
-" ----------------------------------------
-" highlight groups
-" ----------------------------------------
-highlight Normal guifg=#f6dfb2 guibg=#00000f
-highlight LineNr guifg=#333333
-highlight Cursor guibg=yellow guifg=NONE
-highlight CursorLine guibg=#171520
-highlight Search guibg=#001632 guifg=NONE
-highlight Visual guibg=#001632 guifg=NONE
-highlight VisualNOS guibg=#001632 guifg=NONE
-highlight Question guifg=yellow
-highlight StatusLine guibg=#d4d2cb guifg=#292087
-highlight StatusLineNC guibg=#8372be guifg=#22115c
-highlight TabLine guibg=black guifg=#333333
-highlight TabLineSel guibg=#333333 guifg=#f8f8f8
-highlight TabLineFill guifg=black
-highlight WildMenu guifg=yellow guibg=#22115c
-highlight Pmenu guibg=black guifg=#da8d53
-highlight PmenuSel guibg=black guifg=#76a3d7
-highlight PmenuSbar guibg=black
-highlight PmenuThumb guibg=black guifg=#333333
-highlight Folded guifg=#8b98ab guibg=black
-highlight FoldColumn guifg=#8b98ab guibg=black
-highlight VertSplit guifg=black guibg=#333333
-highlight DiffAdd guifg=#f8f8f8 guibg=#253b22
-highlight DiffChange guifg=#f8f8f8 guibg=#4a410d
-highlight DiffDelete guifg=#f8f8f8 guibg=#420e09
-highlight DiffText guifg=white guibg=#7d6f20
-highlight NonText guifg=#222222
-
-" ----------------------------------------
-" syntax highlighting groups
-" ----------------------------------------
-highlight Comment guifg=#a82419
-highlight Constant guifg=#76a3d7
-highlight Function guifg=#9b859d
-highlight String guifg=#da8d53
-highlight Special guifg=#da8d53
-highlight SpecialKey guifg=#222222
-highlight PreProc gui=bold guifg=#00cbcd
-highlight Identifier guifg=#9bda8b
-highlight Number guifg=#9bda8b
-highlight Float guifg=#9bda8b
-highlight Statement guifg=#00cbcd
-highlight todo guibg=NONE guifg=yellow
-highlight MatchParen guifg=yellow guibg=NONE
-
-
-" ----------------------------------------
-" ruby specific syntax highlighting
-" ----------------------------------------
-highlight rubyConstant guifg=#76a3d7
-highlight rubyInstanceVariable guifg=#c2eaf4
-highlight rubyClassVariable guifg=#c2eaf4
-highlight rubySymbol guifg=#9bda8b
-highlight rubyEscape guifg=#ddf2a4
-highlight rubyInterpolation guifg=#ddf2a4
-highlight rubyClass guifg=#c3adc5
-highlight rubyPseudoVariable guifg=#9bda8b
-highlight rubyOperator guifg=#00cbcd
-
-" ----------------------------------------
-" other misc colors
-" ----------------------------------------
-highlight MyTagListFileName guifg=yellow guibg=NONE
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/specky.txt Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,358 @@
+*specky.txt* Last change: $Id$
+
+ VIM REFERENCE MANUAL by Mahlon E. Smith
+
+
+ specky!
+
+A Plugin for testing Ruby code with RSpec -- and more *specky*
+==============================================================================
+CONTENTS *SpeckyContents*
+
+ 1) Intro........................................|SpeckyIntro|
+ 2) Functionality................................|SpeckyFunctionality|
+ 3) Enabling Specky..............................|SpeckyInstallation|
+ 4) Configuration................................|SpeckyOptions|
+ 4.1) Create text banners....................|g:speckyBannerKey|
+ 4.2) Cycling quote styles...................|g:speckyQuoteSwitcherKey|
+ 4.3) Display ruby documentation.............|g:speckyRunRdocKey|
+ 4.4) Toggle editing between spec and code...|g:speckySpecSwitcherKey|
+ 4.5) Run specs for the current buffer.......|g:speckyRunSpecKey|
+ 4.6) Modify the default spec command........|g:speckyRunSpecCmd|
+ 4.7) Modify the default rdoc command........|g:speckyRunRdocCmd|
+ 4.8) Alter new window behavior..............|g:speckyWindowType|
+ 4.9) Running older rspec (1.x) .............|g:speckySpecVersion|
+ 5) Author.......................................|SpeckyAuthor|
+ 6) License......................................|SpeckyLicense|
+
+
+
+==============================================================================
+1. INTRO *SpeckyIntro*
+
+Specky is primarily a small collection of functions to help make behavioral
+testing streamlined and easy when working with ruby and rspec. Specky
+supports rspec 2.x by default, and is backwards compatible with rspec 1.x.
+
+Specky secondarily includes a couple of conveniences to make your everyday
+programming tasks smooooth and pleasurable.
+
+
+==============================================================================
+2. FUNCTIONALITY *SpeckyFunctionality*
+
+Okay then, what does it do?
+
+By default? Nothing but syntax highlighting unless you are comfortable using
+the menus. I decided the easiest way to cherry pick the functionality that
+you'd like was to enable them via key bindings. By doing this, Specky won't
+make assumptions about your current environment, and won't stomp on anything
+you don't want it to.
+
+ Specky won't do -anything- with your environment until you enable ~
+ the key bindings!! ~
+
+After you've configured your bindings, here are some of the things you can
+now do with a single key stroke:
+>
+ - Switch back and forth from code to testing spec
+
+ - Run the spec, with results going to a new, syntax highlighted buffer
+
+ - Jump quickly to spec failures and failure detail
+ - 'e' and 'r' to move back and forth on each failed assertion,
+ - 'E' to jump details for it.
+ - '<C-e>' to "forget" the currently selected failed assertion
+ - 'q' to close the spec output buffer.
+
+ - View rdoc of the word under the cursor
+
+ - Dynamically switch string types for the word under the cursor
+ (double quoted, quoted, symbol)
+
+ - Make lovely and quick comment banners for ruby code.
+
+Specky also includes a "snippets" file that can be used with the Snipmate
+plugin by Michael Sanders <msanders42+vim@gmail.com>. (Minimum version 0.74.)
+
+ http://www.vim.org/scripts/script.php?script_id=2540
+
+==============================================================================
+3. ENABLING-SPECKY *SpeckyInstallation*
+
+Getting Specky to work should be a fairly trivial process. Specky now
+uses a custom rspec formatter to function reliably, and it needs to know
+where that lives on your system.
+
+If you installed Specky from Vimball, it is likely found at:
+
+ ~/.vim/ruby/specky_formatter.rb ~
+
+Otherwise, you'll need to locate it, and tell rspec to use it in one of two
+ways.
+
+ 1) Set the 'g:speckyRunSpecCmd' variable explicitly:
+
+ let g:speckyRunSpecCmd = "rspec -r ~/.vim/ruby/specky_formatter.rb -f SpeckyFormatter" ~
+
+ 2) or, leave 'g:speckyRunSpecCmd' at its default value, and instead use
+ an '.rspec' settings file in the root directory of the the project
+ you're working in. I find this method much more flexible -- the
+ '.rspec' file can be carried with your project, and customized to
+ include additional bits like custom $LOAD_PATH injections, etc.
+ Here's what mine usually looks like: >
+
+ -r loadpath
+ -r ~/.vim/bundle/specky/ruby/specky_formatter
+ -f SpeckyFormatter
+
+ You can also use both of these methods, and use the
+ 'SpeckyConsoleFormatter' class from your .rspec file, if it suits
+ your fancy.
+
+
+After that is taken care of, then just set up your keybindings in your
+.vimrc. Here's what my config looks like. >
+
+ let g:speckyBannerKey = "<C-S>b"
+ let g:speckyQuoteSwitcherKey = "<C-S>'"
+ let g:speckyRunRdocKey = "<C-S>r"
+ let g:speckySpecSwitcherKey = "<C-S>x"
+ let g:speckyRunSpecKey = "<C-S>s"
+ let g:speckyRunRdocCmd = "fri -L -f plain"
+ let g:speckyWindowType = 2
+
+With these bindings, all Specky commands start with <ctrl-s> ("s" for
+Specky!), followed by a mnemonic function to run:
+
+ b ----> Banner creation ~
+ ' ----> Quote cycling ~
+ r ----> run Rdoc ~
+ x ----> code and spec eXchange ~
+ s ----> run rSpec ~
+
+Of course, <ctrl-s> is a "suspend" signal for most terminals, so these
+bindings are meant for a |gui| environment, such as gvim. Your mileage (and
+tastes) will doubtlessly vary. Do what you will. I won't judge you.
+
+
+==============================================================================
+4. CONFIGURATION-OPTIONS *SpeckyOptions*
+
+Here are all of the available configuration options.
+
+Please note that you must set binding variables:
+
+ |g:speckyBannerKey|
+ |g:speckyQuoteSwitcherKey|
+ |g:speckyRunRdocKey|
+ |g:speckySpecSwitcherKey|
+ |g:speckyRunSpecKey|
+
+...in order to enable the respective Specky functionality. See
+|SpeckyInstallation| for details. Any other options are entirely optional.
+Put these into your |vimrc|, or wherever else you enjoy storing this kind of
+stuff.
+
+
+------------------------------------------------------------------------------
+4.1 *g:speckyBannerKey*
+
+Setting this binding enables comment banner creation.
+
+This is purely a convenience routine, and a stylistic one at that. I prefer
+large advertising of what "area" of code you are in, along with other
+miscellaneous labels for humans to read. If this isn't how you roll, then by
+all means, don't enable this binding! :)
+
+As an example -- you can just type:
+
+ instance methods ~
+
+Then hit the keystroke. It will magically turn into: >
+
+ ########################################################################
+ ### I N S T A N C E M E T H O D S
+ ########################################################################
+
+With all those saved extra keystrokes this might provide you per banner over
+the years, your RSI-free hands will thank you. And the total time savings!!
+Oh man, what are you going to DO with all of that extra free time?
+The possibilities are staggering.
+
+
+------------------------------------------------------------------------------
+4.2 *g:speckyQuoteSwitcherKey*
+
+Setting this binding enables quote "style switching".
+
+If you aren't in ruby mode, this just changes the word under the cursor
+back and forth from double quoting to single quoting.
+
+ string -> "string" -> 'string' -> "string" ... ~
+
+In ruby mode, symbols are also put into the rotation.
+
+ "string" -> 'string' -> :string -> "string" ... ~
+
+Note that quote cycling only works with a |word|.
+
+
+------------------------------------------------------------------------------
+4.3 *g:speckyRunRdocKey*
+
+Setting this enables the display of rdoc documentation for the current
+word under the cursor. For lookups with multiple matches, you can continue
+using this binding to "drill down" to the desired documentation.
+
+
+------------------------------------------------------------------------------
+4.4 *g:speckySpecSwitcherKey*
+
+Setting this enables spec to code switching, and visa versa.
+
+Switching uses path searching instead of reliance on directory structure in
+your project. The idea here is that you'd |:chdir| into your project
+directory. Spec files just need to end in '_spec.rb', which is a common
+convention.
+
+ aRubyClass.rb ---> aRubyClass_spec.rb~
+
+Because it leaves respective buffers open, you can essentially think of this
+as a quick toggle between code and tests.
+
+
+------------------------------------------------------------------------------
+4.5 *g:speckyRunSpecKey*
+
+Setting this variable runs "rspec" on the current buffer.
+
+All output is sent to a syntax highlighted scratch buffer. This new window is
+re-used for each spec run. You can quickly "jump" to assertion failures and
+their associated details with the following keys:
+
+ e and r ~
+ Move forward and backward through the failed assertions.
+
+ E~
+ While on a failure line, jump to the details of the failure.
+
+ <C-e> ~
+ "Forget" the last found failed assertion, and start over at the
+ beginning of the list. (ie, the next 'e' keystroke will select
+ error #1.)
+
+ q ~
+ Closes the spec output buffer.
+
+
+Normally, you'd only want to perform this keystroke while in a spec file
+buffer. If Specky thinks you are in code, rather than a buffer (as indicated
+by the lack of a "_spec.rb" file naming convention) then it will attempt to
+switch to the spec before running the command.
+
+
+------------------------------------------------------------------------------
+4.6 *g:speckyRunSpecCmd*
+
+This is the program, with flags, that the current file is sent to when
+executing the |g:speckyRunSpecKey| keybinding.
+
+A common addition is to include an "-r" flag for sucking in local libraries
+necessary for testing your project. In fact, this is required to use the
+rspec formatter supplied by Specky. See |SpeckyInstallation| for more info.
+
+ Default: ~
+ rspec
+
+
+------------------------------------------------------------------------------
+4.7 *g:speckyRunRdocCmd*
+
+If you prefer an rdoc display program other than "ri", you can set it
+with this variable. "fri -L -f plain" is always a nice choice, for example.
+
+ Default: ~
+ ri
+
+
+------------------------------------------------------------------------------
+4.8 *g:speckyWindowType*
+
+For both spec and rdoc commands, this variable controls the behavior of the
+newly generated window.
+
+ Default: ~
+ 0
+
+ 0 ~
+ Create a new tabbed window
+ 1 ~
+ Split the current window horizontally
+ 2 ~
+ Split the current window vertically
+
+
+------------------------------------------------------------------------------
+4.9 *g:speckySpecVersion*
+
+Specky should work out of the box with rspec 2.x. If you'd like to use rspec
+1.x instead, you can do so with the following Vim settings: >
+
+ let g:speckySpecVersion = 1
+ let g:speckyRunRdocCmd = "spec -fs"
+
+If you have both rspec 1.x and 2.x installed at the same time, you need to
+be explicit with what version you are executing: >
+
+ let g:speckyRunRdocCmd = "spec _1.3.0_ -fs"
+
+
+==============================================================================
+5. AUTHOR *SpeckyAuthor*
+
+
+Specky was written by Mahlon E. Smith.
+
+ mahlon@martini.nu ~
+ http://www.martini.nu/
+
+
+
+==============================================================================
+6. LICENSE *SpeckyLicense*
+
+
+Specky is distributed under the BSD license.
+ http://www.opensource.org/licenses/bsd-license.php
+>
+ Copyright (c) 2008-2010, Mahlon E. Smith <mahlon@martini.nu>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+vim: set noet nosta sw=4 ts=4 ft=help :
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ftdetect/rspec.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,1 @@
+au BufRead,BufNewFile *_spec.rb set filetype=rspec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ftplugin/rspec.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,7 @@
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behave just like Ruby
+runtime! ftplugin/ruby.vim
+
--- a/glimpse/Makefile Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-PLUGIN = glimpse
-
-SOURCE = doc/glimpse.txt
-SOURCE += plugin/glimpse.vim
-
-${PLUGIN}.vba: ${SOURCE}
- - vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
- gzip ${PLUGIN}.vba
-
-install:
- rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
- rm ${PLUGIN}.vba.gz
--- a/glimpse/build.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-v/^SOURCE/d
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/glimpse/doc/glimpse.txt Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-*glimpse.txt* Last change: $Id$
-
- VIM REFERENCE MANUAL by Mahlon E. Smith
-
-
- VimGlimpse
-
-A basic Glimpse interface for Vim *glimpse*
-==============================================================================
-CONTENTS *GlimpseContents*
-
-
- 1) Intro........................................|GlimpseIntro|
- 2) Functionality................................|GlimpseFunctionality|
- 3) Adjusting Behavior...........................|GlimpseVimrcExample|
- 4) Configuration................................|GlimpseOptions|
- 4.1) Glimpse keybinding.....................|g:glimpseKey|
- 4.2) GlimpseIndex keybinding................|g:glimpseindexKey|
- 4.3) Changing the results window size.......|g:glimpseWindowResultSize|
- 4.4) Altering default flags to glimpse......|g:glimpseFlags|
- 4.5) Altering flags to glimpseindex.........|g:glimpseindexFlags|
- 5) Author.......................................|GlimpseAuthor|
- 6) License......................................|GlimpseLicense|
-
-
-==============================================================================
-1. INTRO *GlimpseIntro*
-
-Glimpse is a powerful indexing and query system, free for personal use.
- http://www.webglimpse.net
-
-VimGlimpse is a basic Glimpse interface within Vim, based on a Vim Tip from
-Jean-Rene David.
- http://vim.wikia.com/wiki/Use_glimpse_from_within_Vim
-
-VimGlimpse retains normal Vim |:grep| functionality, and provides
-additional Glimpse features outside of what |grepprg| can allow. By
-default, VimGlimpse only searches within your current working directory,
-making it ideal for near instantaneous searches across a project.
-
-
-==============================================================================
-2. FUNCTIONALITY *GlimpseFunctionality*
-
-Glimpse installs two new global commands, *Glimpse* and *GlimpseIndex* .
-
-
-SEARCHING ~
-------------------------------------------------------------------------------
-
-If you set the |g:glimpseKey|variable to something, you can search for
-the word under the cursor with a keystroke. Otherwise, just execute the
-|:Glimpse| command. Here are some examples (shamelessly stolen from the
-glimpse man page):
-
- :Glimpse needle haystack.h$~
-
- Finds all needles in all haystack.h's files.
-
- :let g:glimpseFlags = "-iny -2" ~
- :Glimpse Anestesiology html ~
-
- Outputs all occurrences of Anestesiology with two errors in
- files with html somewhere in their full name.
-
- :Glimpse windsurfing;Arizona mail;1993 ~
-
- Finds all lines containing windsurfing and Arizona in all files
- having `mail' and '1993' somewhere in their full name.
-
-Results are placed into the |quickfix| window. Additionally, the 'q' key is
-bound to the window so you can close it again quickly.
-
-
-INDEXING ~
-------------------------------------------------------------------------------
-
-If you set the |g:glimpseindexKey|variable to something, you can reindex
-your current working directory with a keystroke. Otherwise, just
-you can just manually execute the |:GlimpseIndex| command.
-
-Results from an index are placed into the location window. You can view them
-via |:lopen|.
-
-If you are reindexing a large directory, this could take a few moments.
-The defaults are to produce an incremental merge -- so it should be
-fairly fast, but it's a good idea to ensure your indexes exist prior to
-running this command.
-
-If you've just installed glimpse, a great way to start playing with it
-immediately is to let it index your entire home directory (from the shell):
-
- % glimpseindex -M 10 -B -o ~ ~
-
-If you've deleted a lot of files, re-running this command will free up space
-in your indexes. I just run it nightly from cron.
-
-
-==============================================================================
-3. ADJUSTING-BEHAVIOR *GlimpseVimrcExample*
-
-
-Here's what my config looks like. >
-
- let g:glimpseFlags = "-winy1"
- let g:glimpseKey = "<Leader>g"
- let g:glimpseindexKey = "<Leader>G"
-
-
-With these settings, I can find the full word under the cursor with
-<Leader>g, in a case insensitive 1 character fuzzy match search.
-
-With <Leader>G, I can quickly re-index my current working directory, so
-changes to my files are reflected in search results.
-
-
-==============================================================================
-4. CONFIGURATION-OPTIONS *GlimpseOptions*
-
-Here are all of the available configuration options.
-
-------------------------------------------------------------------------------
-4.1 *g:glimpseKey*
-
-Setting this binding enables immediate searching for the |word| that is
-currently under the cursor. There is no default. >
-
- let g:glimpseKey = "<Leader>g"
-
-------------------------------------------------------------------------------
-4.2 *g:glimpseindexKey*
-
-
-Setting this enables reindexing with a keystroke, rather than running the
-|GlimpseIndex| command manually. There is no default. >
-
- let g:glimpseindexKey = "<Leader>G"
-
-------------------------------------------------------------------------------
-4.3 *g:glimpseWindowResultSize*
-
-Change the height of the results window. The default is 15 lines. >
-
- let g:glimpseWindowResultSize = 15
-
-------------------------------------------------------------------------------
-4.4 *g:glimpseFlags*
-
-Alter the command line flags used when executing glimpse. If you alter
-this, you should retain the '-n' flag, as the |quickfix| window relies
-on that for line positioning. The default is: >
-
- let g:glimpseFlags = "-iny"
-
-See the glimpse man page for all available options. (I find -w, -i, and
--# to be the most immediately useful.)
-
-------------------------------------------------------------------------------
-4.5 *g:glimpseindexFlags*
-
-Alter the command line flags used when executing glimpseindex.
-The default is: >
-
- let g:glimpseindexFlags = '-M 10 -B -o'
-
-The '-f' flag with the current working directory is always appended to this
-flag list.
-
-==============================================================================
-5. AUTHOR *GlimpseAuthor*
-
-
-VimGlimpse was written by Mahlon E. Smith.
-
- mahlon@martini.nu ~
- http://www.martini.nu/
-
-
-
-==============================================================================
-6. LICENSE *GlimpseLicense*
-
-
-This Glimpse VIM plugin is distributed under the BSD license.
- http://www.opensource.org/licenses/bsd-license.php
-
->
- Copyright (c) 2009, Mahlon E. Smith <mahlon@martini.nu>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
-
--- a/glimpse/plugin/glimpse.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" A basic Glimpse interface for Vim
-"
-" Based on a Vim Tip from Jean-Rene David.
-" http://vim.wikia.com/wiki/Use_glimpse_from_within_Vim
-"
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-" Here's a bash function that's nice too!
-" function g() { command glimpse -winO -F `pwd` $1 | sed 's|^`pwd`/||'; }
-"
-" And a tcsh alias, while we're at it!
-" alias g 'glimpse -winO -F `pwd` \!:1 | sed -e "s|^`pwd`/||"'
-"
-
-" Loaded check {{{
-if exists( 'g:glimpse_loaded' )
- finish
-endif
-let g:glimpse_loaded = '$Rev$'
-
-" }}}
-" Hook up the functions to the user supplied key bindings. {{{
-"
-if exists( 'g:glimpseKey' )
- execute 'map ' . g:glimpseKey . ' :call <SID>Glimpse()<CR>'
-endif
-
-if exists( 'g:glimpseindexKey' )
- execute 'map ' . g:glimpseindexKey . ' :call <SID>GlimpseIndex()<CR>'
-endif
-
-" }}}
-" Defaults for misc settings {{{
-"
-if !exists( 'g:glimpseWindowResultSize' )
- let g:glimpseWindowResultSize = 15
-endif
-
-if !exists( 'g:glimpseFlags' )
- let g:glimpseFlags = "-iny"
-endif
-
-if !exists( 'g:glimpseindexFlags' )
- let g:glimpseindexFlags = '-M 10 -B -o'
-endif
-
-if !exists( 'g:glimpseErrorFormat' )
- let g:glimpseErrorFormat = '%f: %l: %m'
-endif
-
-
-"}}}
-" Commands {{{
-"
-command! -nargs=* Glimpse :call <SID>Glimpse( <f-args> )
-command! GlimpseIndex :call <SID>GlimpseIndex()
-
-
-"}}}
-" Glimpse( search_pattern, file_pattern ) {{{
-"
-" Run a glimpse search using a pattern from +search_pattern+ and an optional
-" +file_pattern+ to limit the breadth of the search. Places results into the
-" quickfix window.
-"
-function! <SID>Glimpse( ... )
-
- " parse command line opts
- "
- let l:search_pattern = expand("<cword>")
- let l:file_pattern = ''
- if exists( 'a:1' )
- let l:search_pattern = a:1
- endif
- if exists( 'a:2' )
- let l:file_pattern = a:2
- endif
-
- " everything is based on the cwd so results are relevant to the
- " current project.
- "
- let l:cwd = getcwd()
-
- " save the original error format, we want to play nice with others.
- "
- let l:orig_errorformat = &errorformat
- execute 'set errorformat=' . escape( g:glimpseErrorFormat, ' ' )
-
- " execute the search.
- "
- let l:cmd = "glimpse " . g:glimpseFlags . " -F '" . l:cwd
- if ( l:file_pattern != '' )
- let l:cmd = l:cmd . ";" . l:file_pattern
- endif
- let l:cmd = l:cmd . "' '" . l:search_pattern . "'"
-
- let l:result_list = split( system( l:cmd ), "\n" )
-
- " no results, escape now
- "
- if ( empty(l:result_list) )
- let l:no_match_msg = "No matches for '" . l:search_pattern . "'"
- if ( l:file_pattern != '' )
- let l:no_match_msg = l:no_match_msg . " in files matching '" . l:file_pattern . "'"
- endif
- call s:err( l:no_match_msg )
- execute 'set errorformat=' . escape( l:orig_errorformat, ' ' )
- return
- endif
-
- " populate the quickfix window.
- "
- let l:results = ''
- for l:result in l:result_list
- " 'pretty up' the glimpse output.
- let l:result = substitute( l:result, ('^' . l:cwd . '/'), '', '' )
- let l:result = substitute( l:result, '\(: \d\+:\)\s\+', '\=submatch(1) . " "', '' )
-
- let l:results = l:results . l:result . "\n"
- endfor
- cgetexpr( l:results )
- execute ':copen' . g:glimpseWindowResultSize
-
- " quick close
- nnoremap <silent> <buffer> q :ccl<CR>
-
- " reset error format to the original
- execute 'set errorformat=' . escape( l:orig_errorformat, ' ' )
-endfunction
-
-
-" }}}
-" GlimpseReindex() {{{
-"
-" Update local indexes for the current working directory.
-" Results of the index are placed into the location list. (:lopen to view.)
-"
-function! <SID>GlimpseIndex()
- let l:cmd = 'glimpseindex ' . g:glimpseindexFlags . ' -f .'
- let l:cwd = getcwd()
- let $LC_ALL = 'C'
- let l:index_output = system(l:cmd)
- let l:index_exit = v:shell_error
- call s:err( "Updated indexes for '" . l:cwd . "'" )
- if l:index_exit != 0
- call s:err( "Uh oh, " . l:cmd . " exited with " . l:index_exit. "! Output follows:" )
- call s:err( l:index_output )
- endif
-endfunction
-
-
-" }}}
-" s:err( msg ) {{{
-"
-" Notify user in a consistent fashion.
-"
-function! s:err( msg )
- echohl WarningMsg|echomsg 'glimpse: ' . a:msg|echohl None
-endfunction " }}}
-
--- a/hgrev/Makefile Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-PLUGIN = hgrev
-
-SOURCE = plugin/hgrev.vim
-SOURCE += doc/hgrev.txt
-
-${PLUGIN}.vba: ${SOURCE}
- - vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
- gzip ${PLUGIN}.vba
-
-install:
- rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
- rm ${PLUGIN}.vba.gz
--- a/hgrev/build.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-%!grep ^SOURCE
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/hgrev/doc/hgrev.txt Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-*hgrev.txt* Last change: $Id$
-
- VIM REFERENCE MANUAL by Mahlon E. Smith
-
-
- HGRev
-
-A simple plugin for showing the current buffer's HG revision *HGRev*
-==============================================================================
-CONTENTS *HGRevContents*
-
-
- 1) Intro........................................|HGRevIntro|
- 2) Configuration................................|HGRevOptions|
- 2.1) Altering revision info shown...........|g:hgrevFlags|
- 2.2) Appending file status info.............|g:hgrevAddStatus|
- 2.3) Automatically updating status..........|g:hgrevAutoUpdate|
- 2.4) Changing non-repo buffer behavior......|g:hgrevNoRepoChar|
- 3) Author.......................................|HGRevAuthor|
- 4) License......................................|HGRevLicense|
-
-
-
-==============================================================================
-1. INTRO *HGRevIntro*
-
-HGRev is a small plugin that can find the current buffer's revision ID from a
-Mercurial repository. For more information on Mercurial, see:
-
- http://mercurial.selenic.com/
-
-It is intended for use in the |statusline|- here's an example to enable it:
-
- set statusline=[r%{HGRev()}] ~
-
-HGRev exports the 'HGRev()' function (for use in the statusline), and a
-command called
->
- :RefreshMercurialRev
-
-Which you can use to manually update the revision information for the current
-buffer. If you've added HGRev() to your statusline, you'll see the file
-revision, branch, tags, and file status reflected -- if you used the
-statusline example above, you should see something like this:
-
- [r192+ default tip M] ~
-
-The information displayed can be easily customized, and HGRev can also
-automatically update the status line on file changes. (This behavior is
-disabled by default.)
-
-
-==============================================================================
-2. CONFIGURATION-OPTIONS *HGRevOptions*
-
-Here are the available configuration options and their defaults:
->
- let g:hgrevFlags = '-nbt'
- let g:hgrevAddStatus = 1
- let g:hgrevAutoUpdate = 0
- let g:hgrevNoRepoChar = '-'
-
-
-------------------------------------------------------------------------------
-2.1 *g:hgrevFlags*
-
-These are the flags passed directly to 'hg id'. The flags "-nbt" are passed
-by default, which show a local rev id, branch, and tags.
-
-If you wanted to show the global rev hash (and nothing else) as an example,
-you can set this to:
->
- let g:hgrevFlags = '-i'
-
-
-------------------------------------------------------------------------------
-2.2 *g:hgrevAddStatus*
-
-This settings will append the current file status to the output, by running
-'hg stat'. I find it useful, so it is enabled by default -- you can disable
-it like so:
->
- let g:hgrevAddStatus = 0
->
-
-------------------------------------------------------------------------------
-2.3 *g:hgrevAutoUpdate*
->
-When this option is enabled, some |autocmd-events| are added that
-automatically call :RefreshMercurialRev on file changes -- when a buffer is
-read, written to, or modified outside of Vim. This is disabled by default, as
-the additional time needed (however small) to system() to hg for every
-read/write outweighs running :RefreshMercurialRev manually for my tastes.
-Yours tastes, of course, may vary, so you can enable it like so:
->
- let g:hgrevAutoUpdate = 1
-
-Alternatively, you can leave it disabled, and add your own |autocmd| events
-for :RefreshMercurialRev to what works best for you.
-
-
-------------------------------------------------------------------------------
-2.4 *g:hgrevNoRepoChar*
->
-If the current buffer doesn't seem to be a member of a Mercurial repository,
-HGRev() returns this character instead of a revision ID.
-
-Some examples:
->
- let g:hgrevNoRepoChar = '-' (default)
- set statusline=[r%{HGRev()}]
-
-This will output something like '[r12+ default tip M]' for repo files,
-and '[r-]' for non-repo.
->
- let g:hgrevNoRepoChar = ''
- set statusline=%{HGRev()?'[r'.HGRev().']':''}
-
-This will output something like '[r512 default tip]' for repo files, and
-nothing at all for non-repo.
-
-
-==============================================================================
-3. AUTHOR *HGRevAuthor*
-
-HGRev was written by Mahlon E. Smith.
-
- mahlon@martini.nu ~
- http://www.martini.nu/
-
-
-
-==============================================================================
-4. LICENSE *HGRevLicense*
-
-HGRev is distributed under the BSD license.
- http://www.opensource.org/licenses/bsd-license.php
->
- Copyright (c) 2010-2012, Mahlon E. Smith <mahlon@martini.nu>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
--- a/hgrev/plugin/hgrev.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" HGRev
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-" Simplistic file revision checker, meant for adding current revision
-" information to the statusbar, a la:
-"
-" set statusline=[r%{HGRev()}]
-"
-
-if exists( 'hgrev_loaded' )
- finish
-endif
-let hgrev_loaded = '$Rev$'
-
-" }}}
-" Defaults for misc settings {{{
-"
-if !exists( 'g:hgrevFlags' )
- let g:hgrevFlags = '-nbt'
-endif
-
-if !exists( 'g:hgrevAddStatus' )
- let g:hgrevAddStatus = 1
-endif
-
-if !exists( 'g:hgrevAutoUpdate' )
- let g:hgrevAutoUpdate = 0
-endif
-
-if !exists( 'g:hgrevNoRepoChar' )
- let g:hgrevNoRepoChar = '-'
-endif
-
-
-
-"}}}
-" Commands {{{
-"
-command! RefreshMercurialRev :call <SID>RefreshMercurialRev()
-
-
-" HGRev() {{{
-" Return the current buffer rev id from the global dictionary.
-"
-function! HGRev()
- if exists( 'g:hg_revs' )
- let l:key = getcwd() . '/' . bufname('%')
- return has_key(g:hg_revs, l:key) ? g:hg_revs[l:key] : g:hgrevNoRepoChar
- else
- call <SID>RefreshMercurialRev()
- call HGRev()
- endif
-endfunction
-
-
-" }}}
-" RefreshMercurialRev() {{{
-"
-" Locate the hgroot and fetch the current rev id, populating the global
-" dictionary.
-"
-function! <SID>RefreshMercurialRev()
- if ! exists( 'g:hg_revs' )
- let g:hg_revs = {}
- endif
-
- " Find the closest HG root for the buffer. 'hg root' won't do it, since
- " it works off the cwd, and we need the nearest root from the filename.
- "
-
- " (we're unlikely to get lucky finding '.hg' in http:// or similar)
- "
- if matchstr(bufname('%'), "^[^:/]\\+://") != ''
- return
- endif
-
- let l:searchpaths = split( expand('%:p:h'), '/' )
- let l:dircount = len(l:searchpaths)
- let l:root = ''
- while l:dircount > 0
- let l:root = '/' . join( l:searchpaths[0 : l:dircount], '/' )
- if isdirectory( l:root . '/' . '.hg' )
- break
- endif
- let l:dircount = l:dircount - 1
- endwhile
-
- if l:dircount == -1
- return
- endif
-
- let l:key = getcwd() . '/' . bufname('%')
-
- " Find the rev for the repo containing the current file buffer.
- "
- let l:cmd = 'hg id ' . g:hgrevFlags . ' ' . l:root
- let l:rev = system( l:cmd )
- let l:hg_exit = v:shell_error
-
- if l:hg_exit == 0
- let l:rev = substitute( l:rev, '\n', '', 'g' )
- let g:hg_revs[ l:key ] = l:rev
- endif
-
- " Add file repo status.
- "
- if g:hgrevAddStatus == 1
- let l:cmd = 'hg stat ' . bufname('%')
- let l:stat = system( l:cmd )
- let l:hg_exit = v:shell_error
-
- if l:hg_exit == 0 && len(l:stat) > 0
- let l:stat = split( l:stat, '\s\+' )[0]
- let g:hg_revs[ l:key ] = g:hg_revs[ l:key ] . ' ' . l:stat
- endif
- endif
-
- return
-endfunction
-"}}}
-
-
-" Refresh the rev for the current buffer on reads/writes.
-"
-if g:hgrevAutoUpdate == 1
- autocmd BufReadPost * call <SID>RefreshMercurialRev()
- autocmd BufWritePost * call <SID>RefreshMercurialRev()
- autocmd FileChangedShellPost * call <SID>RefreshMercurialRev()
-endif
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugin/specky.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,370 @@
+" vim: set noet nosta sw=4 ts=4 fdm=marker :
+"
+" Specky!
+" Mahlon E. Smith <mahlon@martini.nu>
+" $Id$
+"
+
+
+" Hook up the functions to the user supplied key bindings. {{{
+"
+if exists( 'g:speckySpecSwitcherKey' )
+ execute 'map ' . g:speckySpecSwitcherKey . ' :call <SID>SpecSwitcher()<CR>'
+" map &g:speckySpecSwitcherKey <SID>SpecSwitcher()
+endif
+
+if exists( 'g:speckyQuoteSwitcherKey' )
+ execute 'map ' . g:speckyQuoteSwitcherKey . ' :call <SID>QuoteSwitcher()<CR>'
+endif
+
+if exists( 'g:speckyBannerKey' )
+ execute 'map ' . g:speckyBannerKey . ' :call <SID>MakeBanner()<CR>'
+endif
+
+if exists( 'g:speckyRunSpecKey' )
+ execute 'map ' . g:speckyRunSpecKey . ' :call <SID>RunSpec()<CR>'
+endif
+
+if exists( 'g:speckyRunRdocKey' )
+ execute 'map ' . g:speckyRunRdocKey . ' :call <SID>RunRdoc()<CR>'
+endif
+
+if exists( 'specky_loaded' )
+ finish
+endif
+let specky_loaded = '$Rev$'
+
+
+"}}}
+" Menu configuration {{{
+"
+let s:menuloc = '&Plugin.&specky'
+execute 'menu ' . s:menuloc . '.&Jump\ to\ code/spec :call <SID>SpecSwitcher()<CR>'
+execute 'menu ' . s:menuloc . '.Run\ &spec :call <SID>RunSpec()<CR>'
+execute 'menu ' . s:menuloc . '.&RDoc\ lookup :call <SID>RunRdoc()<CR>'
+execute 'menu ' . s:menuloc . '.Rotate\ "e\ style :call <SID>QuoteSwitcher()<CR>'
+execute 'menu ' . s:menuloc . '.Make\ a\ &banner :call <SID>MakeBanner()<CR>'
+
+
+" }}}
+" SpecSwitcher() {{{
+"
+" When in ruby code or an rspec BDD file, try and search recursively through
+" the filesystem (within the current working directory) to find the
+" respectively matching file. (code to spec, spec to code.)
+"
+" This operates under the assumption that you've used chdir() to put vim into
+" the top level directory of your project.
+"
+function! <SID>SpecSwitcher()
+
+ " If we aren't in a ruby or rspec file then we probably don't care
+ " too much about this function.
+ "
+ if &ft != 'ruby' && &ft != 'rspec'
+ call s:err( "Not currently in ruby or rspec mode." )
+ return
+ endif
+
+ " Ensure that we can always search recursively for files to open.
+ "
+ let l:orig_path = &path
+ set path=**
+
+ " Get the current buffer name, and determine if it is a spec file.
+ "
+ " /tmp/something/whatever/rubycode.rb ---> rubycode.rb
+ " A requisite of the specfiles is that they match to the class/code file,
+ " this emulates the eigenclass stuff, but doesn't require the same
+ " directory structures.
+ "
+ " rubycode.rb ---> rubycode_spec.rb
+ "
+ let l:filename = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
+ let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
+
+ if l:is_spec_file
+ let l:other_file = substitute( l:filename, '_spec\.rb$', '\.rb', '' )
+ else
+ let l:other_file = substitute( l:filename, '\.rb$', '_spec\.rb', '' )
+ endif
+
+ let l:bufnum = bufnr( l:other_file )
+ if l:bufnum == -1
+ " The file isn't currently open, so let's search for it.
+ execute 'find ' . l:other_file
+ else
+ " We've already got an open buffer with this file, just go to it.
+ execute 'buffer' . l:bufnum
+ endif
+
+ " Restore the original path.
+ execute 'set path=' . l:orig_path
+endfunction
+
+
+" }}}
+" QuoteSwitcher() {{{
+"
+" Wrap the word under the cursor in quotes. If in ruby mode,
+" cycle between quoting styles and symbols.
+"
+" variable -> "variable" -> 'variable' -> :variable
+"
+function! <SID>QuoteSwitcher()
+ let l:type = strpart( expand("<cWORD>"), 0, 1 )
+ let l:word = expand("<cword>")
+
+ if l:type == '"'
+ " Double quote to single
+ execute ":normal viWc'" . l:word . "'"
+
+ elseif l:type == "'"
+ if &ft == 'ruby' || &ft == 'rspec'
+ " Single quote to symbol
+ execute ':normal viWc:' . l:word
+ else
+ " Single quote to double
+ execute ':normal viWc"' . l:word . '"'
+ end
+
+ else
+ " Whatever to double quote
+ execute ':normal viWc"' . l:word . '"'
+ endif
+
+ " Move the cursor back into the cl:word
+ call cursor( 0, getpos('.')[2] - 1 )
+endfunction
+
+
+" }}}
+" MakeBanner() {{{
+"
+" Create a quick banner from the current line's text.
+"
+function! <SID>MakeBanner()
+ let l:banner_text = toupper(join( split( getline('.'), '\zs' ), ' ' ))
+ let l:banner_text = substitute( l:banner_text, '^\s\+', '', '' )
+ let l:sep = repeat( '#', &textwidth == 0 ? 72 : &textwidth )
+ let l:line = line('.')
+
+ call setline( l:line, l:sep )
+ call append( l:line, [ '### ' . l:banner_text, l:sep ] )
+ execute 'normal 3=='
+ call cursor( l:line + 3, 0 )
+endfunction
+
+
+" }}}
+" RunSpec() {{{
+"
+" Run this function while in a spec file to run the specs within vim.
+"
+function! <SID>RunSpec()
+
+ " If we're in the code instead of the spec, try and switch
+ " before running tests.
+ "
+ let l:filename = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
+ let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
+ if ( ! l:is_spec_file )
+ silent call <SID>SpecSwitcher()
+ endif
+
+ let l:spec = bufname('%')
+ let l:buf = 'specky:specrun'
+ let l:bufnum = bufnr( l:buf )
+ let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
+
+ " Squash the old buffer, if it exists.
+ "
+ if buflisted( l:buf )
+ execute 'bd! ' . l:buf
+ endif
+
+ execute <SID>NewWindowCmd() . l:buf
+ setlocal buftype=nofile bufhidden=delete noswapfile
+ if ( l:specver == 1 )
+ setlocal filetype=specrun1
+ set foldtext='--'.getline(v:foldstart).v:folddashes
+ else
+ setlocal filetype=specrun
+ set foldtext=_formatFoldText()
+ endif
+
+ " Set up some convenient keybindings.
+ "
+ nnoremap <silent> <buffer> q :close<CR>
+ nnoremap <silent> <buffer> e :call <SID>FindSpecError(1)<CR>
+ nnoremap <silent> <buffer> r :call <SID>FindSpecError(-1)<CR>
+ nnoremap <silent> <buffer> E :call <SID>FindSpecError(0)<CR>
+ nnoremap <silent> <buffer> <C-e> :let b:err_line=1<CR>
+
+ " Default cmd for spec
+ "
+ if !exists( 'g:speckyRunSpecCmd' )
+ let g:speckyRunSpecCmd = l:specver == 1 ? 'spec -fs' : 'rspec'
+ endif
+
+ " Call spec and gather up the output
+ "
+ let l:cmd = g:speckyRunSpecCmd . ' ' . l:spec
+ call append( line('$'), 'Output of: ' . l:cmd )
+ call append( line('$'), '' )
+ let l:output = system( l:cmd )
+ call append( line('$'), split( l:output, "\n" ) )
+ normal gg
+
+ " Lockdown the buffer
+ setlocal nomodifiable
+endfunction
+
+
+" }}}
+" RunRdoc() {{{
+"
+" Get documentation for the word under the cursor.
+"
+function! <SID>RunRdoc()
+
+ " If we aren't in a ruby file (specs are ruby-mode too) then we probably
+ " don't care too much about this function.
+ "
+ if ( &ft != 'ruby' && &ft != 'rdoc' && &ft != 'rspec' )
+ call s:err( "Not currently in a rubyish-mode." )
+ return
+ endif
+
+ " Set defaults
+ "
+ if !exists( 'g:speckyRunRdocCmd' )
+ let g:speckyRunRdocCmd = 'ri'
+ endif
+
+ let l:buf = 'specky:rdoc'
+ let l:bufname = bufname('%')
+
+ if ( match( l:bufname, l:buf ) != -1 )
+ " Already in the rdoc buffer. This allows us to lookup
+ " something like Kernel#require.
+ "
+ let l:word = expand('<cWORD>')
+ else
+ " Not in the rdoc buffer. This allows us to lookup
+ " something like 'each' in some_hash.each { ... }
+ "
+ let l:word = expand('<cword>')
+ endif
+
+ " Squash the old buffer, if it exists.
+ "
+ if buflisted( l:buf )
+ execute 'bd! ' . l:buf
+ endif
+
+ " With multiple matches, strip the commas from the cWORD.
+ let l:word = substitute( l:word, ',', '', 'eg' )
+
+ execute <SID>NewWindowCmd() . l:buf
+ setlocal buftype=nofile bufhidden=delete noswapfile filetype=rdoc
+ nnoremap <silent> <buffer> q :close<CR>
+
+ " Call the documentation and gather up the output
+ "
+ let l:cmd = g:speckyRunRdocCmd . ' ' . l:word
+ let l:output = system( l:cmd )
+ call append( 0, split( l:output, "\n" ) )
+ execute 'normal gg'
+
+ " Lockdown the buffer
+ setlocal nomodifiable
+endfunction
+
+
+" }}}
+" FindSpecError( detail ) {{{
+"
+" detail:
+" 1 -- find the next failure
+" -1 -- find the previous failure
+" 0 -- expand the current failure's detail
+"
+" Convenience searches for jumping to spec failures.
+"
+function! <SID>FindSpecError( detail )
+
+ let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
+ let l:err_str = l:specver == 1 ? '(FAILED\|ERROR - \d\+)$' : 'FAILED - #\d\+)$'
+
+ if ( a:detail == 0 )
+ " Find the detailed failure text for the current failure line,
+ " and unfold it.
+ "
+ let l:orig_so = &so
+ set so=100
+ if l:specver == 1
+ call search('^' . matchstr(getline('.'),'\d\+)$') )
+ else
+ call search('^FAILURE - #' . matchstr(getline('.'),'\d\+)$') )
+ endif
+ if has('folding')
+ silent! normal za
+ endif
+ execute 'set so=' . l:orig_so
+
+ else
+ " Find the 'regular' failure line
+ "
+ if exists( 'b:err_line' )
+ call cursor( b:err_line, a:detail == -1 ? 1 : strlen(getline(b:err_line)) )
+ endif
+ call search( l:err_str, a:detail == -1 ? 'b' : '' )
+ let b:err_line = line('.')
+ nohl
+
+ endif
+endfunction
+
+
+" }}}
+" NewWindowCmd() {{{
+"
+" Return the stringified command for a new window, based on user preferences.
+"
+function! <SID>NewWindowCmd()
+ if ( ! exists('g:speckyWindowType' ) )
+ return 'tabnew '
+ endif
+
+ if ( g:speckyWindowType == 1 )
+ return 'new '
+ elseif ( g:speckyWindowType == 2 )
+ return 'vert new '
+ else
+ return 'tabnew '
+ endif
+endfunction
+
+
+" }}}
+" _formatFoldText() {{{
+"
+" Make folded failure detail visually appealing when folded.
+"
+function! _formatFoldText()
+ let l:fold = tolower( getline(v:foldstart) )
+ let l:fold = substitute( l:fold, '-', 'detail', 'e' )
+ let l:fold = '--[ ' . substitute( l:fold, ')', ' ]', 'e' )
+ return l:fold
+endfunction
+
+
+" }}}
+" s:err( msg ) "{{{
+" Notify of problems in a consistent fashion.
+"
+function! s:err( msg )
+ echohl WarningMsg|echomsg 'specky: ' . a:msg|echohl None
+endfunction " }}}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ruby/specky_formatter.rb Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,215 @@
+
+require 'rspec/core/formatters/base_text_formatter'
+
+### SpeckyFormatter: A basic RSpec 2.x text formatter, to be used
+### with the 'Specky' vim plugin (or from the command line, if you
+### dig it over the default 'documentation' format!)
+###
+### rspec -r /path/to/this/specky_formatter.rb -f SpeckyFormatter specs
+###
+class SpeckyFormatter < RSpec::Core::Formatters::BaseTextFormatter
+
+ def initialize( *args )
+ super
+ @indent_level = 0
+ @failure_index = 0
+ @failures = []
+ @txt = ''
+ @summary = ''
+ end
+
+
+ ########################################################################
+ ### R S P E C H O O K S
+ ########################################################################
+
+ ### Example group hook -- increase indentation, emit description
+ ###
+ def example_group_started( example_group )
+ self.out '+', '-' * (example_group.description.length + 2), '+'
+ self.out '| ', example_group.description, ' |'
+ self.out '+', '-' * (example_group.description.length + 2), '+'
+ @indent_level += 1
+ end
+
+
+ ### Example group hook -- decrease indentation
+ ###
+ def example_group_finished( example_group )
+ @indent_level -= 1
+ end
+
+
+ ### Called on example success
+ ###
+ def example_passed( example )
+ msg = self.format_example( example )
+ msg << ')'
+ self.out msg
+ end
+
+
+ ### Called on a pending example
+ ###
+ def example_pending( example )
+ msg = self.format_example( example )
+ pending_msg = example.metadata[ :execution_result ][ :pending_message ]
+ msg << ", PENDING%s)" % [ ": #{pending_msg}" || '' ]
+ self.out msg
+ end
+
+
+ ### Called on example failure
+ ###
+ def example_failed( example )
+ @failure_index += 1
+ msg = self.format_example( example )
+ msg << ", FAILED - #%d)" % [ @failure_index ]
+ self.out msg
+
+ @failures << example
+ end
+
+
+ ### Called after all examples are run. Emit details for each failed example,
+ ### for Vim to fold.
+ ###
+ def dump_failures
+ self.out "\n" unless @failures.empty?
+ cwd = Regexp.new( Dir.pwd )
+ bt_regexp = /(.+?):(\d+)(|:\d+)/
+
+ @failures.each_with_index do |example, index|
+ desc = example.metadata[ :full_description ]
+ exception = example.execution_result[ :exception ]
+ file = line = nil
+
+ # remove files that are not in within the cwd.
+ #
+ # this isn't optimal, but it does stay within specky's notion of
+ # running it from within the project directory, and makes sure we don't
+ # inadvertently display code from rspec itself.
+ #
+ bt_file = exception.backtrace.find { |line| line =~ bt_regexp && line =~ cwd }
+ file, line = $1, $2.to_i if bt_file =~ bt_regexp
+ self.out "FAILURE - #%d)" % [ index + 1 ]
+ self.out "%s:%d" % [ file, line ] if bt_file
+
+ if exception.respond_to?( :pending_fixed? ) && exception.pending_fixed?
+ self.out "%s FIXED" % [ desc ]
+ self.out "Expected pending '%s' to fail. No error was raised." % [
+ example.metadata[ :execution_result ][ :pending_message ]
+ ]
+ else
+ self.out desc
+ self.out "Failure/Error: %s" % [ read_failed_line( exception, example).strip ]
+ exception.message.split("\n").each {|l| self.out l}
+
+ # logic taken from the base class
+ if shared_group = find_shared_group(example)
+ self.out "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\" called from " +
+ "#{backtrace_line(shared_group.metadata[:example_group][:location])}"
+ end
+ end
+
+ self.out exception_source( file, line-1 ) if file && line
+ end
+ end
+
+
+ ### Emit the source of the exception, with context lines.
+ ###
+ def exception_source( file, line )
+ context = ''
+ low, high = line - 3, line + 3
+
+ File.open( file ).each_with_index do |cline, i|
+ cline.chomp!.rstrip!
+ next unless i >= low && i <= high
+ context << " %s%4d: %s\n" % [ ( i == line ? '>>' : ' |' ), i, cline ]
+ end
+
+ return context
+
+ rescue
+ 'Unable to parse exception context lines.'
+ end
+
+
+ ### Emit summary data for all examples.
+ ###
+ def dump_summary( duration, example_count, failure_count, pending_count )
+ succeeded = example_count - failure_count - pending_count
+ @summary << "+%s+\n" % [ '-' * 49 ]
+ @summary << "|%s-- Summary --%s|\n" % [ ' ' * 18, ' ' * 18 ]
+ @summary << "+----------+-----------+--------+---------+-------+\n"
+ @summary << "| Duration | Succeeded | Failed | Pending | Total |\n"
+ @summary << "+----------+-----------+--------+---------+-------+\n"
+
+ @summary << "| %7ss | %9s | %6s | %7s | %5s |\n" % [
+ "%0.3f" % duration, succeeded, failure_count,
+ pending_count, example_count
+ ]
+
+ @summary << "+----------+-----------+--------+---------+-------+\n\n"
+ end
+
+
+ ### End of run. Dump it all out!
+ ###
+ def close
+ output.puts @summary
+ output.puts @txt
+ end
+
+
+ #########
+ protected
+ #########
+
+ ### Send a string to the output IO object, after indentation.
+ ###
+ def out( *msg )
+ msg = msg.join
+ @txt << "%s%s\n" % [ ' ' * @indent_level, msg ]
+ end
+
+ ### Format the basic example information, along with the run duration.
+ ###
+ def format_example( example )
+ metadata = example.metadata
+ duration = metadata[ :execution_result ][ :run_time ]
+ description = metadata[ :description ]
+ return "| %s (%0.3fs" % [ description, duration ]
+ end
+end # SpeckyFormatter
+
+
+### Identical to the regular SpeckyFormatter, but it puts summary
+### information at the bottom of the screen instead of the top, and just
+### spits out rudamentary failure info. Mimics the progress
+### formatter for status feedback
+###
+class SpeckyFormatterConsole < SpeckyFormatter
+
+ def example_passed( ex ); print '.'; end
+ def example_failed( ex ); print 'F'; super; end
+ def example_pending( ex ); print '*'; end
+
+ def close
+ puts
+ puts "Failures:" unless @failures.empty?
+ @failures.each do |test|
+ metadata = test.metadata
+ msg = "- %s\n %s\n %s:%d\n\n" % [
+ metadata[:full_description],
+ test.exception.message,
+ metadata[:file_path],
+ metadata[:line_number]
+ ]
+ puts msg
+ end
+ output.puts @summary
+ end
+end
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/snippets/rspec.snippets Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,173 @@
+#
+# specky: snippet file for rspec, to be used with the quite excellent
+# 'snipmate' Vim plugin by Michael Sanders <msanders42+vim@gmail.com>.
+# http://www.vim.org/scripts/script.php?script_id=2540
+#
+# $Id$
+#
+
+snippet .and and_raise()
+ .and_raise( ${1:exception}.new("${2:message}") )
+snippet .and and_return { }
+ .and_return { ${1} }
+snippet .and and_return()
+ .and_return( ${1:value} )
+snippet .and and_throw()
+ .and_throw( ${1:sym} )
+snippet .and and_yield()
+ .and_yield( ${1:values} )
+snippet .at at_least()
+ .at_least( ${1:n} ).times
+snippet .at at_most()
+ .at_most( ${1:n} ).times
+snippet .on
+ .once
+snippet .tw
+ .twice
+snippet .any
+ .any_number_of_times
+snippet des Describe subject
+ describe "${1:subject}" do
+ ${2}
+ end
+snippet des Describe Type
+ describe ${1:Type} do
+ ${2}
+ end
+snippet des Describe Type, description
+ describe ${1:Type}, "${2:description}" do
+ ${3}
+ end
+snippet des Describe a shared group
+ describe "${1:A Shared Thing}", :shared => true do
+ ${2}
+ end
+snippet it it block
+ it "${1:should do something}" do
+ ${2}
+ end
+snippet it it (pending)
+ it "${1:does something}"${2}
+snippet .ex
+ .exactly( ${1:n} ).times
+snippet .w
+ .with( ${1:args} )${2}
+snippet con
+ context "${1:context}" do
+ ${2}
+ end
+# this is the 'old' mock syntax (rspec 1.x)
+# use 'double' for rspec 2.x
+snippet mock
+ ${1:var} = mock( "${2:mock_name}"${3:, :null_object => true} )
+ ${4}
+snippet dou
+ ${1:var} = double( "${2:double_name}" )${3:.as_null_object}
+ ${4}
+snippet st
+ stub!( :${1:expectation} ).with( ${2:args} ).and_return( ${3} )
+snippet bef Before each test
+ before( :each ) do
+ ${1}
+ end
+snippet bef Before all tests
+ before( :all ) do
+ ${1}
+ end
+snippet aft After each test
+ after( :each ) do
+ ${1}
+ end
+snippet aft After all tests
+ after( :all ) do
+ ${1}
+ end
+snippet sh=
+ ${1:target}.should == ${2:value}
+ ${3}
+snippet shn=
+ ${1:target}.should_not == ${2:value}
+ ${3}
+snippet she
+ ${1:target}.should equal( ${2:value} )
+ ${3}
+snippet shne
+ ${1:target}.should_not equal( ${2:value} )
+ ${3}
+snippet shm Should contain
+ ${1:target}.should =~ /${2:regexp}/
+ ${3}
+snippet shnm
+ ${1:target}.should_not =~ /${2:regexp}/
+ ${3}
+snippet shm Should match
+ ${1:target}.should match( /${2:regexp}/ )${3}
+snippet shb
+ ${1:target}.should be( ${2:result} )
+ ${3}
+snippet shnb
+ ${1:target}.should_not be( ${2:result} )
+ ${3}
+snippet shbko
+ ${1:target}.should be_a_kind_of( ${2:klass} )
+ ${3}
+snippet shnbko
+ ${1:target}.should_not be_a_kind_of( ${2:klass} )
+ ${3}
+snippet shbio
+ ${1:target}.should be_instance_of( ${2:klass} )
+ ${3}
+snippet shnbio
+ ${1:target}.should_not be_instance_of( ${2:klass} )
+ ${3}
+snippet shbc
+ ${1:target}.should be_close( ${2:result}, ${3:tolerance} )
+ ${4}
+snippet shnbc
+ ${1:target}.should_not be_close( ${2:result}, ${3:tolerance} )
+ ${4}
+snippet shh
+ ${1:target}.should have( ${2:num} ).${3:things}
+ ${4}
+snippet shhal
+ ${1:target}.should have_at_least( ${2:num} ).${3:things}
+ ${4}
+snippet shham
+ ${1:target}.should have_at_most( ${2:num} ).${3:things}
+ ${4}
+snippet shbp
+ ${1:target}.should ${2:be_${3:predicate}} ${4}
+snippet shnbp
+ ${1:target}.should_not ${2:be_${3:predicate}} ${4}
+snippet exre
+ expect { ${1} }.to raise_exception( ${2:ErrorClass}, /${3:message match}/i )
+ ${4}
+snippet exnre
+ expect { ${1} }.to_not raise_exception( ${2:ErrorClass} )
+ ${3}
+snippet shre
+ lambda { ${1} }.should raise_exception( ${2:ErrorClass}, /${3:message match}/i )
+ ${4}
+snippet shnre
+ lambda { ${1} }.should_not raise_exception( ${2:ErrorClass} )
+ ${3}
+snippet shr
+ ${1:mock}.should_receive( :${2:message} )${3}
+snippet shnr
+ ${1:mock}.should_not_receive( :${2:message} )${3}
+snippet shrt
+ ${1:target}.should respond_to( :${2:sym} )
+snippet shnrt
+ ${1:target}.should_not respond_to( :${2:sym} )
+snippet shbl
+ it_should_behave_like "${1:shared behavior}"
+ ${2}
+snippet sim
+ def ${1:matcher_method}( expected )
+ simple_matcher do |given, matcher|
+ matcher.description = "${2:verb} with #{expected.inspect}"
+ matcher.failure_message = "expected #{given.inspect} to $2 with #{expected.inspect}"
+ matcher.negative_failure_message = "expected #{given.inspect} not to $2 with #{expected.inspect}"
+ given.${3:...checks something and returns a boolean}
+ end
+ end
--- a/specky/Makefile Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-PLUGIN = specky
-
-SOURCE = syntax/rdoc.vim
-SOURCE += syntax/specrun.vim
-SOURCE += syntax/specrun1.vim
-SOURCE += syntax/rspec.vim
-SOURCE += ftdetect/rspec.vim
-SOURCE += ftplugin/rspec.vim
-SOURCE += doc/specky.txt
-SOURCE += plugin/specky.vim
-SOURCE += snippets/rspec.snippets
-SOURCE += ruby/specky_formatter.rb
-
-
-${PLUGIN}.vba: ${SOURCE}
- - vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
- gzip ${PLUGIN}.vba
-
-install:
- rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
- rm ${PLUGIN}.vba.gz
--- a/specky/build.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-v/^SOURCE/d
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/specky/doc/specky.txt Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,358 +0,0 @@
-*specky.txt* Last change: $Id$
-
- VIM REFERENCE MANUAL by Mahlon E. Smith
-
-
- specky!
-
-A Plugin for testing Ruby code with RSpec -- and more *specky*
-==============================================================================
-CONTENTS *SpeckyContents*
-
- 1) Intro........................................|SpeckyIntro|
- 2) Functionality................................|SpeckyFunctionality|
- 3) Enabling Specky..............................|SpeckyInstallation|
- 4) Configuration................................|SpeckyOptions|
- 4.1) Create text banners....................|g:speckyBannerKey|
- 4.2) Cycling quote styles...................|g:speckyQuoteSwitcherKey|
- 4.3) Display ruby documentation.............|g:speckyRunRdocKey|
- 4.4) Toggle editing between spec and code...|g:speckySpecSwitcherKey|
- 4.5) Run specs for the current buffer.......|g:speckyRunSpecKey|
- 4.6) Modify the default spec command........|g:speckyRunSpecCmd|
- 4.7) Modify the default rdoc command........|g:speckyRunRdocCmd|
- 4.8) Alter new window behavior..............|g:speckyWindowType|
- 4.9) Running older rspec (1.x) .............|g:speckySpecVersion|
- 5) Author.......................................|SpeckyAuthor|
- 6) License......................................|SpeckyLicense|
-
-
-
-==============================================================================
-1. INTRO *SpeckyIntro*
-
-Specky is primarily a small collection of functions to help make behavioral
-testing streamlined and easy when working with ruby and rspec. Specky
-supports rspec 2.x by default, and is backwards compatible with rspec 1.x.
-
-Specky secondarily includes a couple of conveniences to make your everyday
-programming tasks smooooth and pleasurable.
-
-
-==============================================================================
-2. FUNCTIONALITY *SpeckyFunctionality*
-
-Okay then, what does it do?
-
-By default? Nothing but syntax highlighting unless you are comfortable using
-the menus. I decided the easiest way to cherry pick the functionality that
-you'd like was to enable them via key bindings. By doing this, Specky won't
-make assumptions about your current environment, and won't stomp on anything
-you don't want it to.
-
- Specky won't do -anything- with your environment until you enable ~
- the key bindings!! ~
-
-After you've configured your bindings, here are some of the things you can
-now do with a single key stroke:
->
- - Switch back and forth from code to testing spec
-
- - Run the spec, with results going to a new, syntax highlighted buffer
-
- - Jump quickly to spec failures and failure detail
- - 'e' and 'r' to move back and forth on each failed assertion,
- - 'E' to jump details for it.
- - '<C-e>' to "forget" the currently selected failed assertion
- - 'q' to close the spec output buffer.
-
- - View rdoc of the word under the cursor
-
- - Dynamically switch string types for the word under the cursor
- (double quoted, quoted, symbol)
-
- - Make lovely and quick comment banners for ruby code.
-
-Specky also includes a "snippets" file that can be used with the Snipmate
-plugin by Michael Sanders <msanders42+vim@gmail.com>. (Minimum version 0.74.)
-
- http://www.vim.org/scripts/script.php?script_id=2540
-
-==============================================================================
-3. ENABLING-SPECKY *SpeckyInstallation*
-
-Getting Specky to work should be a fairly trivial process. Specky now
-uses a custom rspec formatter to function reliably, and it needs to know
-where that lives on your system.
-
-If you installed Specky from Vimball, it is likely found at:
-
- ~/.vim/ruby/specky_formatter.rb ~
-
-Otherwise, you'll need to locate it, and tell rspec to use it in one of two
-ways.
-
- 1) Set the 'g:speckyRunSpecCmd' variable explicitly:
-
- let g:speckyRunSpecCmd = "rspec -r ~/.vim/ruby/specky_formatter.rb -f SpeckyFormatter" ~
-
- 2) or, leave 'g:speckyRunSpecCmd' at its default value, and instead use
- an '.rspec' settings file in the root directory of the the project
- you're working in. I find this method much more flexible -- the
- '.rspec' file can be carried with your project, and customized to
- include additional bits like custom $LOAD_PATH injections, etc.
- Here's what mine usually looks like: >
-
- -r loadpath
- -r ~/.vim/bundle/specky/ruby/specky_formatter
- -f SpeckyFormatter
-
- You can also use both of these methods, and use the
- 'SpeckyConsoleFormatter' class from your .rspec file, if it suits
- your fancy.
-
-
-After that is taken care of, then just set up your keybindings in your
-.vimrc. Here's what my config looks like. >
-
- let g:speckyBannerKey = "<C-S>b"
- let g:speckyQuoteSwitcherKey = "<C-S>'"
- let g:speckyRunRdocKey = "<C-S>r"
- let g:speckySpecSwitcherKey = "<C-S>x"
- let g:speckyRunSpecKey = "<C-S>s"
- let g:speckyRunRdocCmd = "fri -L -f plain"
- let g:speckyWindowType = 2
-
-With these bindings, all Specky commands start with <ctrl-s> ("s" for
-Specky!), followed by a mnemonic function to run:
-
- b ----> Banner creation ~
- ' ----> Quote cycling ~
- r ----> run Rdoc ~
- x ----> code and spec eXchange ~
- s ----> run rSpec ~
-
-Of course, <ctrl-s> is a "suspend" signal for most terminals, so these
-bindings are meant for a |gui| environment, such as gvim. Your mileage (and
-tastes) will doubtlessly vary. Do what you will. I won't judge you.
-
-
-==============================================================================
-4. CONFIGURATION-OPTIONS *SpeckyOptions*
-
-Here are all of the available configuration options.
-
-Please note that you must set binding variables:
-
- |g:speckyBannerKey|
- |g:speckyQuoteSwitcherKey|
- |g:speckyRunRdocKey|
- |g:speckySpecSwitcherKey|
- |g:speckyRunSpecKey|
-
-...in order to enable the respective Specky functionality. See
-|SpeckyInstallation| for details. Any other options are entirely optional.
-Put these into your |vimrc|, or wherever else you enjoy storing this kind of
-stuff.
-
-
-------------------------------------------------------------------------------
-4.1 *g:speckyBannerKey*
-
-Setting this binding enables comment banner creation.
-
-This is purely a convenience routine, and a stylistic one at that. I prefer
-large advertising of what "area" of code you are in, along with other
-miscellaneous labels for humans to read. If this isn't how you roll, then by
-all means, don't enable this binding! :)
-
-As an example -- you can just type:
-
- instance methods ~
-
-Then hit the keystroke. It will magically turn into: >
-
- ########################################################################
- ### I N S T A N C E M E T H O D S
- ########################################################################
-
-With all those saved extra keystrokes this might provide you per banner over
-the years, your RSI-free hands will thank you. And the total time savings!!
-Oh man, what are you going to DO with all of that extra free time?
-The possibilities are staggering.
-
-
-------------------------------------------------------------------------------
-4.2 *g:speckyQuoteSwitcherKey*
-
-Setting this binding enables quote "style switching".
-
-If you aren't in ruby mode, this just changes the word under the cursor
-back and forth from double quoting to single quoting.
-
- string -> "string" -> 'string' -> "string" ... ~
-
-In ruby mode, symbols are also put into the rotation.
-
- "string" -> 'string' -> :string -> "string" ... ~
-
-Note that quote cycling only works with a |word|.
-
-
-------------------------------------------------------------------------------
-4.3 *g:speckyRunRdocKey*
-
-Setting this enables the display of rdoc documentation for the current
-word under the cursor. For lookups with multiple matches, you can continue
-using this binding to "drill down" to the desired documentation.
-
-
-------------------------------------------------------------------------------
-4.4 *g:speckySpecSwitcherKey*
-
-Setting this enables spec to code switching, and visa versa.
-
-Switching uses path searching instead of reliance on directory structure in
-your project. The idea here is that you'd |:chdir| into your project
-directory. Spec files just need to end in '_spec.rb', which is a common
-convention.
-
- aRubyClass.rb ---> aRubyClass_spec.rb~
-
-Because it leaves respective buffers open, you can essentially think of this
-as a quick toggle between code and tests.
-
-
-------------------------------------------------------------------------------
-4.5 *g:speckyRunSpecKey*
-
-Setting this variable runs "rspec" on the current buffer.
-
-All output is sent to a syntax highlighted scratch buffer. This new window is
-re-used for each spec run. You can quickly "jump" to assertion failures and
-their associated details with the following keys:
-
- e and r ~
- Move forward and backward through the failed assertions.
-
- E~
- While on a failure line, jump to the details of the failure.
-
- <C-e> ~
- "Forget" the last found failed assertion, and start over at the
- beginning of the list. (ie, the next 'e' keystroke will select
- error #1.)
-
- q ~
- Closes the spec output buffer.
-
-
-Normally, you'd only want to perform this keystroke while in a spec file
-buffer. If Specky thinks you are in code, rather than a buffer (as indicated
-by the lack of a "_spec.rb" file naming convention) then it will attempt to
-switch to the spec before running the command.
-
-
-------------------------------------------------------------------------------
-4.6 *g:speckyRunSpecCmd*
-
-This is the program, with flags, that the current file is sent to when
-executing the |g:speckyRunSpecKey| keybinding.
-
-A common addition is to include an "-r" flag for sucking in local libraries
-necessary for testing your project. In fact, this is required to use the
-rspec formatter supplied by Specky. See |SpeckyInstallation| for more info.
-
- Default: ~
- rspec
-
-
-------------------------------------------------------------------------------
-4.7 *g:speckyRunRdocCmd*
-
-If you prefer an rdoc display program other than "ri", you can set it
-with this variable. "fri -L -f plain" is always a nice choice, for example.
-
- Default: ~
- ri
-
-
-------------------------------------------------------------------------------
-4.8 *g:speckyWindowType*
-
-For both spec and rdoc commands, this variable controls the behavior of the
-newly generated window.
-
- Default: ~
- 0
-
- 0 ~
- Create a new tabbed window
- 1 ~
- Split the current window horizontally
- 2 ~
- Split the current window vertically
-
-
-------------------------------------------------------------------------------
-4.9 *g:speckySpecVersion*
-
-Specky should work out of the box with rspec 2.x. If you'd like to use rspec
-1.x instead, you can do so with the following Vim settings: >
-
- let g:speckySpecVersion = 1
- let g:speckyRunRdocCmd = "spec -fs"
-
-If you have both rspec 1.x and 2.x installed at the same time, you need to
-be explicit with what version you are executing: >
-
- let g:speckyRunRdocCmd = "spec _1.3.0_ -fs"
-
-
-==============================================================================
-5. AUTHOR *SpeckyAuthor*
-
-
-Specky was written by Mahlon E. Smith.
-
- mahlon@martini.nu ~
- http://www.martini.nu/
-
-
-
-==============================================================================
-6. LICENSE *SpeckyLicense*
-
-
-Specky is distributed under the BSD license.
- http://www.opensource.org/licenses/bsd-license.php
->
- Copyright (c) 2008-2010, Mahlon E. Smith <mahlon@martini.nu>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
-
--- a/specky/ftdetect/rspec.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-au BufRead,BufNewFile *_spec.rb set filetype=rspec
--- a/specky/ftplugin/rspec.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-if exists("b:did_ftplugin")
- finish
-endif
-
-" Behave just like Ruby
-runtime! ftplugin/ruby.vim
-
--- a/specky/plugin/specky.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,370 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" Specky!
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-
-
-" Hook up the functions to the user supplied key bindings. {{{
-"
-if exists( 'g:speckySpecSwitcherKey' )
- execute 'map ' . g:speckySpecSwitcherKey . ' :call <SID>SpecSwitcher()<CR>'
-" map &g:speckySpecSwitcherKey <SID>SpecSwitcher()
-endif
-
-if exists( 'g:speckyQuoteSwitcherKey' )
- execute 'map ' . g:speckyQuoteSwitcherKey . ' :call <SID>QuoteSwitcher()<CR>'
-endif
-
-if exists( 'g:speckyBannerKey' )
- execute 'map ' . g:speckyBannerKey . ' :call <SID>MakeBanner()<CR>'
-endif
-
-if exists( 'g:speckyRunSpecKey' )
- execute 'map ' . g:speckyRunSpecKey . ' :call <SID>RunSpec()<CR>'
-endif
-
-if exists( 'g:speckyRunRdocKey' )
- execute 'map ' . g:speckyRunRdocKey . ' :call <SID>RunRdoc()<CR>'
-endif
-
-if exists( 'specky_loaded' )
- finish
-endif
-let specky_loaded = '$Rev$'
-
-
-"}}}
-" Menu configuration {{{
-"
-let s:menuloc = '&Plugin.&specky'
-execute 'menu ' . s:menuloc . '.&Jump\ to\ code/spec :call <SID>SpecSwitcher()<CR>'
-execute 'menu ' . s:menuloc . '.Run\ &spec :call <SID>RunSpec()<CR>'
-execute 'menu ' . s:menuloc . '.&RDoc\ lookup :call <SID>RunRdoc()<CR>'
-execute 'menu ' . s:menuloc . '.Rotate\ "e\ style :call <SID>QuoteSwitcher()<CR>'
-execute 'menu ' . s:menuloc . '.Make\ a\ &banner :call <SID>MakeBanner()<CR>'
-
-
-" }}}
-" SpecSwitcher() {{{
-"
-" When in ruby code or an rspec BDD file, try and search recursively through
-" the filesystem (within the current working directory) to find the
-" respectively matching file. (code to spec, spec to code.)
-"
-" This operates under the assumption that you've used chdir() to put vim into
-" the top level directory of your project.
-"
-function! <SID>SpecSwitcher()
-
- " If we aren't in a ruby or rspec file then we probably don't care
- " too much about this function.
- "
- if &ft != 'ruby' && &ft != 'rspec'
- call s:err( "Not currently in ruby or rspec mode." )
- return
- endif
-
- " Ensure that we can always search recursively for files to open.
- "
- let l:orig_path = &path
- set path=**
-
- " Get the current buffer name, and determine if it is a spec file.
- "
- " /tmp/something/whatever/rubycode.rb ---> rubycode.rb
- " A requisite of the specfiles is that they match to the class/code file,
- " this emulates the eigenclass stuff, but doesn't require the same
- " directory structures.
- "
- " rubycode.rb ---> rubycode_spec.rb
- "
- let l:filename = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
- let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
-
- if l:is_spec_file
- let l:other_file = substitute( l:filename, '_spec\.rb$', '\.rb', '' )
- else
- let l:other_file = substitute( l:filename, '\.rb$', '_spec\.rb', '' )
- endif
-
- let l:bufnum = bufnr( l:other_file )
- if l:bufnum == -1
- " The file isn't currently open, so let's search for it.
- execute 'find ' . l:other_file
- else
- " We've already got an open buffer with this file, just go to it.
- execute 'buffer' . l:bufnum
- endif
-
- " Restore the original path.
- execute 'set path=' . l:orig_path
-endfunction
-
-
-" }}}
-" QuoteSwitcher() {{{
-"
-" Wrap the word under the cursor in quotes. If in ruby mode,
-" cycle between quoting styles and symbols.
-"
-" variable -> "variable" -> 'variable' -> :variable
-"
-function! <SID>QuoteSwitcher()
- let l:type = strpart( expand("<cWORD>"), 0, 1 )
- let l:word = expand("<cword>")
-
- if l:type == '"'
- " Double quote to single
- execute ":normal viWc'" . l:word . "'"
-
- elseif l:type == "'"
- if &ft == 'ruby' || &ft == 'rspec'
- " Single quote to symbol
- execute ':normal viWc:' . l:word
- else
- " Single quote to double
- execute ':normal viWc"' . l:word . '"'
- end
-
- else
- " Whatever to double quote
- execute ':normal viWc"' . l:word . '"'
- endif
-
- " Move the cursor back into the cl:word
- call cursor( 0, getpos('.')[2] - 1 )
-endfunction
-
-
-" }}}
-" MakeBanner() {{{
-"
-" Create a quick banner from the current line's text.
-"
-function! <SID>MakeBanner()
- let l:banner_text = toupper(join( split( getline('.'), '\zs' ), ' ' ))
- let l:banner_text = substitute( l:banner_text, '^\s\+', '', '' )
- let l:sep = repeat( '#', &textwidth == 0 ? 72 : &textwidth )
- let l:line = line('.')
-
- call setline( l:line, l:sep )
- call append( l:line, [ '### ' . l:banner_text, l:sep ] )
- execute 'normal 3=='
- call cursor( l:line + 3, 0 )
-endfunction
-
-
-" }}}
-" RunSpec() {{{
-"
-" Run this function while in a spec file to run the specs within vim.
-"
-function! <SID>RunSpec()
-
- " If we're in the code instead of the spec, try and switch
- " before running tests.
- "
- let l:filename = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
- let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
- if ( ! l:is_spec_file )
- silent call <SID>SpecSwitcher()
- endif
-
- let l:spec = bufname('%')
- let l:buf = 'specky:specrun'
- let l:bufnum = bufnr( l:buf )
- let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
-
- " Squash the old buffer, if it exists.
- "
- if buflisted( l:buf )
- execute 'bd! ' . l:buf
- endif
-
- execute <SID>NewWindowCmd() . l:buf
- setlocal buftype=nofile bufhidden=delete noswapfile
- if ( l:specver == 1 )
- setlocal filetype=specrun1
- set foldtext='--'.getline(v:foldstart).v:folddashes
- else
- setlocal filetype=specrun
- set foldtext=_formatFoldText()
- endif
-
- " Set up some convenient keybindings.
- "
- nnoremap <silent> <buffer> q :close<CR>
- nnoremap <silent> <buffer> e :call <SID>FindSpecError(1)<CR>
- nnoremap <silent> <buffer> r :call <SID>FindSpecError(-1)<CR>
- nnoremap <silent> <buffer> E :call <SID>FindSpecError(0)<CR>
- nnoremap <silent> <buffer> <C-e> :let b:err_line=1<CR>
-
- " Default cmd for spec
- "
- if !exists( 'g:speckyRunSpecCmd' )
- let g:speckyRunSpecCmd = l:specver == 1 ? 'spec -fs' : 'rspec'
- endif
-
- " Call spec and gather up the output
- "
- let l:cmd = g:speckyRunSpecCmd . ' ' . l:spec
- call append( line('$'), 'Output of: ' . l:cmd )
- call append( line('$'), '' )
- let l:output = system( l:cmd )
- call append( line('$'), split( l:output, "\n" ) )
- normal gg
-
- " Lockdown the buffer
- setlocal nomodifiable
-endfunction
-
-
-" }}}
-" RunRdoc() {{{
-"
-" Get documentation for the word under the cursor.
-"
-function! <SID>RunRdoc()
-
- " If we aren't in a ruby file (specs are ruby-mode too) then we probably
- " don't care too much about this function.
- "
- if ( &ft != 'ruby' && &ft != 'rdoc' && &ft != 'rspec' )
- call s:err( "Not currently in a rubyish-mode." )
- return
- endif
-
- " Set defaults
- "
- if !exists( 'g:speckyRunRdocCmd' )
- let g:speckyRunRdocCmd = 'ri'
- endif
-
- let l:buf = 'specky:rdoc'
- let l:bufname = bufname('%')
-
- if ( match( l:bufname, l:buf ) != -1 )
- " Already in the rdoc buffer. This allows us to lookup
- " something like Kernel#require.
- "
- let l:word = expand('<cWORD>')
- else
- " Not in the rdoc buffer. This allows us to lookup
- " something like 'each' in some_hash.each { ... }
- "
- let l:word = expand('<cword>')
- endif
-
- " Squash the old buffer, if it exists.
- "
- if buflisted( l:buf )
- execute 'bd! ' . l:buf
- endif
-
- " With multiple matches, strip the commas from the cWORD.
- let l:word = substitute( l:word, ',', '', 'eg' )
-
- execute <SID>NewWindowCmd() . l:buf
- setlocal buftype=nofile bufhidden=delete noswapfile filetype=rdoc
- nnoremap <silent> <buffer> q :close<CR>
-
- " Call the documentation and gather up the output
- "
- let l:cmd = g:speckyRunRdocCmd . ' ' . l:word
- let l:output = system( l:cmd )
- call append( 0, split( l:output, "\n" ) )
- execute 'normal gg'
-
- " Lockdown the buffer
- setlocal nomodifiable
-endfunction
-
-
-" }}}
-" FindSpecError( detail ) {{{
-"
-" detail:
-" 1 -- find the next failure
-" -1 -- find the previous failure
-" 0 -- expand the current failure's detail
-"
-" Convenience searches for jumping to spec failures.
-"
-function! <SID>FindSpecError( detail )
-
- let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
- let l:err_str = l:specver == 1 ? '(FAILED\|ERROR - \d\+)$' : 'FAILED - #\d\+)$'
-
- if ( a:detail == 0 )
- " Find the detailed failure text for the current failure line,
- " and unfold it.
- "
- let l:orig_so = &so
- set so=100
- if l:specver == 1
- call search('^' . matchstr(getline('.'),'\d\+)$') )
- else
- call search('^FAILURE - #' . matchstr(getline('.'),'\d\+)$') )
- endif
- if has('folding')
- silent! normal za
- endif
- execute 'set so=' . l:orig_so
-
- else
- " Find the 'regular' failure line
- "
- if exists( 'b:err_line' )
- call cursor( b:err_line, a:detail == -1 ? 1 : strlen(getline(b:err_line)) )
- endif
- call search( l:err_str, a:detail == -1 ? 'b' : '' )
- let b:err_line = line('.')
- nohl
-
- endif
-endfunction
-
-
-" }}}
-" NewWindowCmd() {{{
-"
-" Return the stringified command for a new window, based on user preferences.
-"
-function! <SID>NewWindowCmd()
- if ( ! exists('g:speckyWindowType' ) )
- return 'tabnew '
- endif
-
- if ( g:speckyWindowType == 1 )
- return 'new '
- elseif ( g:speckyWindowType == 2 )
- return 'vert new '
- else
- return 'tabnew '
- endif
-endfunction
-
-
-" }}}
-" _formatFoldText() {{{
-"
-" Make folded failure detail visually appealing when folded.
-"
-function! _formatFoldText()
- let l:fold = tolower( getline(v:foldstart) )
- let l:fold = substitute( l:fold, '-', 'detail', 'e' )
- let l:fold = '--[ ' . substitute( l:fold, ')', ' ]', 'e' )
- return l:fold
-endfunction
-
-
-" }}}
-" s:err( msg ) "{{{
-" Notify of problems in a consistent fashion.
-"
-function! s:err( msg )
- echohl WarningMsg|echomsg 'specky: ' . a:msg|echohl None
-endfunction " }}}
-
--- a/specky/ruby/specky_formatter.rb Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-
-require 'rspec/core/formatters/base_text_formatter'
-
-### SpeckyFormatter: A basic RSpec 2.x text formatter, to be used
-### with the 'Specky' vim plugin (or from the command line, if you
-### dig it over the default 'documentation' format!)
-###
-### rspec -r /path/to/this/specky_formatter.rb -f SpeckyFormatter specs
-###
-class SpeckyFormatter < RSpec::Core::Formatters::BaseTextFormatter
-
- def initialize( *args )
- super
- @indent_level = 0
- @failure_index = 0
- @failures = []
- @txt = ''
- @summary = ''
- end
-
-
- ########################################################################
- ### R S P E C H O O K S
- ########################################################################
-
- ### Example group hook -- increase indentation, emit description
- ###
- def example_group_started( example_group )
- self.out '+', '-' * (example_group.description.length + 2), '+'
- self.out '| ', example_group.description, ' |'
- self.out '+', '-' * (example_group.description.length + 2), '+'
- @indent_level += 1
- end
-
-
- ### Example group hook -- decrease indentation
- ###
- def example_group_finished( example_group )
- @indent_level -= 1
- end
-
-
- ### Called on example success
- ###
- def example_passed( example )
- msg = self.format_example( example )
- msg << ')'
- self.out msg
- end
-
-
- ### Called on a pending example
- ###
- def example_pending( example )
- msg = self.format_example( example )
- pending_msg = example.metadata[ :execution_result ][ :pending_message ]
- msg << ", PENDING%s)" % [ ": #{pending_msg}" || '' ]
- self.out msg
- end
-
-
- ### Called on example failure
- ###
- def example_failed( example )
- @failure_index += 1
- msg = self.format_example( example )
- msg << ", FAILED - #%d)" % [ @failure_index ]
- self.out msg
-
- @failures << example
- end
-
-
- ### Called after all examples are run. Emit details for each failed example,
- ### for Vim to fold.
- ###
- def dump_failures
- self.out "\n" unless @failures.empty?
- cwd = Regexp.new( Dir.pwd )
- bt_regexp = /(.+?):(\d+)(|:\d+)/
-
- @failures.each_with_index do |example, index|
- desc = example.metadata[ :full_description ]
- exception = example.execution_result[ :exception ]
- file = line = nil
-
- # remove files that are not in within the cwd.
- #
- # this isn't optimal, but it does stay within specky's notion of
- # running it from within the project directory, and makes sure we don't
- # inadvertently display code from rspec itself.
- #
- bt_file = exception.backtrace.find { |line| line =~ bt_regexp && line =~ cwd }
- file, line = $1, $2.to_i if bt_file =~ bt_regexp
- self.out "FAILURE - #%d)" % [ index + 1 ]
- self.out "%s:%d" % [ file, line ] if bt_file
-
- if exception.respond_to?( :pending_fixed? ) && exception.pending_fixed?
- self.out "%s FIXED" % [ desc ]
- self.out "Expected pending '%s' to fail. No error was raised." % [
- example.metadata[ :execution_result ][ :pending_message ]
- ]
- else
- self.out desc
- self.out "Failure/Error: %s" % [ read_failed_line( exception, example).strip ]
- exception.message.split("\n").each {|l| self.out l}
-
- # logic taken from the base class
- if shared_group = find_shared_group(example)
- self.out "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\" called from " +
- "#{backtrace_line(shared_group.metadata[:example_group][:location])}"
- end
- end
-
- self.out exception_source( file, line-1 ) if file && line
- end
- end
-
-
- ### Emit the source of the exception, with context lines.
- ###
- def exception_source( file, line )
- context = ''
- low, high = line - 3, line + 3
-
- File.open( file ).each_with_index do |cline, i|
- cline.chomp!.rstrip!
- next unless i >= low && i <= high
- context << " %s%4d: %s\n" % [ ( i == line ? '>>' : ' |' ), i, cline ]
- end
-
- return context
-
- rescue
- 'Unable to parse exception context lines.'
- end
-
-
- ### Emit summary data for all examples.
- ###
- def dump_summary( duration, example_count, failure_count, pending_count )
- succeeded = example_count - failure_count - pending_count
- @summary << "+%s+\n" % [ '-' * 49 ]
- @summary << "|%s-- Summary --%s|\n" % [ ' ' * 18, ' ' * 18 ]
- @summary << "+----------+-----------+--------+---------+-------+\n"
- @summary << "| Duration | Succeeded | Failed | Pending | Total |\n"
- @summary << "+----------+-----------+--------+---------+-------+\n"
-
- @summary << "| %7ss | %9s | %6s | %7s | %5s |\n" % [
- "%0.3f" % duration, succeeded, failure_count,
- pending_count, example_count
- ]
-
- @summary << "+----------+-----------+--------+---------+-------+\n\n"
- end
-
-
- ### End of run. Dump it all out!
- ###
- def close
- output.puts @summary
- output.puts @txt
- end
-
-
- #########
- protected
- #########
-
- ### Send a string to the output IO object, after indentation.
- ###
- def out( *msg )
- msg = msg.join
- @txt << "%s%s\n" % [ ' ' * @indent_level, msg ]
- end
-
- ### Format the basic example information, along with the run duration.
- ###
- def format_example( example )
- metadata = example.metadata
- duration = metadata[ :execution_result ][ :run_time ]
- description = metadata[ :description ]
- return "| %s (%0.3fs" % [ description, duration ]
- end
-end # SpeckyFormatter
-
-
-### Identical to the regular SpeckyFormatter, but it puts summary
-### information at the bottom of the screen instead of the top, and just
-### spits out rudamentary failure info. Mimics the progress
-### formatter for status feedback
-###
-class SpeckyFormatterConsole < SpeckyFormatter
-
- def example_passed( ex ); print '.'; end
- def example_failed( ex ); print 'F'; super; end
- def example_pending( ex ); print '*'; end
-
- def close
- puts
- puts "Failures:" unless @failures.empty?
- @failures.each do |test|
- metadata = test.metadata
- msg = "- %s\n %s\n %s:%d\n\n" % [
- metadata[:full_description],
- test.exception.message,
- metadata[:file_path],
- metadata[:line_number]
- ]
- puts msg
- end
- output.puts @summary
- end
-end
-
--- a/specky/snippets/rspec.snippets Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-#
-# specky: snippet file for rspec, to be used with the quite excellent
-# 'snipmate' Vim plugin by Michael Sanders <msanders42+vim@gmail.com>.
-# http://www.vim.org/scripts/script.php?script_id=2540
-#
-# $Id$
-#
-
-snippet .and and_raise()
- .and_raise( ${1:exception}.new("${2:message}") )
-snippet .and and_return { }
- .and_return { ${1} }
-snippet .and and_return()
- .and_return( ${1:value} )
-snippet .and and_throw()
- .and_throw( ${1:sym} )
-snippet .and and_yield()
- .and_yield( ${1:values} )
-snippet .at at_least()
- .at_least( ${1:n} ).times
-snippet .at at_most()
- .at_most( ${1:n} ).times
-snippet .on
- .once
-snippet .tw
- .twice
-snippet .any
- .any_number_of_times
-snippet des Describe subject
- describe "${1:subject}" do
- ${2}
- end
-snippet des Describe Type
- describe ${1:Type} do
- ${2}
- end
-snippet des Describe Type, description
- describe ${1:Type}, "${2:description}" do
- ${3}
- end
-snippet des Describe a shared group
- describe "${1:A Shared Thing}", :shared => true do
- ${2}
- end
-snippet it it block
- it "${1:should do something}" do
- ${2}
- end
-snippet it it (pending)
- it "${1:does something}"${2}
-snippet .ex
- .exactly( ${1:n} ).times
-snippet .w
- .with( ${1:args} )${2}
-snippet con
- context "${1:context}" do
- ${2}
- end
-# this is the 'old' mock syntax (rspec 1.x)
-# use 'double' for rspec 2.x
-snippet mock
- ${1:var} = mock( "${2:mock_name}"${3:, :null_object => true} )
- ${4}
-snippet dou
- ${1:var} = double( "${2:double_name}" )${3:.as_null_object}
- ${4}
-snippet st
- stub!( :${1:expectation} ).with( ${2:args} ).and_return( ${3} )
-snippet bef Before each test
- before( :each ) do
- ${1}
- end
-snippet bef Before all tests
- before( :all ) do
- ${1}
- end
-snippet aft After each test
- after( :each ) do
- ${1}
- end
-snippet aft After all tests
- after( :all ) do
- ${1}
- end
-snippet sh=
- ${1:target}.should == ${2:value}
- ${3}
-snippet shn=
- ${1:target}.should_not == ${2:value}
- ${3}
-snippet she
- ${1:target}.should equal( ${2:value} )
- ${3}
-snippet shne
- ${1:target}.should_not equal( ${2:value} )
- ${3}
-snippet shm Should contain
- ${1:target}.should =~ /${2:regexp}/
- ${3}
-snippet shnm
- ${1:target}.should_not =~ /${2:regexp}/
- ${3}
-snippet shm Should match
- ${1:target}.should match( /${2:regexp}/ )${3}
-snippet shb
- ${1:target}.should be( ${2:result} )
- ${3}
-snippet shnb
- ${1:target}.should_not be( ${2:result} )
- ${3}
-snippet shbko
- ${1:target}.should be_a_kind_of( ${2:klass} )
- ${3}
-snippet shnbko
- ${1:target}.should_not be_a_kind_of( ${2:klass} )
- ${3}
-snippet shbio
- ${1:target}.should be_instance_of( ${2:klass} )
- ${3}
-snippet shnbio
- ${1:target}.should_not be_instance_of( ${2:klass} )
- ${3}
-snippet shbc
- ${1:target}.should be_close( ${2:result}, ${3:tolerance} )
- ${4}
-snippet shnbc
- ${1:target}.should_not be_close( ${2:result}, ${3:tolerance} )
- ${4}
-snippet shh
- ${1:target}.should have( ${2:num} ).${3:things}
- ${4}
-snippet shhal
- ${1:target}.should have_at_least( ${2:num} ).${3:things}
- ${4}
-snippet shham
- ${1:target}.should have_at_most( ${2:num} ).${3:things}
- ${4}
-snippet shbp
- ${1:target}.should ${2:be_${3:predicate}} ${4}
-snippet shnbp
- ${1:target}.should_not ${2:be_${3:predicate}} ${4}
-snippet exre
- expect { ${1} }.to raise_exception( ${2:ErrorClass}, /${3:message match}/i )
- ${4}
-snippet exnre
- expect { ${1} }.to_not raise_exception( ${2:ErrorClass} )
- ${3}
-snippet shre
- lambda { ${1} }.should raise_exception( ${2:ErrorClass}, /${3:message match}/i )
- ${4}
-snippet shnre
- lambda { ${1} }.should_not raise_exception( ${2:ErrorClass} )
- ${3}
-snippet shr
- ${1:mock}.should_receive( :${2:message} )${3}
-snippet shnr
- ${1:mock}.should_not_receive( :${2:message} )${3}
-snippet shrt
- ${1:target}.should respond_to( :${2:sym} )
-snippet shnrt
- ${1:target}.should_not respond_to( :${2:sym} )
-snippet shbl
- it_should_behave_like "${1:shared behavior}"
- ${2}
-snippet sim
- def ${1:matcher_method}( expected )
- simple_matcher do |given, matcher|
- matcher.description = "${2:verb} with #{expected.inspect}"
- matcher.failure_message = "expected #{given.inspect} to $2 with #{expected.inspect}"
- matcher.negative_failure_message = "expected #{given.inspect} not to $2 with #{expected.inspect}"
- given.${3:...checks something and returns a boolean}
- end
- end
--- a/specky/syntax/rdoc.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-"
-" specky: syntax highlighting for 'rdoc' output
-" $Id$
-
-
-" Separator lines
-"
-syntax match rdocSpeckyLines /^------\+\s\?/ contains=rdocSpeckyTarget,rdocSpeckyMultiples
-highlight link rdocSpeckyLines Comment
-
-" The class/method that we're reading
-"
-syntax match rdocSpeckyTarget / .\+/hs=s+1 contained
-highlight link rdocSpeckyTarget Underlined
-
-" When there are multiple matches to choose from.
-" This is only output by fri.
-"
-syntax match rdocSpeckyMultiples / Multiple choices/hs=s+1 contained
-highlight link rdocSpeckyMultiples WarningMsg
-
-" Secondary headers
-"
-syntax region rdocSpeckyHeader start="^\S\+.\+:$\n-\+" end="-$" keepend contains=rdocSpeckyHeaderLine
-highlight link rdocSpeckyHeader Question
-
-" Secondary header lines
-"
-syntax match rdocSpeckyHeaderLine /^-\+$/ contained
-highlight link rdocSpeckyHeaderLine NonText
-
-" Remove the formatting characters from the display
-"
-highlight link rdocSpeckySpecials NonText
-
-" _word_ --> italic
-"
-syntax region rdocSpeckyItalic matchgroup=rdocSpeckySpecials start=" _" end="_"
-highlight link rdocSpeckyItalic Special
-
-" *word* --> bold
-"
-syntax region rdocSpeckBold matchgroup=rdocSpeckySpecials start=" \*" end="\*"
-highlight link rdocSpeckyBold Constant
-
-" +word+ --> typewriter
-"
-syntax region rdocSpeckyType matchgroup=rdocSpeckySpecials start=" +" end="+"
-highlight link rdocSpeckyType Identifier
-
-let b:current_syntax = "rdoc"
-
--- a/specky/syntax/rspec.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-"
-" specky: syntax highlighting for rspec files.
-" This includes keywords for both rspec 1.x and rspec 2.x.
-" $Id$
-"
-
-runtime! syntax/ruby.vim
-unlet b:current_syntax
-
-syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify
-highlight link rspecGroupMethods Type
-
-syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
-highlight link rspecBeforeAndAfter Statement
-
-syntax keyword rspecMocks double mock stub stub_chain
-highlight link rspecMocks Constant
-
-syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
-highlight link rspecMockMethods Function
-
-syntax keyword rspecKeywords should should_not should_not_receive should_receive
-highlight link rspecKeywords Constant
-
-syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not when wrap_expectation
-syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
-highlight link rspecMatchers Function
-
-syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with
-highlight link rspecMessageExpectation Function
-
-let b:current_syntax = "rspec"
-
--- a/specky/syntax/specrun.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-"
-" specky: syntax highlighting for rspec test output, using the
-" custom specky formatter. (rspec 2.x)
-" $Id$
-"
-
-if has("folding")
- setlocal foldmethod=syntax
-endif
-
-" Command line as it was called, inserted by Specky
-syntax match specSpeckyCmd /^Output of: .*/
-
-" Pending specs that somehow pass
-syntax keyword specCallout FIXED
-
-" Passed specs
-syntax match specPassed /.*(\d\+.\d\+s)/ contains=specDuration,specBoxLine
-syntax keyword specPassedKeyword Succeeded
-
-" Pending specs
-syntax match specPending /.*PENDING: .*)$/ contains=specDuration,specBoxLine
-syntax keyword specPendingKeyword Pending
-
-" Failed specs
-syntax match specFailed /.*FAILED - #\d\+)/ contains=specDuration,specBoxLine
-syntax keyword specFailedKeyword Failed
-
-" Failure details
-syntax region specFailedDetails start="^FAILURE - #\d\+)" end="^$" fold contains=specCallout,specErrorLine
-syntax match specErrorLine /^ >>/
-
-
-" Boxes
-syntax match specBox /^\(\s\+\)\?\(+[+-]\+\||.*|\)$/ contains=specFailedKeyword,specDurationKeyword,specPendingKeyword,specPassedKeyword,specBoxContent
-syntax match specBoxContent /[a-zA-Z0-9]\+/ contained
-syntax match specBoxLine /^\(\s\+\)\?|/ contained
-
-" Spec timing
-" syntax match specDuration /\d\+\.\d\+s/ contained
-" syntax keyword specDurationKeyword Duration
-
-highlight def link specSpeckyCmd Question
-highlight def link specCallout Todo
-highlight def link specPassed MoreMsg
-highlight def link specPassedKeyword specPassed
-highlight def link specPending Function
-highlight def link specPendingKeyword specPending
-highlight def link specFailed WarningMsg
-highlight def link specFailedKeyword specFailed
-highlight def link specFailedDetails specFailed
-highlight def link specDuration Normal
-highlight def link specBox LineNr
-highlight def link specBoxContent Constant
-highlight def link specBoxLine LineNr
-highlight def link specErrorLine ErrorMsg
-
-let b:current_syntax = "specrun"
-
--- a/specky/syntax/specrun1.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-"
-" specky: syntax highlighting for the 'spec' script output (rspec 1.x)
-" $Id$
-"
-
-if has("folding")
- setlocal foldmethod=syntax
-endif
-
-" Command line as it was called, inserted by Specky
-"
-syntax match specSpeckyCmd /^Output of: .*/
-highlight link specSpeckyCmd Question
-"syntax match WarningMsg /\.\./
-
-" Plain output block (...P..F...)
-"
-syntax region specPlain start="^[\.PF]\+" end="^$" contains=specFailedPlain,specPendingPlain
-highlight link specPlain MoreMsg
-
-" Passed specs (specdoc output)
-"
-syntax match specPassed /^- .*/ contains=specFailed,specPending
-highlight link specPassed MoreMsg
-
-" Pending specs (specdoc output)
-"
-syntax match specPending /.*PENDING: .*)$/ contained
-highlight link specPending Function
-"
-" (Plain output)
-syntax match specPendingPlain /P/ contained
-highlight link specPendingPlain Function
-
-" Failed specs (specdoc output)
-"
-syntax match specFailed /.*\(FAILED\|ERROR\) - \d\+)/ contained
-highlight link specFailed WarningMsg
-"
-" (Plain output)
-syntax match specFailedPlain /F/ contained
-highlight link specFailedPlain WarningMsg
-
-" Warning details
-"
-syntax region specFailedDetails start="^\d\+)" end="^$" fold
-highlight link specFailedDetails WarningMsg
-
-" Pending specs
-"
-syntax region specPendingDetails start="^Pending:" end="^$" fold
-highlight link specPendingDetails Function
-
-" Timing information
-"
-syntax match specTimedRun /^Finished in.*/
-highlight link specTimedRun Question
-
-" Status summary
-"
-syntax match specExamplesTotal /^\d\+ examples, .\+/ contains=specTotalFailed,specNoFailures,specTotalPending
-highlight link specExamplesTotal Special
-"
-syntax match specTotalFailed /\d\+ failure\%[s]/ contained
-highlight link specTotalFailed WarningMsg
-"
-syntax match specTotalPending /\d pending/ contained
-highlight link specTotalPending Function
-"
-syntax match specNoFailures /0 failures/ contained
-highlight link specNoFailures MoreMsg
-
-
-let b:current_syntax = "specrun"
-
--- a/syntax/bird.vim Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-"----------------------------------------------------------------------
-" Vim syntax file
-" Language: Configuration for the Bird Internet Routing Daemon
-" Bird Site: http://bird.network.cz/
-" Maintainer: Mahlon E. Smith <mahlon@martini.nu>
-" Version: $Id$
-"----------------------------------------------------------------------
-
-if has( "folding" )
- setlocal foldmethod=syntax
-endif
-
-setlocal iskeyword+=;
-
-syntax region birdInlineComment start=/#/ end=/$/
-syntax region birdBlockComment start=/^#/ end=/^\([^#]\|$\)/me=e-1 fold
-highlight link birdInlineComment Comment
-highlight link birdBlockComment Comment
-
-syntax region birdString start=/"/ skip=/\\"/ end=/"/
-highlight link birdString String
-
-syntax match birdNetworkAddressIP4 /\d\+\.\d\+\.\d\+\.\d\+\(\/\d\+\)\?/
-highlight link birdNetworkAddressIP4 Character
-
-syntax match birdNumber / \d\+\(;\|\s\|$\)/
-highlight link birdNumber Number
-
-syntax match birdOperator /\(+\|-\|*\|\/\|(\|)\|=\|<\|>\|!\|&&\|||\|\~\)/
-highlight link birdOperator Operator
-
-syntax region birdFunctionArguments start=/(/ end=/)/ oneline
-syntax region birdFunction matchgroup=birdFunctionArguments start=/\S\+(/ end=/)/ oneline transparent
-highlight link birdFunctionArguments Function
-
-syntax cluster birdCommon contains=birdInlineComment,birdString,birdNetworkAddressIP4,birdNumber,birdOperator,birdFunction
-
-syntax keyword birdGlobals define table eval
-syntax match birdGlobals /\(router id\|listen bgp\) /
-highlight link birdGlobals PreProc
-
-syntax region birdLog start=/^log / end=/$/ keepend contains=@birdCommon,birdLogOptions,birdLogDirective,birdLogLevels
-syntax keyword birdLogOptions syslog stderr contained
-syntax keyword birdLogLevels all all; info warning error fatal trace remote auth bug contained
-syntax keyword birdLogDirective log contained
-highlight link birdLogOptions Identifier
-highlight link birdLogDirective PreProc
-highlight link birdLogLevels Special
-highlight link birdLog Normal
-
-syntax region birdDebug start=/debug / end=/$/ keepend contains=@birdCommon,birdDebugOptions,birdDebugDirective,birdDebugTypes
-syntax keyword birdDebugOptions protocols commands contained
-syntax keyword birdDebugTypes all all; off off; states routes filters interfaces events packets messages contained
-syntax keyword birdDebugDirective debug contained
-highlight link birdDebugOptions Identifier
-highlight link birdDebugDirective PreProc
-highlight link birdDebugTypes Special
-highlight link birdDebug Normal
-
-syntax region birdMrt start=/mrtdump / end=/$/ keepend contains=@birdCommon,birdMrtOptions,birdMrtDirective,birdMrtTypes
-syntax keyword birdMrtOptions protocols contained
-syntax keyword birdMrtTypes all all; off off; states messages contained
-syntax keyword birdMrtDirective mrtdump contained
-highlight link birdMrtOptions Identifier
-highlight link birdMrtDirective PreProc
-highlight link birdMrtTypes Special
-highlight link birdMrt Normal
-
-syntax cluster birdProtoShared contains=birdGlobals,birdDebug,birdMrt
-
-syntax region birdTimeFormat start=/^timeformat / end=/$/ keepend contains=@birdCommon,birdTimeFormatDirective,birdTimeFormatTypes
-syntax keyword birdTimeFormatTypes route protocol base log contained
-syntax keyword birdTimeFormatDirective timeformat contained
-highlight link birdTimeFormatDirective PreProc
-highlight link birdTimeFormatTypes Identifier
-highlight link birdTimeFormat Normal
-
-syntax region birdImportExport start=/\(import\|export\) / end=/$/ contains=@birdCommon,birdImportExportDirective,birdImportExportTypes,birdFilter,birdFilterProtoConstants,birdFilterAttributes
-syntax keyword birdImportExportDirective import export contained
-syntax keyword birdImportExportTypes all all; none none; where contained
-highlight link birdImportExportDirective Type
-highlight link birdImportExportTypes Special
-highlight link birdImportExport Normal
-
-syntax region birdProtocol start=/^protocol / end=/^}/ contains=@birdCommon,@birdProtoShared,birdProtocolDirective,birdProtocolTypes,birdProtocolMisc,birdProtocolGlobals,birdImportExport,birdProtocolDisabled,birdProtocolBools,birdProtocolDate,birdFilter,birdProtocolAttributes fold
-syntax keyword birdProtocolDirective protocol area interface networks stubnet neighbors contained
-syntax match birdProtocolDirective /virtual link / contained
-syntax keyword birdProtocolTypes bgp device direct kernel ospf pipe rip static contained
-syntax keyword birdProtocolMisc as via self self; drop drop; ignore ignore; normal; large; broadcast; nonbroadcast nonbroadcast; pointopoint; none; simple; plain; md5; cryptographic; eligible; opaque; transparent; always; never; neighbor; multicast; reject; prohibit; contained
-syntax keyword birdProtocolGlobals preference description id password type local neighbor multihop passive passive; persist persist; learn learn; primary rfc1583compat rfc1583compat; tick hidden hidden; summary summary; cost stub stub; hello poll retransmit priority wait authentication strict honor port infinity period mode route contained
-syntax match birdProtocolGlobals /generate from\|generate to\|accept from\|accept to\|next hop\|missing lladdr\|source address\|rr client\|rr cluster id\|rs client\|enable route refresh\|interpret communities\|enable as4\|capabilities\|advertise ipv4\|route limit\|disable after error\|\(startup \)\?hold time\|\(scan\|keepalive\|timeout\|garbage\|connect retry\|start delay\|error \(wait\|forget\)\) time\|path metric\|prefer older\|default bgp_med\|default bgp_local_pref\|device routes\|\(kernel\|peer\) table\|stub cost\|dead\( count\)\?\|rx buffer/ contained
-syntax match birdProtocolDate /\d\{2\}-\d\{2\}-\d\{4\} \d\{2\}:\d\{2\}:\d\{2\}/ contained
-syntax keyword birdProtocolDisabled disabled disabled; contained
-syntax keyword birdProtocolBools yes yes; no no; contained
-syntax match birdProtocolAttributes /bgp_path\|bgp_local_pref\|bgp_med\|bgp_origin\|bgp_next_hop\|bgp_atomic_aggr\|bgp_community\|bgp_originator_id\|bgp_cluster_list\|ospf_metric1\|ospf_metric2\|ospf_tag\|rip_metric\|rip_tag/ contained
-highlight link birdProtocolDirective PreProc
-highlight link birdProtocolTypes Function
-highlight link birdProtocolMisc String
-highlight link birdProtocolGlobals Constant
-highlight link birdProtocolDisabled Error
-highlight link birdProtocolBools Boolean
-highlight link birdProtocolDate Number
-highlight link birdProtocolAttributes Identifier
-highlight link birdProtocol Normal
-
-syntax keyword birdInternalFunctions accept accept; reject reject; print printn return quitbird defined contained
-syntax keyword birdInternalControls if then else case contained
-syntax keyword birdInternalTypes bool int pair quad string ip prefix enum bgppath bgpmask clist contained
-highlight link birdInternalFunctions Keyword
-highlight link birdInternalControls Conditional
-highlight link birdInternalTypes Type
-
-" inline, named filters
-syntax match birdFilter /filter.\+$/ contains=@birdCommon,birdFilterDirective
-" filter definitions
-syntax region birdFilter start=/^filter\(\s\+\S\+\)\?\s\+/ end=/^}$/ fold contains=@birdCommon,birdFilterDirective,birdFilterProtoConstants,birdInternalFunctions,birdFilterAttributes,birdInternalControls,birdInternalTypes,birdProtocolAttributes
-" inline complex filters
-syntax region birdFilter start=/filter\s\+{/ end=/};/ fold contains=@birdCommon,birdFilterDirective,birdFilterProtoConstants,birdInternalFunctions,birdFilterAttributes,birdInternalControls,birdInternalTypes,birdProtocolAttributes
-syntax match birdFilterDirective /filter/ nextgroup=birdFilterName skipwhite contained
-syntax match birdFilterName /[^{;]\+/ skipwhite contained
-syntax match birdFilterProtoConstants /\(RTS_DUMMY\|RTS_STATIC\|RTS_INHERIT\|RTS_DEVICE\|RTS_STATIC_DEVICE\|RTS_REDIRECT\|RTS_RIP\|RTS_OSPF\|RTS_OSPF_IA\|RTS_OSPF_EXT1\|RTS_OSPF_EXT2\|RTS_BGP\|RTS_PIPE\)/ contained
-syntax keyword birdFilterAttributes net scope preference from gw proto source cast dest contained
-highlight link birdFilterDirective PreProc
-highlight link birdFilterName Function
-highlight link birdFilterProtoConstants Underlined
-highlight link birdFilterAttributes Identifier
-highlight link birdFilter Normal
-
-syntax region birdFunctionDef start=/^function\(\s\+\S\+\)\?\s\+/ end=/^}$/ fold contains=@birdCommon,birdFunctionDirective,birdInternalFunctions,birdInternalControls,birdInternalTypes
-syntax match birdFunctionDirective /function / nextgroup=birdFunctionName skipwhite contained
-syntax match birdFunctionName /[^(]\+/ skipwhite contained
-highlight link birdFunctionDirective PreProc
-highlight link birdFunctionName Function
-highlight link birdFunctionDef Normal
-
-let b:current_syntax = "bird"
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/rdoc.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,52 @@
+"
+" specky: syntax highlighting for 'rdoc' output
+" $Id$
+
+
+" Separator lines
+"
+syntax match rdocSpeckyLines /^------\+\s\?/ contains=rdocSpeckyTarget,rdocSpeckyMultiples
+highlight link rdocSpeckyLines Comment
+
+" The class/method that we're reading
+"
+syntax match rdocSpeckyTarget / .\+/hs=s+1 contained
+highlight link rdocSpeckyTarget Underlined
+
+" When there are multiple matches to choose from.
+" This is only output by fri.
+"
+syntax match rdocSpeckyMultiples / Multiple choices/hs=s+1 contained
+highlight link rdocSpeckyMultiples WarningMsg
+
+" Secondary headers
+"
+syntax region rdocSpeckyHeader start="^\S\+.\+:$\n-\+" end="-$" keepend contains=rdocSpeckyHeaderLine
+highlight link rdocSpeckyHeader Question
+
+" Secondary header lines
+"
+syntax match rdocSpeckyHeaderLine /^-\+$/ contained
+highlight link rdocSpeckyHeaderLine NonText
+
+" Remove the formatting characters from the display
+"
+highlight link rdocSpeckySpecials NonText
+
+" _word_ --> italic
+"
+syntax region rdocSpeckyItalic matchgroup=rdocSpeckySpecials start=" _" end="_"
+highlight link rdocSpeckyItalic Special
+
+" *word* --> bold
+"
+syntax region rdocSpeckBold matchgroup=rdocSpeckySpecials start=" \*" end="\*"
+highlight link rdocSpeckyBold Constant
+
+" +word+ --> typewriter
+"
+syntax region rdocSpeckyType matchgroup=rdocSpeckySpecials start=" +" end="+"
+highlight link rdocSpeckyType Identifier
+
+let b:current_syntax = "rdoc"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/rspec.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,33 @@
+"
+" specky: syntax highlighting for rspec files.
+" This includes keywords for both rspec 1.x and rspec 2.x.
+" $Id$
+"
+
+runtime! syntax/ruby.vim
+unlet b:current_syntax
+
+syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify
+highlight link rspecGroupMethods Type
+
+syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
+highlight link rspecBeforeAndAfter Statement
+
+syntax keyword rspecMocks double mock stub stub_chain
+highlight link rspecMocks Constant
+
+syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
+highlight link rspecMockMethods Function
+
+syntax keyword rspecKeywords should should_not should_not_receive should_receive
+highlight link rspecKeywords Constant
+
+syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not when wrap_expectation
+syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
+highlight link rspecMatchers Function
+
+syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with
+highlight link rspecMessageExpectation Function
+
+let b:current_syntax = "rspec"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/specrun.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,59 @@
+"
+" specky: syntax highlighting for rspec test output, using the
+" custom specky formatter. (rspec 2.x)
+" $Id$
+"
+
+if has("folding")
+ setlocal foldmethod=syntax
+endif
+
+" Command line as it was called, inserted by Specky
+syntax match specSpeckyCmd /^Output of: .*/
+
+" Pending specs that somehow pass
+syntax keyword specCallout FIXED
+
+" Passed specs
+syntax match specPassed /.*(\d\+.\d\+s)/ contains=specDuration,specBoxLine
+syntax keyword specPassedKeyword Succeeded
+
+" Pending specs
+syntax match specPending /.*PENDING: .*)$/ contains=specDuration,specBoxLine
+syntax keyword specPendingKeyword Pending
+
+" Failed specs
+syntax match specFailed /.*FAILED - #\d\+)/ contains=specDuration,specBoxLine
+syntax keyword specFailedKeyword Failed
+
+" Failure details
+syntax region specFailedDetails start="^FAILURE - #\d\+)" end="^$" fold contains=specCallout,specErrorLine
+syntax match specErrorLine /^ >>/
+
+
+" Boxes
+syntax match specBox /^\(\s\+\)\?\(+[+-]\+\||.*|\)$/ contains=specFailedKeyword,specDurationKeyword,specPendingKeyword,specPassedKeyword,specBoxContent
+syntax match specBoxContent /[a-zA-Z0-9]\+/ contained
+syntax match specBoxLine /^\(\s\+\)\?|/ contained
+
+" Spec timing
+" syntax match specDuration /\d\+\.\d\+s/ contained
+" syntax keyword specDurationKeyword Duration
+
+highlight def link specSpeckyCmd Question
+highlight def link specCallout Todo
+highlight def link specPassed MoreMsg
+highlight def link specPassedKeyword specPassed
+highlight def link specPending Function
+highlight def link specPendingKeyword specPending
+highlight def link specFailed WarningMsg
+highlight def link specFailedKeyword specFailed
+highlight def link specFailedDetails specFailed
+highlight def link specDuration Normal
+highlight def link specBox LineNr
+highlight def link specBoxContent Constant
+highlight def link specBoxLine LineNr
+highlight def link specErrorLine ErrorMsg
+
+let b:current_syntax = "specrun"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/specrun1.vim Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,75 @@
+"
+" specky: syntax highlighting for the 'spec' script output (rspec 1.x)
+" $Id$
+"
+
+if has("folding")
+ setlocal foldmethod=syntax
+endif
+
+" Command line as it was called, inserted by Specky
+"
+syntax match specSpeckyCmd /^Output of: .*/
+highlight link specSpeckyCmd Question
+"syntax match WarningMsg /\.\./
+
+" Plain output block (...P..F...)
+"
+syntax region specPlain start="^[\.PF]\+" end="^$" contains=specFailedPlain,specPendingPlain
+highlight link specPlain MoreMsg
+
+" Passed specs (specdoc output)
+"
+syntax match specPassed /^- .*/ contains=specFailed,specPending
+highlight link specPassed MoreMsg
+
+" Pending specs (specdoc output)
+"
+syntax match specPending /.*PENDING: .*)$/ contained
+highlight link specPending Function
+"
+" (Plain output)
+syntax match specPendingPlain /P/ contained
+highlight link specPendingPlain Function
+
+" Failed specs (specdoc output)
+"
+syntax match specFailed /.*\(FAILED\|ERROR\) - \d\+)/ contained
+highlight link specFailed WarningMsg
+"
+" (Plain output)
+syntax match specFailedPlain /F/ contained
+highlight link specFailedPlain WarningMsg
+
+" Warning details
+"
+syntax region specFailedDetails start="^\d\+)" end="^$" fold
+highlight link specFailedDetails WarningMsg
+
+" Pending specs
+"
+syntax region specPendingDetails start="^Pending:" end="^$" fold
+highlight link specPendingDetails Function
+
+" Timing information
+"
+syntax match specTimedRun /^Finished in.*/
+highlight link specTimedRun Question
+
+" Status summary
+"
+syntax match specExamplesTotal /^\d\+ examples, .\+/ contains=specTotalFailed,specNoFailures,specTotalPending
+highlight link specExamplesTotal Special
+"
+syntax match specTotalFailed /\d\+ failure\%[s]/ contained
+highlight link specTotalFailed WarningMsg
+"
+syntax match specTotalPending /\d pending/ contained
+highlight link specTotalPending Function
+"
+syntax match specNoFailures /0 failures/ contained
+highlight link specNoFailures MoreMsg
+
+
+let b:current_syntax = "specrun"
+