mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-31 12:27:36 +00:00
43 lines
1.4 KiB
Python
Executable File
43 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""Inserts a [super method] call suitable for the current method.
|
|
Inserted as a snippet with the incoming arguments used as defaults.
|
|
|
|
The default behavior is to add brackets if there is no "[" to the left
|
|
of the caret (ignoring the tab trigger). This can be changed by modifying
|
|
the useBrackets line below.
|
|
|
|
The command uses heuristics to find which method implementation is
|
|
being edited. It should be reasonably tolerant to various coding styles,
|
|
including different bracket and indentation styles.
|
|
"""
|
|
|
|
import sys, os, re, itertools
|
|
|
|
protoRe = re.compile(r"^\s*(\+|-)\s*\([^)]+\)((\n|[^{])*)[^;]\{", re.M)
|
|
|
|
nlines = int(os.environ["LINE_NUMBER"])-1
|
|
interestingLines = [l for (count, l) in itertools.takewhile(lambda (n, l): n <= nlines, enumerate(sys.stdin))]
|
|
invokationLine = interestingLines[-1]
|
|
|
|
needsBracket = True
|
|
postfix = ";"
|
|
|
|
protos = protoRe.findall(''.join(interestingLines))
|
|
|
|
if len(protos) == 0:
|
|
sys.exit(1)
|
|
|
|
lastProtoSelWithTypes = re.sub(r'\s+', ' ', protos[-1][1])
|
|
|
|
counter = itertools.count(1)
|
|
def replFunc(match):
|
|
return '%s' % ( match.groups()[0])
|
|
|
|
methodCall = re.sub(r'\([^)]+\)\s*(([A-Za-z0-9_][A-Za-z0-9_]*))', replFunc, lastProtoSelWithTypes)
|
|
|
|
brackets = needsBracket and ('[', ']') or ('', '')
|
|
outString = '%ssuper %s%s%s' % (brackets[0], methodCall.strip(), brackets[1], postfix)
|
|
|
|
sys.stdout.write(outString)
|