- Refactored snippets filter.

This commit is contained in:
Shougo Matsushita 2012-10-04 10:22:35 +09:00
parent 6780dd60f6
commit 6e733a5ccb
3 changed files with 48 additions and 44 deletions

View File

@ -1,7 +1,7 @@
"============================================================================= "=============================================================================
" FILE: snippets_complete.vim " FILE: snippets_complete.vim
" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com> " AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
" Last Modified: 30 Sep 2012. " Last Modified: 04 Oct 2012.
" License: MIT license {{{ " License: MIT license {{{
" Permission is hereby granted, free of charge, to any person obtaining " Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the " a copy of this software and associated documentation files (the
@ -62,13 +62,9 @@ endfunction"}}}
function! s:keyword_filter(list, cur_keyword_str)"{{{ function! s:keyword_filter(list, cur_keyword_str)"{{{
let keyword_escape = neocomplcache#keyword_escape(a:cur_keyword_str) let keyword_escape = neocomplcache#keyword_escape(a:cur_keyword_str)
let prev_word = neocomplcache#get_prev_word(a:cur_keyword_str)
" Keyword filter. " Keyword filter.
let pattern = printf('v:val.word =~ %s &&'. let list = filter(a:list, printf('v:val.word =~ %s',
\ '(!has_key(v:val, "prev_word") || v:val.prev_word == %s)', \ string('^' . keyword_escape)))
\ string('^' . keyword_escape), string(prev_word))
let list = filter(a:list, pattern)
" Substitute abbr. " Substitute abbr.
let abbr_pattern = printf('%%.%ds..%%s', let abbr_pattern = printf('%%.%ds..%%s',

View File

@ -1,7 +1,7 @@
"============================================================================= "=============================================================================
" FILE: neosnippet.vim " FILE: neosnippet.vim
" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com> " AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
" Last Modified: 01 Oct 2012. " Last Modified: 04 Oct 2012.
" License: MIT license {{{ " License: MIT license {{{
" Permission is hereby granted, free of charge, to any person obtaining " Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the " a copy of this software and associated documentation files (the
@ -415,7 +415,7 @@ function! s:get_cursor_snippet(snippets, cur_text)"{{{
return cur_word return cur_word
endfunction"}}} endfunction"}}}
function! s:snippets_force_expand(cur_text, col)"{{{ function! s:snippets_expand(cur_text, col)"{{{
let cur_word = s:get_cursor_snippet( let cur_word = s:get_cursor_snippet(
\ neosnippet#get_snippets(), \ neosnippet#get_snippets(),
\ a:cur_text) \ a:cur_text)
@ -423,6 +423,35 @@ function! s:snippets_force_expand(cur_text, col)"{{{
call neosnippet#expand( call neosnippet#expand(
\ a:cur_text, a:col, cur_word) \ a:cur_text, a:col, cur_word)
endfunction"}}} endfunction"}}}
function! s:snippets_jump(cur_text, col)"{{{
" Get patterns and count.
if empty(s:snippets_expand_stack)
return s:search_outof_range(a:col)
endif
let expand_info = s:snippets_expand_stack[-1]
" Search patterns.
let [begin, end] = s:get_snippet_range(
\ expand_info.begin_line,
\ expand_info.begin_patterns,
\ expand_info.end_line,
\ expand_info.end_patterns)
if s:search_snippet_range(begin, end, expand_info.holder_cnt)
" Next count.
let expand_info.holder_cnt += 1
return 1
endif
" Search placeholder 0.
if s:search_snippet_range(begin, end, 0)
return 1
endif
" Not found.
let s:snippets_expand_stack = s:snippets_expand_stack[: -2]
return s:search_outof_range(a:col)
endfunction"}}}
function! s:snippets_expand_or_jump(cur_text, col)"{{{ function! s:snippets_expand_or_jump(cur_text, col)"{{{
let cur_word = s:get_cursor_snippet( let cur_word = s:get_cursor_snippet(
\ neosnippet#get_snippets(), \ neosnippet#get_snippets(),
@ -439,7 +468,7 @@ function! s:snippets_expand_or_jump(cur_text, col)"{{{
call neosnippet#expand( call neosnippet#expand(
\ a:cur_text, a:col, cur_word) \ a:cur_text, a:col, cur_word)
else else
call s:snippets_force_jump(a:cur_text, a:col) call s:snippets_jump(a:cur_text, a:col)
endif endif
endfunction"}}} endfunction"}}}
function! s:snippets_jump_or_expand(cur_text, col)"{{{ function! s:snippets_jump_or_expand(cur_text, col)"{{{
@ -448,7 +477,7 @@ function! s:snippets_jump_or_expand(cur_text, col)"{{{
if search(s:get_placeholder_marker_pattern(). '\|' if search(s:get_placeholder_marker_pattern(). '\|'
\ .s:get_sync_placeholder_marker_pattern(), 'nw') > 0 \ .s:get_sync_placeholder_marker_pattern(), 'nw') > 0
" Found snippet placeholder. " Found snippet placeholder.
call s:snippets_force_jump(a:cur_text, a:col) call s:snippets_jump(a:cur_text, a:col)
else else
call neosnippet#expand( call neosnippet#expand(
\ a:cur_text, a:col, cur_word) \ a:cur_text, a:col, cur_word)
@ -534,7 +563,7 @@ function! neosnippet#expand(cur_text, col, trigger_name)"{{{
endif endif
if snip_word =~ s:get_placeholder_marker_pattern() if snip_word =~ s:get_placeholder_marker_pattern()
call s:snippets_force_jump(a:cur_text, a:col) call s:snippets_jump(a:cur_text, a:col)
endif endif
let &l:iminsert = 0 let &l:iminsert = 0
@ -572,35 +601,6 @@ function! s:indent_snippet(begin, end)"{{{
let &l:equalprg = equalprg let &l:equalprg = equalprg
endfunction"}}} endfunction"}}}
function! s:snippets_force_jump(cur_text, col)"{{{
" Get patterns and count.
if empty(s:snippets_expand_stack)
return s:search_outof_range(a:col)
endif
let expand_info = s:snippets_expand_stack[-1]
" Search patterns.
let [begin, end] = s:get_snippet_range(
\ expand_info.begin_line,
\ expand_info.begin_patterns,
\ expand_info.end_line,
\ expand_info.end_patterns)
if s:search_snippet_range(begin, end, expand_info.holder_cnt)
" Next count.
let expand_info.holder_cnt += 1
return 1
endif
" Search placeholder 0.
if s:search_snippet_range(begin, end, 0)
return 1
endif
" Not found.
let s:snippets_expand_stack = s:snippets_expand_stack[: -2]
return s:search_outof_range(a:col)
endfunction"}}}
function! s:get_snippet_range(begin_line, begin_patterns, end_line, end_patterns)"{{{ function! s:get_snippet_range(begin_line, begin_patterns, end_line, end_patterns)"{{{
let pos = getpos('.') let pos = getpos('.')
@ -823,7 +823,12 @@ function! neosnippet#get_snippets()"{{{
endfor endfor
call extend(snippets, copy(s:snippets['_']), 'keep') call extend(snippets, copy(s:snippets['_']), 'keep')
return snippets let cur_keyword_str = matchstr(
\ neosnippet#util#get_cur_text(), '\S\+$')
let prev_word = s:get_prev_word(cur_keyword_str)
return filter(snippets, printf("!has_key(v:val, 'prev_word')
\ || v:val.prev_word ==# %s", string(prev_word)))
endfunction"}}} endfunction"}}}
function! neosnippet#get_snippets_directory()"{{{ function! neosnippet#get_snippets_directory()"{{{
return s:snippets_dir return s:snippets_dir
@ -905,10 +910,10 @@ function! neosnippet#jump_or_expand_impl()
return s:trigger(s:SID_PREFIX().'snippets_jump_or_expand') return s:trigger(s:SID_PREFIX().'snippets_jump_or_expand')
endfunction endfunction
function! neosnippet#expand_impl() function! neosnippet#expand_impl()
return s:trigger(s:SID_PREFIX().'snippets_force_expand') return s:trigger(s:SID_PREFIX().'snippets_expand')
endfunction endfunction
function! neosnippet#jump_impl() function! neosnippet#jump_impl()
return s:trigger(s:SID_PREFIX().'snippets_force_jump') return s:trigger(s:SID_PREFIX().'snippets_jump')
endfunction endfunction
if !exists('s:snippets') if !exists('s:snippets')

View File

@ -390,6 +390,9 @@ snippet *neosnippet-unite-action-snippet*
============================================================================== ==============================================================================
CHANGELOG *neosnippet-changelog* CHANGELOG *neosnippet-changelog*
2012-10-04
- Refactored snippets filter.
2012-10-01 2012-10-01
- Deleted neosnippet#force_expandable(). - Deleted neosnippet#force_expandable().
- Improved python snippets. - Improved python snippets.