Skip to content

Commit 46bbef3

Browse files
authored
Remove uses of property existence with in (#6932)
1 parent 90c9dff commit 46bbef3

File tree

22 files changed

+142
-103
lines changed

22 files changed

+142
-103
lines changed

resources/icons/dark/output.svg

Lines changed: 10 additions & 10 deletions
Loading

src/commands.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,12 +1331,20 @@ ${contents}
13311331
}),
13321332
);
13331333

1334-
context.subscriptions.push(vscode.commands.registerCommand('review.createSuggestionsFromChanges', async (value: ({ resourceStates: { resourceUri }[] }) | ({ resourceUri: vscode.Uri }), ...additionalSelected: ({ resourceUri: vscode.Uri })[]) => {
1334+
interface SCMResourceStates {
1335+
resourceStates: { resourceUri: vscode.Uri }[];
1336+
}
1337+
interface SCMResourceUri {
1338+
resourceUri: vscode.Uri;
1339+
}
1340+
context.subscriptions.push(vscode.commands.registerCommand('review.createSuggestionsFromChanges', async (value: SCMResourceStates | SCMResourceUri, ...additionalSelected: SCMResourceUri[]) => {
13351341
let resources: vscode.Uri[];
1336-
if ('resourceStates' in value) {
1337-
resources = value.resourceStates.map(resource => resource.resourceUri);
1342+
const asResourceStates = value as Partial<SCMResourceStates>;
1343+
if (asResourceStates.resourceStates) {
1344+
resources = asResourceStates.resourceStates.map(resource => resource.resourceUri);
13381345
} else {
1339-
resources = [value.resourceUri];
1346+
const asResourceUri = value as SCMResourceUri;
1347+
resources = [asResourceUri.resourceUri];
13401348
if (additionalSelected) {
13411349
resources.push(...additionalSelected.map(resource => resource.resourceUri));
13421350
}

src/common/logger.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import { Disposable } from './lifecycle';
77

88
export const PR_TREE = 'PullRequestTree';
99

10+
interface Stringish {
11+
toString: () => string;
12+
}
13+
1014
class Log extends Disposable {
1115
private readonly _outputChannel: vscode.LogOutputChannel;
1216
private readonly _activePerfMarkers: Map<string, number> = new Map();
@@ -28,36 +32,40 @@ class Log extends Disposable {
2832
this._activePerfMarkers.delete(marker);
2933
}
3034

31-
private logString(message: any, component?: string): string {
35+
private logString(message: string | Error | Stringish | Object, component?: string): string {
36+
let logMessage: string;
3237
if (typeof message !== 'string') {
38+
const asString = message as Partial<Stringish>;
3339
if (message instanceof Error) {
34-
message = message.message;
35-
} else if ('toString' in message) {
36-
message = message.toString();
40+
logMessage = message.message;
41+
} else if (asString.toString) {
42+
logMessage = asString.toString();
3743
} else {
38-
message = JSON.stringify(message);
44+
logMessage = JSON.stringify(message);
3945
}
46+
} else {
47+
logMessage = message;
4048
}
41-
return component ? `[${component}] ${message}` : message;
49+
return component ? `[${component}] ${logMessage}` : logMessage;
4250
}
4351

44-
public trace(message: any, component: string) {
52+
public trace(message: string | Error | Stringish | Object, component: string) {
4553
this._outputChannel.trace(this.logString(message, component));
4654
}
4755

48-
public debug(message: any, component: string) {
56+
public debug(message: string | Error | Stringish | Object, component: string) {
4957
this._outputChannel.debug(this.logString(message, component));
5058
}
5159

52-
public appendLine(message: any, component: string) {
60+
public appendLine(message: string | Error | Stringish | Object, component: string) {
5361
this._outputChannel.info(this.logString(message, component));
5462
}
5563

56-
public warn(message: any, component?: string) {
64+
public warn(message: string | Error | Stringish | Object, component?: string) {
5765
this._outputChannel.warn(this.logString(message, component));
5866
}
5967

60-
public error(message: any, component: string) {
68+
public error(message: string | Error | Stringish | Object, component: string) {
6169
this._outputChannel.error(this.logString(message, component));
6270
}
6371
}

src/common/uri.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import fetch from 'cross-fetch';
1111
import * as vscode from 'vscode';
1212
import { Repository } from '../api/api';
1313
import { EXTENSION_ID } from '../constants';
14-
import { IAccount, isTeam, ITeam, reviewerId } from '../github/interface';
14+
import { IAccount, isITeam, ITeam, reviewerId } from '../github/interface';
1515
import { PullRequestModel } from '../github/pullRequestModel';
1616
import { GitChangeType } from './file';
1717
import Logger from './logger';
@@ -322,7 +322,7 @@ export namespace DataUri {
322322
await doFetch();
323323
} catch (retryError) {
324324
// Log the error and return a generic user icon instead of crashing
325-
const userIdentifier = isTeam(user) ? `${user.org}/${user.slug}` : user.login || 'unknown';
325+
const userIdentifier = isITeam(user) ? `${user.org}/${user.slug}` : user.login || 'unknown';
326326
Logger.error(`Failed to fetch avatar after retry for user ${userIdentifier}: ${retryError}`, 'avatarCirclesAsImageDataUris');
327327
return genericUserIconAsImageDataURI(width, height);
328328
}

src/github/activityBarViewProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { formatError } from '../common/utils';
1313
import { getNonce, IRequestMessage, WebviewViewBase } from '../common/webview';
1414
import { ReviewManager } from '../view/reviewManager';
1515
import { FolderRepositoryManager } from './folderRepositoryManager';
16-
import { GithubItemStateEnum, IAccount, isTeam, ITeam, PullRequestMergeability, reviewerId, ReviewEventEnum, ReviewState } from './interface';
16+
import { GithubItemStateEnum, IAccount, isITeam, ITeam, PullRequestMergeability, reviewerId, ReviewEventEnum, ReviewState } from './interface';
1717
import { PullRequestModel } from './pullRequestModel';
1818
import { getDefaultMergeMethod } from './pullRequestOverview';
1919
import { PullRequestView } from './pullRequestOverviewCommon';
@@ -154,9 +154,9 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
154154
}
155155
}
156156

157-
if (targetReviewer && isTeam(targetReviewer.reviewer)) {
157+
if (targetReviewer && isITeam(targetReviewer.reviewer)) {
158158
teamReviewers.push(targetReviewer.reviewer);
159-
} else if (targetReviewer && !isTeam(targetReviewer.reviewer)) {
159+
} else if (targetReviewer && !isITeam(targetReviewer.reviewer)) {
160160
userReviewers.push(targetReviewer.reviewer);
161161
}
162162

src/github/createPRViewProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
titleAndBodyFrom,
3434
} from './folderRepositoryManager';
3535
import { GitHubRepository } from './githubRepository';
36-
import { IAccount, ILabel, IMilestone, IProject, isTeam, ITeam, MergeMethod, RepoAccessAndMergeMethods } from './interface';
36+
import { IAccount, ILabel, IMilestone, IProject, isITeam, ITeam, MergeMethod, RepoAccessAndMergeMethods } from './interface';
3737
import { BaseBranchMetadata, PullRequestGitHelper } from './pullRequestGitHelper';
3838
import { PullRequestModel } from './pullRequestModel';
3939
import { getDefaultMergeMethod } from './pullRequestOverview';
@@ -315,7 +315,7 @@ export abstract class BaseCreatePullRequestViewProvider<T extends BasePullReques
315315
const users: IAccount[] = [];
316316
const teams: ITeam[] = [];
317317
for (const reviewer of reviewers) {
318-
if (isTeam(reviewer)) {
318+
if (isITeam(reviewer)) {
319319
teams.push(reviewer);
320320
} else {
321321
users.push(reviewer);

src/github/graphql.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,13 @@ export interface Account extends Actor {
121121
}
122122

123123
export function isAccount(x: Actor | Team | Node | undefined | null): x is Account {
124-
return !!x && 'name' in x && 'email' in x;
124+
const asAccount = x as Partial<Account>;
125+
return !!asAccount && !!asAccount?.name && !!asAccount?.email;
125126
}
126127

127128
export function isTeam(x: Actor | Team | Node | undefined | null): x is Team {
128-
return !!x && 'slug' in x;
129+
const asTeam = x as Partial<Team>;
130+
return !!asTeam && !!asTeam?.slug;
129131
}
130132

131133
export interface Team {

src/github/interface.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,26 +104,28 @@ export interface MergeQueueEntry {
104104

105105
export function reviewerId(reviewer: ITeam | IAccount): string {
106106
// We can literally get different login values for copilot depending on where it's coming from (already assignee vs suggested assingee)
107-
return isTeam(reviewer) ? reviewer.id : (reviewer.specialDisplayName ?? reviewer.login);
107+
return isITeam(reviewer) ? reviewer.id : (reviewer.specialDisplayName ?? reviewer.login);
108108
}
109109

110110
export function reviewerLabel(reviewer: ITeam | IAccount | IActor | any): string {
111-
return isTeam(reviewer) ? (reviewer.name ?? reviewer.slug ?? reviewer.id) : (reviewer.specialDisplayName ?? reviewer.login);
111+
return isITeam(reviewer) ? (reviewer.name ?? reviewer.slug ?? reviewer.id) : (reviewer.specialDisplayName ?? reviewer.login);
112112
}
113113

114-
export function isTeam(reviewer: ITeam | IAccount | IActor | any): reviewer is ITeam {
115-
return 'org' in reviewer;
114+
export function isITeam(reviewer: ITeam | IAccount | IActor | any): reviewer is ITeam {
115+
const asITeam = reviewer as Partial<ITeam>;
116+
return !!asITeam.org;
116117
}
117118

118119
export interface ISuggestedReviewer extends IAccount {
119120
isAuthor: boolean;
120121
isCommenter: boolean;
121122
}
122123

123-
export function isSuggestedReviewer(
124+
export function isISuggestedReviewer(
124125
reviewer: IAccount | ISuggestedReviewer | ITeam
125126
): reviewer is ISuggestedReviewer {
126-
return 'isAuthor' in reviewer && 'isCommenter' in reviewer;
127+
const asISuggestedReviewer = reviewer as Partial<ISuggestedReviewer>;
128+
return !!asISuggestedReviewer.isAuthor && !!asISuggestedReviewer.isCommenter;
127129
}
128130

129131
export interface IProject {

src/github/pullRequestGitHelper.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,7 @@ export class PullRequestGitHelper {
340340

341341
static async isRemoteCreatedForPullRequest(repository: Repository, remoteName: string) {
342342
try {
343-
Logger.debug(
344-
`Check if remote '${remoteName}' is created for pull request - start`,
345-
PullRequestGitHelper.ID,
346-
);
343+
Logger.debug(`Check if remote '${remoteName}' is created for pull request - start`, PullRequestGitHelper.ID);
347344
const isForPR = await repository.getConfig(`remote.${remoteName}.${PullRequestRemoteMetadataKey}`);
348345
Logger.debug(`Check if remote '${remoteName}' is created for pull request - end`, PullRequestGitHelper.ID);
349346
return isForPR === 'true';

src/github/pullRequestModel.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,20 +1256,14 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
12561256
commit: OctokitCommon.PullsListCommitsResponseData[0],
12571257
): Promise<OctokitCommon.ReposGetCommitResponseFiles> {
12581258
try {
1259-
Logger.debug(
1260-
`Fetch file changes of commit ${commit.sha} in PR #${this.number} - enter`,
1261-
PullRequestModel.ID,
1262-
);
1259+
Logger.debug(`Fetch file changes of commit ${commit.sha} in PR #${this.number} - enter`, PullRequestModel.ID,);
12631260
const { octokit, remote } = await this.githubRepository.ensure();
12641261
const fullCommit = await octokit.call(octokit.api.repos.getCommit, {
12651262
owner: remote.owner,
12661263
repo: remote.repositoryName,
12671264
ref: commit.sha,
12681265
});
1269-
Logger.debug(
1270-
`Fetch file changes of commit ${commit.sha} in PR #${this.number} - done`,
1271-
PullRequestModel.ID,
1272-
);
1266+
Logger.debug(`Fetch file changes of commit ${commit.sha} in PR #${this.number} - done`, PullRequestModel.ID,);
12731267

12741268
return fullCommit.data.files ?? [];
12751269
} catch (e) {
@@ -1552,10 +1546,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
15521546
this._onDidChangeChangesSinceReview.fire();
15531547
}
15541548

1555-
Logger.debug(
1556-
`Fetch file changes and merge base of PR #${this.number} - done, total files ${files.length} `,
1557-
PullRequestModel.ID,
1558-
);
1549+
Logger.debug(`Fetch file changes and merge base of PR #${this.number} - done, total files ${files.length} `, PullRequestModel.ID,);
15591550
return files;
15601551
}
15611552

0 commit comments

Comments
 (0)