Skip to content

Commit 87ef70d

Browse files
committed
refactor: rename
1 parent d9db316 commit 87ef70d

22 files changed

Lines changed: 238 additions & 238 deletions
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { MovedFileNamespaceUpdater } from './update/MovedFileNamespaceUpdater';
2+
import { MultiFileReferenceUpdater } from './update/MultiFileReferenceUpdater';
3+
import { NamespaceCreator } from '@domain/namespace/NamespaceCreator';
4+
import { Uri } from 'vscode';
5+
6+
interface Props {
7+
newUri: Uri,
8+
oldUri: Uri,
9+
}
10+
11+
export class NamespaceBatchUpdater {
12+
public async execute({ newUri, oldUri }: Props) {
13+
const namespaceCreator = new NamespaceCreator();
14+
const {
15+
namespace: newNamespace,
16+
fullNamespace: useNewNamespace,
17+
} = await namespaceCreator.execute({
18+
uri: newUri,
19+
});
20+
21+
if (!newNamespace) {
22+
return;
23+
}
24+
25+
const { fullNamespace: useOldNamespace } = await namespaceCreator.execute({
26+
uri: oldUri,
27+
});
28+
29+
const updated = await new MovedFileNamespaceUpdater().execute({
30+
newNamespace,
31+
newUri,
32+
});
33+
34+
if (!updated) {
35+
return;
36+
}
37+
38+
await new MultiFileReferenceUpdater().execute({
39+
useOldNamespace,
40+
useNewNamespace,
41+
newUri,
42+
oldUri,
43+
});
44+
}
45+
}

src/app/namespace/UpdateAllService.ts

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/app/namespace/update/MovedFileUpdateService.ts renamed to src/app/namespace/update/MovedFileNamespaceUpdater.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { Range, Uri, workspace, WorkspaceEdit } from 'vscode';
2-
import { OpenTextDocumentService } from '@app/services/OpenTextDocumentService';
2+
import { TextDocumentOpener } from '@app/services/TextDocumentOpener';
33

44
interface Props {
55
newNamespace: string,
66
newUri: Uri,
77
}
88

