Skip to content

Commit b83eb92

Browse files
authored
feat: add missing API fields to structs (#210)
* feat: add missing API fields to structs - Add EditControls field to Tweet struct for edit functionality - Add verified_type and subscription_type fields to User struct for new verification system - Add alt_text, duration_ms, preview_image_url, variants fields to Media struct - Add bookmark_count and view_count fields to TweetMetrics struct - Add subscriber_count field to Space struct - Add media_keys and public_metrics fields to DirectMessage struct - Create TweetEditControls and DirectMessageMetrics structs - Update tests to include new fields with sample data * build: update to golangci-lint v2 and remove reviewdog - Update golangci-lint to v2.2.2 in GitHub Actions - Remove deprecated gosimple linter (functionality moved to staticcheck) - Remove goimports from linters (now a formatter in v2) - Update golangci-lint-action to v7 for v2 compatibility - Remove reviewdog dependency - Update configuration to v2 format * fix: resolve all golangci-lint errors - Fix errcheck errors by properly handling resp.Body.Close() return value - Fix govet loopclosure errors in test files by removing unused loop variables - Disable revive exported rule to avoid requiring comments on all exported types
1 parent 8af34b7 commit b83eb92

47 files changed

Lines changed: 214 additions & 161 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/lint.yml

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
name: reviewdog
2-
3-
on: [pull_request]
4-
1+
name: lint
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
57
jobs:
68
golangci-lint:
7-
name: runner/golangci-lint
8-
strategy:
9-
matrix:
10-
go-version: ['1.20']
11-
runs-on: ubuntu-22.04
9+
name: golangci-lint
10+
runs-on: ubuntu-latest
1211
steps:
13-
- uses: actions/checkout@v3
14-
- name: golangci-lint with review dog
15-
uses: reviewdog/action-golangci-lint@v2
12+
- uses: actions/checkout@v4
13+
- uses: actions/setup-go@v5
1614
with:
17-
golangci_lint_flags: "--config=.golangci.yml"
18-
level: error
19-
reporter: github-pr-review
20-
go_version: ${{ matrix.go-version }}
21-
fail_on_error: true
15+
go-version-file: go.mod
16+
- name: golangci-lint
17+
uses: golangci/golangci-lint-action@v7
18+
with:
19+
version: v2.2.2

.github/workflows/test.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@ jobs:
1111
name: go test
1212
strategy:
1313
matrix:
14-
go-version: ['1.18', '1.19', '1.20']
14+
go-version: ['1.21', '1.22', '1.23']
1515
runs-on: ubuntu-22.04
1616

1717
steps:
1818
- name: check out code into the Go module directory
19-
uses: actions/checkout@v3
19+
uses: actions/checkout@v4
2020

2121
- name: set up Go 1.x
22-
uses: actions/setup-go@v4
22+
uses: actions/setup-go@v5
2323
with:
2424
go-version: ${{ matrix.go-version }}
2525

2626
- name: restore cache
27-
uses: actions/cache@v3
27+
uses: actions/cache@v4
2828
with:
2929
path: ~/go/pkg/mod
3030
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}

.golangci.yml

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,32 @@
1+
version: "2"
2+
13
run:
24
timeout: 10m
3-
skip-files: [
4-
'doc.go'
5-
]
6-
skip-dirs: []
7-
8-
linters-settings:
9-
misspell:
10-
locale: US
11-
govet:
12-
# report about shadowed variables
13-
# FYI https://github.com/golang/go/blob/4a381e3ee3ad6104fc1e1bc255f29d6bf47d7969/src/cmd/vet/shadow.go
14-
enable-all: true
15-
check-shadowing: false
16-
disable:
17-
- fieldalignment
18-
- shadow
19-
staticcheck:
20-
checks: ["all", "-S1*", "-ST1*", "-SA5011", "-SA1019", "-SA2002"]
215

226
linters:
23-
disable-all: true
7+
default: standard
248
enable:
259
- bodyclose
2610
- forcetypeassert
2711
- gocritic
28-
- goimports
29-
- gosimple
3012
- govet
31-
- ifshort
3213
- makezero
3314
- misspell
3415
- nilerr
3516
- noctx
3617
- revive
3718
- staticcheck
38-
- varcheck
3919
- unused
40-
41-
issues:
42-
exclude-use-default: true
43-
max-per-linter: 0
44-
max-same-issues: 0
45-
exclude: []
20+
settings:
21+
misspell:
22+
locale: US
23+
govet:
24+
disable:
25+
- fieldalignment
26+
- shadow
27+
staticcheck:
28+
checks: ["all", "-S1*", "-ST1*", "-SA5011", "-SA1019", "-SA2002"]
29+
revive:
30+
rules:
31+
- name: exported
32+
disabled: true

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# gotwtr
22

