1
0
Fork 0
mirror of synced 2024-12-29 01:53:21 -05:00
ultimate-vim/sources_non_forked/vim-snippets/UltiSnips/python.snippets

715 lines
14 KiB
Text
Raw Normal View History

priority -50
2012-08-16 23:41:25 -04:00
###########################################################################
# TEXTMATE SNIPPETS #
###########################################################################
#! header
snippet #! "Shebang header for python scripts" b
#!/usr/bin/env python
2015-07-13 06:22:46 -04:00
# -*- coding: utf-8 -*-
2012-08-16 23:41:25 -04:00
$0
endsnippet
snippet ifmain "ifmain" b
2015-12-08 08:20:04 -05:00
if __name__ == `!p snip.rv = get_quoting_style(snip)`__main__`!p snip.rv = get_quoting_style(snip)`:
2015-07-13 06:22:46 -04:00
${1:${VISUAL:main()}}
2012-08-16 23:41:25 -04:00
endsnippet
2015-12-08 08:20:04 -05:00
snippet with "with" b
with ${1:expr}`!p snip.rv = " as " if t[2] else ""`${2:var}:
${3:${VISUAL:pass}}
2017-02-11 08:01:38 -05:00
$0
2015-12-08 08:20:04 -05:00
endsnippet
snippet for "for loop" b
for ${1:item} in ${2:iterable}:
2015-07-13 06:22:46 -04:00
${3:${VISUAL:pass}}
endsnippet
2012-08-16 23:41:25 -04:00
##########
# COMMON #
##########
# The smart def and smart class snippets use a global option called
# "g:ultisnips_python_style" which, if set to "doxygen" will use doxygen
# style comments in docstrings.
global !p
NORMAL = 0x1
DOXYGEN = 0x2
SPHINX = 0x3
2014-04-18 08:58:02 -04:00
GOOGLE = 0x4
2015-12-08 08:20:04 -05:00
NUMPY = 0x5
JEDI = 0x6
2012-08-16 23:41:25 -04:00
2014-10-31 17:30:24 -04:00
SINGLE_QUOTES = "'"
DOUBLE_QUOTES = '"'
2014-04-18 08:58:02 -04:00
class Arg(object):
def __init__(self, arg):
self.arg = arg
self.name = arg.split('=')[0].strip()
def __str__(self):
return self.name
2014-08-03 18:02:51 -04:00
2014-04-18 08:58:02 -04:00
def __unicode__(self):
return self.name
2014-08-03 18:02:51 -04:00
2014-04-18 08:58:02 -04:00
def is_kwarg(self):
return '=' in self.arg
2012-08-16 23:41:25 -04:00
def get_args(arglist):
2014-04-18 08:58:02 -04:00
args = [Arg(arg) for arg in arglist.split(',') if arg]
args = [arg for arg in args if arg.name != 'self']
2012-08-16 23:41:25 -04:00
return args
2012-08-16 23:41:25 -04:00
def get_quoting_style(snip):
style = snip.opt("g:ultisnips_python_quoting_style", "double")
if style == 'single':
return SINGLE_QUOTES
return DOUBLE_QUOTES
2014-04-18 08:58:02 -04:00
def triple_quotes(snip):
2015-12-08 08:20:04 -05:00
style = snip.opt("g:ultisnips_python_triple_quoting_style")
if not style:
return get_quoting_style(snip) * 3
return (SINGLE_QUOTES if style == 'single' else DOUBLE_QUOTES) * 3
2014-10-31 17:30:24 -04:00
def triple_quotes_handle_trailing(snip, quoting_style):
"""
Generate triple quoted strings and handle any trailing quote char,
which might be there from some autoclose/autopair plugin,
i.e. when expanding ``"|"``.
"""
if not snip.c:
# Do this only once, otherwise the following error would happen:
# RuntimeError: The snippets content did not converge: …
_, col = vim.current.window.cursor
line = vim.current.line
# Handle already existing quote chars after the trigger.
_ret = quoting_style * 3
while True:
try:
nextc = line[col]
except IndexError:
break
if nextc == quoting_style and len(_ret):
_ret = _ret[1:]
col = col+1
else:
break
snip.rv = _ret
else:
snip.rv = snip.c
2012-08-16 23:41:25 -04:00
def get_style(snip):
style = snip.opt("g:ultisnips_python_style", "normal")
2012-08-16 23:41:25 -04:00
if style == "doxygen": return DOXYGEN
elif style == "sphinx": return SPHINX
2014-04-18 08:58:02 -04:00
elif style == "google": return GOOGLE
2015-12-08 08:20:04 -05:00
elif style == "numpy": return NUMPY
elif style == "jedi": return JEDI
else: return NORMAL
2012-08-16 23:41:25 -04:00
def format_arg(arg, style):
if style == DOXYGEN:
2014-09-27 11:32:18 -04:00
return "@param %s TODO" % arg
elif style == SPHINX:
2014-09-27 11:32:18 -04:00
return ":param %s: TODO" % arg
elif style == NORMAL:
2014-09-27 11:32:18 -04:00
return ":%s: TODO" % arg
2014-04-18 08:58:02 -04:00
elif style == GOOGLE:
2014-09-27 11:32:18 -04:00
return "%s (TODO): TODO" % arg
2015-12-08 08:20:04 -05:00
elif style == JEDI:
return ":type %s: TODO" % arg
elif style == NUMPY:
return "%s : TODO" % arg
2012-08-16 23:41:25 -04:00
def format_return(style):
if style == DOXYGEN:
2014-09-27 11:32:18 -04:00
return "@return: TODO"
2015-12-08 08:20:04 -05:00
elif style in (NORMAL, SPHINX, JEDI):
2014-09-27 11:32:18 -04:00
return ":returns: TODO"
2014-04-18 08:58:02 -04:00
elif style == GOOGLE:
2014-09-27 11:32:18 -04:00
return "Returns: TODO"
2012-08-16 23:41:25 -04:00
def write_docstring_args(args, snip):
if not args:
2014-04-18 08:58:02 -04:00
snip.rv += ' {0}'.format(triple_quotes(snip))
return
2012-08-16 23:41:25 -04:00
snip.rv += '\n' + snip.mkline('', indent='')
2012-08-16 23:41:25 -04:00
style = get_style(snip)
2012-08-16 23:41:25 -04:00
2014-04-18 08:58:02 -04:00
if style == GOOGLE:
write_google_docstring_args(args, snip)
2015-12-08 08:20:04 -05:00
elif style == NUMPY:
write_numpy_docstring_args(args, snip)
2014-04-18 08:58:02 -04:00
else:
for arg in args:
snip += format_arg(arg, style)
def write_google_docstring_args(args, snip):
kwargs = [arg for arg in args if arg.is_kwarg()]
args = [arg for arg in args if not arg.is_kwarg()]
if args:
snip += "Args:"
snip.shift()
for arg in args:
snip += format_arg(arg, GOOGLE)
snip.unshift()
snip.rv += '\n' + snip.mkline('', indent='')
if kwargs:
snip += "Kwargs:"
snip.shift()
for kwarg in kwargs:
snip += format_arg(kwarg, GOOGLE)
snip.unshift()
snip.rv += '\n' + snip.mkline('', indent='')
2012-08-16 23:41:25 -04:00
2015-12-08 08:20:04 -05:00
def write_numpy_docstring_args(args, snip):
if args:
snip += "Parameters"
snip += "----------"
kwargs = [arg for arg in args if arg.is_kwarg()]
args = [arg for arg in args if not arg.is_kwarg()]
if args:
for arg in args:
snip += format_arg(arg, NUMPY)
if kwargs:
for kwarg in kwargs:
snip += format_arg(kwarg, NUMPY) + ', optional'
snip.rv += '\n' + snip.mkline('', indent='')
2012-08-16 23:41:25 -04:00
def write_init_body(args, parents, snip):
parents = [p.strip() for p in parents.split(",")]
parents = [p for p in parents if p != 'object']
2012-08-16 23:41:25 -04:00
for p in parents:
snip += p + ".__init__(self)"
2012-08-16 23:41:25 -04:00
if parents:
snip.rv += '\n' + snip.mkline('', indent='')
2012-08-16 23:41:25 -04:00
for arg in args:
snip += "self._%s = %s" % (arg, arg)
2012-08-16 23:41:25 -04:00
def write_slots_args(args, snip):
quote = get_quoting_style(snip)
arg_format = quote + '_%s' + quote
args = [arg_format % arg for arg in args]
snip += '__slots__ = (%s,)' % ', '.join(args)
2012-08-16 23:41:25 -04:00
def write_function_docstring(t, snip):
"""
Writes a function docstring with the current style.
:param t: The values of the placeholders
:param snip: UltiSnips.TextObjects.SnippetUtil object instance
"""
snip.rv = ""
snip >> 1
args = get_args(t[2])
if args:
write_docstring_args(args, snip)
style = get_style(snip)
2015-12-08 08:20:04 -05:00
if style == NUMPY:
snip += 'Returns'
snip += '-------'
snip += 'TODO'
else:
snip += format_return(style)
snip.rv += '\n' + snip.mkline('', indent='')
snip += triple_quotes(snip)
2016-05-14 07:57:54 -04:00
def get_dir_and_file_name(snip):
return os.getcwd().split(os.sep)[-1] + '.' + snip.basename
2012-08-16 23:41:25 -04:00
endglobal
########################################
# Class & Special Method Name Snippets #
########################################
snippet class "class with docstrings" b
class ${1:MyClass}(${2:object}):
2014-04-18 08:58:02 -04:00
`!p snip.rv = triple_quotes(snip)`${3:Docstring for $1. }`!p snip.rv = triple_quotes(snip)`
2012-08-16 23:41:25 -04:00
def __init__(self$4):
2014-09-27 11:32:18 -04:00
`!p snip.rv = triple_quotes(snip)`${5:TODO: to be defined1.}`!p
2012-08-16 23:41:25 -04:00
snip.rv = ""
snip >> 2
args = get_args(t[4])
write_docstring_args(args, snip)
if args:
snip.rv += '\n' + snip.mkline('', indent='')
2014-04-18 08:58:02 -04:00
snip += '{0}'.format(triple_quotes(snip))
2012-08-16 23:41:25 -04:00
write_init_body(args, t[2], snip)
`
$0
endsnippet
snippet slotclass "class with slots and docstrings" b
class ${1:MyClass}(${2:object}):
2014-04-18 08:58:02 -04:00
`!p snip.rv = triple_quotes(snip)`${3:Docstring for $1. }`!p snip.rv = triple_quotes(snip)`
2012-08-16 23:41:25 -04:00
`!p
snip >> 1
args = get_args(t[4])
write_slots_args(args, snip)
`
def __init__(self$4):
2014-09-27 11:32:18 -04:00
`!p snip.rv = triple_quotes(snip)`${5:TODO: to be defined.}`!p
2012-08-16 23:41:25 -04:00
snip.rv = ""
snip >> 2
args = get_args(t[4])
write_docstring_args(args, snip)
if args:
snip.rv += '\n' + snip.mkline('', indent='')
2014-04-18 08:58:02 -04:00
snip += triple_quotes(snip)
2012-08-16 23:41:25 -04:00
write_init_body(args, t[2], snip)
`
$0
endsnippet
snippet contain "methods for emulating a container type" b
def __len__(self):
${1:pass}
def __getitem__(self, key):
${2:pass}
def __setitem__(self, key, value):
${3:pass}
def __delitem__(self, key):
${4:pass}
def __iter__(self):
${5:pass}
def __reversed__(self):
${6:pass}
def __contains__(self, item):
${7:pass}
endsnippet
snippet context "context manager methods" b
def __enter__(self):
${1:pass}
def __exit__(self, exc_type, exc_value, traceback):
${2:pass}
endsnippet
snippet attr "methods for customizing attribute access" b
def __getattr__(self, name):
${1:pass}
def __setattr__(self, name, value):
${2:pass}
def __delattr__(self, name):
${3:pass}
endsnippet
snippet desc "methods implementing descriptors" b
def __get__(self, instance, owner):
${1:pass}
def __set__(self, instance, value):
${2:pass}
def __delete__(self, instance):
${3:pass}
endsnippet
snippet cmp "methods implementing rich comparison"
def __eq__(self, other):
${1:pass}
def __ne__(self, other):
${2:pass}
def __lt__(self, other):
${3:pass}
def __le__(self, other):
${4:pass}
def __gt__(self, other):
${5:pass}
def __ge__(self, other):
${6:pass}
def __cmp__(self, other):
${7:pass}
endsnippet
snippet repr "methods implementing string representation"
def __repr__(self):
${1:pass}
def __str__(self):
${2:pass}
def __unicode__(self):
${3:pass}
endsnippet
# note: reflected operands and augmented arithmeitc assignements have been
# intentionally ommited to reduce verbosity.
snippet numeric "methods for emulating a numeric type" b
def __add__(self, other):
${1:pass}
def __sub__(self, other):
${2:pass}
def __mul__(self, other):
${3:pass}
def __div__(self, other):
${4:pass}
def __truediv__(self, other):
${5:pass}
def __floordiv__(self, other):
${6:pass}
def __mod__(self, other):
${7:pass}
def __divmod__(self, other):
${8:pass}
def __pow__(self, other):
${9:pass}
def __lshift__(self, other):
${10:pass}
def __rshift__(self, other):
${11:pass}
def __and__(self, other):
${12:pass}
def __xor__(self, other):
${13:pass}
def __or__(self, other):
${14:pass}
def __neg__(self):
${15:pass}
def __pos__(self):
${16:pass}
def __abs__(self):
${17:pass}
def __invert__(self):
${18:pass}
def __complex__(self):
${19:pass}
def __int__(self):
${20:pass}
def __long__(self):
${21:pass}
def __float__(self):
${22:pass}
def __oct__(self):
${22:pass}
def __hex__(self):
${23:pass}
def __index__(self):
${24:pass}
def __coerce__(self, other):
${25:pass}
endsnippet
2016-12-27 09:46:49 -05:00
snippet deff
def ${1:fname}(`!p snip.rv = vim.eval('indent(".") ? "self" : ""')`$2):
$0
endsnippet
2012-08-16 23:41:25 -04:00
snippet def "function with docstrings" b
def ${1:function}(`!p
if snip.indent:
snip.rv = 'self' + (", " if len(t[2]) else "")`${2:arg1}):
2014-09-27 11:32:18 -04:00
`!p snip.rv = triple_quotes(snip)`${4:TODO: Docstring for $1.}`!p
write_function_docstring(t, snip) `
2015-07-13 06:22:46 -04:00
${5:${VISUAL:pass}}
endsnippet
snippet defc "class method with docstrings" b
@classmethod
def ${1:function}(`!p
if snip.indent:
snip.rv = 'cls' + (", " if len(t[2]) else "")`${2:arg1}):
`!p snip.rv = triple_quotes(snip)`${4:TODO: Docstring for $1.}`!p
write_function_docstring(t, snip) `
2015-07-13 06:22:46 -04:00
${5:${VISUAL:pass}}
endsnippet
2012-08-16 23:41:25 -04:00
snippet defs "static method with docstrings" b
@staticmethod
def ${1:function}(${2:arg1}):
`!p snip.rv = triple_quotes(snip)`${4:TODO: Docstring for $1.}`!p
write_function_docstring(t, snip) `
2015-07-13 06:22:46 -04:00
${5:${VISUAL:pass}}
2012-08-16 23:41:25 -04:00
endsnippet
# doesn't expand when there is a word in front
snippet /(^|(?<=\W))\./ "self." r
self.
endsnippet
snippet from "from module import name" b
from ${1:module} import ${2:Stuff}
endsnippet
##############
# PROPERTIES #
##############
snippet roprop "Read Only Property" b
@property
def ${1:name}(self):
2012-08-16 23:41:25 -04:00
${2:return self._$1}$0
endsnippet
snippet rwprop "Read write property" b
def ${1:name}():
2014-04-18 08:58:02 -04:00
`!p snip.rv = triple_quotes(snip) if t[2] else ''
2014-09-27 11:32:18 -04:00
`${2:TODO: Docstring for $1.}`!p
if t[2]:
snip >> 1
style = get_style(snip)
snip.rv += '\n' + snip.mkline('', indent='')
snip += format_return(style)
snip.rv += '\n' + snip.mkline('', indent='')
2014-04-18 08:58:02 -04:00
snip += triple_quotes(snip)
else:
snip.rv = ""`
def fget(self):
2012-08-16 23:41:25 -04:00
return self._$1$0
2012-08-16 23:41:25 -04:00
def fset(self, value):
self._$1 = value
return locals()
$1 = property(**$1(), doc=$1.__doc__)
endsnippet
####################
# If / Else / Elif #
####################
snippet if "If" b
if ${1:condition}:
2015-07-13 06:22:46 -04:00
${2:${VISUAL:pass}}
endsnippet
snippet ife "If / Else" b
if ${1:condition}:
2015-07-13 06:22:46 -04:00
${2:${VISUAL:pass}}
else:
${3:pass}
endsnippet
snippet ifee "If / Elif / Else" b
if ${1:condition}:
2015-07-13 06:22:46 -04:00
${2:${VISUAL:pass}}
elif ${3:condition}:
${4:pass}
else:
${5:pass}
2012-08-16 23:41:25 -04:00
endsnippet
##########################
# Try / Except / Finally #
##########################
snippet try "Try / Except" b
try:
2015-07-13 06:22:46 -04:00
${1:${VISUAL:pass}}
2015-12-08 08:20:04 -05:00
except ${2:Exception} as ${3:e}:
2012-08-16 23:41:25 -04:00
${4:raise $3}
endsnippet
2015-07-13 06:22:46 -04:00
snippet trye "Try / Except / Else" b
2012-08-16 23:41:25 -04:00
try:
2015-07-13 06:22:46 -04:00
${1:${VISUAL:pass}}
2015-12-08 08:20:04 -05:00
except ${2:Exception} as ${3:e}:
2012-08-16 23:41:25 -04:00
${4:raise $3}
else:
${5:pass}
endsnippet
2015-07-13 06:22:46 -04:00
snippet tryf "Try / Except / Finally" b
2012-08-16 23:41:25 -04:00
try:
2015-07-13 06:22:46 -04:00
${1:${VISUAL:pass}}
2015-12-08 08:20:04 -05:00
except ${2:Exception} as ${3:e}:
2012-08-16 23:41:25 -04:00
${4:raise $3}
finally:
${5:pass}
endsnippet
2015-07-13 06:22:46 -04:00
snippet tryef "Try / Except / Else / Finally" b
2012-08-16 23:41:25 -04:00
try:
2015-07-13 06:22:46 -04:00
${1:${VISUAL:pass}}
2015-12-08 08:20:04 -05:00
except${2: ${3:Exception} as ${4:e}}:
2012-08-16 23:41:25 -04:00
${5:raise}
else:
${6:pass}
finally:
${7:pass}
endsnippet
2016-02-20 08:13:10 -05:00
######################
2012-08-16 23:41:25 -04:00
# Assertions & Tests #
2016-02-20 08:13:10 -05:00
######################
2012-08-16 23:41:25 -04:00
snippet ae "Assert equal" b
2018-11-01 06:03:42 -04:00
self.assertEqual(${1:${VISUAL:first}}, ${2:second})
2012-08-16 23:41:25 -04:00
endsnippet
snippet at "Assert True" b
2015-07-13 06:22:46 -04:00
self.assertTrue(${1:${VISUAL:expression}})
2012-08-16 23:41:25 -04:00
endsnippet
snippet af "Assert False" b
2015-07-13 06:22:46 -04:00
self.assertFalse(${1:${VISUAL:expression}})
2012-08-16 23:41:25 -04:00
endsnippet
snippet aae "Assert almost equal" b
2018-11-01 06:03:42 -04:00
self.assertAlmostEqual(${1:${VISUAL:first}}, ${2:second})
2012-08-16 23:41:25 -04:00
endsnippet
snippet ar "Assert raises" b
2015-07-13 06:22:46 -04:00
self.assertRaises(${1:exception}, ${2:${VISUAL:func}}${3/.+/, /}${3:arguments})
2012-08-16 23:41:25 -04:00
endsnippet
2014-08-03 18:02:51 -04:00
snippet an "Assert is None" b
2015-07-13 06:22:46 -04:00
self.assertIsNone(${1:${VISUAL:expression}})
2014-08-03 18:02:51 -04:00
endsnippet
snippet ann "Assert is not None" b
2015-07-13 06:22:46 -04:00
self.assertIsNotNone(${1:${VISUAL:expression}})
2014-08-03 18:02:51 -04:00
endsnippet
2012-08-16 23:41:25 -04:00
snippet testcase "pyunit testcase" b
class Test${1:Class}(${2:unittest.TestCase}):
2014-04-18 08:58:02 -04:00
`!p snip.rv = triple_quotes(snip)`${3:Test case docstring.}`!p snip.rv = triple_quotes(snip)`
2012-08-16 23:41:25 -04:00
def setUp(self):
${4:pass}
def tearDown(self):
${5:pass}
def test_${6:name}(self):
2015-07-13 06:22:46 -04:00
${7:${VISUAL:pass}}
2012-08-16 23:41:25 -04:00
endsnippet
2014-10-31 17:30:24 -04:00
snippet " "triple quoted string (double quotes)" b
"""
2015-07-13 06:22:46 -04:00
${1:${VISUAL:doc}}
2014-10-31 17:30:24 -04:00
`!p triple_quotes_handle_trailing(snip, '"')`
endsnippet
snippet ' "triple quoted string (single quotes)" b
'''
2015-07-13 06:22:46 -04:00
${1:${VISUAL:doc}}
2014-10-31 17:30:24 -04:00
`!p triple_quotes_handle_trailing(snip, "'")`
endsnippet
snippet doc "doc block (triple quotes)"
`!p snip.rv = triple_quotes(snip)`
2015-07-13 06:22:46 -04:00
${1:${VISUAL:doc}}
2014-10-31 17:30:24 -04:00
`!p snip.rv = triple_quotes(snip)`
endsnippet
2016-05-14 07:57:54 -04:00
snippet pmdoc "pocoo style module doc string" b
# -*- coding: utf-8 -*-
"""
`!p snip.rv = get_dir_and_file_name(snip)`
`!p snip.rv = '~' * len(get_dir_and_file_name(snip))`
${1:DESCRIPTION}
:copyright: (c) `date +%Y` by ${2:YOUR_NAME}.
:license: ${3:LICENSE_NAME}, see LICENSE for more details.
"""
$0
endsnippet
2012-08-16 23:41:25 -04:00
# vim:ft=snippets: