Implemented i option (inword snippet expansion) along the line of the patch by jceb, also added his test cases

This commit is contained in:
Holger Rapp 2009-08-16 16:34:54 +02:00
parent f5610ae451
commit cd0b859b62
4 changed files with 49 additions and 2 deletions

View File

@ -29,7 +29,7 @@ ${4/.+/(?0:\n)/}${4/(\A\s*,\s*\Z)|,?\s*([A-Za-z_][A-Za-z0-9_]*)\s*(=[^,]*)?(,\s*
${2/object$|(.+)/(?1: $0.__init__\(self\)\n\n)/}${4/(\A\s*,\s*\Z)|,?\s*([A-Za-z_][A-Za-z0-9_]*)\s*(=[^,]*)?(,\s*|$)/(?2: self._$2 = $2\n)/g} ${2/object$|(.+)/(?1: $0.__init__\(self\)\n\n)/}${4/(\A\s*,\s*\Z)|,?\s*([A-Za-z_][A-Za-z0-9_]*)\s*(=[^,]*)?(,\s*|$)/(?2: self._$2 = $2\n)/g}
endsnippet endsnippet
snippet . snippet . "self." i
self. self.
endsnippet endsnippet

View File

@ -178,6 +178,9 @@ snippet on. The options currently supported are >
of the cursor). Default is to expand snippets at every position, even of the cursor). Default is to expand snippets at every position, even
mitten in the line. Most of my snippets have this option set, it keeps mitten in the line. Most of my snippets have this option set, it keeps
UltiSnips out of the way. UltiSnips out of the way.
i Inword expansion - normally, triggers need whitespace before them to be
expanded. With this option, triggers are also expanded in the middle of
a word.
4.2 Plaintext snippets *UltiSnips-plaintext-snippets* 4.2 Plaintext snippets *UltiSnips-plaintext-snippets*
---------------------- ----------------------

View File

@ -11,12 +11,24 @@ from UltiSnips.Geometry import Position
from UltiSnips.TextObjects import * from UltiSnips.TextObjects import *
from UltiSnips.Buffer import VimBuffer from UltiSnips.Buffer import VimBuffer
# TODO: it doesn't make sense to have
# this as a baseclass of a dict, since we have
# to run through all snippets anyway
class _SnippetDictionary(dict): class _SnippetDictionary(dict):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs) dict.__init__(self, *args, **kwargs)
self._extends = [] self._extends = []
def get_matching_snippets(self, trigger):
"""Returns all snippets matching the given trigger."""
rv = []
for l in self.values():
for snip in l:
if snip.matches(trigger):
rv.append(snip)
return rv
def extends(): def extends():
def fget(self): def fget(self):
return self._extends return self._extends
@ -86,6 +98,11 @@ class Snippet(object):
def __repr__(self): def __repr__(self):
return "Snippet(%s,%s,%s)" % (self._t,self._d,self._opts) return "Snippet(%s,%s,%s)" % (self._t,self._d,self._opts)
def matches(self, trigger):
if "i" not in self._opts:
return trigger == self._t
return trigger.endswith(self._t)
def overwrites_previous(self): def overwrites_previous(self):
return "!" in self._opts return "!" in self._opts
overwrites_previous = property(overwrites_previous) overwrites_previous = property(overwrites_previous)
@ -489,6 +506,9 @@ class SnippetManager(object):
return True return True
raise raise
# Adjust before, maybe the trigger is not the complete word
text_before += word[:-len(snippet.trigger)]
self._expect_move_wo_change = True self._expect_move_wo_change = True
if self._cs: if self._cs:
@ -590,7 +610,7 @@ class SnippetManager(object):
parent_results = reduce( lambda a,b: a+b, parent_results = reduce( lambda a,b: a+b,
[ self._find_snippets(p, trigger) for p in snips.extends ], []) [ self._find_snippets(p, trigger) for p in snips.extends ], [])
return parent_results + snips.get(trigger, []) return parent_results + snips.get_matching_snippets(trigger)
UltiSnips_Manager = SnippetManager() UltiSnips_Manager = SnippetManager()

24
test.py
View File

@ -1075,6 +1075,30 @@ class SnippetOptions_OnlyExpandWhenWSInFront_OneWithOneWOChoose(_VimTest):
keys = " test" + EX + "1\n" keys = " test" + EX + "1\n"
wanted = " Expand me!" wanted = " Expand me!"
class SnippetOptions_ExpandInwordSnippets_SimpleExpand(_VimTest):
snippets = (("test", "Expand me!", "", "i"), )
keys = "atest" + EX
wanted = "aExpand me!"
class SnippetOptions_ExpandInwordSnippets_ExpandSingle(_VimTest):
snippets = (("test", "Expand me!", "", "i"), )
keys = "test" + EX
wanted = "Expand me!"
class SnippetOptions_ExpandInwordSnippetsWithOtherChars_Expand(_VimTest):
snippets = (("test", "Expand me!", "", "i"), )
keys = "$test" + EX
wanted = "$Expand me!"
class SnippetOptions_ExpandInwordSnippetsWithOtherChars_Expand2(_VimTest):
snippets = (("test", "Expand me!", "", "i"), )
keys = "-test" + EX
wanted = "-Expand me!"
class SnippetOptions_ExpandInwordSnippetsWithOtherChars_Expand3(_VimTest):
snippets = (("test", "Expand me!", "", "i"), )
keys = "ätest" + EX
wanted = "äExpand me!"
###################### ######################
# SELECTING MULTIPLE # # SELECTING MULTIPLE #
###################### ######################