src/eric7/CodeFormatting/BlackFormattingDialog.py

Wed, 13 Jul 2022 11:16:20 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 13 Jul 2022 11:16:20 +0200
branch
eric7
changeset 9220
e9e7eca7efee
parent 9214
bd28e56047d7
child 9221
bf71ee032bb4
permissions
-rw-r--r--

Black Formatting Dialog
- added capability to filter the list by

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 a dialog showing the code formatting progress and the result.
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 copy
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import datetime
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import pathlib
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 from PyQt6.QtCore import pyqtSlot, Qt, QCoreApplication
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from PyQt6.QtWidgets import (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 QAbstractButton,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 QDialog,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 QDialogButtonBox,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 QHeaderView,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 QTreeWidgetItem
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
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from EricWidgets import EricMessageBox
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 from .Ui_BlackFormattingDialog import Ui_BlackFormattingDialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 from . import BlackUtilities
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 from .BlackDiffWidget import BlackDiffWidget
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 from .BlackFormattingAction import BlackFormattingAction
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 import Utilities
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
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 class BlackFormattingDialog(QDialog, Ui_BlackFormattingDialog):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Class implementing a dialog showing the code formatting progress and the result.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 DataTypeRole = Qt.ItemDataRole.UserRole
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 DataRole = Qt.ItemDataRole.UserRole + 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
43 StatusColumn = 0
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
44 FileNameColumn = 1
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
45
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 def __init__(self, configuration, filesList, project=None,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 action=BlackFormattingAction.Format, parent=None):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 Constructor
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 @param configuration dictionary containing the configuration parameters
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @type dict
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @param filesList list of absolute file paths to be processed
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @type list of str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @param project reference to the project object (defaults to None)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @type Project (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @param action action to be performed (defaults to BlackFormattingAction.Format)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @type BlackFormattingAction (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @param parent reference to the parent widget (defaults to None)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 @type QWidget (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 super().__init__(parent)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.setupUi(self)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.progressBar.setMaximum(len(filesList))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.progressBar.setValue(0)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.resultsList.header().setSortIndicator(1, Qt.SortOrder.AscendingOrder)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
70 self.statisticsGroup.setVisible(False)
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
71
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__report = BlackReport(self)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__report.check = action is BlackFormattingAction.Check
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__report.diff = action is BlackFormattingAction.Diff
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__config = copy.deepcopy(configuration)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__project = project
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__action = action
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 self.__cancelled = False
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__diffDialog = None
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
83 self.__allFilter = self.tr("<all>")
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
84
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(True)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(False)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setDefault(True)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.show()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 QCoreApplication.processEvents()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.__files = self.__filterFiles(filesList)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__formatFiles()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 def __filterFiles(self, filesList):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 Private method to filter the given list of files according the
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 configuration parameters.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @param filesList list of files
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @type list of str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 @return list of filtered files
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @rtype list of str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 filterRegExps = [
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 BlackUtilities.compileRegExp(self.__config[k])
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 for k in ["force-exclude", "extend-exclude", "exclude"]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 if k in self.__config and bool(self.__config[k])
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 and BlackUtilities.validateRegExp(self.__config[k])[0]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 ]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 files = []
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 for file in filesList:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 file = Utilities.fromNativeSeparators(file)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 for filterRegExp in filterRegExps:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 filterMatch = filterRegExp.search(file)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 if filterMatch and filterMatch.group(0):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.__report.path_ignored(file)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 break
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 else:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 files.append(file)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return files
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 def __resort(self):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 Private method to resort the result list.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 self.resultsList.sortItems(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.resultsList.sortColumn(),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.resultsList.header().sortIndicatorOrder())
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 def __resizeColumns(self):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 Private method to resize the columns of the result list.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.resultsList.header().resizeSections(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 QHeaderView.ResizeMode.ResizeToContents)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.resultsList.header().setStretchLastSection(True)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
141 def __populateStatusFilterCombo(self):
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
142 """
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
143 Private method to populate the status filter combo box with allowed selections.
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
144 """
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
145 allowedSelections = set()
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
146 for row in range(self.resultsList.topLevelItemCount()):
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
147 allowedSelections.add(
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
148 self.resultsList.topLevelItem(row).text(
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
149 BlackFormattingDialog.StatusColumn
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
150 )
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
151 )
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
152
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
153 self.statusFilterComboBox.addItem(self.__allFilter)
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
154 self.statusFilterComboBox.addItems(sorted(allowedSelections))
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
155
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 def __finish(self):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 Private method to perform some actions after the run was performed or canceled.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__resort()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.__resizeColumns()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(True)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.progressBar.setVisible(False)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.__updateStatistics()
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
170 self.__populateStatusFilterCombo()
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 def __updateStatistics(self):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
174 Private method to update the statistics about the recent formatting run and
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
175 make them visible.
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 self.reformattedLabel.setText(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 self.tr("reformatted")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 if self.__action is BlackFormattingAction.Format else
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.tr("would reformat")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 total = self.progressBar.maximum()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 processed = total - self.__report.ignored_count
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.totalCountLabel.setText("{0:n}".format(total))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 self.excludedCountLabel.setText("{0:n}".format(self.__report.ignored_count))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 self.failuresCountLabel.setText("{0:n}".format(self.__report.failure_count))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 self.processedCountLabel.setText("{0:n}".format(processed))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.reformattedCountLabel.setText("{0:n}".format(self.__report.change_count))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 self.unchangedCountLabel.setText("{0:n}".format(self.__report.same_count))
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
192
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
193 self.statisticsGroup.setVisible(True)
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 @pyqtSlot(QAbstractButton)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 def on_buttonBox_clicked(self, button):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Private slot to handle button presses of the dialog buttons.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 @param button reference to the pressed button
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 @type QAbstractButton
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 if button == self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 self.__cancelled = True
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 elif button == self.buttonBox.button(QDialogButtonBox.StandardButton.Close):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 self.accept()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 @pyqtSlot(QTreeWidgetItem, int)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 def on_resultsList_itemDoubleClicked(self, item, column):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 Private slot handling a double click of a result item.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 @param item reference to the double clicked item
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @type QTreeWidgetItem
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 @param column column number that was double clicked
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @type int
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 dataType = item.data(0, BlackFormattingDialog.DataTypeRole)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 if dataType == "error":
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 EricMessageBox.critical(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 self,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.tr("Formatting Failure"),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 self.tr(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 "<p>Formatting failed due to this error.</p><p>{0}</p>"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 ).format(item.data(0, BlackFormattingDialog.DataRole))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 elif dataType == "diff":
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 if self.__diffDialog is None:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 self.__diffDialog = BlackDiffWidget()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 self.__diffDialog.showDiff(item.data(0, BlackFormattingDialog.DataRole))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 def addResultEntry(self, status, fileName, isError=False, data=None):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 Public method to add an entry to the result list.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @param status status of the operation
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @param fileName name of the processed file
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 @param isError flag indicating that data contains an error message (defaults to
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 False)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @type bool (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 @param data associated data (diff or error message) (defaults to None)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 @type str (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 if self.__project:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 fileName = self.__project.getRelativePath(fileName)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 itm = QTreeWidgetItem(self.resultsList, [status, fileName])
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 if data:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 itm.setData(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 0,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 BlackFormattingDialog.DataTypeRole,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 "error" if isError else "diff"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 itm.setData(0, BlackFormattingDialog.DataRole, data)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 self.progressBar.setValue(self.progressBar.value() + 1)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 QCoreApplication.processEvents()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 def __formatFiles(self):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 Private method to format the list of files according the configuration.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 writeBack = black.WriteBack.from_configuration(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 check=self.__action is BlackFormattingAction.Check,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 diff=self.__action is BlackFormattingAction.Diff
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 versions = (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 {
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 black.TargetVersion[target.upper()]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 for target in self.__config["target-version"]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 }
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 if self.__config["target-version"] else
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 set()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 mode = black.Mode(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 target_versions=versions,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 line_length=int(self.__config["line-length"]),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 string_normalization=not self.__config["skip-string-normalization"],
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 magic_trailing_comma=not self.__config["skip-magic-trailing-comma"]
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 for file in self.__files:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 if self.__action is BlackFormattingAction.Diff:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.__diffFormatFile(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 pathlib.Path(file),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 fast=False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 mode=mode,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 report=self.__report
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 else:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 black.reformat_one(
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 pathlib.Path(file),
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 fast=False,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 write_back=writeBack,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 mode=mode,
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 report=self.__report
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 if self.__cancelled:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 break
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 self.__finish()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 def __diffFormatFile(self, src, fast, mode, report):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 Private method to check, if the given files need to be reformatted, and generate
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 a unified diff.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @param src path of file to be checked
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 @type pathlib.Path
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @param fast flag indicating fast operation
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 @type bool
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @param mode code formatting options
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 @type black.Mode
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 @param report reference to the report object
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 @type BlackReport
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 then = datetime.datetime.utcfromtimestamp(src.stat().st_mtime)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 with open(src, "rb") as buf:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 srcContents, _, _ = black.decode_bytes(buf.read())
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 try:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 dstContents = black.format_file_contents(srcContents, fast=fast, mode=mode)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 except black.NothingChanged:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 report.done(src, black.Changed.NO)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 return
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 fileName = str(src)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 if self.__project:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 fileName = self.__project.getRelativePath(fileName)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 now = datetime.datetime.utcnow()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 srcName = f"{fileName}\t{then} +0000"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 dstName = f"{fileName}\t{now} +0000"
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 diffContents = black.diff(srcContents, dstContents, srcName, dstName)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 report.done(src, black.Changed.YES, diff=diffContents)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 def closeEvent(self, evt):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 Protected slot implementing a close event handler.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 @param evt reference to the close event
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 @type QCloseEvent
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 if self.__diffDialog is not None:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 self.__diffDialog.close()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 evt.accept()
9220
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
352
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
353 @pyqtSlot(str)
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
354 def on_statusFilterComboBox_currentTextChanged(self, status):
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
355 """
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
356 Private slot handling the selection of a status for items to be shown.
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
357
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
358 @param status selected status
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
359 @type str
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
360 """
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
361 for row in range(self.resultsList.topLevelItemCount()):
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
362 itm = self.resultsList.topLevelItem(row)
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
363 itm.setHidden(
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
364 status != self.__allFilter
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
365 and itm.text(BlackFormattingDialog.StatusColumn) != status
e9e7eca7efee Black Formatting Dialog
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9214
diff changeset
366 )
9214
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 class BlackReport(black.Report):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 Class extending the black Report to work with our dialog.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 def __init__(self, dialog):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 Constructor
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 @param dialog reference to the result dialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 @type QDialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 super().__init__()
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 self.ignored_count = 0
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__dialog = dialog
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 def done(self, src, changed, diff=""):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 Public method to handle the end of a reformat.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 @param src name of the processed file
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 @type pathlib.Path
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 @param changed change status
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 @type black.Changed
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 @param diff unified diff of potential changes (defaults to "")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 if changed is black.Changed.YES:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 status = (
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 QCoreApplication.translate("BlackFormattingDialog", "would reformat")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 if self.check or self.diff else
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 QCoreApplication.translate("BlackFormattingDialog", "reformatted")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 )
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 self.change_count += 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 elif changed is black.Changed.NO:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 status = QCoreApplication.translate("BlackFormattingDialog", "unchanged")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 self.same_count += 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 elif changed is black.Changed.CACHED:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 status = QCoreApplication.translate("BlackFormattingDialog", "unmodified")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 self.same_count += 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 if self.diff:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 self.__dialog.addResultEntry(status, str(src), data=diff)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 else:
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 self.__dialog.addResultEntry(status, str(src))
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 def failed(self, src, message):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 Public method to handle a reformat failure.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @param src name of the processed file
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 @type pathlib.Path
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 @param message error message
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 @type str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 status = QCoreApplication.translate("BlackFormattingDialog", "failed")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 self.failure_count += 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 self.__dialog.addResultEntry(status, str(src), isError=True, data=message)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 def path_ignored(self, src, message=""):
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 Public method handling an ignored path.
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 @param src name of the processed file
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 @type pathlib.Path or str
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 @param message ignore message (default to "")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 @type str (optional)
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 """
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 status = QCoreApplication.translate("BlackFormattingDialog", "ignored")
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 self.ignored_count += 1
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443
bd28e56047d7 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 self.__dialog.addResultEntry(status, str(src))

eric ide

mercurial