RefactoringRope/Refactoring.py

changeset 46
a726d19facfc
parent 44
8aa985c8dee5
child 48
de33dc93a3ac
equal deleted inserted replaced
45:c840c6f95cea 46:a726d19facfc
11 import sys 11 import sys
12 12
13 sys.path.insert(0, os.path.dirname(__file__)) 13 sys.path.insert(0, os.path.dirname(__file__))
14 import rope 14 import rope
15 import rope.base.libutils 15 import rope.base.libutils
16 import rope.base.project
17 import rope.base.exceptions 16 import rope.base.exceptions
18
19 import rope.refactor.rename
20 import rope.refactor.extract
21 import rope.refactor.usefunction
22 import rope.refactor.inline
23 import rope.refactor.move
24 import rope.refactor.change_signature
25 import rope.refactor.introduce_factory
26 import rope.refactor.introduce_parameter
27 import rope.refactor.method_object
28 import rope.refactor.encapsulate_field
29 import rope.refactor.localtofield
30 import rope.refactor.topackage
31 from rope.refactor.importutils import ImportOrganizer
32
33 import rope.contrib.findit
34 17
35 from PyQt4.QtCore import QObject 18 from PyQt4.QtCore import QObject
36 from PyQt4.QtGui import QMenu, QApplication, QMessageBox, QDialog, QAction 19 from PyQt4.QtGui import QMenu, QApplication, QMessageBox, QDialog, QAction
37 from PyQt4.Qsci import QsciScintilla 20 from PyQt4.Qsci import QsciScintilla
38 21
39 from E5Gui.E5Application import e5App 22 from E5Gui.E5Application import e5App
40 23
41 from E5Gui.E5Action import E5Action 24 from E5Gui.E5Action import E5Action
42 25
43 from QScintilla.MiniEditor import MiniEditor
44
45 from FileSystemCommands import e5FileSystemCommands
46 from ProgressHandle import ProgressHandle
47 from HelpDialog import HelpDialog
48 from MatchesDialog import MatchesDialog
49 from RenameDialog import RenameDialog
50 from ChangeOccurrencesDialog import ChangeOccurrencesDialog
51 from HistoryDialog import HistoryDialog
52 from ExtractDialog import ExtractDialog
53 from InlineDialog import InlineDialog
54 from MoveMethodDialog import MoveMethodDialog
55 from MoveGlobalMethodDialog import MoveGlobalMethodDialog
56 from MoveModuleDialog import MoveModuleDialog
57 from UseFunctionDialog import UseFunctionDialog
58 from IntroduceFactoryDialog import IntroduceFactoryDialog
59 from IntroduceParameterDialog import IntroduceParameterDialog
60 from ConfirmationDialog import ConfirmationDialog
61 from RestructureDialog import RestructureDialog
62 from ChangeSignatureDialog import ChangeSignatureDialog
63 from InlineArgumentDefaultDialog import InlineArgumentDefaultDialog
64 from GetterSetterDialog import GetterSetterDialog
65 from MethodToMethodObjectDialog import MethodToMethodObjectDialog
66
67 import Utilities 26 import Utilities
68 27
69 28
70 class Refactoring(QObject): 29 class Refactoring(QObject):
71 """ 30 """
90 self.__mainMenu = None 49 self.__mainMenu = None
91 self.__helpDialog = None 50 self.__helpDialog = None
92 51
93 # Rope objects 52 # Rope objects
94 self.__project = None 53 self.__project = None
54
55 from FileSystemCommands import e5FileSystemCommands
95 self.__fsCommands = e5FileSystemCommands(self.__e5project) 56 self.__fsCommands = e5FileSystemCommands(self.__e5project)
96 57
97 def initActions(self): 58 def initActions(self):
98 """ 59 """
99 Public method to define the refactoring actions. 60 Public method to define the refactoring actions.
1030 return 991 return
1031 index = int(index + (index1 - index) / 2) 992 index = int(index + (index1 - index) / 2)
1032 # keep it inside the object 993 # keep it inside the object
1033 offset = self.__getOffset(aw, line, index) 994 offset = self.__getOffset(aw, line, index)
1034 995
996 import rope.refactor.rename
1035 resource = rope.base.libutils.path_to_resource( 997 resource = rope.base.libutils.path_to_resource(
1036 self.__project, filename) 998 self.__project, filename)
1037 try: 999 try:
1038 renamer = rope.refactor.rename.Rename( 1000 renamer = rope.refactor.rename.Rename(
1039 self.__project, resource, offset) 1001 self.__project, resource, offset)
1043 1005
1044 if isLocal: 1006 if isLocal:
1045 localResource = resource 1007 localResource = resource
1046 else: 1008 else:
1047 localResource = None 1009 localResource = None
1010 from RenameDialog import RenameDialog
1048 self.dlg = RenameDialog(self, title, renamer, resource=localResource, 1011 self.dlg = RenameDialog(self, title, renamer, resource=localResource,
1049 parent=self.__ui) 1012 parent=self.__ui)
1050 self.dlg.show() 1013 self.dlg.show()
1051 1014
1052 def __changeOccurrences(self): 1015 def __changeOccurrences(self):
1071 1034
1072 filename = aw.getFileName() 1035 filename = aw.getFileName()
1073 line, index, line1, index1 = aw.getSelection() 1036 line, index, line1, index1 = aw.getSelection()
1074 offset = self.__getOffset(aw, line, index) 1037 offset = self.__getOffset(aw, line, index)
1075 1038
1039 import rope.refactor.rename
1076 resource = rope.base.libutils.path_to_resource( 1040 resource = rope.base.libutils.path_to_resource(
1077 self.__project, filename) 1041 self.__project, filename)
1078 try: 1042 try:
1079 renamer = rope.refactor.rename.ChangeOccurrences( 1043 renamer = rope.refactor.rename.ChangeOccurrences(
1080 self.__project, resource, offset) 1044 self.__project, resource, offset)
1081 except Exception as err: 1045 except Exception as err:
1082 self.handleRopeError(err, title) 1046 self.handleRopeError(err, title)
1083 return 1047 return
1084 1048
1049 from ChangeOccurrencesDialog import ChangeOccurrencesDialog
1085 self.dlg = ChangeOccurrencesDialog(self, title, renamer, 1050 self.dlg = ChangeOccurrencesDialog(self, title, renamer,
1086 parent=self.__ui) 1051 parent=self.__ui)
1087 self.dlg.show() 1052 self.dlg.show()
1088 1053
1089 ##################################################### 1054 #####################################################
1128 filename = aw.getFileName() 1093 filename = aw.getFileName()
1129 startline, startcolumn, endline, endcolumn = aw.getSelection() 1094 startline, startcolumn, endline, endcolumn = aw.getSelection()
1130 startOffset = self.__getOffset(aw, startline, startcolumn) 1095 startOffset = self.__getOffset(aw, startline, startcolumn)
1131 endOffset = self.__getOffset(aw, endline, endcolumn) 1096 endOffset = self.__getOffset(aw, endline, endcolumn)
1132 1097
1098 import rope.refactor.extract
1133 resource = rope.base.libutils.path_to_resource( 1099 resource = rope.base.libutils.path_to_resource(
1134 self.__project, filename) 1100 self.__project, filename)
1135 try: 1101 try:
1136 if kind == "variable": 1102 if kind == "variable":
1137 extractor = rope.refactor.extract.ExtractVariable( 1103 extractor = rope.refactor.extract.ExtractVariable(
1143 raise Exception("Invalid extraction kind <{0}>.".format(kind)) 1109 raise Exception("Invalid extraction kind <{0}>.".format(kind))
1144 except Exception as err: 1110 except Exception as err:
1145 self.handleRopeError(err, title) 1111 self.handleRopeError(err, title)
1146 return 1112 return
1147 1113
1114 from ExtractDialog import ExtractDialog
1148 self.dlg = ExtractDialog(self, title, extractor, parent=self.__ui) 1115 self.dlg = ExtractDialog(self, title, extractor, parent=self.__ui)
1149 self.dlg.show() 1116 self.dlg.show()
1150 1117
1151 ##################################################### 1118 #####################################################
1152 ## Inline refactorings 1119 ## Inline refactorings
1174 1141
1175 filename = aw.getFileName() 1142 filename = aw.getFileName()
1176 line, index, line1, index1 = aw.getSelection() 1143 line, index, line1, index1 = aw.getSelection()
1177 offset = self.__getOffset(aw, line, index) 1144 offset = self.__getOffset(aw, line, index)
1178 1145
1146 import rope.refactor.inline
1179 resource = rope.base.libutils.path_to_resource( 1147 resource = rope.base.libutils.path_to_resource(
1180 self.__project, filename) 1148 self.__project, filename)
1181 try: 1149 try:
1182 inliner = rope.refactor.inline.create_inline( 1150 inliner = rope.refactor.inline.create_inline(
1183 self.__project, resource, offset) 1151 self.__project, resource, offset)
1184 except Exception as err: 1152 except Exception as err:
1185 self.handleRopeError(err, title) 1153 self.handleRopeError(err, title)
1186 return 1154 return
1187 1155
1156 from InlineDialog import InlineDialog
1188 self.dlg = InlineDialog(self, title, inliner, parent=self.__ui) 1157 self.dlg = InlineDialog(self, title, inliner, parent=self.__ui)
1189 self.dlg.show() 1158 self.dlg.show()
1190 1159
1191 ##################################################### 1160 #####################################################
1192 ## Move refactorings 1161 ## Move refactorings
1214 1183
1215 filename = aw.getFileName() 1184 filename = aw.getFileName()
1216 line, index, line1, index1 = aw.getSelection() 1185 line, index, line1, index1 = aw.getSelection()
1217 offset = self.__getOffset(aw, line, index) 1186 offset = self.__getOffset(aw, line, index)
1218 1187
1188 import rope.refactor.move
1219 resource = rope.base.libutils.path_to_resource( 1189 resource = rope.base.libutils.path_to_resource(
1220 self.__project, filename) 1190 self.__project, filename)
1221 try: 1191 try:
1222 mover = rope.refactor.move.create_move( 1192 mover = rope.refactor.move.create_move(
1223 self.__project, resource, offset) 1193 self.__project, resource, offset)
1224 except Exception as err: 1194 except Exception as err:
1225 self.handleRopeError(err, title) 1195 self.handleRopeError(err, title)
1226 return 1196 return
1227 1197
1228 if isinstance(mover, rope.refactor.move.MoveGlobal): 1198 if isinstance(mover, rope.refactor.move.MoveGlobal):
1199 from MoveGlobalMethodDialog import MoveGlobalMethodDialog
1229 self.dlg = MoveGlobalMethodDialog(self, title, mover, 1200 self.dlg = MoveGlobalMethodDialog(self, title, mover,
1230 self.__project, parent=self.__ui) 1201 self.__project, parent=self.__ui)
1231 else: 1202 else:
1203 from MoveMethodDialog import MoveMethodDialog
1232 self.dlg = MoveMethodDialog(self, title, mover, parent=self.__ui) 1204 self.dlg = MoveMethodDialog(self, title, mover, parent=self.__ui)
1233 self.dlg.show() 1205 self.dlg.show()
1234 1206
1235 def __moveModule(self): 1207 def __moveModule(self):
1236 """ 1208 """
1247 return 1219 return
1248 1220
1249 filename = aw.getFileName() 1221 filename = aw.getFileName()
1250 offset = None 1222 offset = None
1251 1223
1224 import rope.refactor.move
1252 resource = rope.base.libutils.path_to_resource( 1225 resource = rope.base.libutils.path_to_resource(
1253 self.__project, filename) 1226 self.__project, filename)
1254 try: 1227 try:
1255 mover = rope.refactor.move.create_move( 1228 mover = rope.refactor.move.create_move(
1256 self.__project, resource, offset) 1229 self.__project, resource, offset)
1257 except Exception as err: 1230 except Exception as err:
1258 self.handleRopeError(err, title) 1231 self.handleRopeError(err, title)
1259 return 1232 return
1260 1233
1234 from MoveModuleDialog import MoveModuleDialog
1261 self.dlg = MoveModuleDialog(self, title, mover, parent=self.__ui) 1235 self.dlg = MoveModuleDialog(self, title, mover, parent=self.__ui)
1262 self.dlg.show() 1236 self.dlg.show()
1263 1237
1264 ##################################################### 1238 #####################################################
1265 ## Use function refactoring 1239 ## Use function refactoring
1286 1260
1287 filename = aw.getFileName() 1261 filename = aw.getFileName()
1288 line, index, line1, index1 = aw.getSelection() 1262 line, index, line1, index1 = aw.getSelection()
1289 offset = self.__getOffset(aw, line, index) 1263 offset = self.__getOffset(aw, line, index)
1290 1264
1265 import rope.refactor.usefunction
1291 resource = rope.base.libutils.path_to_resource( 1266 resource = rope.base.libutils.path_to_resource(
1292 self.__project, filename) 1267 self.__project, filename)
1293 try: 1268 try:
1294 user = rope.refactor.usefunction.UseFunction( 1269 user = rope.refactor.usefunction.UseFunction(
1295 self.__project, resource, offset) 1270 self.__project, resource, offset)
1296 except Exception as err: 1271 except Exception as err:
1297 self.handleRopeError(err, title) 1272 self.handleRopeError(err, title)
1298 return 1273 return
1299 1274
1275 from UseFunctionDialog import UseFunctionDialog
1300 self.dlg = UseFunctionDialog(self, title, user, parent=self.__ui) 1276 self.dlg = UseFunctionDialog(self, title, user, parent=self.__ui)
1301 self.dlg.show() 1277 self.dlg.show()
1302 1278
1303 ##################################################### 1279 #####################################################
1304 ## Introduce refactorings 1280 ## Introduce refactorings
1326 1302
1327 filename = aw.getFileName() 1303 filename = aw.getFileName()
1328 line, index, line1, index1 = aw.getSelection() 1304 line, index, line1, index1 = aw.getSelection()
1329 offset = self.__getOffset(aw, line, index) 1305 offset = self.__getOffset(aw, line, index)
1330 1306
1307 import rope.refactor.introduce_factory
1331 resource = rope.base.libutils.path_to_resource( 1308 resource = rope.base.libutils.path_to_resource(
1332 self.__project, filename) 1309 self.__project, filename)
1333 try: 1310 try:
1334 introducer = \ 1311 introducer = \
1335 rope.refactor.introduce_factory.IntroduceFactoryRefactoring( 1312 rope.refactor.introduce_factory.IntroduceFactoryRefactoring(
1336 self.__project, resource, offset) 1313 self.__project, resource, offset)
1337 except Exception as err: 1314 except Exception as err:
1338 self.handleRopeError(err, title) 1315 self.handleRopeError(err, title)
1339 return 1316 return
1340 1317
1318 from IntroduceFactoryDialog import IntroduceFactoryDialog
1341 self.dlg = IntroduceFactoryDialog(self, title, introducer, 1319 self.dlg = IntroduceFactoryDialog(self, title, introducer,
1342 parent=self.__ui) 1320 parent=self.__ui)
1343 self.dlg.show() 1321 self.dlg.show()
1344 1322
1345 def __introduceParameter(self): 1323 def __introduceParameter(self):
1364 1342
1365 filename = aw.getFileName() 1343 filename = aw.getFileName()
1366 line, index, line1, index1 = aw.getSelection() 1344 line, index, line1, index1 = aw.getSelection()
1367 offset = self.__getOffset(aw, line, index) 1345 offset = self.__getOffset(aw, line, index)
1368 1346
1347 import rope.refactor.introduce_parameter
1369 resource = rope.base.libutils.path_to_resource( 1348 resource = rope.base.libutils.path_to_resource(
1370 self.__project, filename) 1349 self.__project, filename)
1371 try: 1350 try:
1372 introducer = rope.refactor.introduce_parameter.IntroduceParameter( 1351 introducer = rope.refactor.introduce_parameter.IntroduceParameter(
1373 self.__project, resource, offset) 1352 self.__project, resource, offset)
1374 except Exception as err: 1353 except Exception as err:
1375 self.handleRopeError(err, title) 1354 self.handleRopeError(err, title)
1376 return 1355 return
1377 1356
1357 from IntroduceParameterDialog import IntroduceParameterDialog
1378 self.dlg = IntroduceParameterDialog(self, title, introducer, 1358 self.dlg = IntroduceParameterDialog(self, title, introducer,
1379 parent=self.__ui) 1359 parent=self.__ui)
1380 self.dlg.show() 1360 self.dlg.show()
1381 1361
1382 ##################################################### 1362 #####################################################
1385 1365
1386 def __importsOrganize(self): 1366 def __importsOrganize(self):
1387 """ 1367 """
1388 Private slot to organize imports. 1368 Private slot to organize imports.
1389 """ 1369 """
1370 from rope.refactor.importutils import ImportOrganizer
1390 self.__doImports(self.trUtf8("Organize Imports"), 1371 self.__doImports(self.trUtf8("Organize Imports"),
1391 ImportOrganizer.organize_imports) 1372 ImportOrganizer.organize_imports)
1392 1373
1393 def __importsExpandStar(self): 1374 def __importsExpandStar(self):
1394 """ 1375 """
1395 Private slot to expand star imports. 1376 Private slot to expand star imports.
1396 """ 1377 """
1378 from rope.refactor.importutils import ImportOrganizer
1397 self.__doImports(self.trUtf8("Expand Star Imports"), 1379 self.__doImports(self.trUtf8("Expand Star Imports"),
1398 ImportOrganizer.expand_star_imports) 1380 ImportOrganizer.expand_star_imports)
1399 1381
1400 def __importsRelativeToAbsolute(self): 1382 def __importsRelativeToAbsolute(self):
1401 """ 1383 """
1402 Private slot to transform relative to absolute imports. 1384 Private slot to transform relative to absolute imports.
1403 """ 1385 """
1386 from rope.refactor.importutils import ImportOrganizer
1404 self.__doImports(self.trUtf8("Relative to Absolute"), 1387 self.__doImports(self.trUtf8("Relative to Absolute"),
1405 ImportOrganizer.relatives_to_absolutes) 1388 ImportOrganizer.relatives_to_absolutes)
1406 1389
1407 def __importsFromToImport(self): 1390 def __importsFromToImport(self):
1408 """ 1391 """
1409 Private slot to transform from imports to plain imports. 1392 Private slot to transform from imports to plain imports.
1410 """ 1393 """
1394 from rope.refactor.importutils import ImportOrganizer
1411 self.__doImports(self.trUtf8("Froms to Imports"), 1395 self.__doImports(self.trUtf8("Froms to Imports"),
1412 ImportOrganizer.froms_to_imports) 1396 ImportOrganizer.froms_to_imports)
1413 1397
1414 def __importsHandleLong(self): 1398 def __importsHandleLong(self):
1415 """ 1399 """
1416 Private slot to handle long imports. 1400 Private slot to handle long imports.
1417 """ 1401 """
1402 from rope.refactor.importutils import ImportOrganizer
1418 self.__doImports(self.trUtf8("Handle Long Imports"), 1403 self.__doImports(self.trUtf8("Handle Long Imports"),
1419 ImportOrganizer.handle_long_imports) 1404 ImportOrganizer.handle_long_imports)
1420 1405
1421 def __doImports(self, title, method): 1406 def __doImports(self, title, method):
1422 """ 1407 """
1435 line, index, line1, index1 = aw.getSelection() 1420 line, index, line1, index1 = aw.getSelection()
1436 offset = self.__getOffset(aw, line, index) 1421 offset = self.__getOffset(aw, line, index)
1437 else: 1422 else:
1438 offset = None 1423 offset = None
1439 1424
1425 from rope.refactor.importutils import ImportOrganizer
1440 importOrganizer = ImportOrganizer(self.__project) 1426 importOrganizer = ImportOrganizer(self.__project)
1441 resource = rope.base.libutils.path_to_resource( 1427 resource = rope.base.libutils.path_to_resource(
1442 self.__project, filename) 1428 self.__project, filename)
1443 try: 1429 try:
1444 changes = method(importOrganizer, resource, offset=offset) 1430 changes = method(importOrganizer, resource, offset=offset)
1445 if changes is not None: 1431 if changes is not None:
1432 from ConfirmationDialog import ConfirmationDialog
1446 dlg = ConfirmationDialog(changes, self.__ui) 1433 dlg = ConfirmationDialog(changes, self.__ui)
1447 if dlg.exec_() == QDialog.Accepted: 1434 if dlg.exec_() == QDialog.Accepted:
1448 self.__project.do(changes) 1435 self.__project.do(changes)
1449 self.refreshEditors(changes) 1436 self.refreshEditors(changes)
1450 if self.__e5project.isDirty(): 1437 if self.__e5project.isDirty():
1462 1449
1463 def __restructure(self): 1450 def __restructure(self):
1464 """ 1451 """
1465 Private slot to restructure code. 1452 Private slot to restructure code.
1466 """ 1453 """
1454 from RestructureDialog import RestructureDialog
1467 title = self.trUtf8("Restructure") 1455 title = self.trUtf8("Restructure")
1468 self.dlg = RestructureDialog(self, title, parent=self.__ui) 1456 self.dlg = RestructureDialog(self, title, parent=self.__ui)
1469 self.dlg.show() 1457 self.dlg.show()
1470 1458
1471 def __changeSignature(self): 1459 def __changeSignature(self):
1490 1478
1491 filename = aw.getFileName() 1479 filename = aw.getFileName()
1492 line, index, line1, index1 = aw.getSelection() 1480 line, index, line1, index1 = aw.getSelection()
1493 offset = self.__getOffset(aw, line, index) 1481 offset = self.__getOffset(aw, line, index)
1494 1482
1483 import rope.refactor.change_signature
1495 resource = rope.base.libutils.path_to_resource( 1484 resource = rope.base.libutils.path_to_resource(
1496 self.__project, filename) 1485 self.__project, filename)
1497 try: 1486 try:
1498 changer = rope.refactor.change_signature.ChangeSignature( 1487 changer = rope.refactor.change_signature.ChangeSignature(
1499 self.__project, resource, offset) 1488 self.__project, resource, offset)
1500 except Exception as err: 1489 except Exception as err:
1501 self.handleRopeError(err, title) 1490 self.handleRopeError(err, title)
1502 return 1491 return
1503 1492
1493 from ChangeSignatureDialog import ChangeSignatureDialog
1504 self.dlg = ChangeSignatureDialog(self, title, changer, 1494 self.dlg = ChangeSignatureDialog(self, title, changer,
1505 parent=self.__ui) 1495 parent=self.__ui)
1506 self.dlg.show() 1496 self.dlg.show()
1507 1497
1508 def __inlineArgumentDefault(self): 1498 def __inlineArgumentDefault(self):
1528 1518
1529 filename = aw.getFileName() 1519 filename = aw.getFileName()
1530 line, index, line1, index1 = aw.getSelection() 1520 line, index, line1, index1 = aw.getSelection()
1531 offset = self.__getOffset(aw, line, index) 1521 offset = self.__getOffset(aw, line, index)
1532 1522
1523 import rope.refactor.change_signature
1533 resource = rope.base.libutils.path_to_resource( 1524 resource = rope.base.libutils.path_to_resource(
1534 self.__project, filename) 1525 self.__project, filename)
1535 try: 1526 try:
1536 changer = rope.refactor.change_signature.ChangeSignature( 1527 changer = rope.refactor.change_signature.ChangeSignature(
1537 self.__project, resource, offset) 1528 self.__project, resource, offset)
1538 except Exception as err: 1529 except Exception as err:
1539 self.handleRopeError(err, title) 1530 self.handleRopeError(err, title)
1540 return 1531 return
1541 1532
1533 from InlineArgumentDefaultDialog import InlineArgumentDefaultDialog
1542 self.dlg = InlineArgumentDefaultDialog(self, title, changer, 1534 self.dlg = InlineArgumentDefaultDialog(self, title, changer,
1543 parent=self.__ui) 1535 parent=self.__ui)
1544 self.dlg.show() 1536 self.dlg.show()
1545 1537
1546 def __transformModuleToPackage(self): 1538 def __transformModuleToPackage(self):
1557 if not self.confirmAllBuffersSaved(): 1549 if not self.confirmAllBuffersSaved():
1558 return 1550 return
1559 1551
1560 filename = aw.getFileName() 1552 filename = aw.getFileName()
1561 1553
1554 import rope.refactor.topackage
1562 resource = rope.base.libutils.path_to_resource( 1555 resource = rope.base.libutils.path_to_resource(
1563 self.__project, filename) 1556 self.__project, filename)
1564 try: 1557 try:
1565 changes = rope.refactor.topackage.ModuleToPackage( 1558 changes = rope.refactor.topackage.ModuleToPackage(
1566 self.__project, resource).get_changes() 1559 self.__project, resource).get_changes()
1593 1586
1594 filename = aw.getFileName() 1587 filename = aw.getFileName()
1595 line, index, line1, index1 = aw.getSelection() 1588 line, index, line1, index1 = aw.getSelection()
1596 offset = self.__getOffset(aw, line, index) 1589 offset = self.__getOffset(aw, line, index)
1597 1590
1591 import rope.refactor.encapsulate_field
1598 resource = rope.base.libutils.path_to_resource( 1592 resource = rope.base.libutils.path_to_resource(
1599 self.__project, filename) 1593 self.__project, filename)
1600
1601 try: 1594 try:
1602 encapsulateField = \ 1595 encapsulateField = \
1603 rope.refactor.encapsulate_field.EncapsulateField( 1596 rope.refactor.encapsulate_field.EncapsulateField(
1604 self.__project, resource, offset) 1597 self.__project, resource, offset)
1605 except Exception as err: 1598 except Exception as err:
1606 self.handleRopeError(err, title) 1599 self.handleRopeError(err, title)
1607 return 1600 return
1608 1601
1602 from GetterSetterDialog import GetterSetterDialog
1609 dlg = GetterSetterDialog(encapsulateField.get_field_name()) 1603 dlg = GetterSetterDialog(encapsulateField.get_field_name())
1610 if dlg.exec_() == QDialog.Accepted: 1604 if dlg.exec_() == QDialog.Accepted:
1605 from ProgressHandle import ProgressHandle
1606 from ConfirmationDialog import ConfirmationDialog
1611 getter, setter = dlg.getData() 1607 getter, setter = dlg.getData()
1612 handle = ProgressHandle(title, False, self.__ui) 1608 handle = ProgressHandle(title, False, self.__ui)
1613 handle.show() 1609 handle.show()
1614 QApplication.processEvents() 1610 QApplication.processEvents()
1615 try: 1611 try:
1647 1643
1648 filename = aw.getFileName() 1644 filename = aw.getFileName()
1649 line, index, line1, index1 = aw.getSelection() 1645 line, index, line1, index1 = aw.getSelection()
1650 offset = self.__getOffset(aw, line, index) 1646 offset = self.__getOffset(aw, line, index)
1651 1647
1648 import rope.refactor.localtofield
1649 from ConfirmationDialog import ConfirmationDialog
1652 resource = rope.base.libutils.path_to_resource( 1650 resource = rope.base.libutils.path_to_resource(
1653 self.__project, filename) 1651 self.__project, filename)
1654 try: 1652 try:
1655 changes = rope.refactor.localtofield.LocalToField( 1653 changes = rope.refactor.localtofield.LocalToField(
1656 self.__project, resource, offset).get_changes() 1654 self.__project, resource, offset).get_changes()
1685 1683
1686 filename = aw.getFileName() 1684 filename = aw.getFileName()
1687 line, index, line1, index1 = aw.getSelection() 1685 line, index, line1, index1 = aw.getSelection()
1688 offset = self.__getOffset(aw, line, index) 1686 offset = self.__getOffset(aw, line, index)
1689 1687
1688 import rope.refactor.method_object
1690 resource = rope.base.libutils.path_to_resource( 1689 resource = rope.base.libutils.path_to_resource(
1691 self.__project, filename) 1690 self.__project, filename)
1692 try: 1691 try:
1693 converter = rope.refactor.method_object.MethodObject( 1692 converter = rope.refactor.method_object.MethodObject(
1694 self.__project, resource, offset) 1693 self.__project, resource, offset)
1695 except Exception as err: 1694 except Exception as err:
1696 self.handleRopeError(err, title) 1695 self.handleRopeError(err, title)
1697 return 1696 return
1698 1697
1698 from MethodToMethodObjectDialog import MethodToMethodObjectDialog
1699 self.dlg = MethodToMethodObjectDialog(self, title, converter, 1699 self.dlg = MethodToMethodObjectDialog(self, title, converter,
1700 parent=self.__ui) 1700 parent=self.__ui)
1701 self.dlg.show() 1701 self.dlg.show()
1702 1702
1703 ##################################################### 1703 #####################################################
1721 QMessageBox.No) 1721 QMessageBox.No)
1722 if res == QMessageBox.Yes: 1722 if res == QMessageBox.Yes:
1723 if not self.confirmAllBuffersSaved(): 1723 if not self.confirmAllBuffersSaved():
1724 return 1724 return
1725 1725
1726 from ProgressHandle import ProgressHandle
1726 changes = history.undo_list[-1] 1727 changes = history.undo_list[-1]
1727 handle = ProgressHandle(self.trUtf8("Undo"), False, self.__ui) 1728 handle = ProgressHandle(self.trUtf8("Undo"), False, self.__ui)
1728 handle.show() 1729 handle.show()
1729 QApplication.processEvents() 1730 QApplication.processEvents()
1730 try: 1731 try:
1753 QMessageBox.No) 1754 QMessageBox.No)
1754 if res == QMessageBox.Yes: 1755 if res == QMessageBox.Yes:
1755 if not self.confirmAllBuffersSaved(): 1756 if not self.confirmAllBuffersSaved():
1756 return 1757 return
1757 1758
1759 from ProgressHandle import ProgressHandle
1758 changes = history.redo_list[-1] 1760 changes = history.redo_list[-1]
1759 handle = ProgressHandle(self.trUtf8("Redo"), False, self.__ui) 1761 handle = ProgressHandle(self.trUtf8("Redo"), False, self.__ui)
1760 handle.show() 1762 handle.show()
1761 QApplication.processEvents() 1763 QApplication.processEvents()
1762 try: 1764 try:
1770 1772
1771 def __showProjectUndoHistory(self): 1773 def __showProjectUndoHistory(self):
1772 """ 1774 """
1773 Private method to show list of changes available for an undo operation. 1775 Private method to show list of changes available for an undo operation.
1774 """ 1776 """
1777 from HistoryDialog import HistoryDialog
1775 undoList = list(reversed(self.__project.history.undo_list)) 1778 undoList = list(reversed(self.__project.history.undo_list))
1776 self.dlg = HistoryDialog(self, undoList, True, self.__ui) 1779 self.dlg = HistoryDialog(self, undoList, True, self.__ui)
1777 self.dlg.show() 1780 self.dlg.show()
1778 1781
1779 def __showProjectRedoHistory(self): 1782 def __showProjectRedoHistory(self):
1780 """ 1783 """
1781 Private method to show list of changes available for a redo operation. 1784 Private method to show list of changes available for a redo operation.
1782 """ 1785 """
1786 from HistoryDialog import HistoryDialog
1783 redoList = self.__project.history.redo_list 1787 redoList = self.__project.history.redo_list
1784 self.dlg = HistoryDialog(self, redoList, False, self.__ui) 1788 self.dlg = HistoryDialog(self, redoList, False, self.__ui)
1785 self.dlg.show() 1789 self.dlg.show()
1786 1790
1787 def __showFileUndoHistory(self): 1791 def __showFileUndoHistory(self):
1792 aw = e5App().getObject("ViewManager").activeWindow() 1796 aw = e5App().getObject("ViewManager").activeWindow()
1793 1797
1794 if aw is None: 1798 if aw is None:
1795 return 1799 return
1796 1800
1801 from HistoryDialog import HistoryDialog
1797 filename = aw.getFileName() 1802 filename = aw.getFileName()
1798 resource = rope.base.libutils.path_to_resource( 1803 resource = rope.base.libutils.path_to_resource(
1799 self.__project, filename) 1804 self.__project, filename)
1800 undoList = list(reversed(self.__getFileUndoList(resource))) 1805 undoList = list(reversed(self.__getFileUndoList(resource)))
1801 self.dlg = HistoryDialog(self, undoList, True, self.__ui) 1806 self.dlg = HistoryDialog(self, undoList, True, self.__ui)
1809 aw = e5App().getObject("ViewManager").activeWindow() 1814 aw = e5App().getObject("ViewManager").activeWindow()
1810 1815
1811 if aw is None: 1816 if aw is None:
1812 return 1817 return
1813 1818
1819 from HistoryDialog import HistoryDialog
1814 filename = aw.getFileName() 1820 filename = aw.getFileName()
1815 resource = rope.base.libutils.path_to_resource( 1821 resource = rope.base.libutils.path_to_resource(
1816 self.__project, filename) 1822 self.__project, filename)
1817 redoList = self.__getFileRedoList(resource) 1823 redoList = self.__getFileRedoList(resource)
1818 self.dlg = HistoryDialog(self, redoList, False, self.__ui) 1824 self.dlg = HistoryDialog(self, redoList, False, self.__ui)
1859 1865
1860 filename = aw.getFileName() 1866 filename = aw.getFileName()
1861 line, index, line1, index1 = aw.getSelection() 1867 line, index, line1, index1 = aw.getSelection()
1862 offset = self.__getOffset(aw, line, index) 1868 offset = self.__getOffset(aw, line, index)
1863 1869
1870 import rope.contrib.findit
1871 from ProgressHandle import ProgressHandle
1864 resource = rope.base.libutils.path_to_resource( 1872 resource = rope.base.libutils.path_to_resource(
1865 self.__project, filename) 1873 self.__project, filename)
1866 handle = ProgressHandle(title, True, self.__ui) 1874 handle = ProgressHandle(title, True, self.__ui)
1867 handle.show() 1875 handle.show()
1868 QApplication.processEvents() 1876 QApplication.processEvents()
1874 self.handleRopeError(err, title, handle) 1882 self.handleRopeError(err, title, handle)
1875 return 1883 return
1876 handle.reset() 1884 handle.reset()
1877 1885
1878 if occurrences: 1886 if occurrences:
1887 from MatchesDialog import MatchesDialog
1879 self.dlg = MatchesDialog(self.__ui, True) 1888 self.dlg = MatchesDialog(self.__ui, True)
1880 self.dlg.show() 1889 self.dlg.show()
1881 for occurrence in occurrences: 1890 for occurrence in occurrences:
1882 self.dlg.addEntry(occurrence.resource, 1891 self.dlg.addEntry(occurrence.resource,
1883 occurrence.lineno, occurrence.unsure) 1892 occurrence.lineno, occurrence.unsure)
1908 1917
1909 filename = aw.getFileName() 1918 filename = aw.getFileName()
1910 line, index, line1, index1 = aw.getSelection() 1919 line, index, line1, index1 = aw.getSelection()
1911 offset = self.__getOffset(aw, line, index) 1920 offset = self.__getOffset(aw, line, index)
1912 1921
1922 import rope.contrib.findit
1913 resource = rope.base.libutils.path_to_resource( 1923 resource = rope.base.libutils.path_to_resource(
1914 self.__project, filename) 1924 self.__project, filename)
1915 try: 1925 try:
1916 location = rope.contrib.findit.find_definition( 1926 location = rope.contrib.findit.find_definition(
1917 self.__project, aw.text(), offset, resource) 1927 self.__project, aw.text(), offset, resource)
1918 except Exception as err: 1928 except Exception as err:
1919 self.handleRopeError(err, title) 1929 self.handleRopeError(err, title)
1920 return 1930 return
1921 1931
1922 if location is not None: 1932 if location is not None:
1933 from MatchesDialog import MatchesDialog
1923 self.dlg = MatchesDialog(self.__ui, False) 1934 self.dlg = MatchesDialog(self.__ui, False)
1924 self.dlg.show() 1935 self.dlg.show()
1925 self.dlg.addEntry(location.resource, location.lineno) 1936 self.dlg.addEntry(location.resource, location.lineno)
1926 else: 1937 else:
1927 QMessageBox.warning(self.__ui, title, 1938 QMessageBox.warning(self.__ui, title,
1949 1960
1950 filename = aw.getFileName() 1961 filename = aw.getFileName()
1951 line, index, line1, index1 = aw.getSelection() 1962 line, index, line1, index1 = aw.getSelection()
1952 offset = self.__getOffset(aw, line, index) 1963 offset = self.__getOffset(aw, line, index)
1953 1964
1965 import rope.contrib.findit
1966 from ProgressHandle import ProgressHandle
1954 resource = rope.base.libutils.path_to_resource(self.__project, 1967 resource = rope.base.libutils.path_to_resource(self.__project,
1955 filename) 1968 filename)
1956 handle = ProgressHandle(title, True, self.__ui) 1969 handle = ProgressHandle(title, True, self.__ui)
1957 handle.show() 1970 handle.show()
1958 QApplication.processEvents() 1971 QApplication.processEvents()
1963 self.handleRopeError(err, title, handle) 1976 self.handleRopeError(err, title, handle)
1964 return 1977 return
1965 handle.reset() 1978 handle.reset()
1966 1979
1967 if occurrences: 1980 if occurrences:
1981 from MatchesDialog import MatchesDialog
1968 self.dlg = MatchesDialog(self.__ui, True) 1982 self.dlg = MatchesDialog(self.__ui, True)
1969 self.dlg.show() 1983 self.dlg.show()
1970 for occurrence in occurrences: 1984 for occurrence in occurrences:
1971 self.dlg.addEntry(occurrence.resource, 1985 self.dlg.addEntry(occurrence.resource,
1972 occurrence.lineno, occurrence.unsure) 1986 occurrence.lineno, occurrence.unsure)
1985 ropedir = self.__project.ropefolder 1999 ropedir = self.__project.ropefolder
1986 configfile = "" 2000 configfile = ""
1987 if ropedir is not None: 2001 if ropedir is not None:
1988 configfile = os.path.join(ropedir.real_path, "config.py") 2002 configfile = os.path.join(ropedir.real_path, "config.py")
1989 if os.path.exists(configfile): 2003 if os.path.exists(configfile):
2004 from QScintilla.MiniEditor import MiniEditor
1990 self.__editor = MiniEditor(configfile) 2005 self.__editor = MiniEditor(configfile)
1991 self.__editor.show() 2006 self.__editor.show()
1992 self.__editor.editorSaved.connect(self.__configChanged) 2007 self.__editor.editorSaved.connect(self.__configChanged)
1993 else: 2008 else:
1994 QMessageBox.critical(self.__ui, 2009 QMessageBox.critical(self.__ui,
2032 def __showRopeHelp(self): 2047 def __showRopeHelp(self):
2033 """ 2048 """
2034 Private slot to show help about the refactorings offered by Rope. 2049 Private slot to show help about the refactorings offered by Rope.
2035 """ 2050 """
2036 if self.__helpDialog is None: 2051 if self.__helpDialog is None:
2052 from HelpDialog import HelpDialog
2037 helpfile = os.path.join(os.path.dirname(__file__), 2053 helpfile = os.path.join(os.path.dirname(__file__),
2038 "rope", "docs", "overview.txt") 2054 "rope", "docs", "overview.txt")
2039 self.__helpDialog = \ 2055 self.__helpDialog = \
2040 HelpDialog(self.trUtf8("Help about rope refactorings"), 2056 HelpDialog(self.trUtf8("Help about rope refactorings"),
2041 helpfile) 2057 helpfile)
2053 QMessageBox.StandardButtons(\ 2069 QMessageBox.StandardButtons(\
2054 QMessageBox.No | \ 2070 QMessageBox.No | \
2055 QMessageBox.Yes), 2071 QMessageBox.Yes),
2056 QMessageBox.No) 2072 QMessageBox.No)
2057 if res == QMessageBox.Yes: 2073 if res == QMessageBox.Yes:
2074 from ProgressHandle import ProgressHandle
2058 handle = ProgressHandle(title, True, self.__ui) 2075 handle = ProgressHandle(title, True, self.__ui)
2059 handle.show() 2076 handle.show()
2060 QApplication.processEvents() 2077 QApplication.processEvents()
2061 try: 2078 try:
2062 rope.base.libutils.analyze_modules(self.__project, 2079 rope.base.libutils.analyze_modules(self.__project,
2090 2107
2091 def __configChanged(self): 2108 def __configChanged(self):
2092 """ 2109 """
2093 Private slot called, when the rope config file has changed. 2110 Private slot called, when the rope config file has changed.
2094 """ 2111 """
2112 import rope.base.project
2095 self.__project.close() 2113 self.__project.close()
2096 self.__project = rope.base.project.Project(self.__projectpath, 2114 self.__project = rope.base.project.Project(self.__projectpath,
2097 fscommands=self.__fsCommands) 2115 fscommands=self.__fsCommands)
2098 2116
2099 def __defaultConfig(self): 2117 def __defaultConfig(self):
2130 self.__projectopen = True 2148 self.__projectopen = True
2131 self.__projectpath = self.__e5project.getProjectPath() 2149 self.__projectpath = self.__e5project.getProjectPath()
2132 self.__projectLanguage = self.__e5project.getProjectLanguage() 2150 self.__projectLanguage = self.__e5project.getProjectLanguage()
2133 2151
2134 if self.__projectLanguage in ["Python3"]: 2152 if self.__projectLanguage in ["Python3"]:
2153 import rope.base.project
2135 self.__project = rope.base.project.Project(self.__projectpath, 2154 self.__project = rope.base.project.Project(self.__projectpath,
2136 fscommands=self.__fsCommands) 2155 fscommands=self.__fsCommands)
2137 for act in self.actions: 2156 for act in self.actions:
2138 act.setEnabled(True) 2157 act.setEnabled(True)
2139 2158

eric ide

mercurial