more work on the refactor. most duplicated code is gone now.
This commit is contained in:
parent
4e0102b3fa
commit
fb54432ff0
@ -165,6 +165,9 @@ class Snippet(object):
|
|||||||
# boundary).
|
# boundary).
|
||||||
word = self._word_for_line(trigger)
|
word = self._word_for_line(trigger)
|
||||||
|
|
||||||
|
if trigger and trigger[-1] in string.whitespace:
|
||||||
|
return False
|
||||||
|
|
||||||
if "b" in self._opts:
|
if "b" in self._opts:
|
||||||
text_before = trigger.rstrip()[:-len(word)]
|
text_before = trigger.rstrip()[:-len(word)]
|
||||||
if text_before.strip(" \t") != '':
|
if text_before.strip(" \t") != '':
|
||||||
@ -189,6 +192,9 @@ class Snippet(object):
|
|||||||
def could_match(self, trigger):
|
def could_match(self, trigger):
|
||||||
word = self._word_for_line(trigger)
|
word = self._word_for_line(trigger)
|
||||||
|
|
||||||
|
if trigger and trigger[-1] in string.whitespace:
|
||||||
|
return False
|
||||||
|
|
||||||
if "b" in self._opts:
|
if "b" in self._opts:
|
||||||
text_before = trigger.rstrip()[:-len(word)]
|
text_before = trigger.rstrip()[:-len(word)]
|
||||||
if text_before.strip(" \t") != '':
|
if text_before.strip(" \t") != '':
|
||||||
@ -216,11 +222,6 @@ class Snippet(object):
|
|||||||
return "!" in self._opts
|
return "!" in self._opts
|
||||||
overwrites_previous = property(overwrites_previous)
|
overwrites_previous = property(overwrites_previous)
|
||||||
|
|
||||||
# TODO: this in matches
|
|
||||||
def needs_ws_in_front(self):
|
|
||||||
return "b" in self._opts
|
|
||||||
needs_ws_in_front = property(needs_ws_in_front)
|
|
||||||
|
|
||||||
def description(self):
|
def description(self):
|
||||||
return ("(%s) %s" % (self._t, self._d)).strip()
|
return ("(%s) %s" % (self._t, self._d)).strip()
|
||||||
description = property(description)
|
description = property(description)
|
||||||
@ -229,6 +230,11 @@ class Snippet(object):
|
|||||||
return self._t
|
return self._t
|
||||||
trigger = property(trigger)
|
trigger = property(trigger)
|
||||||
|
|
||||||
|
def used_trigger(self):
|
||||||
|
#TODO here
|
||||||
|
return self._t
|
||||||
|
used_trigger = property(used_trigger)
|
||||||
|
|
||||||
def launch(self, text_before, parent, start, end = None):
|
def launch(self, text_before, parent, start, end = None):
|
||||||
indent = self._INDENT.match(text_before).group(0)
|
indent = self._INDENT.match(text_before).group(0)
|
||||||
v = self._v
|
v = self._v
|
||||||
@ -388,74 +394,16 @@ class SnippetManager(object):
|
|||||||
def list_snippets(self):
|
def list_snippets(self):
|
||||||
|
|
||||||
before, after = self._get_before_after()
|
before, after = self._get_before_after()
|
||||||
|
|
||||||
snippets = self._snips(before, True)
|
snippets = self._snips(before, True)
|
||||||
|
|
||||||
lineno,col = vim.current.window.cursor
|
if not snippets:
|
||||||
filetypes = self._ensure_snippets_loaded()
|
|
||||||
|
|
||||||
word = ''
|
|
||||||
if len(before):
|
|
||||||
word = before.split()[-1]
|
|
||||||
|
|
||||||
found_snippets = []
|
|
||||||
for ft in filetypes[::-1]:
|
|
||||||
found_snippets += self._find_snippets(ft, word, True)
|
|
||||||
|
|
||||||
if len(found_snippets) == 0:
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
display = [ "%i %s" % (idx+1,s.description)
|
snippet = self._ask_snippets(snippets)
|
||||||
for idx,s in enumerate(found_snippets) ]
|
if not snippet:
|
||||||
|
|
||||||
# TODO: this code is also mirrored below
|
|
||||||
try:
|
|
||||||
rv = vim.eval("inputlist(%s)" % display)
|
|
||||||
if rv is None or rv == '0':
|
|
||||||
return True
|
return True
|
||||||
rv = int(rv)
|
|
||||||
if rv > len(found_snippets):
|
|
||||||
rv = len(found_snippets)
|
|
||||||
snippet = found_snippets[rv-1]
|
|
||||||
except: # vim.error, e:
|
|
||||||
if str(e) == 'invalid expression':
|
|
||||||
return True
|
|
||||||
raise
|
|
||||||
|
|
||||||
# TODO: even more code duplicated below
|
self._do_snippet(snippet, before, after)
|
||||||
# Adjust before, maybe the trigger is not the complete word
|
|
||||||
text_before = before.rstrip()[:-len(word)]
|
|
||||||
text_before += word[:-len(snippet.trigger)]
|
|
||||||
|
|
||||||
self._expect_move_wo_change = True
|
|
||||||
if self._cs:
|
|
||||||
# Determine position
|
|
||||||
pos = self._vstate.pos
|
|
||||||
p_start = self._ctab.abs_start
|
|
||||||
|
|
||||||
if pos.line == p_start.line:
|
|
||||||
end = Position(0, pos.col - p_start.col)
|
|
||||||
else:
|
|
||||||
end = Position(pos.line - p_start.line, pos.col)
|
|
||||||
start = Position(end.line, end.col - len(snippet.trigger))
|
|
||||||
|
|
||||||
si = snippet.launch(text_before, self._ctab, start, end)
|
|
||||||
|
|
||||||
self._update_vim_buffer()
|
|
||||||
|
|
||||||
if si.has_tabs:
|
|
||||||
self._csnippets.append(si)
|
|
||||||
self._jump()
|
|
||||||
else:
|
|
||||||
self._vb = VimBuffer(text_before, after)
|
|
||||||
|
|
||||||
start = Position(lineno-1, len(text_before))
|
|
||||||
self._csnippets.append(snippet.launch(text_before, None, start))
|
|
||||||
|
|
||||||
self._vb.replace_lines(lineno-1, lineno-1,
|
|
||||||
self._cs._current_text)
|
|
||||||
|
|
||||||
self._jump()
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -669,9 +617,6 @@ class SnippetManager(object):
|
|||||||
lineno,col = vim.current.window.cursor
|
lineno,col = vim.current.window.cursor
|
||||||
|
|
||||||
line = vim.current.line
|
line = vim.current.line
|
||||||
#TODO: don't do this
|
|
||||||
if col > 0 and line[col-1] in string.whitespace:
|
|
||||||
return (None, None)
|
|
||||||
|
|
||||||
# Get the word to the left of the current edit position
|
# Get the word to the left of the current edit position
|
||||||
before, after = line[:col], line[col:]
|
before, after = line[:col], line[col:]
|
||||||
|
Loading…
Reference in New Issue
Block a user