diff --git a/server/.golangci.yml b/server/.golangci.yml index 96672a2550..c7134dcf21 100644 --- a/server/.golangci.yml +++ b/server/.golangci.yml @@ -15,17 +15,19 @@ linters-settings: linters: disable-all: true enable: + - typecheck # This is to improve error reporting - gofmt - - golint - gosimple - govet - ineffassign + - revive - exportloopref - staticcheck - unconvert - unused - misspell - goimports + - makezero # TODO: enable this later # - errcheck @@ -38,8 +40,17 @@ issues: text: "SetupEnterprise" - linters: - - golint - text: "should have|should be|should replace|stutters|underscore|annoying|error strings should not be capitalized" + - revive + text: "var-naming|error-naming|exported|increment-decrement|error-strings|if-return|unused-parameter|blank-imports|context-as-argument|empty-block" + # We need to fix the unused parameter issues and remove the exception. + + - linters: + - revive + path: "public/*" # TODO: fix this + + - linters: + - revive + path: "enterprise" # TODO: fix this - linters: - misspell diff --git a/server/boards/api/teams.go b/server/boards/api/teams.go index 7b1515b5df..da7824a715 100644 --- a/server/boards/api/teams.go +++ b/server/boards/api/teams.go @@ -322,7 +322,6 @@ func (a *API) handleGetTeamUsersByID(w http.ResponseWriter, r *http.Request) { } var users []*model.User - var error error if len(userIDs) == 0 { a.errorResponse(w, r, model.NewErrBadRequest("User IDs are empty")) @@ -341,9 +340,9 @@ func (a *API) handleGetTeamUsersByID(w http.ResponseWriter, r *http.Request) { } users = append(users, user) } else { - users, error = a.app.GetUsersList(userIDs) - if error != nil { - a.errorResponse(w, r, error) + users, err = a.app.GetUsersList(userIDs) + if err != nil { + a.errorResponse(w, r, err) return } diff --git a/server/boards/api/users.go b/server/boards/api/users.go index c5a01f8c07..731397d490 100644 --- a/server/boards/api/users.go +++ b/server/boards/api/users.go @@ -67,7 +67,6 @@ func (a *API) handleGetUsersList(w http.ResponseWriter, r *http.Request) { defer a.audit.LogRecord(audit.LevelAuth, auditRec) var users []*model.User - var error error if len(userIDs) == 0 { a.errorResponse(w, r, model.NewErrBadRequest("User IDs are empty")) @@ -86,9 +85,9 @@ func (a *API) handleGetUsersList(w http.ResponseWriter, r *http.Request) { } users = append(users, user) } else { - users, error = a.app.GetUsersList(userIDs) - if error != nil { - a.errorResponse(w, r, error) + users, err = a.app.GetUsersList(userIDs) + if err != nil { + a.errorResponse(w, r, err) return } } diff --git a/server/boards/client/client.go b/server/boards/client/client.go index fad63090dc..3c8541d74c 100644 --- a/server/boards/client/client.go +++ b/server/boards/client/client.go @@ -849,9 +849,9 @@ func (c *Client) TeamUploadFileInfo(teamID, boardID string, fileName string) (*m return nil, BuildErrorResponse(r, err) } defer closeBody(r) - fileInfoResponse, error := api.FileInfoResponseFromJSON(r.Body) - if error != nil { - return nil, BuildErrorResponse(r, error) + fileInfoResponse, err := api.FileInfoResponseFromJSON(r.Body) + if err != nil { + return nil, BuildErrorResponse(r, err) } return fileInfoResponse, BuildResponse(r) } diff --git a/server/boards/integrationtests/compliance_test.go b/server/boards/integrationtests/compliance_test.go index 656a111641..9cbabd4f35 100644 --- a/server/boards/integrationtests/compliance_test.go +++ b/server/boards/integrationtests/compliance_test.go @@ -17,8 +17,8 @@ import ( var ( OneHour int64 = 360000 - OneDay int64 = OneHour * 24 - OneYear int64 = OneDay * 365 + OneDay = OneHour * 24 + OneYear = OneDay * 365 ) func setupTestHelperForCompliance(t *testing.T, complianceLicense bool) (*TestHelper, Clients) { diff --git a/server/boards/services/notify/plugindelivery/user.go b/server/boards/services/notify/plugindelivery/user.go index 377258c715..0052dde595 100644 --- a/server/boards/services/notify/plugindelivery/user.go +++ b/server/boards/services/notify/plugindelivery/user.go @@ -45,10 +45,10 @@ func (pd *PluginDelivery) UserByUsername(username string) (*mm_model.User, error // is a special character for usernames (dot, dash or underscore). If not, it // returns the same string. func trimUsernameSpecialChar(word string) (string, bool) { - len := len(word) + l := len(word) - if len > 0 && strings.LastIndexAny(word, usernameSpecialChars) == (len-1) { - return word[:len-1], true + if l > 0 && strings.LastIndexAny(word, usernameSpecialChars) == (l-1) { + return word[:l-1], true } return word, false diff --git a/server/boards/services/store/mattermostauthlayer/mattermostauthlayer.go b/server/boards/services/store/mattermostauthlayer/mattermostauthlayer.go index cd91580c94..a743942451 100644 --- a/server/boards/services/store/mattermostauthlayer/mattermostauthlayer.go +++ b/server/boards/services/store/mattermostauthlayer/mattermostauthlayer.go @@ -934,9 +934,8 @@ func (s *MattermostAuthLayer) boardsFromRows(rows *sql.Rows, removeDuplicates bo if removeDuplicates { if _, ok := idMap[board.ID]; ok { continue - } else { - idMap[board.ID] = struct{}{} } + idMap[board.ID] = struct{}{} } err = json.Unmarshal(propertiesBytes, &board.Properties) diff --git a/server/boards/services/store/sqlstore/cloud.go b/server/boards/services/store/sqlstore/cloud.go index 0ae6840ac7..fea8b2fea4 100644 --- a/server/boards/services/store/sqlstore/cloud.go +++ b/server/boards/services/store/sqlstore/cloud.go @@ -88,7 +88,7 @@ func (s *SQLStore) updateCardLimitTimestamp(db sq.BaseRunner, cardLimit int) (in Insert(s.tablePrefix+"system_settings"). Columns("id", "value") - var value interface{} = 0 + var value any = 0 //nolint:revive if cardLimit != 0 { value = s.activeCardsQuery(sq.StatementBuilder, "b.update_at", cardLimit). OrderBy("b.update_at DESC"). diff --git a/server/channels/api4/group.go b/server/channels/api4/group.go index c66be01cde..621d6f1c88 100644 --- a/server/channels/api4/group.go +++ b/server/channels/api4/group.go @@ -1061,8 +1061,8 @@ func getGroups(c *Context, w http.ResponseWriter, r *http.Request) { } var ( - groups = []*model.Group{} - canSee bool = true + groups = []*model.Group{} + canSee = true ) if opts.FilterHasMember != "" { diff --git a/server/channels/app/command.go b/server/channels/app/command.go index 21ae449df5..8f4400565a 100644 --- a/server/channels/app/command.go +++ b/server/channels/app/command.go @@ -811,10 +811,10 @@ func possibleAtMentions(message string) []string { // is a special character for usernames (dot, dash or underscore). If not, it // returns the same string. func trimUsernameSpecialChar(word string) (string, bool) { - len := len(word) + l := len(word) - if len > 0 && strings.LastIndexAny(word, usernameSpecialChars) == (len-1) { - return word[:len-1], true + if l > 0 && strings.LastIndexAny(word, usernameSpecialChars) == (l-1) { + return word[:l-1], true } return word, false diff --git a/server/channels/app/email/email.go b/server/channels/app/email/email.go index fd647a7960..21996d66b9 100644 --- a/server/channels/app/email/email.go +++ b/server/channels/app/email/email.go @@ -894,7 +894,7 @@ func (es *Service) InvalidateVerifyEmailTokensForUser(userID string) *model.AppE return model.NewAppError("InvalidateVerifyEmailTokensForUser", "api.user.invalidate_verify_email_tokens.error", nil, "", http.StatusInternalServerError).Wrap(err) } - var appErr *model.AppError = nil + var appErr *model.AppError for _, token := range tokens { tokenExtra := struct { UserId string diff --git a/server/channels/app/file.go b/server/channels/app/file.go index d46a69999e..ed696d984e 100644 --- a/server/channels/app/file.go +++ b/server/channels/app/file.go @@ -315,7 +315,7 @@ func (a *App) findTeamIdForFilename(post *model.Post, id, filename string) strin } var fileMigrationLock sync.Mutex -var oldFilenameMatchExp *regexp.Regexp = regexp.MustCompile(`^\/([a-z\d]{26})\/([a-z\d]{26})\/([a-z\d]{26})\/([^\/]+)$`) +var oldFilenameMatchExp = regexp.MustCompile(`^\/([a-z\d]{26})\/([a-z\d]{26})\/([a-z\d]{26})\/([^\/]+)$`) // Parse the path from the Filename of the form /{channelID}/{userID}/{uid}/{nameWithExtension} func parseOldFilenames(filenames []string, channelID, userID string) [][]string { diff --git a/server/channels/app/file_helper.go b/server/channels/app/file_helper.go index 741c871ed7..66cfaa64e9 100644 --- a/server/channels/app/file_helper.go +++ b/server/channels/app/file_helper.go @@ -25,7 +25,7 @@ func (a *App) removeInaccessibleContentFromFilesSlice(files []*model.FileInfo) ( return 0, nil } - var firstInaccessibleFileTime int64 = 0 + var firstInaccessibleFileTime int64 for _, file := range files { if createAt := file.CreateAt; createAt < lastAccessibleFileTime { file.MakeContentInaccessible() @@ -143,7 +143,7 @@ func (a *App) getFilteredAccessibleFiles(files []*model.FileInfo, options filter return files, 0, nil } if bounds.noAccessible() { - var firstInaccessibleFileTime int64 = 0 + var firstInaccessibleFileTime int64 if lenFiles > 0 { firstFileCreatedAt := files[0].CreateAt lastFileCreatedAt := files[len(files)-1].CreateAt @@ -194,7 +194,7 @@ func linearFilterFileList(fileList *model.FileInfoList, earliestAccessibleTime i // this is the slower fallback that is still safe // if we can not assume files are ordered by CreatedAt func linearFilterFilesSlice(files []*model.FileInfo, earliestAccessibleTime int64) ([]*model.FileInfo, int64) { - var firstInaccessibleFileTime int64 = 0 + var firstInaccessibleFileTime int64 n := 0 for i := range files { if createAt := files[i].CreateAt; createAt >= earliestAccessibleTime { diff --git a/server/channels/app/permissions.go b/server/channels/app/permissions.go index 16afddf44f..31fc9bd576 100644 --- a/server/channels/app/permissions.go +++ b/server/channels/app/permissions.go @@ -282,7 +282,7 @@ func updateRole(a *App, sc *model.SchemeConveyor, roleCreatedName, defaultRoleNa _, err = a.UpdateRole(roleCreated) if err != nil { - return errors.New(fmt.Sprintf("%v: %v\n", err.Message, err.DetailedError)) + return fmt.Errorf("failed to update role: %w", err) } return nil diff --git a/server/channels/app/platform/log.go b/server/channels/app/platform/log.go index 030da2f204..5b1b7d28d6 100644 --- a/server/channels/app/platform/log.go +++ b/server/channels/app/platform/log.go @@ -141,7 +141,7 @@ func (ps *PlatformService) GetLogsSkipSend(page, perPage int, logFilter *model.L var lineCount int const searchPos = -1 b := make([]byte, 1) - var endOffset int64 = 0 + var endOffset int64 // if the file exists and it's last byte is '\n' - skip it var stat os.FileInfo diff --git a/server/channels/app/platform/web_hub.go b/server/channels/app/platform/web_hub.go index edb2b3d4e1..178738340e 100644 --- a/server/channels/app/platform/web_hub.go +++ b/server/channels/app/platform/web_hub.go @@ -442,7 +442,7 @@ func (h *Hub) Start() { }) continue } - var latestActivity int64 = 0 + var latestActivity int64 for _, conn := range conns { if !conn.active { continue diff --git a/server/channels/app/plugin_public_keys.go b/server/channels/app/plugin_public_keys.go index 0756a13836..2b9c8a62cd 100644 --- a/server/channels/app/plugin_public_keys.go +++ b/server/channels/app/plugin_public_keys.go @@ -3,7 +3,7 @@ package app -var mattermostPluginPublicKey []byte = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK----- +var mattermostPluginPublicKey = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK----- mQINBF3YTiEBEACgkhnZ5+xylKZhLVj193b6d/rSQuCU/zwWeZJnqyR8wRsPotXO CMXOUM9bTTaGfItCP9KlPPcyrshNEIgqcqhB6TSKkWSyrV5XS95Opd9Esbjw1VZq diff --git a/server/channels/app/post_helpers.go b/server/channels/app/post_helpers.go index 64bd4945d7..8c94f8fa44 100644 --- a/server/channels/app/post_helpers.go +++ b/server/channels/app/post_helpers.go @@ -124,7 +124,7 @@ func linearFilterPostList(postList *model.PostList, earliestAccessibleTime int64 // this is the slower fallback that is still safe if we can not // assume posts are ordered by CreatedAt func linearFilterPostsSlice(posts []*model.Post, earliestAccessibleTime int64) ([]*model.Post, int64) { - var firstInaccessiblePostTime int64 = 0 + var firstInaccessiblePostTime int64 n := 0 for i := range posts { if createAt := posts[i].CreateAt; createAt >= earliestAccessibleTime { @@ -243,7 +243,7 @@ func (a *App) getFilteredAccessiblePosts(posts []*model.Post, options filterPost return posts, 0, nil } if bounds.noAccessible() { - var firstInaccessiblePostTime int64 = 0 + var firstInaccessiblePostTime int64 if lenPosts > 0 { firstPostCreatedAt := posts[0].CreateAt lastPostCreatedAt := posts[len(posts)-1].CreateAt diff --git a/server/channels/app/team.go b/server/channels/app/team.go index 30f78a69ec..af9bc08c9f 100644 --- a/server/channels/app/team.go +++ b/server/channels/app/team.go @@ -234,7 +234,7 @@ func (a *App) createOnboardingLinkedBoard(c request.CTX, teamId string) (*fb_mod return nil, appErr } - var template *fb_model.Board = nil + var template *fb_model.Board for _, t := range templates { v := t.Properties["trackingTemplateId"] if v == welcomeToBoardsTemplateId { diff --git a/server/channels/app/team_test.go b/server/channels/app/team_test.go index 47fb9ac8aa..ba91847e27 100644 --- a/server/channels/app/team_test.go +++ b/server/channels/app/team_test.go @@ -727,7 +727,7 @@ func TestSanitizeTeam(t *testing.T) { } copyTeam := func() *model.Team { - copy := &model.Team{} + copy := &model.Team{} //nolint:revive *copy = *team return copy } diff --git a/server/channels/app/user.go b/server/channels/app/user.go index c464bde84e..2d30ff52a2 100644 --- a/server/channels/app/user.go +++ b/server/channels/app/user.go @@ -1513,7 +1513,7 @@ func (a *App) InvalidatePasswordRecoveryTokensForUser(userID string) *model.AppE return model.NewAppError("InvalidatePasswordRecoveryTokensForUser", "api.user.invalidate_password_recovery_tokens.error", nil, "", http.StatusInternalServerError).Wrap(err) } - var appErr *model.AppError = nil + var appErr *model.AppError for _, token := range tokens { tokenExtra := struct { UserId string diff --git a/server/channels/app/user_test.go b/server/channels/app/user_test.go index 6a50a9568a..00ddd43aae 100644 --- a/server/channels/app/user_test.go +++ b/server/channels/app/user_test.go @@ -111,24 +111,24 @@ func TestAdjustProfileImage(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown() - _, err := th.App.AdjustImage(bytes.NewReader([]byte{})) - require.NotNil(t, err) + _, appErr := th.App.AdjustImage(bytes.NewReader([]byte{})) + require.NotNil(t, appErr) // test image isn't the correct dimensions // it should be adjusted - testjpg, error := testutils.ReadTestFile("testjpg.jpg") - require.NoError(t, error) - adjusted, err := th.App.AdjustImage(bytes.NewReader(testjpg)) - require.Nil(t, err) + testjpg, err := testutils.ReadTestFile("testjpg.jpg") + require.NoError(t, err) + adjusted, appErr := th.App.AdjustImage(bytes.NewReader(testjpg)) + require.Nil(t, appErr) assert.True(t, adjusted.Len() > 0) assert.NotEqual(t, testjpg, adjusted) // default image should not require adjustment user := th.BasicUser - image, err := th.App.GetDefaultProfileImage(user) - require.Nil(t, err) - image2, err := th.App.AdjustImage(bytes.NewReader(image)) - require.Nil(t, err) + image, appErr := th.App.GetDefaultProfileImage(user) + require.Nil(t, appErr) + image2, appErr := th.App.AdjustImage(bytes.NewReader(image)) + require.Nil(t, appErr) assert.Equal(t, image, image2.Bytes()) } diff --git a/server/channels/jobs/extract_content/worker.go b/server/channels/jobs/extract_content/worker.go index 27ea2ef1f1..7a6d6e182d 100644 --- a/server/channels/jobs/extract_content/worker.go +++ b/server/channels/jobs/extract_content/worker.go @@ -33,7 +33,7 @@ func MakeWorker(jobServer *jobs.JobServer, app AppIface, store store.Store) mode jobServer.HandleJobPanic(job) var err error - var fromTS int64 = 0 + var fromTS int64 var toTS int64 = model.GetMillis() if fromStr, ok := job.Data["from"]; ok { if fromTS, err = strconv.ParseInt(fromStr, 10, 64); err != nil { diff --git a/server/channels/jobs/product_notices/scheduler.go b/server/channels/jobs/product_notices/scheduler.go index 55e0324551..77aa01e8c8 100644 --- a/server/channels/jobs/product_notices/scheduler.go +++ b/server/channels/jobs/product_notices/scheduler.go @@ -14,7 +14,7 @@ type Scheduler struct { *jobs.PeriodicScheduler } -func (scheduler *Scheduler) NextScheduleTime(cfg *model.Config, now time.Time, pendingJobs bool, lastSuccessfulJob *model.Job) *time.Time { +func (scheduler *Scheduler) NextScheduleTime(cfg *model.Config, _ time.Time, pendingJobs bool, lastSuccessfulJob *model.Job) *time.Time { nextTime := time.Now().Add(time.Duration(*cfg.AnnouncementSettings.NoticesFetchFrequency) * time.Second) return &nextTime } diff --git a/server/channels/store/localcachelayer/terms_of_service_layer.go b/server/channels/store/localcachelayer/terms_of_service_layer.go index 2244dc9be2..39338d7711 100644 --- a/server/channels/store/localcachelayer/terms_of_service_layer.go +++ b/server/channels/store/localcachelayer/terms_of_service_layer.go @@ -47,7 +47,7 @@ func (s LocalCacheTermsOfServiceStore) Save(termsOfService *model.TermsOfService func (s LocalCacheTermsOfServiceStore) GetLatest(allowFromCache bool) (*model.TermsOfService, error) { if allowFromCache { - if len, err := s.rootStore.termsOfServiceCache.Len(); err == nil && len != 0 { + if l, err := s.rootStore.termsOfServiceCache.Len(); err == nil && l != 0 { var cacheItem *model.TermsOfService if err := s.rootStore.doStandardReadCache(s.rootStore.termsOfServiceCache, LatestKey, &cacheItem); err == nil { return cacheItem, nil diff --git a/server/channels/store/searchtest/helper.go b/server/channels/store/searchtest/helper.go index 4340fce70f..ecf4485072 100644 --- a/server/channels/store/searchtest/helper.go +++ b/server/channels/store/searchtest/helper.go @@ -301,7 +301,7 @@ func (th *SearchTestHelper) createDirectChannel(teamID, name, displayName string } func (th *SearchTestHelper) createGroupChannel(teamID, displayName string, users []*model.User) (*model.Channel, error) { - userIDS := make([]string, len(users)) + userIDS := make([]string, 0, len(users)) for _, user := range users { userIDS = append(userIDS, user.Id) } @@ -464,7 +464,7 @@ func (th *SearchTestHelper) assertUsersMatchInAnyOrder(t *testing.T, expected, a func (th *SearchTestHelper) checkPostInSearchResults(t *testing.T, postID string, searchResults map[string]*model.Post) { t.Helper() - postIDS := make([]string, len(searchResults)) + postIDS := make([]string, 0, len(searchResults)) for ID := range searchResults { postIDS = append(postIDS, ID) } @@ -473,7 +473,7 @@ func (th *SearchTestHelper) checkPostInSearchResults(t *testing.T, postID string func (th *SearchTestHelper) checkFileInfoInSearchResults(t *testing.T, fileID string, searchResults map[string]*model.FileInfo) { t.Helper() - fileIDS := make([]string, len(searchResults)) + fileIDS := make([]string, 0, len(searchResults)) for ID := range searchResults { fileIDS = append(fileIDS, ID) } diff --git a/server/channels/store/storetest/reaction_store.go b/server/channels/store/storetest/reaction_store.go index 5f1ae8efe8..56bf158c3e 100644 --- a/server/channels/store/storetest/reaction_store.go +++ b/server/channels/store/storetest/reaction_store.go @@ -355,13 +355,13 @@ func testReactionGetForPostSince(t *testing.T, ss store.Store, s SqlStore) { } for _, reaction := range reactions { - delete := reaction.DeleteAt + del := reaction.DeleteAt update := reaction.UpdateAt _, err := ss.Reaction().Save(reaction) require.NoError(t, err) - if delete > 0 { + if del > 0 { _, err = ss.Reaction().Delete(reaction) require.NoError(t, err) } diff --git a/server/channels/store/storetest/retention_policy_store.go b/server/channels/store/storetest/retention_policy_store.go index 9787997c05..9eab6fad5a 100644 --- a/server/channels/store/storetest/retention_policy_store.go +++ b/server/channels/store/storetest/retention_policy_store.go @@ -458,7 +458,7 @@ func testRetentionPolicyStoreAddChannels(t *testing.T, ss store.Store, s SqlStor err := ss.RetentionPolicy().AddChannels(policy.ID, channelIDs) require.NoError(t, err) // verify that the channels were actually added - copy := copyRetentionPolicyWithTeamAndChannelIds(policy) + copy := copyRetentionPolicyWithTeamAndChannelIds(policy) //nolint:revive copy.ChannelIDs = append(copy.ChannelIDs, channelIDs...) checkRetentionPolicyLikeThisExists(t, ss, copy) restoreRetentionPolicy(t, ss, policy) @@ -492,7 +492,7 @@ func testRetentionPolicyStoreRemoveChannels(t *testing.T, ss store.Store, s SqlS err := ss.RetentionPolicy().RemoveChannels(policy.ID, []string{channelID}) require.NoError(t, err) // verify that the channel was actually removed - copy := copyRetentionPolicyWithTeamAndChannelIds(policy) + copy := copyRetentionPolicyWithTeamAndChannelIds(policy) //nolint:revive copy.ChannelIDs = make([]string, 0) for _, oldChannelID := range policy.ChannelIDs { if oldChannelID != channelID { @@ -554,7 +554,7 @@ func testRetentionPolicyStoreAddTeams(t *testing.T, ss store.Store, s SqlStore) err := ss.RetentionPolicy().AddTeams(policy.ID, teamIDs) require.NoError(t, err) // verify that the teams were actually added - copy := copyRetentionPolicyWithTeamAndChannelIds(policy) + copy := copyRetentionPolicyWithTeamAndChannelIds(policy) //nolint:revive copy.TeamIDs = append(copy.TeamIDs, teamIDs...) checkRetentionPolicyLikeThisExists(t, ss, copy) restoreRetentionPolicy(t, ss, policy) @@ -588,7 +588,7 @@ func testRetentionPolicyStoreRemoveTeams(t *testing.T, ss store.Store, s SqlStor err := ss.RetentionPolicy().RemoveTeams(policy.ID, []string{teamID}) require.NoError(t, err) // verify that the team was actually removed - copy := copyRetentionPolicyWithTeamAndChannelIds(policy) + copy := copyRetentionPolicyWithTeamAndChannelIds(policy) //nolint:revive copy.TeamIDs = make([]string, 0) for _, oldTeamID := range policy.TeamIDs { if oldTeamID != teamID { diff --git a/server/channels/utils/subpath.go b/server/channels/utils/subpath.go index 3e4be926dc..77288fa54c 100644 --- a/server/channels/utils/subpath.go +++ b/server/channels/utils/subpath.go @@ -123,8 +123,8 @@ func UpdateAssetsSubpathInDir(subpath, directory string) error { if err != nil { return errors.Wrapf(err, "failed to open %s", walkPath) } - new := strings.Replace(string(old), pathToReplace, newPath, -1) - if err = os.WriteFile(walkPath, []byte(new), 0); err != nil { + n := strings.Replace(string(old), pathToReplace, newPath, -1) + if err = os.WriteFile(walkPath, []byte(n), 0); err != nil { return errors.Wrapf(err, "failed to update %s with subpath %s", walkPath, subpath) } } diff --git a/server/cmd/mattermost/commands/cmdtestlib.go b/server/cmd/mattermost/commands/cmdtestlib.go index d756168590..1d32f79e0f 100644 --- a/server/cmd/mattermost/commands/cmdtestlib.go +++ b/server/cmd/mattermost/commands/cmdtestlib.go @@ -23,7 +23,7 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/testlib" ) -var coverprofileCounters map[string]int = make(map[string]int) +var coverprofileCounters = make(map[string]int) var mainHelper *testlib.MainHelper diff --git a/server/cmd/mmctl/commands/user_test.go b/server/cmd/mmctl/commands/user_test.go index b8b03c7bff..37e789b970 100644 --- a/server/cmd/mmctl/commands/user_test.go +++ b/server/cmd/mmctl/commands/user_test.go @@ -1238,9 +1238,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("username", mockUser.Username, "") command.Flags().String("password", mockUser.Password, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Equal("Email is required: flag accessed but not defined: email", error.Error()) + s.Require().Equal("Email is required: flag accessed but not defined: email", err.Error()) }) s.Run("Create user with username missing", func() { @@ -1250,9 +1250,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("email", mockUser.Email, "") command.Flags().String("password", mockUser.Password, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Equal("Username is required: flag accessed but not defined: username", error.Error()) + s.Require().Equal("Username is required: flag accessed but not defined: username", err.Error()) }) s.Run("Create user with password missing", func() { @@ -1262,9 +1262,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("username", mockUser.Username, "") command.Flags().String("email", mockUser.Email, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Equal("Password is required: flag accessed but not defined: password", error.Error()) + s.Require().Equal("Password is required: flag accessed but not defined: password", err.Error()) }) s.Run("Create a regular user", func() { @@ -1281,9 +1281,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("email", mockUser.Email, "") command.Flags().String("password", mockUser.Password, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Nil(error) + s.Require().Nil(err) s.Require().Equal(&mockUser, printer.GetLines()[0]) s.Require().Len(printer.GetErrorLines(), 0) }) @@ -1307,9 +1307,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("password", mockUser.Password, "") command.Flags().Bool("disable-welcome-email", mockUser.DisableWelcomeEmail, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Nil(error) + s.Require().Nil(err) printerLines := printer.GetLines()[0] printedUser := printerLines.(*model.User) @@ -1332,9 +1332,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("email", mockUser.Email, "") command.Flags().String("password", mockUser.Password, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Equal("Unable to create user. Error: remote error", error.Error()) + s.Require().Equal("Unable to create user. Error: remote error", err.Error()) }) s.Run("Create a sysAdmin user", func() { @@ -1358,9 +1358,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("password", mockUser.Password, "") command.Flags().Bool("system-admin", true, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Nil(error) + s.Require().Nil(err) s.Require().Equal(&mockUser, printer.GetLines()[0]) s.Require().Len(printer.GetErrorLines(), 0) }) @@ -1386,9 +1386,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("password", mockUser.Password, "") command.Flags().Bool("guest", true, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Nil(error) + s.Require().Nil(err) s.Require().Equal(&mockUser, printer.GetLines()[0]) s.Require().Len(printer.GetErrorLines(), 0) }) @@ -1414,9 +1414,9 @@ func (s *MmctlUnitTestSuite) TestUserCreateCmd() { command.Flags().String("password", mockUser.Password, "") command.Flags().Bool("system-admin", true, "") - error := userCreateCmdF(s.client, &command, []string{}) + err := userCreateCmdF(s.client, &command, []string{}) - s.Require().Equal("Unable to update user roles. Error: remote error", error.Error()) + s.Require().Equal("Unable to update user roles. Error: remote error", err.Error()) }) } @@ -1426,9 +1426,9 @@ func (s *MmctlUnitTestSuite) TestUpdateUserEmailCmd() { command := cobra.Command{} - error := updateUserEmailCmdF(s.client, &command, []string{}) + err := updateUserEmailCmdF(s.client, &command, []string{}) - s.Require().EqualError(error, "expected two arguments. See help text for details") + s.Require().EqualError(err, "expected two arguments. See help text for details") }) s.Run("Invalid email provided", func() { @@ -1438,9 +1438,9 @@ func (s *MmctlUnitTestSuite) TestUpdateUserEmailCmd() { emailArg := "invalidEmail" command := cobra.Command{} - error := updateUserEmailCmdF(s.client, &command, []string{userArg, emailArg}) + err := updateUserEmailCmdF(s.client, &command, []string{userArg, emailArg}) - s.Require().EqualError(error, "invalid email: 'invalidEmail'") + s.Require().EqualError(err, "invalid email: 'invalidEmail'") }) s.Run("User not found using email, username or id as identifier", func() { @@ -1562,9 +1562,9 @@ func (s *MmctlUnitTestSuite) TestUpdateUserEmailCmd() { Return(&updatedUser, &model.Response{}, nil). Times(1) - error := updateUserEmailCmdF(s.client, &command, []string{userArg, emailArg}) + err := updateUserEmailCmdF(s.client, &command, []string{userArg, emailArg}) - s.Require().Nil(error) + s.Require().Nil(err) s.Require().Equal(&updatedUser, printer.GetLines()[0]) s.Require().Len(printer.GetErrorLines(), 0) }) diff --git a/server/config/utils_test.go b/server/config/utils_test.go index 435e13b92f..65e979df44 100644 --- a/server/config/utils_test.go +++ b/server/config/utils_test.go @@ -237,17 +237,17 @@ func TestEqual(t *testing.T) { t.Run("no diff", func(t *testing.T) { old := minimalConfig.Clone() - new := minimalConfig.Clone() - diff, err := equal(old, new) + n := minimalConfig.Clone() + diff, err := equal(old, n) require.NoError(t, err) require.False(t, diff) }) t.Run("diff", func(t *testing.T) { old := minimalConfig.Clone() - new := minimalConfig.Clone() - new.SqlSettings = model.SqlSettings{} - diff, err := equal(old, new) + n := minimalConfig.Clone() + n.SqlSettings = model.SqlSettings{} + diff, err := equal(old, n) require.NoError(t, err) require.True(t, diff) }) diff --git a/server/platform/services/httpservice/client.go b/server/platform/services/httpservice/client.go index 5cd08d2b1f..bbfca0da9b 100644 --- a/server/platform/services/httpservice/client.go +++ b/server/platform/services/httpservice/client.go @@ -89,7 +89,7 @@ func init() { type DialContextFunction func(ctx context.Context, network, addr string) (net.Conn, error) -var AddressForbidden error = errors.New("address forbidden, you may need to set AllowedUntrustedInternalConnections to allow an integration access to your internal network") +var AddressForbidden = errors.New("address forbidden, you may need to set AllowedUntrustedInternalConnections to allow an integration access to your internal network") func dialContextFilter(dial DialContextFunction, allowHost func(host string) bool, allowIP func(ip net.IP) bool) DialContextFunction { return func(ctx context.Context, network, addr string) (net.Conn, error) { diff --git a/server/platform/shared/filestore/filesstore_test.go b/server/platform/shared/filestore/filesstore_test.go index ce926342ba..8746420376 100644 --- a/server/platform/shared/filestore/filesstore_test.go +++ b/server/platform/shared/filestore/filesstore_test.go @@ -487,10 +487,7 @@ func (s *FileBackendTestSuite) TestAppendFile() { s.Run("should correctly append the data", func() { // First part needs to be at least 5MB for the S3 implementation to work. size := 5 * 1024 * 1024 - b := make([]byte, size) - for i := range b { - b[i] = 'A' - } + b := bytes.Repeat([]byte{'A'}, size) path := "tests/" + randomString() written, err := s.backend.WriteFile(bytes.NewReader(b), path) diff --git a/server/playbooks/server/sqlstore/playbook.go b/server/playbooks/server/sqlstore/playbook.go index 7bfabae251..805b80550f 100644 --- a/server/playbooks/server/sqlstore/playbook.go +++ b/server/playbooks/server/sqlstore/playbook.go @@ -504,7 +504,7 @@ func (p *playbookStore) GetPlaybooksForTeam(requesterInfo app.RequesterInfo, tea return app.GetPlaybooksResults{}, errors.Wrap(err, "failed to get total count") } - ids := make([]string, len(playbooks)) + ids := make([]string, 0, len(playbooks)) for _, pb := range playbooks { ids = append(ids, pb.ID) } diff --git a/server/public/model/bot.go b/server/public/model/bot.go index dd2b6d65fa..4b1c47932b 100644 --- a/server/public/model/bot.go +++ b/server/public/model/bot.go @@ -197,8 +197,8 @@ func BotFromUser(u *User) *Bot { // Etag computes the etag for a list of bots. func (l *BotList) Etag() string { id := "0" - var t int64 = 0 - var delta int64 = 0 + var t int64 + var delta int64 for _, v := range *l { if v.UpdateAt > t { diff --git a/server/public/model/channel_count.go b/server/public/model/channel_count.go index 17cea756c6..f7c50fdfb3 100644 --- a/server/public/model/channel_count.go +++ b/server/public/model/channel_count.go @@ -31,7 +31,7 @@ func (o *ChannelCounts) Etag() string { md5Counts := fmt.Sprintf("%x", md5.Sum([]byte(str))) - var update int64 = 0 + var update int64 for _, u := range o.UpdateTimes { if u > update { update = u diff --git a/server/public/model/channel_data.go b/server/public/model/channel_data.go index 083a3f4403..9d8b9acaa4 100644 --- a/server/public/model/channel_data.go +++ b/server/public/model/channel_data.go @@ -9,7 +9,7 @@ type ChannelData struct { } func (o *ChannelData) Etag() string { - var mt int64 = 0 + var mt int64 if o.Member != nil { mt = o.Member.LastUpdateAt } diff --git a/server/public/model/channel_list.go b/server/public/model/channel_list.go index 7b86b56028..05bcac8b71 100644 --- a/server/public/model/channel_list.go +++ b/server/public/model/channel_list.go @@ -8,8 +8,8 @@ type ChannelList []*Channel func (o *ChannelList) Etag() string { id := "0" - var t int64 = 0 - var delta int64 = 0 + var t int64 + var delta int64 for _, v := range *o { if v.LastPostAt > t { @@ -32,8 +32,8 @@ type ChannelListWithTeamData []*ChannelWithTeamData func (o *ChannelListWithTeamData) Etag() string { id := "0" - var t int64 = 0 - var delta int64 = 0 + var t int64 + var delta int64 for _, v := range *o { if v.LastPostAt > t { diff --git a/server/public/model/integration_action.go b/server/public/model/integration_action.go index 4f44c71c25..e215bdca2d 100644 --- a/server/public/model/integration_action.go +++ b/server/public/model/integration_action.go @@ -434,7 +434,7 @@ func encryptPostActionCookie(plain string, secret []byte) (string, error) { sealed := aesgcm.Seal(nil, nonce, []byte(plain), nil) - combined := append(nonce, sealed...) + combined := append(nonce, sealed...) //nolint:makezero encoded := make([]byte, base64.StdEncoding.EncodedLen(len(combined))) base64.StdEncoding.Encode(encoded, combined) diff --git a/server/public/model/notify_admin.go b/server/public/model/notify_admin.go index 868385fe83..48eb238c92 100644 --- a/server/public/model/notify_admin.go +++ b/server/public/model/notify_admin.go @@ -26,13 +26,13 @@ const ( PluginFeature = MattermostFeature("mattermost.feature.plugin") ) -var validSKUs map[string]struct{} = map[string]struct{}{ +var validSKUs = map[string]struct{}{ LicenseShortSkuProfessional: {}, LicenseShortSkuEnterprise: {}, } // These are the features a non admin would typically ping an admin about -var paidFeatures map[MattermostFeature]struct{} = map[MattermostFeature]struct{}{ +var paidFeatures = map[MattermostFeature]struct{}{ PaidFeatureGuestAccounts: {}, PaidFeatureCustomUsergroups: {}, PaidFeatureCreateMultipleTeams: {}, diff --git a/server/public/model/post.go b/server/public/model/post.go index 04f84ce38c..afeb54e72d 100644 --- a/server/public/model/post.go +++ b/server/public/model/post.go @@ -203,7 +203,7 @@ type AnalyticsPostCountsOptions struct { } func (o *PostPatch) WithRewrittenImageURLs(f func(string) string) *PostPatch { - copy := *o + copy := *o //nolint:revive if copy.Message != nil { *copy.Message = RewriteImageURLs(*o.Message, f) } @@ -292,13 +292,13 @@ func (o *Post) ShallowCopy(dst *Post) error { // Clone shallowly copies the post and returns the copy. func (o *Post) Clone() *Post { - copy := &Post{} + copy := &Post{} //nolint:revive o.ShallowCopy(copy) return copy } func (o *Post) ToJSON() (string, error) { - copy := o.Clone() + copy := o.Clone() //nolint:revive copy.StripActionIntegrations() b, err := json.Marshal(copy) return string(b), err diff --git a/server/public/model/remote_cluster.go b/server/public/model/remote_cluster.go index 5b976f3317..fce156ddec 100644 --- a/server/public/model/remote_cluster.go +++ b/server/public/model/remote_cluster.go @@ -271,7 +271,7 @@ func (rci *RemoteClusterInvite) Encrypt(password string) ([]byte, error) { // prefix the nonce to the cyphertext so we don't need to keep track of it. sealed := gcm.Seal(nonce, nonce, raw, nil) - return append(salt, sealed...), nil + return append(salt, sealed...), nil //nolint:makezero } func (rci *RemoteClusterInvite) Decrypt(encrypted []byte, password string) error { diff --git a/server/public/model/team.go b/server/public/model/team.go index bd8b7aa898..7643051688 100644 --- a/server/public/model/team.go +++ b/server/public/model/team.go @@ -93,7 +93,7 @@ type TeamsWithCount struct { } func (o *Invites) ToEmailList() []string { - emailList := make([]string, len(o.Invites)) + emailList := make([]string, 0, len(o.Invites)) for _, invite := range o.Invites { emailList = append(emailList, invite["email"]) } diff --git a/server/public/model/version.go b/server/public/model/version.go index 51b6257e7f..34b9aca57e 100644 --- a/server/public/model/version.go +++ b/server/public/model/version.go @@ -113,7 +113,7 @@ var versions = []string{ "0.5.0", } -var CurrentVersion string = versions[0] +var CurrentVersion = versions[0] var BuildNumber string var BuildDate string var BuildHash string diff --git a/server/public/model/websocket_client_test.go b/server/public/model/websocket_client_test.go index 3fc3e8b501..d119b9f7fa 100644 --- a/server/public/model/websocket_client_test.go +++ b/server/public/model/websocket_client_test.go @@ -114,12 +114,12 @@ func TestWebSocketClose(t *testing.T) { waitForResponses := func(doneChan chan struct{}, cli *WebSocketClient) { go func() { - for range cli.EventChannel { + for range cli.EventChannel { //nolint:revive } doneChan <- struct{}{} }() go func() { - for range cli.ResponseChannel { + for range cli.ResponseChannel { //nolint:revive } doneChan <- struct{}{} }() diff --git a/server/public/model/websocket_message_test.go b/server/public/model/websocket_message_test.go index 73cf5dbae3..118ed85de4 100644 --- a/server/public/model/websocket_message_test.go +++ b/server/public/model/websocket_message_test.go @@ -36,39 +36,39 @@ func TestWebSocketEvent(t *testing.T) { func TestWebSocketEventImmutable(t *testing.T) { m := NewWebSocketEvent("some_event", NewId(), NewId(), NewId(), nil, "") - new := m.SetEvent("new_event") - if new == m { + newM := m.SetEvent("new_event") + if newM == m { require.Fail(t, "pointers should not be the same") } - require.NotEqual(t, m.EventType(), new.EventType()) - require.Equal(t, new.EventType(), "new_event") + require.NotEqual(t, m.EventType(), newM.EventType()) + require.Equal(t, newM.EventType(), "new_event") - new = m.SetSequence(45) - if new == m { + newM = m.SetSequence(45) + if newM == m { require.Fail(t, "pointers should not be the same") } - require.NotEqual(t, m.GetSequence(), new.GetSequence()) - require.Equal(t, new.GetSequence(), int64(45)) + require.NotEqual(t, m.GetSequence(), newM.GetSequence()) + require.Equal(t, newM.GetSequence(), int64(45)) broadcast := &WebsocketBroadcast{} - new = m.SetBroadcast(broadcast) - if new == m { + newM = m.SetBroadcast(broadcast) + if newM == m { require.Fail(t, "pointers should not be the same") } - require.NotEqual(t, m.GetBroadcast(), new.GetBroadcast()) - require.Equal(t, new.GetBroadcast(), broadcast) + require.NotEqual(t, m.GetBroadcast(), newM.GetBroadcast()) + require.Equal(t, newM.GetBroadcast(), broadcast) data := map[string]any{ "key": "val", "key2": "val2", } - new = m.SetData(data) - if new == m { + newM = m.SetData(data) + if newM == m { require.Fail(t, "pointers should not be the same") } - require.NotEqual(t, m, new) - require.Equal(t, new.data, data) - require.Equal(t, new.data, new.GetData()) + require.NotEqual(t, m, newM) + require.Equal(t, newM.data, data) + require.Equal(t, newM.data, newM.GetData()) copy := m.Copy() if copy == m { diff --git a/server/public/plugin/client_rpc.go b/server/public/plugin/client_rpc.go index 147ecf4a25..fd666a3a9c 100644 --- a/server/public/plugin/client_rpc.go +++ b/server/public/plugin/client_rpc.go @@ -28,7 +28,7 @@ import ( "github.com/mattermost/mattermost/server/public/shared/mlog" ) -var hookNameToId map[string]int = make(map[string]int) +var hookNameToId = make(map[string]int) type hooksRPCClient struct { client *rpc.Client diff --git a/server/public/shared/i18n/i18n.go b/server/public/shared/i18n/i18n.go index 396ebde05c..67fbb5a003 100644 --- a/server/public/shared/i18n/i18n.go +++ b/server/public/shared/i18n/i18n.go @@ -32,7 +32,7 @@ var T TranslateFunc // TDefault is the translate function using english as fallback language var TDefault TranslateFunc -var locales map[string]string = make(map[string]string) +var locales = make(map[string]string) var defaultServerLocale string var defaultClientLocale string @@ -81,7 +81,7 @@ func initTranslationsWithDir(dir string) error { // GetTranslationFuncForDir loads translations from the filesystem into a new instance of the bundle. // It returns a function to access loaded translations. func GetTranslationFuncForDir(dir string) (TranslationFuncByLocal, error) { - var availableLocals map[string]string = make(map[string]string) + var availableLocals = make(map[string]string) bundle := bundle.New() files, _ := os.ReadDir(dir) for _, f := range files {