- Refactored snippets filter.
This commit is contained in:
parent
6780dd60f6
commit
6e733a5ccb
@ -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',
|
||||||
|
@ -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')
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user