Skip to content

Commit d8cbec3

Browse files
authored
chore: fix eslint rules usage (#170)
* chore: fix eslint rules usage * fix: use unknown instead of any where possible
1 parent 31e4fa8 commit d8cbec3

31 files changed

Lines changed: 948 additions & 265 deletions

scripts/.eslintrc.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"@typescript-eslint/no-inferrable-types": "error",
3131
"@typescript-eslint/no-misused-new": "error",
3232
"@typescript-eslint/no-namespace": "error",
33-
"@typescript-eslint/no-non-null-assertion": "warn",
33+
"@typescript-eslint/no-non-null-assertion": "error",
3434
"@typescript-eslint/no-unnecessary-qualifier": "error",
3535
"@typescript-eslint/no-unnecessary-type-assertion": "error",
3636
"@typescript-eslint/no-useless-constructor": "error",
@@ -46,7 +46,8 @@
4646
"@typescript-eslint/semi": ["error", "never"],
4747
"@typescript-eslint/type-annotation-spacing": "error",
4848
"@typescript-eslint/unbound-method": "error",
49-
"filenames/match-regex": ["error", "^([a-z0-9]+)([A-Z][a-z0-9]+)*(\\.test)?$"]
49+
"filenames/match-regex": "off",
50+
"no-console": "off"
5051
},
5152
"env": {
5253
"node": true,

scripts/__tests__/sync.test.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {GitHub} from '../src/github'
99
import env from '../src/env'
1010
import {Resource} from '../src/resources/resource'
1111
import {RepositoryFile} from '../src/resources/repository-file'
12+
import {StateSchema} from '../src/terraform/schema'
1213
import {toggleArchivedRepos} from '../src/actions/shared/toggle-archived-repos'
1314

1415
test('sync', async () => {
@@ -37,10 +38,10 @@ test('sync new repository file', async () => {
3738
}
3839
}
3940
}
40-
const tfSource = {
41+
const tfSource: StateSchema = {
4142
values: {
4243
root_module: {
43-
resources: [] as any[] // eslint-disable-line @typescript-eslint/no-explicit-any
44+
resources: []
4445
}
4546
}
4647
}
@@ -62,19 +63,20 @@ test('sync new repository file', async () => {
6263

6364
const addResourceMock = jest.spyOn(tfConfig, 'addResource')
6465

65-
addResourceMock.mockImplementation(
66-
async (_id: string, resource: Resource) => {
67-
tfSource.values.root_module.resources.push({
68-
mode: 'managed',
69-
type: RepositoryFile.StateType,
70-
values: {
71-
repository: (resource as RepositoryFile).repository,
72-
file: (resource as RepositoryFile).file,
73-
...resource
74-
}
75-
})
76-
}
77-
)
66+
addResourceMock.mockImplementation(async (id: string, resource: Resource) => {
67+
tfSource?.values?.root_module?.resources?.push({
68+
mode: 'managed',
69+
index: id,
70+
address: resource.getStateAddress(),
71+
type: RepositoryFile.StateType,
72+
values: {
73+
repository: (resource as RepositoryFile).repository,
74+
file: (resource as RepositoryFile).file,
75+
content: (resource as RepositoryFile).content ?? '',
76+
...resource
77+
}
78+
})
79+
})
7880

7981
const expectedYamlConfig = new config.Config(YAML.stringify(yamlSource))
8082

scripts/__tests__/terraform/state.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ test('can ignore resource properties', async () => {
4747
test('can add and remove resources through sync', async () => {
4848
const config = await State.New()
4949

50-
let addResourceSpy = jest.spyOn(config, 'addResource')
51-
let removeResourceAtSpy = jest.spyOn(config, 'removeResourceAt')
50+
const addResourceSpy = jest.spyOn(config, 'addResource')
51+
const removeResourceAtSpy = jest.spyOn(config, 'removeResourceAt')
5252

53-
let desiredResources: [Id, Resource][] = []
54-
let resources = config.getAllResources()
53+
const desiredResources: [Id, Resource][] = []
54+
const resources = config.getAllResources()
5555

5656
await config.sync(desiredResources)
5757

scripts/__tests__/yaml/config.test.ts

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import 'reflect-metadata'
22

3+
import * as YAML from 'yaml'
34
import {Config} from '../../src/yaml/config'
45
import {
56
Resource,
67
ResourceConstructors,
78
resourceToPlain
89
} from '../../src/resources/resource'
9-
import {Member, Role as MemberRole, Role} from '../../src/resources/member'
10+
import {NodeBase} from 'yaml/dist/nodes/Node'
11+
import {Member, Role as MemberRole} from '../../src/resources/member'
1012
import {Repository} from '../../src/resources/repository'
1113
import {RepositoryFile} from '../../src/resources/repository-file'
1214
import {randomUUID} from 'crypto'
1315
import {Team, Privacy as TeamPrivacy} from '../../src/resources/team'
1416
import {RepositoryBranchProtectionRule} from '../../src/resources/repository-branch-protection-rule'
17+
import {Collection} from 'yaml/dist/nodes/Collection'
18+
import assert from 'node:assert'
1519
import {toggleArchivedRepos} from '../../src/actions/shared/toggle-archived-repos'
1620
import {State} from '../../src/terraform/state'
1721

@@ -167,13 +171,17 @@ test('clears comments on member removal', async () => {
167171

168172
const member = config.getResources(Member)[0]
169173

170-
;(config.document.getIn(['members', member.role]) as any).items[0].comment =
171-
comment
174+
const nodes = config.document.getIn(['members', member.role]) as Collection
175+
const node = nodes.items[0] as NodeBase
176+
node.comment = comment
172177

173178
config.removeResource(member)
174179

175-
const updatedMembers = config.document.getIn(['members', member.role]) as any
176-
for (const item of updatedMembers.items) {
180+
const updatedMembers = config.document.getIn([
181+
'members',
182+
member.role
183+
]) as Collection
184+
for (const item of updatedMembers.items as NodeBase[]) {
177185
expect(item.comment).not.toEqual(comment)
178186
}
179187
})
@@ -193,10 +201,12 @@ test('clears comments on repository property updates', async () => {
193201
const repositories = config.document.getIn([
194202
'repositories',
195203
repository.name
196-
]) as any
197-
198-
repositories.items.find((i: any) => i.key.value === property)!.value.comment =
199-
comment
204+
]) as Collection
205+
const nodes = repositories.items as YAML.Pair<YAML.Scalar, NodeBase>[]
206+
const node = nodes.find(i => i.key.value === property)
207+
assert(node !== undefined)
208+
assert(node.value !== null)
209+
node.value.comment = comment
200210

201211
repository[property] = description
202212

@@ -205,11 +215,15 @@ test('clears comments on repository property updates', async () => {
205215
const updatedRepositories = config.document.getIn([
206216
'repositories',
207217
repository.name
208-
]) as any
209-
expect(
210-
updatedRepositories.items.find((i: any) => i.key.value === property)!.value
211-
.comment
212-
).toBeUndefined()
218+
]) as Collection
219+
const updatedNodes = updatedRepositories.items as YAML.Pair<
220+
YAML.Scalar,
221+
NodeBase
222+
>[]
223+
const updatedNode = updatedNodes.find(i => i.key.value === property)
224+
assert(updatedNode !== undefined)
225+
assert(updatedNode.value !== null)
226+
expect(updatedNode.value.comment).toBeUndefined()
213227
expect(config.getResources(Repository)[0][property]).toEqual(description)
214228
})
215229

@@ -220,15 +234,19 @@ test('does not clear comments on same member addition', async () => {
220234

221235
const member = config.getResources(Member)[0]
222236

223-
const members = config.document.getIn(['members', member.role]) as any
224-
members.items[0].comment = comment
237+
const nodes = config.document.getIn(['members', member.role]) as Collection
238+
const node = nodes.items[0] as NodeBase
239+
node.comment = comment
225240

226241
config.addResource(member)
227242

228-
const updatedMembers = config.document.getIn(['members', member.role]) as any
243+
const updatedMembers = config.document.getIn([
244+
'members',
245+
member.role
246+
]) as Collection
229247

230248
expect(
231-
updatedMembers.items.some((i: any) => i.comment === comment)
249+
(updatedMembers.items as NodeBase[]).some(i => i.comment === comment)
232250
).toBeTruthy()
233251
})
234252

@@ -245,20 +263,27 @@ test('does not clear comments on repository property updates to the same value',
245263
const repositories = config.document.getIn([
246264
'repositories',
247265
repository.name
248-
]) as any
249-
repositories.items.find((i: any) => i.key.value === property)!.value.comment =
250-
comment
266+
]) as Collection
267+
const nodes = repositories.items as YAML.Pair<YAML.Scalar, NodeBase>[]
268+
const node = nodes.find(i => i.key.value === property)
269+
assert(node !== undefined)
270+
assert(node.value !== null)
271+
node.value.comment = comment
251272

252273
config.addResource(repository)
253274

254275
const updatedRepositories = config.document.getIn([
255276
'repositories',
256277
repository.name
257-
]) as any
258-
expect(
259-
updatedRepositories.items.find((i: any) => i.key.value === property)!.value
260-
.comment
261-
).toEqual(comment)
278+
]) as Collection
279+
const updatedNodes = updatedRepositories.items as YAML.Pair<
280+
YAML.Scalar,
281+
NodeBase
282+
>[]
283+
const updatedNode = updatedNodes.find(i => i.key.value === property)
284+
assert(updatedNode !== undefined)
285+
assert(updatedNode.value !== null)
286+
expect(updatedNode.value.comment).toEqual(comment)
262287
})
263288

264289
test('can add a repository followed by a repository branch protection rule', async () => {
@@ -285,15 +310,15 @@ test('does not remove properties when adding a team', async () => {
285310
const config = Config.FromPath()
286311

287312
const team = config.getResources(Team)[0]
288-
const definedValues = Object.values(resourceToPlain(team) as any).filter(
289-
v => v !== undefined
290-
)
313+
const definedValues = Object.values(
314+
resourceToPlain(team) as Record<string, unknown>
315+
).filter(v => v !== undefined)
291316
expect(definedValues).not.toHaveLength(0)
292317
config.addResource(new Team(team.name), false)
293318

294319
const updatedTeam = config.getResources(Team)[0]
295320
const updatedDefinedValues = Object.values(
296-
resourceToPlain(updatedTeam) as any
321+
resourceToPlain(updatedTeam) as Record<string, unknown>
297322
).filter(v => v !== undefined)
298323
expect(updatedDefinedValues).not.toHaveLength(0)
299324
})
@@ -302,15 +327,15 @@ test('does remove undefined properties when adding a team with delete flag set',
302327
const config = Config.FromPath()
303328

304329
const team = config.getResources(Team)[0]
305-
const definedValues = Object.values(resourceToPlain(team) as any).filter(
306-
v => v !== undefined
307-
)
330+
const definedValues = Object.values(
331+
resourceToPlain(team) as Record<string, unknown>
332+
).filter(v => v !== undefined)
308333
expect(definedValues).not.toHaveLength(0)
309334
config.addResource(new Team(team.name), true)
310335

311336
const updatedTeam = config.getResources(Team)[0]
312337
const updatedDefinedValues = Object.values(
313-
resourceToPlain(updatedTeam) as any
338+
resourceToPlain(updatedTeam) as Record<string, unknown>
314339
).filter(v => v !== undefined)
315340
expect(updatedDefinedValues).toHaveLength(0)
316341
})
@@ -338,7 +363,8 @@ members:
338363

339364
const undefinedMember = config
340365
.getResources(Member)
341-
.find(m => m.username === 'undefined')!
366+
.find(m => m.username === 'undefined')
367+
assert(undefinedMember !== undefined)
342368
config.removeResource(undefinedMember)
343369
config.format()
344370
const formatted = config.toString().trim()
@@ -394,10 +420,12 @@ test('clears and re-adds repository fields when archiving/unarchiving', async ()
394420

395421
const archivedRepository = config
396422
.getResources(Repository)
397-
.find(r => r.archived)!
423+
.find(r => r.archived)
424+
assert(archivedRepository !== undefined)
398425
const unarchivedRepository = config
399426
.getResources(Repository)
400-
.find(r => !r.archived)!
427+
.find(r => !r.archived)
428+
assert(unarchivedRepository !== undefined)
401429

402430
expect(archivedRepository.archived).toBe(true)
403431
expect(archivedRepository.visibility).not.toBeDefined()
@@ -413,9 +441,11 @@ test('clears and re-adds repository fields when archiving/unarchiving', async ()
413441

414442
await toggleArchivedRepos(state, config)
415443

416-
const previouslyArchivedRepository = config.findResource(archivedRepository)!
444+
const previouslyArchivedRepository = config.findResource(archivedRepository)
445+
assert(previouslyArchivedRepository !== undefined)
417446
const previouslyUnarchivedRepository =
418-
config.findResource(unarchivedRepository)!
447+
config.findResource(unarchivedRepository)
448+
assert(previouslyUnarchivedRepository !== undefined)
419449

420450
expect(previouslyArchivedRepository.archived).toBe(false)
421451
expect(previouslyArchivedRepository.visibility).toBeDefined()

scripts/jest.setup.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,40 +21,40 @@ jest.mock('./src/env', () => ({
2121

2222
GitHub.github = {
2323
listMembers: async () => {
24-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
24+
return [] as any
2525
},
2626
listRepositories: async () => {
27-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
27+
return [] as any
2828
},
2929
listTeams: async () => {
30-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
30+
return [] as any
3131
},
3232
listRepositoryCollaborators: async () => {
33-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
33+
return [] as any
3434
},
3535
listRepositoryBranchProtectionRules: async () => {
36-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
36+
return [] as any
3737
},
3838
listTeamRepositories: async () => {
39-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
39+
return [] as any
4040
},
4141
listTeamMembers: async () => {
42-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
42+
return [] as any
4343
},
4444
getRepositoryFile: async (_repository: string, _path: string) => {
4545
return undefined
4646
},
4747
listInvitations: async () => {
48-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
48+
return [] as any
4949
},
5050
listRepositoryInvitations: async () => {
51-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
51+
return [] as any
5252
},
5353
listTeamInvitations: async () => {
54-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
54+
return [] as any
5555
},
5656
listRepositoryLabels: async () => {
57-
return [] as any // eslint-disable-line @typescript-eslint/no-explicit-any
57+
return [] as any
5858
}
5959
} as GitHub
6060

0 commit comments

Comments
 (0)