src/eric7/Utilities/ClassBrowsers/rbclbr.py

branch
eric7
changeset 10677
6ee2e475490c
parent 10439
21c28b0f9e41
child 10680
306373ccf8fd
child 10683
779cda568acb
--- 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:

eric ide

mercurial