Skip to content

Commit a0d967e

Browse files
committedNov 24, 2015
Fixed issue renaming top-level module on refactoring (i.e.: import mod1;mod1.__file__ now properly becomes from pack import mod1;mod1.__file__)
1 parent f516926 commit a0d967e

29 files changed

+774
-216
lines changed
 

Diff for: ‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,4 @@ Desktop DB
5151
plugins/org.python.pydev/pysrc/.git
5252
plugins/org.python.pydev/pysrc/.project
5353
plugins/org.python.pydev/pysrc/.settings
54+
**/v2_indexcache/**

Diff for: ‎plugins/com.python.pydev.refactoring/src/com/python/pydev/refactoring/wizards/rename/MatchImportsVisitor.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,8 @@ public List<TextEdit> createRenameEdit(IDocument doc, String initialName, String
292292
private String lastPart;
293293
private FastStack<SimpleNode> stack = new FastStack<>(10);
294294

295-
public MatchImportsVisitor(IPythonNature nature, String initialName, SourceModule module, IProgressMonitor monitor) {
295+
public MatchImportsVisitor(IPythonNature nature, String initialName, SourceModule module,
296+
IProgressMonitor monitor) {
296297
this.nature = nature;
297298
this.initialModuleName = getWithoutInit(initialName);
298299
this.currentModule = module;
@@ -489,10 +490,11 @@ public boolean handleNames(SimpleNode node, aliasType[] names, String modRep, bo
489490
}
490491

491492
if (aliasType.asname == null) {
492-
boolean partialInImportStatement = node instanceof Import && startsWith;
493-
String checkName = partialInImportStatement ? initialModuleName : nameInImport;
493+
boolean forceFull = node instanceof Import && startsWith
494+
&& full.contains(".");
495+
String checkName = forceFull ? initialModuleName : nameInImport;
494496

495-
findOccurrences(partialInImportStatement, checkName);
497+
findOccurrences(forceFull, checkName);
496498
}
497499
handled = true;
498500
} else {
@@ -515,17 +517,18 @@ public boolean handleNames(SimpleNode node, aliasType[] names, String modRep, bo
515517
return handled;
516518
}
517519

518-
protected void findOccurrences(boolean partialInImportStatement, String checkName) {
520+
protected void findOccurrences(boolean forceFull, String checkName) {
519521
List<ASTEntry> localOccurrences = ScopeAnalysis.getLocalOccurrences(checkName,
520522
stack.peek());
521523
for (ASTEntry astEntry : localOccurrences) {
522524
if ((astEntry.node instanceof NameTok)
523-
&& (((NameTok) astEntry.node).ctx == NameTok.ImportName || ((NameTok) astEntry.node).ctx == NameTok.ImportModule)) {
525+
&& (((NameTok) astEntry.node).ctx == NameTok.ImportName
526+
|| ((NameTok) astEntry.node).ctx == NameTok.ImportModule)) {
524527
//i.e.: skip if it's an import as we already handle those!
525528
continue;
526529
} else {
527530
occurrences.add(new PyRenameImportProcess.FixedInputStringASTEntry(checkName,
528-
null, astEntry.node, partialInImportStatement));
531+
null, astEntry.node, forceFull));
529532
}
530533
}
531534
}

Diff for: ‎plugins/com.python.pydev.refactoring/tests/com/python/pydev/refactoring/refactorer/refactorings/rename/RenameModuleRefactoringTest.java

+46-16
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ public void testRenameModuleInWorkspace() throws Exception {
8888
+ "\n"
8989
+ "reflib.renamemodule.mod1\n"
9090
+ " ASTEntryWithSourceModule<Module (Module L=0 C=0)>\n"
91-
+ "\n"
92-
, asStr);
91+
+ "\n",
92+
asStr);
9393

9494
}
9595

@@ -139,8 +139,8 @@ public void testRenameModuleInWorkspaceA() throws Exception {
139139
+ "\n"
140140
+ "reflib.renamemodule.mod1\n"
141141
+ " ASTEntryWithSourceModule<Module (Module L=0 C=0)>\n"
142-
+ "\n"
143-
, asStr);
142+
+ "\n",
143+
asStr);
144144

145145
}
146146

@@ -184,7 +184,8 @@ public void testRenameModuleInWorkspace2() throws Exception {
184184
+ "reflib.renamemodule.mod1.submod1\n"
185185
+ " ASTEntryWithSourceModule<Module (Module L=0 C=0)>\n"
186186
+ "\n"
187-
+ "", asStr);
187+
+ "",
188+
asStr);
188189
}
189190

190191
public void testRenameModuleInWorkspace4() throws Exception {
@@ -213,7 +214,8 @@ public void testRenameModuleInWorkspace4() throws Exception {
213214
+ " ImportFromModPartRenameAstEntry<from reflib.renamemodule2.mod_ren1 import Mod1 (ImportFrom L=1 C=6)>\n"
214215
+ " Line: 0 from reflib.renamemodule2.mod_ren1 import Mod1 --> from new_mod_name import Mod1\n"
215216
+ "\n"
216-
+ "", asStr);
217+
+ "",
218+
asStr);
217219
}
218220

219221
public void testRenameModuleInWorkspace5() throws Exception {
@@ -236,7 +238,8 @@ public void testRenameModuleInWorkspace5() throws Exception {
236238
+ " ImportFromRenameAstEntry<import reflib.renamemodule3.pack1 (Import L=2 C=8)>\n"
237239
+ " Line: 1 import reflib.renamemodule3.pack1 --> import new_mod.pack1\n"
238240
+ "\n"
239-
+ "", asStr);
241+
+ "",
242+
asStr);
240243
}
241244

242245
public void testRenameModuleInWorkspace6() throws Exception {
@@ -259,7 +262,8 @@ public void testRenameModuleInWorkspace6() throws Exception {
259262
+ " ImportFromRenameAstEntry<import reflib.renamemodule3.pack1 (Import L=2 C=8)>\n"
260263
+ " Line: 1 import reflib.renamemodule3.pack1 --> import my.new.mod.pack1\n"
261264
+ "\n"
262-
+ "", asStr);
265+
+ "",
266+
asStr);
263267
}
264268

265269
public void testRenameModuleInWorkspace7() throws Exception {
@@ -282,7 +286,8 @@ public void testRenameModuleInWorkspace7() throws Exception {
282286
+ " ImportFromModPartRenameAstEntry<from renamemodule_root import mod_in_root2 (ImportFrom L=1 C=6)>\n"
283287
+ " Line: 0 from renamemodule_root import mod_in_root2 --> from p2.bar import mod_in_root2\n"
284288
+ "\n"
285-
+ "", asStr);
289+
+ "",
290+
asStr);
286291
}
287292

288293
public void testRenameModuleInWorkspace8() throws Exception {
@@ -307,7 +312,8 @@ public void testRenameModuleInWorkspace8() throws Exception {
307312
+ " ImportFromRenameAstEntry<from renamemodule_root import mod_in_root2 (ImportFrom L=1 C=6)>\n"
308313
+ " Line: 0 from renamemodule_root import mod_in_root2 --> import p2\n"
309314
+ "\n"
310-
+ "", asStr);
315+
+ "",
316+
asStr);
311317
}
312318

313319
public void testRenameModuleInWorkspace9() throws Exception {
@@ -328,7 +334,8 @@ public void testRenameModuleInWorkspace9() throws Exception {
328334
+ " ImportFromRenameAstEntry<import reflib.renamemodule4 (Import L=5 C=12)>\n"
329335
+ " Line: 4 import reflib.renamemodule4 --> import p2\n"
330336
+ "\n"
331-
+ "", asStr);
337+
+ "",
338+
asStr);
332339
}
333340

334341
public void testRenameModuleInWorkspace10() throws Exception {
@@ -345,7 +352,8 @@ public void testRenameModuleInWorkspace10() throws Exception {
345352
+ " ImportFromModPartRenameAstEntry<from renamemodule5._tests.foo import RenameModule5 (ImportFrom L=3 C=6)>\n"
346353
+ " Line: 2 from renamemodule5._tests.foo import RenameModule5 --> from p2._tests.foo import RenameModule5\n"
347354
+ "\n"
348-
+ "", asStr);
355+
+ "",
356+
asStr);
349357
}
350358

351359
public void testRenameModuleInWorkspace11() throws Exception {
@@ -362,7 +370,8 @@ public void testRenameModuleInWorkspace11() throws Exception {
362370
+ " ImportFromModPartRenameAstEntry<from renamemodule5._tests.foo import RenameModule5 (ImportFrom L=3 C=6)>\n"
363371
+ " Line: 2 from renamemodule5._tests.foo import RenameModule5 --> from p2 import RenameModule5\n"
364372
+ "\n"
365-
+ "", asStr);
373+
+ "",
374+
asStr);
366375
}
367376

368377
public void testRenameModuleInWorkspace12() throws Exception {
@@ -379,7 +388,8 @@ public void testRenameModuleInWorkspace12() throws Exception {
379388
+ "reflib.renamemodule6.scene\n"
380389
+ " ASTEntryWithSourceModule<Module (Module L=1 C=1)>\n"
381390
+ "\n"
382-
+ "", asStr);
391+
+ "",
392+
asStr);
383393
}
384394

385395
public void testRenameModuleInWorkspace13() throws Exception {
@@ -392,11 +402,31 @@ public void testRenameModuleInWorkspace13() throws Exception {
392402
""
393403
+ "testpkg._imp\n"
394404
+ " ASTEntryWithSourceModule<Module (Module L=1 C=1)>\n"
395-
+ "\n"
396-
, asStr);
405+
+ "\n",
406+
asStr);
397407

398408
}
399409

410+
public void testRenameModuleInWorkspace14() throws Exception {
411+
412+
Map<Tuple<String, File>, HashSet<ASTEntry>> referencesForModuleRename = getReferencesForModuleRename(
413+
"refname2", "reflib.refname3", false);
414+
String asStr = asStr(referencesForModuleRename);
415+
assertEquals(
416+
""
417+
+ "refname\n"
418+
+ " FixedInputStringASTEntry<refname2 (Name L=2 C=1)>\n"
419+
+ " Line: 1 refname2.check() --> refname3.check()\n"
420+
+ " ImportFromRenameAstEntry<import refname2 (Import L=1 C=8)>\n"
421+
+ " Line: 0 import refname2 --> from reflib import refname3\n"
422+
+ "\n"
423+
+ "refname2\n"
424+
+ " ASTEntryWithSourceModule<Module (Module L=1 C=1)>\n"
425+
+ "\n"
426+
+ "",
427+
asStr);
428+
}
429+
400430
protected Map<Tuple<String, File>, HashSet<ASTEntry>> getReferencesForModuleRename(String moduleName,
401431
String newName,
402432
boolean expectError) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import refname2
2+
refname2.check()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def check():
2+
pass

Diff for: ‎plugins/org.python.pydev/pysrc/.travis.yml

+5-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# - 3.2
66
# - 3.3
77
# - "pypy"
8-
#
8+
#
99
# # Setup anaconda
1010
# before_install:
1111
# # Fix issue with testGui
@@ -17,13 +17,13 @@
1717
# - pip install nose
1818
# - pip install ipython
1919
# - pip install django
20-
#
20+
#
2121
# # Run test
2222
# script:
2323
# - nosetests --verbosity=3
2424

2525

26-
# IPython only works with 2.7/3.3, so, test only on those.
26+
# IPython only works with 2.7/3.3, so, test only on those.
2727
language: python
2828
python:
2929
- 2.7
@@ -34,7 +34,7 @@ before_install:
3434
- wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
3535
- chmod +x miniconda.sh
3636
- ./miniconda.sh -b
37-
- export PATH=/home/travis/miniconda/bin:$PATH
37+
- export PATH=/home/travis/miniconda2/bin:$PATH
3838
- conda update --yes conda
3939
# The next couple lines fix a crash with multiprocessing on Travis and are not specific to using Miniconda
4040
- sudo rm -rf /dev/shm
@@ -46,8 +46,7 @@ before_install:
4646
install:
4747
- conda install --yes python=$TRAVIS_PYTHON_VERSION numpy nose ipython
4848
- pip install django
49-
49+
5050
# Run test
5151
script:
5252
- nosetests --verbosity=3
53-

Diff for: ‎plugins/org.python.pydev/pysrc/_pydev_bundle/__init__.py

Whitespace-only changes.

Diff for: ‎plugins/org.python.pydev/pysrc/_pydev_runfiles/__init__.py

Whitespace-only changes.

Diff for: ‎plugins/org.python.pydev/pysrc/pydev_runfiles_nose.py renamed to ‎plugins/org.python.pydev/pysrc/_pydev_runfiles/pydev_runfiles_nose.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from nose.plugins.multiprocess import MultiProcessTestRunner # @UnresolvedImport
22
from nose.plugins.base import Plugin # @UnresolvedImport
33
import sys
4-
import pydev_runfiles_xml_rpc
4+
from _pydev_runfiles import pydev_runfiles_xml_rpc
55
import time
6-
from pydev_runfiles_coverage import StartCoverageSupport
6+
from _pydev_runfiles.pydev_runfiles_coverage import StartCoverageSupport
77

88
#=======================================================================================================================
99
# PydevPlugin

0 commit comments

Comments
 (0)
Please sign in to comment.