9-
export class MovedFileUpdateService {
9+
export class MovedFileNamespaceUpdater {
1010
public async execute({ newNamespace, newUri }: Props) {
11-
const { document, text } = await new OpenTextDocumentService().execute({ uri: newUri });
11+
const { document, text } = await new TextDocumentOpener().execute({ uri: newUri });
1212

1313
const namespaceRegex = /^\s*namespace\s+[\w\\]+;/m;
1414
const match = text.match(namespaceRegex);

src/app/namespace/update/ReferencesMultiFileUpdateService.ts renamed to src/app/namespace/update/MultiFileReferenceUpdater.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Uri, workspace, WorkspaceEdit } from 'vscode';
2-
import { CreateUseStatementService } from '@domain/namespace/CreateUseStatementService';
3-
import { FindWorkspaceFilesService } from '@app/services/workspace/FindWorkspaceFilesService';
4-
import { ImportRemoverService } from '@app/services/remove/ImportRemoverService';
5-
import { OpenTextDocumentService } from '@app/services/OpenTextDocumentService';
6-
import { UseStatementFinder } from '@domain/namespace/UseStatementFinder';
7-
import { UseStatementInserter } from '@domain/namespace/UseStatementInserter';
8-
import { WorkspacePathService } from '@domain/workspace/WorkspacePathService';
2+
import { ImportRemover } from '@app/services/remove/ImportRemover';
3+
import { TextDocumentOpener } from '@app/services/TextDocumentOpener';
4+
import { UseStatementCreator } from '@domain/namespace/UseStatementCreator';
5+
import { UseStatementInjector } from '@domain/namespace/UseStatementInjector';
6+
import { UseStatementLocator } from '@domain/namespace/UseStatementLocator';
7+
import { WorkspaceFileFinder } from '@app/services/workspace/WorkspaceFileFinder';
8+
import { WorkspacePathResolver } from '@domain/workspace/WorkspacePathResolver';
99

1010
interface Props {
1111
useOldNamespace: string
@@ -14,11 +14,11 @@ interface Props {
1414
oldUri: Uri
1515
}
1616

17-
export class ReferencesMultiFileUpdateService {
18-
private workspacePathService: WorkspacePathService;
17+
export class MultiFileReferenceUpdater {
18+
private workspacePathResolver: WorkspacePathResolver;
1919

2020
constructor() {
21-
this.workspacePathService = new WorkspacePathService();
21+
this.workspacePathResolver = new WorkspacePathResolver();
2222
}
2323

2424
public async execute({
@@ -27,14 +27,14 @@ export class ReferencesMultiFileUpdateService {
2727
newUri,
2828
oldUri,
2929
}: Props) {
30-
const directoryPath = this.workspacePathService.extractDirectoryFromPath(oldUri.fsPath);
31-
const className = this.workspacePathService.extractClassNameFromPath(oldUri.fsPath);
30+
const directoryPath = this.workspacePathResolver.extractDirectoryFromPath(oldUri.fsPath);
31+
const className = this.workspacePathResolver.extractClassNameFromPath(oldUri.fsPath);
3232

33-
const useImport = new CreateUseStatementService().single({ fullNamespace: useNewNamespace });
33+
const useImport = new UseStatementCreator().single({ fullNamespace: useNewNamespace });
3434

3535
const ignoreFile = newUri.fsPath;
3636

37-
const files = await new FindWorkspaceFilesService().execute();
37+
const files = await new WorkspaceFileFinder().execute();
3838

3939
const filesToProcess = files.filter(file => ignoreFile !== file.fsPath);
4040

@@ -72,7 +72,7 @@ export class ReferencesMultiFileUpdateService {
7272
}
7373
}));
7474

75-
await new ImportRemoverService().execute({ uri: newUri });
75+
await new ImportRemover().execute({ uri: newUri });
7676
}
7777

7878
private async updateInFile(
@@ -81,26 +81,26 @@ export class ReferencesMultiFileUpdateService {
8181
useImport: string,
8282
className: string,
8383
): Promise<void> {
84-
const currentDir = this.workspacePathService.extractDirectoryFromPath(file.fsPath);
84+
const currentDir = this.workspacePathResolver.extractDirectoryFromPath(file.fsPath);
8585
if (oldDirectoryPath !== currentDir) {
8686
return;
8787
}
8888

8989
try {
90-
const { document, text } = await new OpenTextDocumentService().execute({ uri: file });
90+
const { document, text } = await new TextDocumentOpener().execute({ uri: file });
9191

9292
if (!text.includes(className)) {
9393
return;
9494
}
9595

96-
const insertionIndex = new UseStatementFinder().execute({ document });
96+
const insertionIndex = new UseStatementLocator().execute({ document });
9797
if (insertionIndex === 0) {
9898
return;
9999
}
100100

101101
const edit = new WorkspaceEdit();
102102

103-
await new UseStatementInserter().save({
103+
await new UseStatementInjector().save({
104104
document,
105105
workspaceEdit: edit,
106106
uri: file,

src/app/services/ImportMissingClassesService.ts

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { Uri, WorkspaceEdit } from 'vscode';
2+
import { promises as fs } from 'fs';
3+
import { PHP_EXTENSION } from '@infra/utils/constants';
4+
import { TextDocumentOpener } from '@app/services/TextDocumentOpener';
5+
import { UnusedImportDetector } from './import/UnusedImportDetector';
6+
import { UseStatementCreator } from '@domain/namespace/UseStatementCreator';
7+
import { UseStatementInjector } from '@domain/namespace/UseStatementInjector';
8+
import { UseStatementLocator } from '@domain/namespace/UseStatementLocator';
9+
import { WorkspacePathResolver } from '@domain/workspace/WorkspacePathResolver';
10+
11+
interface Props {
12+
oldUri: Uri
13+
newUri: Uri
14+
}
15+
16+
export class MissingClassImporter {
17+
private workspacePathResolver: WorkspacePathResolver;
18+
19+
constructor() {
20+
this.workspacePathResolver = new WorkspacePathResolver();
21+
}
22+
23+
public async execute({ oldUri, newUri }: Props) {
24+
const directoryPath = this.workspacePathResolver.extractDirectoryFromPath(oldUri.fsPath);
25+
const classes = await this.getClassesNamesInDirectory(directoryPath);
26+
27+
if (classes.length < 1) {
28+
return;
29+
}
30+
31+
try {
32+
const { document, text } = await new TextDocumentOpener().execute({ uri: newUri });
33+
34+
const imports = await new UseStatementCreator().multiple({
35+
classesUsed: new UnusedImportDetector().execute({
36+
contentDocument: text,
37+
classes,
38+
}),
39+
directoryPath,
40+
});
41+
42+
if (!imports || (directoryPath === this.workspacePathResolver.extractDirectoryFromPath(newUri.fsPath))) {
43+
return;
44+
}
45+
46+
const insertionIndex = new UseStatementLocator().execute({ document });
47+
if (insertionIndex === 0) {
48+
return;
49+
}
50+
51+
const edit = new WorkspaceEdit();
52+
53+
const useStatementInjector = new UseStatementInjector();
54+
for (const use of imports) {
55+
await useStatementInjector.save({
56+
document,
57+
workspaceEdit: edit,
58+
uri: newUri,
59+
lastUseEndIndex: insertionIndex,
60+
useNamespace: use,
61+
flush: false,
62+
});
63+
}
64+
65+
if (imports.length > 0) {
66+
await useStatementInjector.flush(edit);
67+
}
68+
} catch (_) {
69+
return;
70+
}
71+
}
72+
73+
private async getClassesNamesInDirectory(directory: string): Promise<string[]> {
74+
try {
75+
const files = await fs.readdir(directory);
76+
return files.filter(file => file.endsWith(PHP_EXTENSION))
77+
.map(file => this.workspacePathResolver.extractClassNameFromPath(file))
78+
.filter(Boolean);
79+
} catch (_) {
80+
return [];
81+
}
82+
}
83+
}

src/app/services/OpenTextDocumentService.ts renamed to src/app/services/TextDocumentOpener.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type OpenTextDocument = {
99
text: string
1010
}
1111

12-
export class OpenTextDocumentService {
12+
export class TextDocumentOpener {
1313
public async execute({ uri }: Props): Promise<OpenTextDocument> {
1414
const document = await workspace.openTextDocument(uri.fsPath);
1515
return {

src/app/services/import/UnimportedDetectionService.ts renamed to src/app/services/import/UnusedImportDetector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ interface Props {
33
classes: string[],
44
}
55

6-
export class UnimportedDetectionService {
6+
export class UnusedImportDetector {
77
public execute({ contentDocument, classes }: Props): string[] {
88
const classesUsed: string[] = [];
99

0 commit comments

Comments
 (0)