src/eric7/Utilities/ClassBrowsers/rbclbr.py

branch
server
changeset 10680
306373ccf8fd
parent 10596
ea35c92a3c7c
parent 10677
6ee2e475490c
child 10704
27d21e5163b8
--- a/src/eric7/Utilities/ClassBrowsers/rbclbr.py	Tue Mar 26 10:55:04 2024 +0100
+++ b/src/eric7/Utilities/ClassBrowsers/rbclbr.py	Wed Apr 10 17:03:56 2024 +0200
@@ -187,7 +187,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
 
@@ -197,12 +197,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)
 
 
@@ -211,20 +215,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)
 
 
@@ -233,7 +241,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
 
@@ -241,17 +251,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)
 
@@ -261,20 +280,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()
 
@@ -368,6 +391,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::"):
@@ -385,7 +414,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
@@ -401,7 +437,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])
@@ -438,13 +481,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]
@@ -482,8 +528,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]
@@ -554,6 +601,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 (
@@ -561,7 +609,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