extensions/typescript-language-features/src/languageFeatures/updatePathsOnRename.ts/UpdateImportsOnFileRenameHandler/constructor
class UpdateImportsOnFileRenameHandler:	public constructor(
		private readonly client: ITypeScriptServiceClient,
		private readonly fileConfigurationManager: FileConfigurationManager,
		private readonly _handles: (uri: vscode.Uri) => Promise<boolean>,
	) {
		super();

		this._register(vscode.workspace.onDidRenameFiles(async (e) => {
			const [{ newUri, oldUri }] = e.files;
			const newFilePath = this.client.toPath(newUri);
			if (!newFilePath) {
				return;
			}

			const oldFilePath = this.client.toPath(oldUri);
			if (!oldFilePath) {
				return;
			}

			const config = this.getConfiguration(newUri);
			const setting = config.get<UpdateImportsOnFileMoveSetting>(updateImportsOnFileMoveName);
			if (setting === UpdateImportsOnFileMoveSetting.Never) {
				return;
			}

			// Try to get a js/ts file that is being moved
			// For directory moves, this returns a js/ts file under the directory.
			const jsTsFileThatIsBeingMoved = await this.getJsTsFileBeingMoved(newUri);
			if (!jsTsFileThatIsBeingMoved || !this.client.toPath(jsTsFileThatIsBeingMoved)) {
				return;
			}

			this._pendingRenames.add({ oldUri, newUri, newFilePath, oldFilePath, jsTsFileThatIsBeingMoved });

			this._delayer.trigger(() => {
				vscode.window.withProgress({
					location: vscode.ProgressLocation.Window,
					title: vscode.l10n.t("Checking for update of JS/TS imports")
				}, () => this.flushRenames());
			});
		}));
	}