def writepy(self, w: FileWriter) -> None: assert not self._isasync, "async FunctionSpec not yet supported in Python" # first write out overloads for overload in self._overloads: overload.writepy(w) # blank line w.blank() # decorators if self._isstaticmethod: w.line0('@staticmethod') for dec in self._decorators_py: w.line0(dec) if self._isabstract: w.line0('@abc.abstractmethod') # header w.line0(f'def {self._name}(') if self._ismethod and not self._isstaticmethod: w.line1('self,') for argname, crosstype, argdefault in self._pargs: argstr = argname + ': ' + crosstype.getQuotedPyType() if argdefault is not None: argstr += ' = ' + argdefault.getPyExpr()[0] w.line1(argstr + ',') if len(self._kwargs): # mark start of kwargs w.line1('*,') for argname, argtype, argdefault in self._kwargs: argstr = argname argstr += ': ' + argtype.getQuotedPyType() if argdefault is not None: argstr += ' = ' + argdefault.getPyExpr()[0] w.line1(argstr + ',') if self._rettype is None: w.line0(f') -> None:') else: w.line0(f') -> {self._rettype.getQuotedPyType()}:') if self._docstring: w.line1('"""') for docline in self._docstring: w.line1(docline.strip()) w.line1('"""') havebody = True havebody = False for stmt in self._statements: stmt.writepy(w.with_more_indent()) havebody = True if not havebody: w.line1('pass')
def writephp(self, w: FileWriter) -> None: w.line0(f'if ({self._expr.getPHPExpr()[0]}) {{') for stmt in self._statements: stmt.writephp(w.with_more_indent()) w.line0('}') # always put a blank line after a conditional w.blank()
def writepy(self, w: FileWriter) -> None: w.line0( f'for {self._assign.getPyExpr()[0]} in {self._expr.getPyExpr()[0]}:' ) for stmt in self._statements: stmt.writepy(w.with_more_indent()) # always put a blank line after a for loop w.blank()
def writets(self, w: FileWriter) -> None: w.line0( f'for (let {self._assign.getTSExpr()[0]} of {self._expr.getTSExpr()[0]}) {{' ) for stmt in self._statements: stmt.writets(w.with_more_indent()) w.line0(f'}}') # always put a blank line after a for loop w.blank()
def writepy(self, w: FileWriter) -> None: havebody = False bases = self._bases[:] # write out class header if self._isabstract: bases.append('abc.ABC') if self._isdataclass: w.line0('@dataclasses.dataclass') parents = ', '.join(bases) if parents: parents = '(' + parents + ')' w.line0(f'class {self._name}{parents}:') if self._docstring: w.line1('"""') for docline in self._docstring: w.line1(docline.strip()) w.line1('"""') w.blank() havebody = True # first write out properties for prop in self._properties: w.line1(f'{prop.propname}: {prop.proptype.getQuotedPyType()}') if self._properties: w.blank() havebody = True # add an __init__() method to set default values initspec = self._getInitSpec("python") if initspec: initspec.writepy(w.with_more_indent()) w.blank() havebody = True # all other methods for method in self._methods: method.writepy(w.with_more_indent()) w.blank() havebody = True for comment in self._remarks: w.line1('# ' + comment) w.blank() if not havebody: w.line1('pass')
def writephp(self, w: FileWriter) -> None: prefix = '' if self._isabstract: prefix += 'abstract ' if self._docstring: w.line0('/**') for docline in self._docstring: w.line0(' * ' + docline.strip()) w.line0(' */') extends = '' if len(self._bases): assert len(self._bases) <= 1 extends = ' extends ' + self._bases[0] w.line0(f"{prefix}class {self._name}{extends} {{") needemptyline = False # first write out properties for prop in self._properties: assign = '' # only assign values in the class body if the value is a literal if prop.propdefault and isinstance(prop.propdefault, PanLiteral): assign = ' = ' + prop.propdefault.getPHPExpr()[0] phptypes = prop.proptype.getPHPTypes() w.line1(f'/** @var {phptypes[1]} */') w.line1(f'public ${prop.propname}{assign};') needemptyline = True # add an __init__() method to set default values constructor = self._getInitSpec("php") if constructor: if needemptyline: w.blank() constructor.writephp(w.with_more_indent()) needemptyline = True # all other methods for method in self._methods: if needemptyline: w.blank() method.writephp(w.with_more_indent()) needemptyline = True if needemptyline: for comment in self._remarks: w.line1('// ' + comment) w.blank() w.line0("}")
def writepy(self, w: FileWriter) -> None: w.line0(f'if {self._expr.getPyExpr()[0]}:') for stmt in self._statements: stmt.writepy(w.with_more_indent()) # always put a blank line after a conditional w.blank()
def writephp(self, w: FileWriter) -> None: w.blank()
def writets(self, w: FileWriter) -> None: prefix = '' if self._tsexport: prefix = 'export ' if self._isabstract: prefix += 'abstract ' extends = '' if self._tsbase: extends = f" extends {self._tsbase}" w.line0(f"{prefix}class {self._name}{extends} {{") needemptyline = False if self._docstring: for docline in self._docstring: w.line1('// ' + docline.strip()) needemptyline = True # first write out properties if self._properties and needemptyline: w.blank() for prop in self._properties: if prop.tsobservable: w.blank() w.line1(f'@observable') if prop.tsreadonly: prefix = 'readonly ' else: prefix = 'public ' assign = '' # only assign values in the class body if the value is a literal if prop.propdefault and isinstance(prop.propdefault, PanLiteral): assign = ' = ' + prop.propdefault.getTSExpr()[0] w.line1( f'{prefix}{prop.propname}: {prop.proptype.getTSType()[0]}{assign};' ) needemptyline = True # add an __init__() method to set default values constructor = self._getInitSpec("typescript") if constructor: if needemptyline: w.blank() constructor.writets(w.with_more_indent()) needemptyline = True # all other methods for method in self._methods: if needemptyline: w.blank() method.writets(w.with_more_indent()) needemptyline = True for comment in self._remarks: w.line1('// ' + comment) w.blank() w.line0("}")