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;
}