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):