Skip to content

Commit ed56ef5

Browse files
committed
fixed package renaming
1 parent ae1f2f1 commit ed56ef5

23 files changed

+158
-67
lines changed

.haxerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"version": "deb58a3",
2+
"version": "bd1a05d",
33
"resolveLibs": "scoped"
44
}

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## dev branch / next version (2.x.x)
44

5+
## 2.1.3 (2022-05-01)
6+
7+
- fixed package renaming
8+
59
## 2.1.2 (2022-04-25)
610

711
- fixed handling of loop iterator shadowing, fixes [vshaxe/vshaxe#136](https://github.com/vshaxe/vshaxe/issues/136)

haxelib.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"refactor"
99
],
1010
"description": "A code renaming tool for Haxe",
11-
"version": "2.1.2",
12-
"releasenote": "fixed handling of loop iterator shadowing",
11+
"version": "2.1.3",
12+
"releasenote": "fixed package renaming",
1313
"contributors": [
1414
"AlexHaxe"
1515
],

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@haxecheckstyle/haxe-rename",
3-
"version": "2.1.2",
3+
"version": "2.1.3",
44
"description": "Renaming tool for Haxe",
55
"repository": {
66
"type": "git",

src/refactor/discover/File.hx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,9 @@ class File {
4040
if (packName.length <= 0) {
4141
return Global;
4242
}
43-
if (packName == getPackage()) {
44-
return SamePackage;
45-
}
4643
var fullModule:String = '$packName.$moduleName';
4744
var fullSubModule:Null<String> = null;
48-
if (moduleName == typeName) {
45+
if (moduleName != typeName) {
4946
fullSubModule = '$fullModule.$typeName';
5047
}
5148
for (importEntry in importList) {
@@ -64,9 +61,21 @@ class File {
6461
}
6562

6663
if (importHxFile == null) {
64+
if (packName == getPackage()) {
65+
return SamePackage;
66+
}
67+
if (packName == getPackage()) {
68+
return SamePackage;
69+
}
6770
return None;
6871
}
69-
return importHxFile.importsModule(packName, moduleName, typeName);
72+
var result:ImportStatus = importHxFile.importsModule(packName, moduleName, typeName);
73+
if (result == None) {
74+
if (packName == getPackage()) {
75+
return SamePackage;
76+
}
77+
}
78+
return result;
7079
}
7180

7281
public function getMainModulName():String {

src/refactor/rename/RenamePackage.hx

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -22,59 +22,58 @@ class RenamePackage {
2222
changelist.addChange(file.name, InsertText('package ${context.what.toName};\n', {fileName: file.name, start: 0, end: 0}), identifier);
2323
}
2424

25+
var newMainModulName:String = context.what.toName + "." + mainTypeName;
26+
var mainModule:String = packageNamePrefix + mainTypeName;
27+
var allUses:Array<Identifier> = context.nameMap.getIdentifiers(mainModule);
28+
for (use in allUses) {
29+
changelist.addChange(use.pos.fileName, ReplaceText(newMainModulName, use.pos), use);
30+
}
2531
for (type in file.typeList) {
26-
var typeName:String = if (mainTypeName == type.name.name) {
27-
type.name.name;
28-
} else {
29-
mainTypeName + "." + type.name;
32+
if (mainTypeName == type.name.name) {
33+
continue;
3034
}
35+
var typeName:String = type.name.name;
36+
3137
var fullModulName:String = packageNamePrefix + typeName;
3238
var newFullModulName:String = context.what.toName + "." + typeName;
33-
var allUses:Array<Identifier> = context.nameMap.getIdentifiers(fullModulName);
34-
if (allUses != null) {
35-
for (use in allUses) {
36-
changelist.addChange(use.pos.fileName, ReplaceText(newFullModulName, use.pos), use);
37-
}
39+
allUses = context.nameMap.getIdentifiers(fullModulName);
40+
for (use in allUses) {
41+
changelist.addChange(use.pos.fileName, ReplaceText(newFullModulName, use.pos), use);
3842
}
3943

40-
allUses = context.nameMap.getIdentifiers(type.name.name);
41-
allUses = allUses.concat(context.nameMap.getStartsWith(type.name.name + "."));
42-
var uniqueFiles:Array<String> = [];
43-
if (allUses != null) {
44-
for (use in allUses) {
45-
if (use.pos.fileName == identifier.pos.fileName) {
46-
// ignore self
47-
continue;
48-
}
49-
if (uniqueFiles.contains(use.pos.fileName)) {
50-
// only add once per file
51-
continue;
52-
}
53-
var useFile:Null<File> = context.fileList.getFile(use.pos.fileName);
54-
if (useFile == null) {
55-
continue;
56-
}
57-
switch (useFile.importsModule(type.file.getPackage(), type.file.getMainModulName(), type.name.name)) {
58-
case None | SamePackage:
59-
case Global | Imported | ImportedWithAlias(_):
60-
// imported old location -> skip (we renamed import in previous loop)
61-
continue;
62-
}
63-
switch (useFile.importsModule(context.what.toName, type.file.getMainModulName(), type.name.name)) {
64-
case None:
65-
case Global | SamePackage | Imported | ImportedWithAlias(_):
66-
// already imports new location -> skip
67-
continue;
68-
}
69-
var importPos:IdentifierPos = {fileName: use.pos.fileName, start: useFile.importInsertPos, end: useFile.importInsertPos}
70-
changelist.addChange(use.pos.fileName, InsertText('import $newFullModulName;\n', importPos), use);
44+
fullModulName = packageNamePrefix + mainTypeName + "." + typeName;
45+
newFullModulName = context.what.toName + "." + mainTypeName + "." + typeName;
46+
allUses = context.nameMap.getIdentifiers(fullModulName);
47+
for (use in allUses) {
48+
changelist.addChange(use.pos.fileName, ReplaceText(newFullModulName, use.pos), use);
49+
}
50+
}
51+
var uniqueFiles:Array<String> = [];
52+
53+
allUses = context.nameMap.getIdentifiers(mainTypeName);
54+
for (use in allUses) {
55+
if (use.file.name == file.name) {
56+
continue;
57+
}
58+
if (use.file.getPackage() != packageName) {
59+
continue;
60+
}
61+
if (uniqueFiles.contains(use.pos.fileName)) {
62+
// only add once per file
63+
continue;
64+
}
65+
switch (use.file.importsModule(packageName, mainTypeName, mainTypeName)) {
66+
case None:
67+
case Global | SamePackage:
68+
var importPos:IdentifierPos = {fileName: use.pos.fileName, start: use.file.importInsertPos, end: use.file.importInsertPos}
69+
changelist.addChange(use.pos.fileName, InsertText('import $newMainModulName;\n', importPos), use);
7170
uniqueFiles.push(use.pos.fileName);
72-
}
71+
case Imported:
72+
case ImportedWithAlias(_):
7373
}
7474
}
7575

7676
// TODO remove redundant imports
77-
7877
moveFileToPackage(context, file, changelist, packageName);
7978
return Promise.resolve(changelist.execute());
8079
}

test/TestMain.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import refactor.EnumTest;
33
import refactor.ImportAliasTest;
44
import refactor.InterfaceTest;
55
import refactor.ModuleLevelStaticTest;
6+
import refactor.PackageTest;
67
import refactor.ScopedLocalTest;
78
import refactor.TypedefTest;
89
import utest.Runner;
@@ -16,6 +17,7 @@ class TestMain {
1617
new ImportAliasTest(),
1718
new InterfaceTest(),
1819
new ModuleLevelStaticTest(),
20+
new PackageTest(),
1921
new ScopedLocalTest(),
2022
new TypedefTest()
2123
];

test/import.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import refactor.TestEditableDocument;
12
import utest.Assert;
23
import utest.Async;
34
import utest.ITest;

test/refactor/ClassTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class ClassTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/classes"]);

test/refactor/EnumTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class EnumTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/enums"]);

test/refactor/ImportAliasTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class ImportAliasTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/importalias"]);

test/refactor/InterfaceTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class InterfaceTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/interfaces"]);

test/refactor/ModuleLevelStaticTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class ModuleLevelStaticTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/modulelevelstatics"]);

test/refactor/PackageTest.hx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package refactor;
2+
3+
class PackageTest extends TestBase {
4+
function setupClass() {
5+
setupTestSources(["testcases/packages"]);
6+
}
7+
8+
public function testRenameTypesModul(async:Async) {
9+
var edits:Array<TestEdit> = [
10+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.Types.Type3", 53, 73),
11+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.Types", 82, 96),
12+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.Type1", 289, 303),
13+
makeMoveTestEdit("testcases/packages/Types.hx", "testcases/packages/sub/Types.hx"),
14+
makeReplaceTestEdit("testcases/packages/Types.hx", "packages.sub", 8, 16),
15+
16+
];
17+
refactorAndCheck({fileName: "testcases/packages/Types.hx", toName: "packages.sub", pos: 12}, edits, async);
18+
}
19+
20+
public function testRenameMoreTypesModul(async:Async) {
21+
var edits:Array<TestEdit> = [
22+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.MoreTypes", 26, 44),
23+
makeMoveTestEdit("testcases/packages/MoreTypes.hx", "testcases/packages/sub/MoreTypes.hx"),
24+
makeReplaceTestEdit("testcases/packages/MoreTypes.hx", "packages.sub", 8, 16),
25+
];
26+
refactorAndCheck({fileName: "testcases/packages/MoreTypes.hx", toName: "packages.sub", pos: 12}, edits, async);
27+
}
28+
29+
public function testRenameOtherTypesModul(async:Async) {
30+
var edits:Array<TestEdit> = [
31+
makeInsertTestEdit("testcases/packages/Main.hx", "import packages.sub.OtherTypes;\n", 19),
32+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.OtherTypes", 202, 221),
33+
makeReplaceTestEdit("testcases/packages/Main.hx", "packages.sub.OtherTypes.OtherTypeA", 240, 270),
34+
makeMoveTestEdit("testcases/packages/OtherTypes.hx", "testcases/packages/sub/OtherTypes.hx"),
35+
makeReplaceTestEdit("testcases/packages/OtherTypes.hx", "packages.sub", 8, 16),
36+
];
37+
refactorAndCheck({fileName: "testcases/packages/OtherTypes.hx", toName: "packages.sub", pos: 12}, edits, async);
38+
}
39+
40+
public function testRenameHelperTypesModul(async:Async) {
41+
var edits:Array<TestEdit> = [
42+
makeMoveTestEdit("testcases/packages/HelperTypes.hx", "testcases/packages/sub/HelperTypes.hx"),
43+
makeReplaceTestEdit("testcases/packages/HelperTypes.hx", "packages.sub", 8, 16),
44+
makeReplaceTestEdit("testcases/packages/import.hx", "packages.sub.HelperTypes", 26, 46),
45+
];
46+
refactorAndCheck({fileName: "testcases/packages/HelperTypes.hx", toName: "packages.sub", pos: 12}, edits, async);
47+
}
48+
}

test/refactor/ScopedLocalTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class ScopedLocalTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/scopedlocal"]);

test/refactor/TypedefTest.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package refactor;
22

3-
import refactor.TestEditableDocument.TestEdit;
4-
53
class TypedefTest extends TestBase {
64
function setupClass() {
75
setupTestSources(["testcases/typedefs"]);

testcases/packages/HelperTypes.hx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package packages;
2+
3+
typedef HelperTypeA = {}
4+
typedef HelperTypeB = {}
5+
typedef HelperTypeC = {}
6+
typedef HelperTypes = {}

testcases/packages/Main.hx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package packages;
2+
3+
import packages.MoreTypes;
4+
import packages.Types.Type3;
5+
import packages.Types;
6+
7+
class Main {
8+
static function main() {
9+
var test:Type1 = {};
10+
var test2:OtherTypes = {};
11+
var test3:packages.OtherTypes = {};
12+
var test4:packages.OtherTypes.OtherTypeA = {};
13+
var test5:packages.Type1 = {};
14+
var test6:HelperTypes;
15+
}
16+
}

testcases/packages/MoreTypes.hx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package packages;
2+
3+
typedef TypeA = {}
4+
typedef TypeB = {}
5+
typedef TypeC = {}
6+
typedef MoreTypes = {}

testcases/packages/OtherTypes.hx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package packages;
2+
3+
typedef OtherTypeA = {}
4+
typedef OtherTypeB = {}
5+
typedef OtherTypeC = {}
6+
typedef OtherTypes = {}

testcases/packages/Types.hx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package packages;
2+
3+
typedef Type1 = {}
4+
typedef Type2 = {}
5+
typedef Type3 = {}

testcases/packages/import.hx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package packages;
2+
3+
import packages.HelperTypes;

0 commit comments

Comments
 (0)