src/eric7/CodeFormatting/BlackUtilities.py

Mon, 11 Jul 2022 16:42:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 11 Jul 2022 16:42:50 +0200
branch
eric7
changeset 9214
bd28e56047d7
child 9221
bf71ee032bb4
permissions
-rw-r--r--

Code Formatting
- added an interface to reformat Python source code with the 'Black' utility

9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing some utility functions for the Black based code formatting.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import re
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QCoreApplication
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import black
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 def getDefaultConfiguration():
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Function to generate a default set of configuration parameters.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 @return dictionary containing the default parameters
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 @rtype dict
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 return {
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 "target-version": set(),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 "line-length": black.DEFAULT_LINE_LENGTH,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 "skip-string-normalization": False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 "skip-magic-trailing-comma": False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 "extend-exclude": "",
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 "exclude": black.DEFAULT_EXCLUDES, # not shown in config dialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 "force-exclude": "", # not shown in config dialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 }
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 def compileRegExp(regexp):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Function to compile a given regular expression.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param regexp regular expression to be compiled
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @return compiled regular expression object
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @rtype re.Pattern
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 if "\n" in regexp:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 # multi line regexp
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 regexp = f"(?x){regexp}"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 compiled = re.compile(regexp)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 return compiled
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 def validateRegExp(regexp):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 Function to validate a given regular expression.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @param regexp regular expression to be validated
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @return tuple containing a flag indicating validity and an error message
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @rtype tuple of (bool, str)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 if regexp:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 try:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 compileRegExp(regexp)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 return True, ""
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 except re.error as e:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 return (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 QCoreApplication.translate(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 "BlackUtilities",
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 "Invalid regular expression: {0}"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 ).format(str(e))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 except IndexError:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 return (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 QCoreApplication.translate(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 "BlackUtilities",
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 "Invalid regular expression: missing group name"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 else:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 return (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 QCoreApplication.translate(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 "BlackUtilities",
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 "A regular expression must be given."
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 )

eric ide

mercurial