Files
cappuccino/Tools/SubEthaEdit/Objective-J.mode/Contents/Resources/Scripts/shell/insert_super.py
T
Francisco Ryan Tolmasky I a97bb72800 Initial commit.
Reviewed by francisco, ross and tom.
2008-09-04 03:52:20 -07:00

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)