src/eric7/QScintilla/TypingCompleters/CompleterRuby.py

branch
eric7
changeset 10201
5beaa25bdfbe
parent 9653
e67609152c5e
child 10431
64157aeb0312
diff -r 7c282bf19646 -r 5beaa25bdfbe src/eric7/QScintilla/TypingCompleters/CompleterRuby.py
--- a/src/eric7/QScintilla/TypingCompleters/CompleterRuby.py	Sat Sep 09 17:20:31 2023 +0200
+++ b/src/eric7/QScintilla/TypingCompleters/CompleterRuby.py	Sun Sep 10 18:04:28 2023 +0200
@@ -34,6 +34,8 @@
         self.__beginNlRX = re.compile(r"""^=begin\r?\n""")
         self.__hereRX = re.compile(r"""<<-?['"]?(\w*)['"]?\r?\n""")
 
+        self.__trailingBlankRe = re.compile(r"(?:,)(\s*)\r?\n")
+
         self.readSettings()
 
     def readSettings(self):
@@ -73,11 +75,19 @@
             return
 
         # open parenthesis
-        # insert closing parenthesis and self
-        if char == "(":
-            txt = self.editor.text(line)[:col]
-            if self.__insertClosingBrace:
-                self.editor.insert(")")
+        # insert closing parenthesis
+        if char == "(" and self.__insertClosingBrace:
+            self.editor.insert(")")
+
+        # open curly bracket
+        # insert closing bracket
+        if char == "{" and self.__insertClosingBrace:
+            self.editor.insert("}")
+
+        # open bracket
+        # insert closing bracket
+        elif char == "[" and self.__insertClosingBrace:
+            self.editor.insert("]")
 
         # closing parenthesis
         # skip matching closing parenthesis
@@ -124,6 +134,24 @@
         # indent to opening brace, complete inline documentation
         elif char == "\n":
             txt = self.editor.text(line - 1)
+            if self.__insertBlank and self.__trailingBlankRe.search(txt):
+                match = self.__trailingBlankRe.search(txt)
+                if match is not None:
+                    startBlanks = match.start(1)
+                    endBlanks = match.end(1)
+                    if startBlanks != -1 and startBlanks != endBlanks:
+                        # previous line ends with whitespace, e.g. caused by
+                        # blank insertion above
+                        self.editor.setSelection(
+                            line - 1, startBlanks, line - 1, endBlanks
+                        )
+                        self.editor.removeSelectedText()
+                        # get the line again for next check
+                        txt = self.editor.text(line - 1)
+
+                    self.editor.setCursorPosition(line, 0)
+                    self.editor.editorCommand(QsciScintilla.SCI_VCHOME)
+
             if self.__insertInlineDoc and self.__beginNlRX.fullmatch(txt):
                 self.editor.insert("=end")
             elif self.__insertHereDoc and self.__hereRX.fullmatch(txt):

eric ide

mercurial