Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Support included dependencies

I've changed my custom packaging script to include the required Lua
libraries in the ZIP archives I publish on www.vim.org and I've also
added the code required to reliably set Lua's "package.path" whether
using the Lua interface for Vim or an external process. This makes the
plug-in self contained: Just unzip the archive and you're off!
  • Loading branch information...
commit 43307cbb3a99b3a6075640151626f50846ced474 1 parent ce2b578
@xolox authored
Showing with 87 additions and 62 deletions.
  1. +1 −5 README.md
  2. +86 −56 luainspect.vim
  3. +0 −1  luainspect4vim.lua
View
6 README.md
@@ -6,11 +6,7 @@ The Vim plug-in `luainspect.vim` uses the [LuaInspect](http://lua-users.org/wiki
## Installation
-1. Unzip the most recent [ZIP archive](http://peterodding.com/code/vim/downloads/lua-inspect) file inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows) and move or symlink the file `luainspect4vim.lua` somewhere where Lua's `require()` function can find it.
-
-2. Download the latest [LuaInspect sources](http://github.com/davidm/lua-inspect/zipball/master) and unpack the contents of the `luainspectlib/` and `metalualib/` directories where Lua's `require()` function can find them.
-
-3. Restart Vim and edit any Lua file. Within a few seconds semantic highlighting should be enabled automatically.
+Unzip the most recent [ZIP archive](http://peterodding.com/code/vim/downloads/lua-inspect) file inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use `:helptags ~\vimfiles\doc` instead on Windows). Now try it out: Edit a Lua file and within a few seconds semantic highlighting should be enabled automatically!
## Usage
View
142 luainspect.vim
@@ -17,6 +17,15 @@ if !exists('g:lua_inspect_events')
let g:lua_inspect_events = 'CursorHold,CursorHoldI,BufWritePost'
endif
+if !exists('g:lua_inspect_path')
+ " Change this if you want to move the Lua modules somewhere else.
+ if has('win32') || has('win64')
+ let g:lua_inspect_path = '~\vimfiles\misc\luainspect'
+ else
+ let g:lua_inspect_path = '~/.vim/misc/luainspect'
+ endif
+endif
+
if !exists('g:lua_inspect_internal')
" Set this to false (0) to run LuaInspect as an external process instead of
" using the Lua interface for Vim. This makes it slower but might make it
@@ -42,95 +51,84 @@ let s:groups['SelectedVariable'] = 'Folded'
" (Automatic) command definitions. {{{1
-command! -bar -bang LuaInspect call s:RunLuaInspect(<q-bang> == '!')
+command! -bar -bang LuaInspect call s:run_lua_inspect(<q-bang> != '!')
augroup PluginLuaInspect
" Clear existing automatic commands.
autocmd!
" Disable easytags.vim because it doesn't play nice with luainspect.vim!
- autocmd BufReadPost * if s:IsEnabled() | let b:easytags_nohl = 1 | endif
+ autocmd BufReadPost * if s:check_plugin_enabled() | let b:easytags_nohl = 1 | endif
" Define the configured automatic commands.
for s:event in split(g:lua_inspect_events, ',')
- execute 'autocmd' s:event '* if s:IsEnabled() | LuaInspect | endif'
+ execute 'autocmd' s:event '* if s:check_plugin_enabled() | LuaInspect | endif'
endfor
augroup END
" Script local functions. {{{1
-function! s:IsEnabled()
+function! s:check_plugin_enabled()
return &ft == 'lua' && !&diff && !exists('b:luainspect_disabled')
endfunction
-function! s:RunLuaInspect(disable) " {{{2
- if a:disable
- call s:ClearPreviousMatches()
+function! s:run_lua_inspect(enabled) " {{{2
+ if s:set_plugin_enabled(a:enabled)
+ let lines = getline(1, "$")
+ call insert(lines, col('.'))
+ call insert(lines, line('.'))
+ call s:parse_text(join(lines, "\n"), s:prepare_search_path())
+ call s:define_default_styles()
+ call s:clear_previous_matches()
+ call s:highlight_variables()
+ endif
+endfunction
+
+function! s:set_plugin_enabled(enabled) " {{{2
+ if a:enabled
+ unlet! b:luainspect_disabled
+ return 1
+ else
+ call s:clear_previous_matches()
unlet! b:luainspect_input b:luainspect_output
let b:luainspect_disabled = 1
- return
- else
- unlet! b:luainspect_disabled
+ return 0
+ endif
+endfunction
+
+function! s:prepare_search_path() " {{{2
+ let code = ''
+ if !(has('lua') && g:lua_inspect_internal && exists('s:changed_path'))
+ let template = 'package.path = ''%s/?.lua;'' .. package.path'
+ let code = printf(template, escape(expand(g:lua_inspect_path), '"\'))
+ if has('lua') && g:lua_inspect_internal
+ execute 'lua' code
+ let s:changed_path = 1
+ endif
endif
- let lines = getline(1, "$")
- call insert(lines, col('.'))
- call insert(lines, line('.'))
- let l:input = join(lines, "\n")
- " Don't parse the text when it hasn't been changed.
- if !(exists('b:luainspect_input') && b:luainspect_input == l:input)
+ return code
+endfunction
+
+function! s:parse_text(input, search_path) " {{{2
+ if !(exists('b:luainspect_input') && b:luainspect_input == a:input)
if !(has('lua') && g:lua_inspect_internal)
- " Run LuaInspect as an external program.
- let b:luainspect_output = system('lua -e "require ''luainspect4vim'' (io.read ''*a'')"', l:input)
+ let template = 'lua -e "%s; require ''luainspect4vim'' (io.read ''*a'')"'
+ let b:luainspect_output = system(printf(template, a:search_path), a:input)
else
- " Run LuaInspect using the Lua interface for Vim.
redir => b:luainspect_output
silent lua << EOF
if io == nil then
-- The Lua interface for Vim previously didn't include io.*!
io = { type = function() end }
end
- require 'luainspect4vim' (vim.eval 'l:input')
+ require 'luainspect4vim' (vim.eval 'a:input')
EOF
redir END
endif
" Remember the text that was just parsed.
- let b:luainspect_input = l:input
+ let b:luainspect_input = a:input
endif
- " Clear previously created highlighting.
- call s:LoadDefaultStyles()
- call s:ClearPreviousMatches()
- " Highlight variables in buffer based on positions.
- let did_warning = 0
- for line in split(b:luainspect_output, "\n")
- let fields = split(line)
- if len(fields) != 4
- if !did_warning
- try
- echohl WarningMsg
- echomsg "Invalid output from luainspect4vim.lua:"
- finally
- echohl None
- let did_warning = 1
- endtry
- endif
- echomsg strtrans(line)
- else
- let [type, lnum, start, end] = fields
- let command = 'syntax match %s /\%%%il\%%>%ic\<\w\+\>\%%<%ic/'
- execute printf(command, type, lnum, start - 1, end + 2)
- endif
- endfor
endfunction
-function! s:ClearPreviousMatches() " {{{2
- " Clear existing highlighting.
- for group in keys(s:groups)
- let group = 'luaInspect' . group
- if hlexists(group)
- execute 'syntax clear' group
- endif
- endfor
-endfunction
-
-function! s:LoadDefaultStyles() " {{{2
+function! s:define_default_styles() " {{{2
" Always define the default highlighting styles
" (copied from /luainspect/scite.lua for consistency).
" TODO Consider the &background?
@@ -148,6 +146,38 @@ function! s:LoadDefaultStyles() " {{{2
endfor
endfunction
+function! s:clear_previous_matches() " {{{2
+ " Clear existing highlighting.
+ for group in keys(s:groups)
+ let group = 'luaInspect' . group
+ if hlexists(group)
+ execute 'syntax clear' group
+ endif
+ endfor
+endfunction
+
+function! s:highlight_variables() " {{{2
+ let did_warning = 0
+ for line in split(b:luainspect_output, "\n")
+ if match(line, '^\w\+\(\s\+\d\+\)\{3}$') == -1
+ if !did_warning
+ try
+ echohl WarningMsg
+ echomsg "Invalid output from luainspect4vim.lua:"
+ finally
+ echohl None
+ let did_warning = 1
+ endtry
+ endif
+ echomsg strtrans(line)
+ else
+ let [type, lnum, start, end] = split(line)
+ let syntax_cmd = 'syntax match %s /\%%%il\%%>%ic\<\w\+\>\%%<%ic/'
+ execute printf(syntax_cmd, type, lnum, start - 1, end + 2)
+ endif
+ endfor
+endfunction
+
" }}}1
" Make sure the plug-in is only loaded once.
View
1  luainspect4vim.lua
@@ -39,7 +39,6 @@ end
return function(src)
local LI = require 'luainspect.init'
local LA = require 'luainspect.ast'
- -- Split input into current position and source text.
local line, column, src = src:match '^(%d+)\n(%d+)\n(.*)$'
line = tonumber(line)
column = tonumber(column)
Please sign in to comment.
Something went wrong with that request. Please try again.