Это ни в коем случае не идеально и не закончено, но вот сценарий макросов Python, совместимый с Komodo 6, который я написал для автоматической генерации методов установки / получения для всего класса PHP.
from xpcom import components
import re
viewSvc = components.classes["@activestate.com/koViewService;1"]\
.getService(components.interfaces.koIViewService)
view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView)
sm = view.scimoz
sm.currentPos # current position in the editor
sm.text # editor text
sm.selText # the selected text
#sm.text = "Hello World!"
output = u"\n"
setterTemplate = """
function set%s($value){
$this->%s = $value;
}
"""
getterTemplate = """
/**
*@return string
*/
function get%s(){
return $this->%s;
}
"""
propertyTemplate = """
%s
%s
"""
prefixSize = len(u"private $")
def formalName(rawName):
return u"%s" % "".join([part.title() for part in rawName.split("_")])
#todo find a better way to split lines, what if its Mac or Windows format?
for line in sm.text.split("\n"):
if line.strip().startswith("private $"):
#trim of the private $ and trailing semi-colon
realName = line.strip()[prefixSize:-1]
output += propertyTemplate % ( setterTemplate %(formalName(realName), realName), getterTemplate % (formalName(realName), realName))
sm.insertText(sm.currentPos, output)
дать файл типа foo.php с Class Bar как единственным присутствующим
class Bar {
private $id;
private $name_first;
}
Это будет вводить
function setId($value){
$this->id = $value;
}
/**
*@return string
*/
function getId(){
return $this->id;
}
function setNameFirst($value){
$this->name_first = $value;
}
/**
*@return string
*/
function getNameFirst(){
return $this->name_first;
}
Этого достаточно для моих целей (я могу довольно быстро все перекомпилировать), но я обновлю этот ответ, если значительно улучшу сценарий.