private async doCreateIssue()

in src/issues/issueFeatureRegistrar.ts [1005:1081]


	private async doCreateIssue(
		document: vscode.TextDocument | undefined,
		newIssue: NewIssue | undefined,
		title: string,
		issueBody: string | undefined,
		assignees: string[] | undefined,
		labels: string[] | undefined,
		lineNumber: number | undefined,
		insertIndex: number | undefined,
		originUri?: vscode.Uri,
	): Promise<boolean> {
		let origin: PullRequestDefaults | undefined;
		let folderManager: FolderRepositoryManager | undefined;
		if (document) {
			folderManager = this.manager.getManagerForFile(document.uri);
		} else if (originUri) {
			folderManager = this.manager.getManagerForFile(originUri);
		}
		if (!folderManager) {
			folderManager = await this.chooseRepo('Choose where to create the issue.');
		}

		if (!folderManager) {
			return false;
		}
		try {
			origin = await folderManager.getPullRequestDefaults();
		} catch (e) {
			// There is no remote
			vscode.window.showErrorMessage("There is no remote. Can't create an issue.");
			return false;
		}
		const body: string | undefined =
			issueBody || newIssue?.document.isUntitled
				? issueBody
				: (await createGithubPermalink(this.gitAPI, newIssue)).permalink;
		const createParams: OctokitCommon.IssuesCreateParams = {
			owner: origin.owner,
			repo: origin.repo,
			title,
			body,
			assignees,
			labels,
		};
		if (!(await this.verifyLabels(folderManager, createParams))) {
			return false;
		}
		const issue = await folderManager.createIssue(createParams);
		if (issue) {
			if (document !== undefined && insertIndex !== undefined && lineNumber !== undefined) {
				const edit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit();
				const insertText: string =
					vscode.workspace.getConfiguration(ISSUES_CONFIGURATION).get('createInsertFormat', 'number') ===
						'number'
						? `#${issue.number}`
						: issue.html_url;
				edit.insert(document.uri, new vscode.Position(lineNumber, insertIndex), ` ${insertText}`);
				await vscode.workspace.applyEdit(edit);
			} else {
				const copyIssueUrl = 'Copy URL';
				const openIssue = 'Open Issue';
				vscode.window.showInformationMessage('Issue created', copyIssueUrl, openIssue).then(async result => {
					switch (result) {
						case copyIssueUrl:
							await vscode.env.clipboard.writeText(issue.html_url);
							break;
						case openIssue:
							await vscode.env.openExternal(vscode.Uri.parse(issue.html_url));
							break;
					}
				});
			}
			this._stateManager.refreshCacheNeeded();
			return true;
		}
		return false;
	}