eric6/QScintilla/TypingCompleters/CompleterPython.py

Sat, 04 May 2019 14:34:51 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 04 May 2019 14:34:51 +0200
changeset 6997
24eabcea4c59
parent 6942
2602857055c5
child 7192
a22eee00b052
permissions
-rw-r--r--

Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.

0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6645
ad476851d7e0 Updated copyright for 2019.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6247
diff changeset
3 # Copyright (c) 2007 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a typing completer for Python.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3145
a9de05d4a22f # __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3060
diff changeset
10 from __future__ import unicode_literals
3526
b00ee853bceb Bugfix if special characters are entered, e.g. the Euro sign.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3178
diff changeset
11 try:
5624
cdd346d8858b Removed a bunch of __IGNORE_WARNING_M131__ markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5618
diff changeset
12 chr = unichr
3526
b00ee853bceb Bugfix if special characters are entered, e.g. the Euro sign.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3178
diff changeset
13 except NameError:
b00ee853bceb Bugfix if special characters are entered, e.g. the Euro sign.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3178
diff changeset
14 pass
2525
8b507a9a2d40 Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2302
diff changeset
15
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import re
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
3656
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3526
diff changeset
18 from PyQt5.QtCore import QRegExp
6997
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
19 from PyQt5.Qsci import QsciLexerPython, QsciScintilla
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
12
1d8dd9706f46 First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 0
diff changeset
21 from .CompleterBase import CompleterBase
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 import Preferences
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
25
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 class CompleterPython(CompleterBase):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Class implementing typing completer for Python.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
30 def __init__(self, editor, parent=None):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Constructor
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param editor reference to the editor object (QScintilla.Editor)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param parent reference to the parent object (QObject)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 CompleterBase.__init__(self, editor, parent)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.__defRX = QRegExp(r"""^[ \t]*def \w+\(""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.__defSelfRX = QRegExp(r"""^[ \t]*def \w+\([ \t]*self[ \t]*[,)]""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__defClsRX = QRegExp(r"""^[ \t]*def \w+\([ \t]*cls[ \t]*[,)]""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__classRX = QRegExp(r"""^[ \t]*class \w+\(""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__importRX = QRegExp(r"""^[ \t]*from [\w.]+ """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__classmethodRX = QRegExp(r"""^[ \t]*@classmethod""")
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
45 self.__staticmethodRX = QRegExp(r"""^[ \t]*@staticmethod""")
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.__defOnlyRX = QRegExp(r"""^[ \t]*def """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__ifRX = QRegExp(r"""^[ \t]*if """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.__elifRX = QRegExp(r"""^[ \t]*elif """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__elseRX = QRegExp(r"""^[ \t]*else:""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__tryRX = QRegExp(r"""^[ \t]*try:""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__finallyRX = QRegExp(r"""^[ \t]*finally:""")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__exceptRX = QRegExp(r"""^[ \t]*except """)
5616
adcffadf4962 Reworked some __IGNORE_WARNING__ comments to be more specific.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5603
diff changeset
56 self.__exceptcRX = QRegExp(r"""^[ \t]*except:""")
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__whileRX = QRegExp(r"""^[ \t]*while """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__forRX = QRegExp(r"""^[ \t]*for """)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.readSettings()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 def readSettings(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 Public slot called to reread the configuration parameters.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
67 self.setEnabled(
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
68 Preferences.getEditorTyping("Python/EnabledTypingAids"))
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__insertClosingBrace = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 Preferences.getEditorTyping("Python/InsertClosingBrace")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__indentBrace = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 Preferences.getEditorTyping("Python/IndentBrace")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__skipBrace = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 Preferences.getEditorTyping("Python/SkipBrace")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__insertQuote = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 Preferences.getEditorTyping("Python/InsertQuote")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__dedentElse = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 Preferences.getEditorTyping("Python/DedentElse")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.__dedentExcept = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 Preferences.getEditorTyping("Python/DedentExcept")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__insertImport = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 Preferences.getEditorTyping("Python/InsertImport")
6997
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
83 self.__importBraceType = \
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
84 Preferences.getEditorTyping("Python/ImportBraceType")
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__insertSelf = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 Preferences.getEditorTyping("Python/InsertSelf")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__insertBlank = \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 Preferences.getEditorTyping("Python/InsertBlank")
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
89 self.__colonDetection = \
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 Preferences.getEditorTyping("Python/ColonDetection")
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
91 self.__dedentDef = \
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 Preferences.getEditorTyping("Python/DedentDef")
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def charAdded(self, charNumber):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Public slot called to handle the user entering a character.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 @param charNumber value of the character entered (integer)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 """
12
1d8dd9706f46 First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 0
diff changeset
100 char = chr(charNumber)
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
101 if char not in ['(', ')', '{', '}', '[', ']', ' ', ',', "'", '"',
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
102 '\n', ':']:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 return # take the short route
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 if self.__inComment(line, col) or \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 (char != '"' and self.__inDoubleQuotedString()) or \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 (char != '"' and self.__inTripleDoubleQuotedString()) or \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 (char != "'" and self.__inSingleQuotedString()) or \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 (char != "'" and self.__inTripleSingleQuotedString()):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 return
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 # open parenthesis
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 # insert closing parenthesis and self
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 if char == '(':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 txt = self.editor.text(line)[:col]
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 if self.__insertSelf and \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__defRX.exactMatch(txt):
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
120 if self.__isClassMethodDef():
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.editor.insert('cls')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.editor.setCursorPosition(line, col + 3)
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
123 elif self.__isStaticMethodDef():
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
124 # nothing to insert
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
125 pass
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 elif self.__isClassMethod():
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.editor.insert('self')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 self.editor.setCursorPosition(line, col + 4)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if self.__insertClosingBrace:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 if self.__defRX.exactMatch(txt) or \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.__classRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.editor.insert('):')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 else:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.editor.insert(')')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 # closing parenthesis
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 # skip matching closing parenthesis
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 elif char in [')', '}', ']']:
431
96cc7d322f89 Fixed an issue in the typing completers causing a stacktrace.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 97
diff changeset
139 txt = self.editor.text(line)
96cc7d322f89 Fixed an issue in the typing completers causing a stacktrace.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 97
diff changeset
140 if col < len(txt) and char == txt[col]:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if self.__skipBrace:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.editor.setSelection(line, col, line, col + 1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.editor.removeSelectedText()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 # space
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
146 # insert import, dedent to if for elif, dedent to try for except,
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
147 # dedent def
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 elif char == ' ':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 txt = self.editor.text(line)[:col]
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if self.__insertImport and self.__importRX.exactMatch(txt):
6997
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
151 if self.__importBraceType:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
152 self.editor.insert('import ()')
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
153 self.editor.setCursorPosition(line, col + 8)
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
154 else:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
155 self.editor.insert('import ')
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
156 self.editor.setCursorPosition(line, col + 7)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 elif self.__dedentElse and self.__elifRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__dedentToIf()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 elif self.__dedentExcept and self.__exceptRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__dedentExceptToTry(False)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 elif self.__dedentDef and self.__defOnlyRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__dedentDefStatement()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 # comma
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 # insert blank
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 elif char == ',':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 if self.__insertBlank:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.editor.insert(' ')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.editor.setCursorPosition(line, col + 1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 # open curly brace
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 # insert closing brace
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 elif char == '{':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 if self.__insertClosingBrace:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 self.editor.insert('}')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 # open bracket
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 # insert closing bracket
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 elif char == '[':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 if self.__insertClosingBrace:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.editor.insert(']')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 # double quote
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 # insert double quote
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 elif char == '"':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 if self.__insertQuote:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 self.editor.insert('"')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 # quote
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 # insert quote
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 elif char == '\'':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 if self.__insertQuote:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 self.editor.insert('\'')
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 # colon
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 # skip colon, dedent to if for else:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 elif char == ':':
86
778f405e9411 Fixed porting bug causing traceback.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
198 text = self.editor.text(line)
91
f20b944b9c8c Fixed a bug causing a traceback.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 86
diff changeset
199 if col < len(text) and char == text[col]:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 if self.__colonDetection:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 self.editor.setSelection(line, col, line, col + 1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 self.editor.removeSelectedText()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 else:
86
778f405e9411 Fixed porting bug causing traceback.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
204 txt = text[:col]
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 if self.__dedentElse and self.__elseRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 self.__dedentElseToIfWhileForTry()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 elif self.__dedentExcept and self.__exceptcRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 self.__dedentExceptToTry(True)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 elif self.__dedentExcept and self.__finallyRX.exactMatch(txt):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 self.__dedentFinallyToTry()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 # new line
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 # indent to opening brace
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 elif char == '\n':
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 if self.__indentBrace:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 txt = self.editor.text(line - 1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 if re.search(":\r?\n", txt) is None:
6997
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
218 stxt = txt.strip()
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
219 if stxt and stxt[-1] in ("(", "[", "{"):
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
220 # indent one more level
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
221 self.editor.indent(line)
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
222 self.editor.editorCommand(QsciScintilla.SCI_VCHOME)
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
223 else:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
224 # indent to the level of the opening brace
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
225 openCount = len(re.findall("[({[]", txt))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
226 closeCount = len(re.findall(r"[)}\]]", txt))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
227 if openCount > closeCount:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
228 openCount = 0
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
229 closeCount = 0
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
230 openList = list(re.finditer("[({[]", txt))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
231 index = len(openList) - 1
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
232 while index > -1 and openCount == closeCount:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
233 lastOpenIndex = openList[index].start()
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
234 txt2 = txt[lastOpenIndex:]
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
235 openCount = len(re.findall("[({[]", txt2))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
236 closeCount = len(re.findall(r"[)}\]]", txt2))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
237 index -= 1
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
238 if openCount > closeCount and lastOpenIndex > col:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
239 self.editor.insert(
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
240 ' ' * (lastOpenIndex - col + 1))
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
241 self.editor.setCursorPosition(
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
242 line, lastOpenIndex + 1)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 def __dedentToIf(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 Private method to dedent the last line to the last if statement with
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 less (or equal) indentation.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 ifLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 while ifLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 txt = self.editor.text(ifLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 edInd = self.editor.indentation(ifLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 if self.__elseRX.indexIn(txt) == 0 and edInd <= indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 indentation = edInd - 1
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
257 elif (self.__ifRX.indexIn(txt) == 0 or
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 self.__elifRX.indexIn(txt) == 0) and edInd <= indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self.editor.cancelList()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.editor.setIndentation(line, edInd)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 break
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 ifLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 def __dedentElseToIfWhileForTry(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 Private method to dedent the line of the else statement to the last
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 if, while, for or try statement with less (or equal) indentation.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 if line > 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 prevInd = self.editor.indentation(line - 1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 ifLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 while ifLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 txt = self.editor.text(ifLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 edInd = self.editor.indentation(ifLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 if self.__elseRX.indexIn(txt) == 0 and edInd <= indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 indentation = edInd - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 elif self.__elifRX.indexIn(txt) == 0 and \
3039
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
280 edInd == indentation and \
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
281 edInd == prevInd:
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
282 indentation = edInd - 1
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
283 elif (self.__ifRX.indexIn(txt) == 0 or
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
284 self.__whileRX.indexIn(txt) == 0 or
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
285 self.__forRX.indexIn(txt) == 0 or
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 self.__tryRX.indexIn(txt) == 0) and \
3039
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
287 edInd <= indentation:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 self.editor.cancelList()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.editor.setIndentation(line, edInd)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 break
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 ifLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 def __dedentExceptToTry(self, hasColon):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
295 Private method to dedent the line of the except statement to the last
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 try statement with less (or equal) indentation.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @param hasColon flag indicating the except type (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 tryLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 while tryLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 txt = self.editor.text(tryLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 edInd = self.editor.indentation(tryLine)
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
306 if (self.__exceptcRX.indexIn(txt) == 0 or
3039
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
307 self.__finallyRX.indexIn(txt) == 0) and \
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
308 edInd <= indentation:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 indentation = edInd - 1
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
310 elif (self.__exceptRX.indexIn(txt) == 0 or
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 self.__tryRX.indexIn(txt) == 0) and edInd <= indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 self.editor.cancelList()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 self.editor.setIndentation(line, edInd)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 break
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 tryLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 def __dedentFinallyToTry(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
319 Private method to dedent the line of the except statement to the last
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 try statement with less (or equal) indentation.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 tryLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 while tryLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 txt = self.editor.text(tryLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 edInd = self.editor.indentation(tryLine)
6997
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
328 if self.__finallyRX.indexIn(txt) == 0 and edInd <= indentation:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
329 indentation = edInd - 1
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
330 elif (self.__tryRX.indexIn(txt) == 0 or
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
331 self.__exceptcRX.indexIn(txt) == 0 or
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
332 self.__exceptRX.indexIn(txt) == 0) and \
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
333 edInd <= indentation:
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
334 self.editor.cancelList()
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
335 self.editor.setIndentation(line, edInd)
24eabcea4c59 Python and Ruby Typing: added support for 'from ... import (...)' and changed the indentation when the previous line ends with '(', '[' or '{'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
336 break
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 tryLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 def __dedentDefStatement(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
341 Private method to dedent the line of the def statement to a previous
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
342 def statement or class statement.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 tryLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 while tryLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 txt = self.editor.text(tryLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 edInd = self.editor.indentation(tryLine)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 newInd = -1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 if self.__defRX.indexIn(txt) == 0 and edInd < indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 newInd = edInd
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 elif self.__classRX.indexIn(txt) == 0 and edInd < indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 newInd = edInd + \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 (self.editor.indentationWidth() or self.editor.tabWidth())
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 if newInd >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 self.editor.cancelList()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 self.editor.setIndentation(line, newInd)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 break
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 tryLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 def __isClassMethod(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 Private method to check, if the user is defining a class method.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 @return flag indicating the definition of a class method (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 curLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 while curLine >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 txt = self.editor.text(curLine)
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
373 if (self.__defSelfRX.indexIn(txt) == 0 or
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 self.__defClsRX.indexIn(txt) == 0) and \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 self.editor.indentation(curLine) == indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 return True
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 elif self.__classRX.indexIn(txt) == 0 and \
3039
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
378 self.editor.indentation(curLine) < indentation:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 return True
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 elif self.__defRX.indexIn(txt) == 0 and \
3039
8dd0165d805d Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3034
diff changeset
381 self.editor.indentation(curLine) <= indentation:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 return False
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 curLine -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 return False
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
386 def __isClassMethodDef(self):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 """
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
388 Private method to check, if the user is defing a class method
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
389 (@classmethod).
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
391 @return flag indicating the definition of a class method (boolean)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 line, col = self.editor.getCursorPosition()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 indentation = self.editor.indentation(line)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 curLine = line - 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 if self.__classmethodRX.indexIn(self.editor.text(curLine)) == 0 and \
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 self.editor.indentation(curLine) == indentation:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 return True
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 return False
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400
1222
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
401 def __isStaticMethodDef(self):
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
402 """
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
403 Private method to check, if the user is defing a static method
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
404 (@staticmethod) method.
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
405
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
406 @return flag indicating the definition of a static method (boolean)
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
407 """
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
408 line, col = self.editor.getCursorPosition()
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
409 indentation = self.editor.indentation(line)
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
410 curLine = line - 1
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
411 if self.__staticmethodRX.indexIn(self.editor.text(curLine)) == 0 and \
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
412 self.editor.indentation(curLine) == indentation:
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
413 return True
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
414 return False
161e4514253b Fixed an issue in the Python typing completer not recognizing static methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
415
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 def __inComment(self, line, col):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 """
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
418 Private method to check, if the cursor is inside a comment.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 @param line current line (integer)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 @param col current position within line (integer)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @return flag indicating, if the cursor is inside a comment (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 txt = self.editor.text(line)
85
2d80c7a3e773 Fixed porting bugs causing traceback.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
425 if col == len(txt):
2d80c7a3e773 Fixed porting bugs causing traceback.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
426 col -= 1
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 while col >= 0:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 if txt[col] == "#":
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 return True
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 col -= 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 return False
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 def __inDoubleQuotedString(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
435 Private method to check, if the cursor is within a double quoted
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
436 string.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
438 @return flag indicating, if the cursor is inside a double
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 quoted string (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 return self.editor.currentStyle() == QsciLexerPython.DoubleQuotedString
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 def __inTripleDoubleQuotedString(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
445 Private method to check, if the cursor is within a triple double
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
446 quoted string.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
448 @return flag indicating, if the cursor is inside a triple double
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 quoted string (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
451 return self.editor.currentStyle() == \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
452 QsciLexerPython.TripleDoubleQuotedString
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 def __inSingleQuotedString(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
456 Private method to check, if the cursor is within a single quoted
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
457 string.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
459 @return flag indicating, if the cursor is inside a single
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 quoted string (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 return self.editor.currentStyle() == QsciLexerPython.SingleQuotedString
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 def __inTripleSingleQuotedString(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
466 Private method to check, if the cursor is within a triple single
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
467 quoted string.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
469 @return flag indicating, if the cursor is inside a triple single
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 quoted string (boolean)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 """
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
472 return self.editor.currentStyle() == \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2965
diff changeset
473 QsciLexerPython.TripleSingleQuotedString

eric ide

mercurial