Skip to content

Commit e7e528b

Browse files
committed
Add custom structfield linter to check struct field names and tags
1 parent 903265b commit e7e528b

File tree

10 files changed

+364
-70
lines changed

10 files changed

+364
-70
lines changed

.custom-gcl.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: v2.6.1
22
plugins:
33
- module: "github.com/google/go-github/v79/tools/fmtpercentv"
44
path: ./tools/fmtpercentv
5-
- module: "github.com/google/go-github/v79/tools/jsonfieldname"
6-
path: ./tools/jsonfieldname
5+
- module: "github.com/google/go-github/v79/tools/structfield"
6+
path: ./tools/structfield
77
- module: "github.com/google/go-github/v79/tools/sliceofpointers"
88
path: ./tools/sliceofpointers

.golangci.yml

Lines changed: 193 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ linters:
1616
- goheader
1717
- gosec
1818
- intrange
19-
- jsonfieldname
2019
- misspell
2120
- modernize
2221
- musttag
@@ -27,6 +26,7 @@ linters:
2726
- revive
2827
- sliceofpointers
2928
- staticcheck
29+
- structfield
3030
- tparallel
3131
- unconvert
3232
- unparam
@@ -152,12 +152,12 @@ linters:
152152
type: module
153153
description: Reports usage of %d or %s in format strings.
154154
original-url: github.com/google/go-github/v79/tools/fmtpercentv
155-
jsonfieldname:
155+
structfield:
156156
type: module
157-
description: Reports mismatches between Go field and JSON tag names.
158-
original-url: github.com/google/go-github/v79/tools/jsonfieldname
157+
description: Reports mismatches between Go field and JSON, URL tag names and types.
158+
original-url: github.com/google/go-github/v79/tools/structfield
159159
settings:
160-
allowed-exceptions:
160+
allowed-tag-name-exceptions:
161161
- ActionsCacheUsageList.RepoCacheUsage # TODO: RepoCacheUsages ?
162162
- AuditEntry.ExternalIdentityNameID
163163
- AuditEntry.Timestamp
@@ -186,6 +186,8 @@ linters:
186186
- ListCheckSuiteResults.Total
187187
- ListCustomDeploymentRuleIntegrationsResponse.AvailableIntegrations
188188
- ListDeploymentProtectionRuleResponse.ProtectionRules
189+
- ListIDPGroupsOptions.Query
190+
- ListProjectsOptions.Query
189191
- OrganizationCustomRepoRoles.CustomRepoRoles # TODO: CustomRoles
190192
- OrganizationCustomRoles.CustomRepoRoles # TODO: Roles
191193
- PreReceiveHook.ConfigURL
@@ -219,6 +221,189 @@ linters:
219221
- WeeklyStats.Commits
220222
- WeeklyStats.Deletions
221223
- WeeklyStats.Week
224+
allowed-tag-type-exceptions:
225+
- ActivityListStarredOptions.Direction # TODO: Activities
226+
- ActivityListStarredOptions.Sort # TODO: Activities
227+
- AddProjectItemOptions.ID # TODO: Projects
228+
- AddProjectItemOptions.Type # TODO: Projects
229+
- AlertInstancesListOptions.Ref # TODO: CodeScanning
230+
- AlertListOptions.Direction # TODO: CodeScanning
231+
- AlertListOptions.Ref # TODO: CodeScanning
232+
- AlertListOptions.Severity # TODO: CodeScanning
233+
- AlertListOptions.Sort # TODO: CodeScanning
234+
- AlertListOptions.State # TODO: CodeScanning
235+
- AlertListOptions.ToolGUID # TODO: CodeScanning
236+
- AlertListOptions.ToolName # TODO: CodeScanning
237+
- APIMetaArtifactAttestations.TrustDomain # TODO: Meta
238+
- CommitsListOptions.Author # TODO: Repositories
239+
- CommitsListOptions.Path # TODO: Repositories
240+
- CommitsListOptions.SHA # TODO: Repositories
241+
- CommitsListOptions.Since # TODO: Repositories
242+
- CommitsListOptions.Until # TODO: Repositories
243+
- CreateTag.Message # TODO: Git
244+
- CreateTag.Object # TODO: Git
245+
- CreateTag.Tag # TODO: Git
246+
- CreateTag.Type # TODO: Git
247+
- CredentialAuthorizationsListOptions.Login # TODO: Organizations
248+
- DependabotEncryptedSecret.SelectedRepositoryIDs # TODO: Dependabot
249+
- DependabotEncryptedSecret.Visibility # TODO: Dependabot
250+
- DeploymentsListOptions.Environment # TODO: Repositories
251+
- DeploymentsListOptions.Ref # TODO: Repositories
252+
- DeploymentsListOptions.SHA # TODO: Repositories
253+
- DeploymentsListOptions.Task # TODO: Repositories
254+
- DiscussionCommentListOptions.Direction # TODO: Teams
255+
- DiscussionListOptions.Direction # TODO: Teams
256+
- EncryptedSecret.SelectedRepositoryIDs # TODO: Actions
257+
- EncryptedSecret.Visibility # TODO: Actions
258+
- ErrorBlock.Reason # TODO: Common
259+
- ErrorResponse.DocumentationURL # TODO: Common
260+
- GetCodeownersErrorsOptions.Ref # TODO: Repositories
261+
- GistListOptions.Since # TODO: Gists
262+
- HostedRunnerRequest.EnableStaticIP # TODO: Actions
263+
- HostedRunnerRequest.Image # TODO: Actions
264+
- HostedRunnerRequest.ImageVersion # TODO: Actions
265+
- HostedRunnerRequest.MaximumRunners # TODO: Actions
266+
- HostedRunnerRequest.Name # TODO: Actions
267+
- HostedRunnerRequest.RunnerGroupID # TODO: Actions
268+
- HostedRunnerRequest.Size # TODO: Actions
269+
- IssueEvent.Action # TODO: Issues
270+
- IssueListByRepoOptions.Assignee # TODO: Issues
271+
- IssueListByRepoOptions.Assignee # TODO: Issues
272+
- IssueListByRepoOptions.Creator # TODO: Issues
273+
- IssueListByRepoOptions.Creator # TODO: Issues
274+
- IssueListByRepoOptions.Direction # TODO: Issues
275+
- IssueListByRepoOptions.Direction # TODO: Issues
276+
- IssueListByRepoOptions.Mentioned # TODO: Issues
277+
- IssueListByRepoOptions.Mentioned # TODO: Issues
278+
- IssueListByRepoOptions.Milestone # TODO: Issues
279+
- IssueListByRepoOptions.Since # TODO: Issues
280+
- IssueListByRepoOptions.Since # TODO: Issues
281+
- IssueListByRepoOptions.Sort # TODO: Issues
282+
- IssueListByRepoOptions.Sort # TODO: Issues
283+
- IssueListByRepoOptions.State # TODO: Issues
284+
- IssueListOptions.Direction # TODO: Issues
285+
- IssueListOptions.Filter # TODO: Issues
286+
- IssueListOptions.Since # TODO: Issues
287+
- IssueListOptions.Sort # TODO: Issues
288+
- IssueListOptions.State # TODO: Issues
289+
- ListCodespacesOptions.RepositoryID # TODO: Codespaces
290+
- ListCollaboratorsOptions.Affiliation # TODO: Repositories
291+
- ListCollaboratorsOptions.Permission # TODO: Repositories
292+
- ListContributorsOptions.Anon # TODO: Repositories
293+
- ListCursorOptions.After # TODO: Common
294+
- ListCursorOptions.Before # TODO: Common
295+
- ListCursorOptions.Cursor # TODO: Common
296+
- ListCursorOptions.First # TODO: Common
297+
- ListCursorOptions.Last # TODO: Common
298+
- ListCursorOptions.Page # TODO: Common
299+
- ListCursorOptions.PerPage # TODO: Common
300+
- ListCustomPropertyValuesOptions.RepositoryQuery # TODO: Organizations
301+
- ListEnterpriseRunnerGroupOptions.VisibleToOrganization # TODO: Enterprise
302+
- ListFineGrainedPATOptions.Direction # TODO: Organizations
303+
- ListFineGrainedPATOptions.LastUsedAfter # TODO: Organizations
304+
- ListFineGrainedPATOptions.LastUsedBefore # TODO: Organizations
305+
- ListFineGrainedPATOptions.Permission # TODO: Organizations
306+
- ListFineGrainedPATOptions.Repository # TODO: Organizations
307+
- ListFineGrainedPATOptions.Sort # TODO: Organizations
308+
- ListIDPGroupsOptions.Query # TODO: Teams
309+
- ListMembersOptions.Filter # TODO: Organizations
310+
- ListMembersOptions.Role # TODO: Organizations
311+
- ListOptions.Page # TODO: Common
312+
- ListOptions.PerPage # TODO: Common
313+
- ListOrgMembershipsOptions.State # TODO: Organizations
314+
- ListOrgRunnerGroupOptions.VisibleToRepository # TODO: Actions
315+
- ListOutsideCollaboratorsOptions.Filter # TODO: Organizations
316+
- ListProvisionedSCIMGroupsEnterpriseOptions.Count # TODO: Enterprise
317+
- ListProvisionedSCIMGroupsEnterpriseOptions.ExcludedAttributes # TODO: Enterprise
318+
- ListProvisionedSCIMGroupsEnterpriseOptions.Filter # TODO: Enterprise
319+
- ListProvisionedSCIMGroupsEnterpriseOptions.StartIndex # TODO: Enterprise
320+
- ListReactionOptions.Content # TODO: Reactions
321+
- ListRepositoryActivityOptions.ActivityType # TODO: Repositories
322+
- ListRepositoryActivityOptions.Actor # TODO: Repositories
323+
- ListRepositoryActivityOptions.After # TODO: Repositories
324+
- ListRepositoryActivityOptions.Before # TODO: Repositories
325+
- ListRepositoryActivityOptions.Direction # TODO: Repositories
326+
- ListRepositoryActivityOptions.PerPage # TODO: Repositories
327+
- ListRepositoryActivityOptions.Ref # TODO: Repositories
328+
- ListRepositoryActivityOptions.TimePeriod # TODO: Repositories
329+
- ListRepositorySecurityAdvisoriesOptions.Direction # TODO: SecurityAdvisories
330+
- ListRepositorySecurityAdvisoriesOptions.Direction # TODO: SecurityAdvisories
331+
- ListRepositorySecurityAdvisoriesOptions.Sort # TODO: SecurityAdvisories
332+
- ListRepositorySecurityAdvisoriesOptions.Sort # TODO: SecurityAdvisories
333+
- ListRepositorySecurityAdvisoriesOptions.State # TODO: SecurityAdvisories
334+
- ListRepositorySecurityAdvisoriesOptions.State # TODO: SecurityAdvisories
335+
- ListWorkflowJobsOptions.Filter # TODO: Actions
336+
- ListWorkflowRunsOptions.Actor # TODO: Actions
337+
- ListWorkflowRunsOptions.Branch # TODO: Actions
338+
- ListWorkflowRunsOptions.CheckSuiteID # TODO: Actions
339+
- ListWorkflowRunsOptions.Created # TODO: Actions
340+
- ListWorkflowRunsOptions.Event # TODO: Actions
341+
- ListWorkflowRunsOptions.ExcludePullRequests # TODO: Actions
342+
- ListWorkflowRunsOptions.HeadSHA # TODO: Actions
343+
- ListWorkflowRunsOptions.Status # TODO: Actions
344+
- LockIssueOptions.LockReason # TODO: Issues
345+
- MilestoneListOptions.Direction # TODO: Issues
346+
- MilestoneListOptions.Sort # TODO: Issues
347+
- MilestoneListOptions.State # TODO: Issues
348+
- NotificationListOptions.All # TODO: Activities
349+
- NotificationListOptions.Before # TODO: Activities
350+
- NotificationListOptions.Participating # TODO: Activities
351+
- NotificationListOptions.Since # TODO: Activities
352+
- OrganizationsListOptions.Since # TODO: Organizations
353+
- ProjectV2ItemFieldValue.DataType # TODO: Projects
354+
- ProjectV2ItemFieldValue.Name # TODO: Projects
355+
- PullRequestListCommentsOptions.Direction # TODO: PullRequests
356+
- PullRequestListCommentsOptions.Since # TODO: PullRequests
357+
- PullRequestListCommentsOptions.Sort # TODO: PullRequests
358+
- PullRequestListOptions.Base # TODO: PullRequests
359+
- PullRequestListOptions.Direction # TODO: PullRequests
360+
- PullRequestListOptions.Head # TODO: PullRequests
361+
- PullRequestListOptions.Sort # TODO: PullRequests
362+
- PullRequestListOptions.State # TODO: PullRequests
363+
- Rate.Resource # TODO: Common
364+
- RepositoryAddCollaboratorOptions.Permission # TODO: Repositories
365+
- RepositoryContentGetOptions.Ref # TODO: Repositories
366+
- RepositoryCreateForkOptions.DefaultBranchOnly # TODO: Repositories
367+
- RepositoryCreateForkOptions.Name # TODO: Repositories
368+
- RepositoryCreateForkOptions.Organization # TODO: Repositories
369+
- RepositoryListAllOptions.Since # TODO: Repositories
370+
- RepositoryListByAuthenticatedUserOptions.Affiliation # TODO: Repositories
371+
- RepositoryListByAuthenticatedUserOptions.Direction # TODO: Repositories
372+
- RepositoryListByAuthenticatedUserOptions.Sort # TODO: Repositories
373+
- RepositoryListByAuthenticatedUserOptions.Type # TODO: Repositories
374+
- RepositoryListByAuthenticatedUserOptions.Visibility # TODO: Repositories
375+
- RepositoryListByOrgOptions.Direction # TODO: Repositories
376+
- RepositoryListByOrgOptions.Sort # TODO: Repositories
377+
- RepositoryListByOrgOptions.Type # TODO: Repositories
378+
- RepositoryListByUserOptions.Direction # TODO: Repositories
379+
- RepositoryListByUserOptions.Sort # TODO: Repositories
380+
- RepositoryListByUserOptions.Type # TODO: Repositories
381+
- RepositoryListForksOptions.Sort # TODO: Repositories
382+
- RepositoryListOptions.Affiliation # TODO: Repositories
383+
- RepositoryListOptions.Direction # TODO: Repositories
384+
- RepositoryListOptions.Sort # TODO: Repositories
385+
- RepositoryListOptions.Type # TODO: Repositories
386+
- RepositoryListOptions.Visibility # TODO: Repositories
387+
- SearchOptions.Order # TODO: Search
388+
- SearchOptions.Sort # TODO: Search
389+
- Secret.SelectedRepositoriesURL # TODO: Actions
390+
- Secret.Visibility # TODO: Actions
391+
- SecretScanningAlertListOptions.Direction # TODO: SecretScanning
392+
- SecretScanningAlertListOptions.IsMultiRepo # TODO: SecretScanning
393+
- SecretScanningAlertListOptions.IsPubliclyLeaked # TODO: SecretScanning
394+
- SecretScanningAlertListOptions.Resolution # TODO: SecretScanning
395+
- SecretScanningAlertListOptions.SecretType # TODO: SecretScanning
396+
- SecretScanningAlertListOptions.Sort # TODO: SecretScanning
397+
- SecretScanningAlertListOptions.State # TODO: SecretScanning
398+
- SecretScanningAlertListOptions.Validity # TODO: SecretScanning
399+
- TeamAddTeamMembershipOptions.Role # TODO: Teams
400+
- TeamAddTeamRepoOptions.Permission # TODO: Teams
401+
- TeamListTeamMembersOptions.Role # TODO: Teams
402+
- TrafficBreakdownOptions.Per # TODO: Repositories
403+
- UpdateRuleParameters.UpdateAllowsFetchAndMerge # TODO: Rules
404+
- UploadOptions.Label # TODO: Repositories
405+
- UploadOptions.Name # TODO: Repositories
406+
- UserListOptions.Since # TODO: Users
222407
sliceofpointers:
223408
type: module
224409
description: Reports usage of []*string and slices of structs without pointers.
@@ -258,6 +443,9 @@ linters:
258443
# Because fmt.Sprint(reset.Unix())) is more readable than strconv.FormatInt(reset.Unix(), 10).
259444
- linters: [perfsprint]
260445
text: fmt.Sprint.* can be replaced with faster strconv.FormatInt
446+
issues:
447+
max-issues-per-linter: 0
448+
max-same-issues: 0
261449
formatters:
262450
enable:
263451
- gci

tools/jsonfieldname/testdata/src/has-warnings/main.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

tools/jsonfieldname/testdata/src/no-warnings/main.go

Lines changed: 0 additions & 13 deletions
This file was deleted.

tools/jsonfieldname/go.mod renamed to tools/structfield/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module tools/jsonfieldname
1+
module tools/structfield
22

33
go 1.24.0
44

File renamed without changes.

0 commit comments

Comments
 (0)