Utilities/ClassBrowsers/rbclbr.py

changeset 5604
b047181a4a33
parent 5389
9b1c800daff3
child 5651
982465f8389c
equal deleted inserted replaced
5603:4f2dd0850803 5604:b047181a4a33
178 178
179 class Class(ClbrBaseClasses.Class, VisibilityMixin): 179 class Class(ClbrBaseClasses.Class, VisibilityMixin):
180 """ 180 """
181 Class to represent a Ruby class. 181 Class to represent a Ruby class.
182 """ 182 """
183 def __init__(self, module, name, super, file, lineno): 183 def __init__(self, module, name, superClasses, file, lineno):
184 """ 184 """
185 Constructor 185 Constructor
186 186
187 @param module name of the module containing this class 187 @param module name of the module containing this class
188 @param name name of this class 188 @param name name of this class
189 @param super list of class names this class is inherited from 189 @param superClasses list of class names this class is inherited from
190 @param file filename containing this class 190 @param file filename containing this class
191 @param lineno linenumber of the class definition 191 @param lineno linenumber of the class definition
192 """ 192 """
193 ClbrBaseClasses.Class.__init__(self, module, name, super, file, lineno) 193 ClbrBaseClasses.Class.__init__(self, module, name, superClasses, file,
194 lineno)
194 VisibilityMixin.__init__(self) 195 VisibilityMixin.__init__(self)
195 196
196 197
197 class Module(ClbrBaseClasses.Module, VisibilityMixin): 198 class Module(ClbrBaseClasses.Module, VisibilityMixin):
198 """ 199 """
258 @param path path the file should be searched in (list of strings) 259 @param path path the file should be searched in (list of strings)
259 @return the resulting dictionary 260 @return the resulting dictionary
260 """ 261 """
261 global _modules 262 global _modules
262 263
263 dict = {} 264 dictionary = {}
264 dict_counts = {} 265 dict_counts = {}
265 266
266 if module in _modules: 267 if module in _modules:
267 # we've seen this file before... 268 # we've seen this file before...
268 return _modules[module] 269 return _modules[module]
273 f, file, (suff, mode, type) = ClassBrowsers.find_module(module, fullpath) 274 f, file, (suff, mode, type) = ClassBrowsers.find_module(module, fullpath)
274 if f: 275 if f:
275 f.close() 276 f.close()
276 if type not in SUPPORTED_TYPES: 277 if type not in SUPPORTED_TYPES:
277 # not Ruby source, can't do anything with this module 278 # not Ruby source, can't do anything with this module
278 _modules[module] = dict 279 _modules[module] = dictionary
279 return dict 280 return dictionary
280 281
281 _modules[module] = dict 282 _modules[module] = dictionary
282 classstack = [] # stack of (class, indent) pairs 283 classstack = [] # stack of (class, indent) pairs
283 acstack = [] # stack of (access control, indent) pairs 284 acstack = [] # stack of (access control, indent) pairs
284 indent = 0 285 indent = 0
285 try: 286 try:
286 src = Utilities.readEncodedFile(file)[0] 287 src = Utilities.readEncodedFile(file)[0]
287 except (UnicodeError, IOError): 288 except (UnicodeError, IOError):
288 # can't do anything with this module 289 # can't do anything with this module
289 _modules[module] = dict 290 _modules[module] = dictionary
290 return dict 291 return dictionary
291 292
292 lineno, last_lineno_pos = 1, 0 293 lineno, last_lineno_pos = 1, 0
293 cur_obj = None 294 cur_obj = None
294 lastGlobalEntry = None 295 lastGlobalEntry = None
295 i = 0 296 i = 0
354 dict_counts[meth_name] += 1 355 dict_counts[meth_name] += 1
355 meth_name = "{0}_{1:d}".format( 356 meth_name = "{0}_{1:d}".format(
356 meth_name, dict_counts[meth_name]) 357 meth_name, dict_counts[meth_name])
357 else: 358 else:
358 dict_counts[meth_name] = 0 359 dict_counts[meth_name] = 0
359 dict[meth_name] = f 360 dictionary[meth_name] = f
360 if not classstack: 361 if not classstack:
361 if lastGlobalEntry: 362 if lastGlobalEntry:
362 lastGlobalEntry.setEndLine(lineno - 1) 363 lastGlobalEntry.setEndLine(lineno - 1)
363 lastGlobalEntry = f 364 lastGlobalEntry = f
364 if cur_obj and isinstance(cur_obj, Function): 365 if cur_obj and isinstance(cur_obj, Function):
396 inherit = [_commentsub('', inherit)] 397 inherit = [_commentsub('', inherit)]
397 # remember this class 398 # remember this class
398 cur_class = Class(module, class_name, inherit, 399 cur_class = Class(module, class_name, inherit,
399 file, lineno) 400 file, lineno)
400 if not classstack: 401 if not classstack:
401 if class_name in dict: 402 if class_name in dictionary:
402 cur_class = dict[class_name] 403 cur_class = dictionary[class_name]
403 else: 404 else:
404 dict[class_name] = cur_class 405 dictionary[class_name] = cur_class
405 else: 406 else:
406 cls = classstack[-1][0] 407 cls = classstack[-1][0]
407 if class_name in cls.classes: 408 if class_name in cls.classes:
408 cur_class = cls.classes[class_name] 409 cur_class = cls.classes[class_name]
409 elif cls.name == class_name or class_name == "self": 410 elif cls.name == class_name or class_name == "self":
437 del classstack[-1] 438 del classstack[-1]
438 module_name = m.group("ModuleName") 439 module_name = m.group("ModuleName")
439 # remember this class 440 # remember this class
440 cur_class = Module(module, module_name, file, lineno) 441 cur_class = Module(module, module_name, file, lineno)
441 if not classstack: 442 if not classstack:
442 if module_name in dict: 443 if module_name in dictionary:
443 cur_class = dict[module_name] 444 cur_class = dictionary[module_name]
444 else: 445 else:
445 dict[module_name] = cur_class 446 dictionary[module_name] = cur_class
446 else: 447 else:
447 cls = classstack[-1][0] 448 cls = classstack[-1][0]
448 if module_name in cls.classes: 449 if module_name in cls.classes:
449 cur_class = cls.classes[module_name] 450 cur_class = cls.classes[module_name]
450 elif cls.name == module_name: 451 elif cls.name == module_name:
580 elif m.start("CodingLine") >= 0: 581 elif m.start("CodingLine") >= 0:
581 # a coding statement 582 # a coding statement
582 coding = m.group("Coding") 583 coding = m.group("Coding")
583 lineno = lineno + src.count('\n', last_lineno_pos, start) 584 lineno = lineno + src.count('\n', last_lineno_pos, start)
584 last_lineno_pos = start 585 last_lineno_pos = start
585 if "@@Coding@@" not in dict: 586 if "@@Coding@@" not in dictionary:
586 dict["@@Coding@@"] = ClbrBaseClasses.Coding( 587 dictionary["@@Coding@@"] = ClbrBaseClasses.Coding(
587 module, file, lineno, coding) 588 module, file, lineno, coding)
588 589
589 else: 590 else:
590 assert 0, "regexp _getnext found something unexpected" 591 assert 0, "regexp _getnext found something unexpected"
591 592
592 return dict 593 return dictionary

eric ide

mercurial