Changeset 1187:d913cc7d0d8f

Show
Ignore:
Timestamp:
06/18/08 09:47:45 (6 months ago)
Author:
Ali Afshar <aafshar@…>
Message:

Python plugin: Added support for decorators, classmethods and staticmethods

Location:
pida-plugins/python
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pida-plugins/python/python.py

    r1186 r1187  
    172172                #Column('ctype_markup', use_markup=True), 
    173173                #Column('nodename_markup', use_markup=True), 
     174                Column('type_markup', use_markup=True), 
    174175                Column('rendered', use_markup=True, expand=True), 
    175176                Column('sort_hack', visible=False), 
  • pida-plugins/python/ropebrowser.py

    r1186 r1187  
    3838    return markup_grey_italic(s) 
    3939 
     40def markup_fixed(text): 
     41    return '<tt>%s</tt>' % text 
     42 
    4043def markup_name(name): 
    41     return markup_bold(name) 
     44    return markup_bold(markup_fixed(name)) 
    4245 
    4346class TreeOptions(object): 
     
    5457        return '' 
    5558 
     59    def get_pre_markup(self): 
     60        return '' 
     61 
    5662 
    5763class FunctionOptions(TreeOptions): 
     
    6167    position = 2 
    6268 
     69    def get_pre_markup(self): 
     70        decs = ', '.join(['@' + d.id for d in 
     71            self.item.object.decorators]) 
     72        if decs: 
     73            decs = decs + '\n' 
     74        return markup_fixed(markup_italic(decs)) 
     75 
     76 
    6377    def get_extra_markup(self): 
    64         return markup_bold_bracketted( 
     78        attrs = markup_bold_bracketted( 
    6579            ', '.join(self.item.object.get_param_names()) 
    6680        ) 
     81        return attrs 
     82 
     83 
     84class EvaluatedOptions(TreeOptions): 
     85 
     86    type_name = 'p' 
     87    type_color = '#900090' 
    6788 
    6889 
     
    7697    type_name = '(m)' 
    7798    position = 6 
     99 
     100class ClassMethodOptions(MethodOptions): 
     101 
     102    type_name = 'cm' 
     103    position = 3 
     104 
     105class StaticMethodOptions(MethodOptions): 
     106 
     107    type_name = 'sm' 
     108    position = 4 
    78109 
    79110 
     
    117148    elif isinstance(item.node, pynames.DefinedName): 
    118149        if isinstance(item.object, pyobjects.PyFunction): 
    119             if item.object.get_kind() == 'method': 
     150            kind = item.object.get_kind() 
     151            if kind == 'method': 
    120152                if item.name in item.parent.object.get_scope().get_defined_names(): 
    121153                    return MethodOptions(item) 
    122154                else: 
    123155                    return SuperMethodOptions(item) 
     156            elif kind == 'classmethod': 
     157                return ClassMethodOptions(item) 
     158            elif kind == 'staticmethod': 
     159                return StaticMethodOptions(item) 
    124160            else: 
     161                print item.object.get_kind(), item.name 
    125162                return FunctionOptions(item) 
    126163        else: 
     
    130167    elif isinstance(item.node, builtins.BuiltinName): 
    131168        return BuiltinOptions(item) 
     169    elif isinstance(item.node, pynames.EvaluatedName): 
     170        return EvaluatedOptions(item) 
    132171    else: 
    133         print 'boo', item, item.node 
     172        print 'boo', item, item.node, item.name, item.object 
    134173 
    135174 
     
    164203        self.rendered = self.render() 
    165204 
     205        self.type_markup = markup_type(self.options.type_name, 
     206                                       self.options.type_color) 
     207 
    166208    def render(self): 
    167         return '%s %s%s %s' % ( 
    168             markup_type(self.options.type_name, 
    169                          self.options.type_color), 
     209        return '%s%s%s %s' % ( 
     210            self.options.get_pre_markup(), 
    170211            markup_name(self.name), 
    171212            self.options.get_extra_markup(),