33
[![Go Reference](https://pkg.go.dev/badge/github.com/sivchari/gotwtr.svg)](https://pkg.go.dev/github.com/sivchari/gotwtr)
4-
[![reviewdog](https://github.com/sivchari/gotwtr/actions/workflows/lint.yml/badge.svg)](https://github.com/sivchari/gotwtr/actions/workflows/lint.yml)
4+
[![lint](https://github.com/sivchari/gotwtr/actions/workflows/lint.yml/badge.svg)](https://github.com/sivchari/gotwtr/actions/workflows/lint.yml)
55
[![test](https://github.com/sivchari/gotwtr/actions/workflows/test.yml/badge.svg)](https://github.com/sivchari/gotwtr/actions/workflows/test.yml)
66

77
gotwtr is a Go client library for the Twitter v2 API.

block.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func blocking(ctx context.Context, c *client, userID string, opt ...*BlockOption
3333
if err != nil {
3434
return nil, fmt.Errorf("blocking response: %w", err)
3535
}
36-
defer resp.Body.Close()
36+
defer func() { _ = resp.Body.Close() }()
3737
var blocking BlockingResponse
3838
if err := json.NewDecoder(resp.Body).Decode(&blocking); err != nil {
3939
return nil, fmt.Errorf("blocking decode: %w", err)
@@ -77,7 +77,7 @@ func postBlocking(ctx context.Context, c *client, userID string, targetUserID st
7777
if err != nil {
7878
return nil, fmt.Errorf("post blocking response: %w", err)
7979
}
80-
defer resp.Body.Close()
80+
defer func() { _ = resp.Body.Close() }()
8181

8282
var postBlocking PostBlockingResponse
8383
if err := json.NewDecoder(resp.Body).Decode(&postBlocking); err != nil {
@@ -113,7 +113,7 @@ func undoBlocking(ctx context.Context, c *client, sourceUserID string, targetUse
113113
if err != nil {
114114
return nil, fmt.Errorf("undo blocking response: %w", err)
115115
}
116-
defer resp.Body.Close()
116+
defer func() { _ = resp.Body.Close() }()
117117

118118
var undoBlocking UndoBlockingResponse
119119
if err := json.NewDecoder(resp.Body).Decode(&undoBlocking); err != nil {

block_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -716,18 +716,18 @@ func Test_blocking(t *testing.T) {
716716
wantErr: true,
717717
},
718718
}
719-
for i, tt := range tests {
719+
for _, tt := range tests {
720720
tt := tt
721721
t.Run(tt.name, func(t *testing.T) {
722722
t.Parallel()
723723
c := gotwtr.New("test-key", gotwtr.WithHTTPClient(tt.args.client))
724724
got, err := c.Blocking(tt.args.ctx, tt.args.userID, tt.args.opt...)
725725
if (err != nil) != tt.wantErr {
726-
t.Errorf("client.Blocking() index = %v error = %v, wantErr %v", i, err, tt.wantErr)
726+
t.Errorf("client.Blocking() error = %v, wantErr %v", err, tt.wantErr)
727727
return
728728
}
729729
if diff := cmp.Diff(tt.want, got); diff != "" {
730-
t.Errorf("client.Blocking() index = %v mismatch (-want +got):\n%s", i, diff)
730+
t.Errorf("client.Blocking() mismatch (-want +got):\n%s", diff)
731731
return
732732
}
733733
})
@@ -818,18 +818,18 @@ func Test_postBlocking(t *testing.T) {
818818
wantErr: true,
819819
},
820820
}
821-
for i, tt := range tests {
821+
for _, tt := range tests {
822822
tt := tt
823823
t.Run(tt.name, func(t *testing.T) {
824824
t.Parallel()
825825
c := gotwtr.New("test-key", gotwtr.WithHTTPClient(tt.args.client))
826826
got, err := c.PostBlocking(tt.args.ctx, tt.args.userID, tt.args.targetUserID)
827827
if (err != nil) != tt.wantErr {
828-
t.Errorf("PostBlocking() index = %v error = %v, wantErr %v", i, err, tt.wantErr)
828+
t.Errorf("PostBlocking() error = %v, wantErr %v", err, tt.wantErr)
829829
return
830830
}
831831
if diff := cmp.Diff(got, tt.want); diff != "" {
832-
t.Errorf("PostBlocking() index = %v mismatch (-want +got):\n%s", i, diff)
832+
t.Errorf("PostBlocking() mismatch (-want +got):\n%s", diff)
833833
return
834834
}
835835
})
@@ -920,18 +920,18 @@ func Test_undoBlocking(t *testing.T) {
920920
wantErr: true,
921921
},
922922
}
923-
for i, tt := range tests {
923+
for _, tt := range tests {
924924
tt := tt
925925
t.Run(tt.name, func(t *testing.T) {
926926
t.Parallel()
927927
c := gotwtr.New("test-key", gotwtr.WithHTTPClient(tt.args.client))
928928
got, err := c.UndoBlocking(tt.args.ctx, tt.args.sourceUserID, tt.args.targetUserID)
929929
if (err != nil) != tt.wantErr {
930-
t.Errorf("UndoBlocking() index = %v error = %v, wantErr %v", i, err, tt.wantErr)
930+
t.Errorf("UndoBlocking() error = %v, wantErr %v", err, tt.wantErr)
931931
return
932932
}
933933
if diff := cmp.Diff(got, tt.want); diff != "" {
934-
t.Errorf("UndoBlocking() index = %v mismatch (-want +got):\n%s", i, diff)
934+
t.Errorf("UndoBlocking() mismatch (-want +got):\n%s", diff)
935935
return
936936
}
937937
})

bookmarks.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func lookupUserBookmarks(ctx context.Context, c *client, userID string, opt ...*
3636
if err != nil {
3737
return nil, fmt.Errorf("lookup user bookmarks response: %w", err)
3838
}
39-
defer resp.Body.Close()
39+
defer func() { _ = resp.Body.Close() }()
4040

4141
var lookupUserBookmarks LookupUserBookmarksResponse
4242
if err := json.NewDecoder(resp.Body).Decode(&lookupUserBookmarks); err != nil {
@@ -78,7 +78,7 @@ func bookmarkTweet(ctx context.Context, c *client, userID string, body *Bookmark
7878
if err != nil {
7979
return nil, fmt.Errorf("bookmark tweet response: %w", err)
8080
}
81-
defer resp.Body.Close()
81+
defer func() { _ = resp.Body.Close() }()
8282

8383
var bookmarkTweet BookmarkTweetResponse
8484
if err := json.NewDecoder(resp.Body).Decode(&bookmarkTweet); err != nil {
@@ -114,7 +114,7 @@ func removeBookmarkOfTweet(ctx context.Context, c *client, userID string, tweetI
114114
if err != nil {
115115
return nil, fmt.Errorf("remove bookmark of tweet response: %w", err)
116116
}
117-
defer resp.Body.Close()
117+
defer func() { _ = resp.Body.Close() }()
118118

119119
var removeBookmarkOfTweet RemoveBookmarkOfTweetResponse
120120
if err := json.NewDecoder(resp.Body).Decode(&removeBookmarkOfTweet); err != nil {

compliance_jobs.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func complianceJobs(ctx context.Context, c *client, opt ...*ComplianceJobsOption
3333
if err != nil {
3434
return nil, fmt.Errorf("compliance jobs response: %w", err)
3535
}
36-
defer resp.Body.Close()
36+
defer func() { _ = resp.Body.Close() }()
3737

3838
var cj ComplianceJobsResponse
3939
if err := json.NewDecoder(resp.Body).Decode(&cj); err != nil {
@@ -60,7 +60,7 @@ func complianceJob(ctx context.Context, c *client, cjID int) (*ComplianceJobResp
6060
if err != nil {
6161
return nil, fmt.Errorf("compliance job response: %w", err)
6262
}
63-
defer resp.Body.Close()
63+
defer func() { _ = resp.Body.Close() }()
6464

6565
var cj ComplianceJobResponse
6666
if err := json.NewDecoder(resp.Body).Decode(&cj); err != nil {
@@ -103,7 +103,7 @@ func createComplianceJob(ctx context.Context, c *client, opt ...*CreateComplianc
103103
if err != nil {
104104
return nil, fmt.Errorf("create compliance job response: %w", err)
105105
}
106-
defer resp.Body.Close()
106+
defer func() { _ = resp.Body.Close() }()
107107

108108
var cresponse CreateComplianceJobResponse
109109
if err := json.NewDecoder(resp.Body).Decode(&cresponse); err != nil {

compliance_jobs_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ func Test_createComplianceJob(t *testing.T) {
321321
},
322322
}
323323
for _, tt := range tests {
324+
tt := tt
324325
t.Run(tt.name, func(t *testing.T) {
325326
t.Parallel()
326327
c := gotwtr.New("test-key", gotwtr.WithHTTPClient(tt.args.client))

direct_message.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ const (
1212
DirectMessageFieldParticipantIDs DMEventField = "participant_ids"
1313
DirectMessageFieldReferencedTweets DMEventField = "referenced_tweets"
1414
DirectMessageFieldAttachments DMEventField = "attachments"
15+
DirectMessageFieldMediaKeys DMEventField = "media_keys"
16+
DirectMessageFieldPublicMetrics DMEventField = "public_metrics"
1517
)
1618

1719
type EventTypes string
@@ -30,6 +32,8 @@ type DirectMessage struct {
3032
ID string `json:"id"`
3133
SenderID string `json:"sender_id"`
3234
Text string `json:"text,omitempty"`
35+
MediaKeys []string `json:"media_keys,omitempty"`
36+
PublicMetrics *DirectMessageMetrics `json:"public_metrics,omitempty"`
3337
}
3438

3539
type DirectMessageMeta struct {
@@ -42,6 +46,10 @@ type DirectMessageAttachment struct {
4246
MediaID string `json:"media_id"`
4347
}
4448

49+
type DirectMessageMetrics struct {
50+
ReadCount int `json:"read_count"`
51+
}
52+
4553
type CreateOneToOneDMBody struct {
4654
Text string `json:"text,omitempty"`
4755
Attachments []DirectMessageAttachment `json:"attachments,omitempty"`

0 commit comments

Comments
 (0)