--- a/src/eric7/Utilities/ClassBrowsers/rbclbr.py Mon Apr 08 17:02:11 2024 +0200 +++ b/src/eric7/Utilities/ClassBrowsers/rbclbr.py Tue Apr 09 14:27:03 2024 +0200 @@ -185,7 +185,7 @@ Class to represent a Ruby class. """ - def __init__(self, module, name, superClasses, file, lineno): + def __init__(self, module, name, superClasses, file, lineno, col_offset=0): """ Constructor @@ -195,12 +195,16 @@ @type str @param superClasses list of class names this class is inherited from @type list of str - @param file filename containing this class + @param file file name containing this class @type str - @param lineno linenumber of the class definition + @param lineno line number of the class definition @type int + @param col_offset column number of the class definition (defaults to 0) + @type int (optional) """ - ClbrBaseClasses.Class.__init__(self, module, name, superClasses, file, lineno) + ClbrBaseClasses.Class.__init__( + self, module, name, superClasses, file, lineno, col_offset=col_offset + ) VisibilityMixin.__init__(self) @@ -209,20 +213,24 @@ Class to represent a Ruby module. """ - def __init__(self, module, name, file, lineno): + def __init__(self, module, name, file, lineno, col_offset=0): """ Constructor - @param module name of the module containing this class + @param module name of the module containing this module @type str - @param name name of this class + @param name name of this module + @type str + @param file file name containing this module @type str - @param file filename containing this class - @type str - @param lineno linenumber of the class definition + @param lineno linenumber of the module definition @type int + @param col_offset column number of the module definition (defaults to 0) + @type int (optional) """ - ClbrBaseClasses.Module.__init__(self, module, name, file, lineno) + ClbrBaseClasses.Module.__init__( + self, module, name, file, lineno, col_offset=col_offset + ) VisibilityMixin.__init__(self) @@ -231,7 +239,9 @@ Class to represent a Ruby function. """ - def __init__(self, module, name, file, lineno, signature="", separator=","): + def __init__( + self, module, name, file, lineno, col_offset=0, signature="", separator="," + ): """ Constructor @@ -239,17 +249,26 @@ @type str @param name name of this function @type str - @param file filename containing this class + @param file file name containing this function @type str - @param lineno linenumber of the class definition + @param lineno line number of the function definition @type int - @param signature parameter list of the method + @param col_offset column number of the function definition (defaults to 0) + @type int (optional) + @param signature parameter list of the function @type str @param separator string separating the parameters @type str """ ClbrBaseClasses.Function.__init__( - self, module, name, file, lineno, signature, separator + self, + module, + name, + file, + lineno, + col_offset=col_offset, + signature=signature, + separator=separator, ) VisibilityMixin.__init__(self) @@ -259,20 +278,24 @@ Class to represent a class or module attribute. """ - def __init__(self, module, name, file, lineno): + def __init__(self, module, name, file, lineno, col_offset=0): """ Constructor - @param module name of the module containing this class + @param module name of the module containing this attribute @type str - @param name name of this class + @param name name of this attribute + @type str + @param file file name containing this attribute @type str - @param file filename containing this attribute - @type str - @param lineno linenumber of the class definition + @param lineno line number of the attribute definition @type int + @param col_offset column number of the attribute definition (defaults to 0) + @type int (optional) """ - ClbrBaseClasses.Attribute.__init__(self, module, name, file, lineno) + ClbrBaseClasses.Attribute.__init__( + self, module, name, file, lineno, col_offset=col_offset + ) VisibilityMixin.__init__(self) self.setPrivate() @@ -356,6 +379,12 @@ meth_sig = _commentsub("", meth_sig) lineno += src.count("\n", last_lineno_pos, start) last_lineno_pos = start + if m.captured("MethodName"): + col_offset = m.capturedStart("MethodName") - m.capturedStart() + elif m.captured("MethodName2"): + col_offset = m.capturedStart("MethodName2") - m.capturedStart() + elif m.captured("MethodName3"): + col_offset = m.capturedStart("MethodName3") - m.capturedStart() if meth_name.startswith("self."): meth_name = meth_name[5:] elif meth_name.startswith("self::"): @@ -373,7 +402,14 @@ cur_class = classstack[-1][0] if isinstance(cur_class, (Class, Module)): # it's a method - f = Function(None, meth_name, file, lineno, meth_sig) + f = Function( + None, + meth_name, + file, + lineno, + col_offset=col_offset, + signature=meth_sig, + ) cur_class._addmethod(meth_name, f) else: f = cur_class @@ -389,7 +425,14 @@ # else it's a nested def else: # it's a function - f = Function(module, meth_name, file, lineno, meth_sig) + f = Function( + module, + meth_name, + file, + lineno, + col_offset=col_offset, + signature=meth_sig, + ) if meth_name in dict_counts: dict_counts[meth_name] += 1 meth_name = "{0}_{1:d}".format(meth_name, dict_counts[meth_name]) @@ -426,13 +469,16 @@ classstack[-1][0].setEndLine(lineno - 1) del classstack[-1] class_name = m.captured("ClassName") or m.captured("ClassName2") + col_offset = m.capturedStart("ClassName") - m.capturedStart() inherit = m.captured("ClassSupers") if inherit: # the class inherits from other classes inherit = inherit[1:].strip() inherit = [_commentsub("", inherit)] # remember this class - cur_class = Class(module, class_name, inherit, file, lineno) + cur_class = Class( + module, class_name, inherit, file, lineno, col_offset=col_offset + ) if not classstack: if class_name in dictionary: cur_class = dictionary[class_name] @@ -470,8 +516,9 @@ classstack[-1][0].setEndLine(lineno - 1) del classstack[-1] module_name = m.captured("ModuleName") + col_offset = m.capturedStart("ModuleName") - m.capturedStart() # remember this class - cur_class = Module(module, module_name, file, lineno) + cur_class = Module(module, module_name, file, lineno, col_offset=col_offset) if not classstack: if module_name in dictionary: cur_class = dictionary[module_name] @@ -542,6 +589,7 @@ elif m.captured("Attribute"): lineno += src.count("\n", last_lineno_pos, start) last_lineno_pos = start + col_offset = m.capturedStart("AttributeName") - m.capturedStart() index = -1 while index >= -len(classstack): if ( @@ -549,7 +597,13 @@ and not isinstance(classstack[index][0], Function) and classstack[index][1] < indent ): - attr = Attribute(module, m.captured("AttributeName"), file, lineno) + attr = Attribute( + module, + m.captured("AttributeName"), + file, + lineno, + col_offset=col_offset, + ) classstack[index][0]._addattribute(attr) break else: