1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

Use errcheck to find unhandled errors (#795)

Signed-off-by: Chris Cummer <chriscummer@me.com>
This commit is contained in:
Chris Cummer 2019-12-17 08:26:16 -08:00 committed by GitHub
parent 04ff03ab1c
commit cde904ff08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 250 additions and 97 deletions

View File

@ -68,16 +68,41 @@ install:
## lint: runs a number of code quality checks against the source code
lint:
# https://github.com/kisielk/errcheck
errcheck ./app
errcheck ./cfg
errcheck ./flags
errcheck ./help
errcheck ./logger
errcheck ./modules/...
errcheck ./utils
errcheck ./view
errcheck ./wtf
errcheck ./main.go
# https://golang.org/cmd/vet/
go vet ./app
go vet ./cfg
go vet ./flags
go vet ./help
go vet ./logger
go vet ./modules/...
go vet ./utils
go vet ./view
go vet ./wtf
go vet ./main.go
# https://staticcheck.io/docs/
staticcheck ./app
staticcheck ./cfg
staticcheck ./flags
staticcheck ./help
staticcheck ./logger
staticcheck ./modules/...
staticcheck ./utils
staticcheck ./view
staticcheck ./wtf
staticcheck ./main.go
## run: executes the locally-installed version
run: build

View File

@ -34,7 +34,7 @@ func fcopy(src, dest string, info os.FileInfo) error {
if err != nil {
return err
}
defer f.Close()
defer func() { _ = f.Close() }()
if err = os.Chmod(f.Name(), info.Mode()); err != nil {
return err
@ -44,7 +44,7 @@ func fcopy(src, dest string, info os.FileInfo) error {
if err != nil {
return err
}
defer s.Close()
defer func() { _ = f.Close() }()
_, err = io.Copy(f, s)
return err

View File

@ -35,14 +35,14 @@ func (flags *Flags) ConfigFilePath() string {
// RenderIf displays special-case information based on the flags passed
// in, if any flags were passed in
func (flags *Flags) RenderIf(version string, config *config.Config) {
func (flags *Flags) RenderIf(version, date string, config *config.Config) {
if flags.HasModule() {
help.Display(flags.Module, config)
os.Exit(0)
}
if flags.HasVersion() {
fmt.Println(version)
fmt.Println(fmt.Sprintf("%s (%s)", version, date))
os.Exit(0)
}
}
@ -59,7 +59,7 @@ func (flags *Flags) HasModule() bool {
// HasVersion returns TRUE if the version flag was passed in, FALSE if it was not
func (flags *Flags) HasVersion() bool {
return flags.Version == true
return flags.Version
}
// Parse parses the incoming flags
@ -74,7 +74,7 @@ func (flags *Flags) Parse() {
// If we have a custom config, then we're done parsing parameters, we don't need to
// generate the default value
flags.hasCustom = (len(flags.Config) > 0)
if flags.hasCustom == true {
if flags.hasCustom {
return
}

2
go.mod
View File

@ -50,7 +50,7 @@ require (
github.com/xanzy/go-gitlab v0.22.2
github.com/zmb3/spotify v0.0.0-20191010212056-e12fb981aacb
github.com/zorkian/go-datadog-api v2.25.0+incompatible
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
google.golang.org/api v0.14.0
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20181110093347-3be5f16b70eb // indirect

5
go.sum
View File

@ -160,6 +160,7 @@ github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBv
github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@ -263,8 +264,8 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=

View File

@ -18,7 +18,11 @@ func Display(moduleName string, cfg *config.Config) {
}
func helpFor(moduleName string, cfg *config.Config) string {
cfg.Set("wtf.mods."+moduleName+".enabled", true)
err := cfg.Set("wtf.mods."+moduleName+".enabled", true)
if err != nil {
return ""
}
widget := app.MakeWidget(nil, nil, moduleName, cfg)
// Since we are forcing enabled config, if no module

View File

@ -17,7 +17,7 @@ func Log(msg string) {
if err != nil {
log.Fatalf("error opening file: %v", err)
}
defer f.Close()
defer func() { _ = f.Close() }()
log.SetOutput(f)
log.Println(msg)

View File

@ -24,7 +24,6 @@ import (
var tviewApp *tview.Application
var (
commit = "dev"
date = "dev"
version = "dev"
)
@ -54,7 +53,7 @@ func main() {
// Load the configuration file
config := cfg.LoadWtfConfigFile(flags.ConfigFilePath())
flags.RenderIf(version, config)
flags.RenderIf(version, date, config)
if flags.Profile {
defer profile.Start(profile.MemProfile).Stop()

View File

@ -18,7 +18,7 @@ func Request(apiKey string, apiURL string) ([]byte, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
data, err := ParseBody(resp)
if err != nil {

View File

@ -79,7 +79,7 @@ func (widget *Widget) Write(p []byte) (n int, err error) {
// Remove lines that exceed maxLines
lines := widget.countLines()
if lines > widget.settings.maxLines {
widget.drainLines(lines - widget.settings.maxLines)
err = widget.drainLines(lines - widget.settings.maxLines)
}
return n, err
@ -93,10 +93,15 @@ func (widget *Widget) countLines() int {
}
// drainLines removed the first n lines from the buffer
func (widget *Widget) drainLines(n int) {
func (widget *Widget) drainLines(n int) error {
for i := 0; i < n; i++ {
widget.buffer.ReadBytes('\n')
_, err := widget.buffer.ReadBytes('\n')
if err != nil {
return err
}
}
return nil
}
func (widget *Widget) environment() []string {

View File

@ -44,7 +44,7 @@ func (widget *Widget) content() (string, string, bool) {
formatableText("Open Sell", "OpenSellOrders"),
)
strTemplate.Execute(writer, map[string]string{
err := strTemplate.Execute(writer, map[string]string{
"nameColor": widget.settings.colors.market.name,
"fieldColor": widget.settings.colors.market.field,
"valueColor": widget.settings.colors.market.value,
@ -57,8 +57,12 @@ func (widget *Widget) content() (string, string, bool) {
"OpenSellOrders": marketCurrency.OpenSellOrders,
})
if err != nil {
str = err.Error()
} else {
str += writer.String() + "\n"
}
}
}

View File

@ -90,7 +90,9 @@ func (widget *Widget) Refresh() {
func (widget *Widget) updateSummary() {
// In case if anything bad happened!
defer func() {
recover()
if r := recover(); r != nil {
fmt.Println("recovered in updateSummary()", r)
}
}()
client := &http.Client{
@ -120,10 +122,14 @@ func (widget *Widget) updateSummary() {
errorText = ""
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
jsonResponse := summaryResponse{}
decoder := json.NewDecoder(response.Body)
decoder.Decode(&jsonResponse)
err = decoder.Decode(&jsonResponse)
if err != nil {
errorText = "Could not parse JSON!"
break
}
if !jsonResponse.Success {
ok = false

View File

@ -115,7 +115,7 @@ func MakeApiRequest(token string, method string) ([]byte, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err

View File

@ -99,7 +99,9 @@ func (widget *Widget) getToList(symbol string) []*toCurrency {
func (widget *Widget) updateCurrencies() {
defer func() {
recover()
if r := recover(); r != nil {
fmt.Println("recovered in updateSummary()", r)
}
}()
for _, fromCurrency := range widget.list.items {
@ -121,7 +123,7 @@ func (widget *Widget) updateCurrencies() {
ok = true
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
_ = json.NewDecoder(response.Body).Decode(&jsonResponse)

View File

@ -68,7 +68,9 @@ func (widget *Widget) Refresh(wg *sync.WaitGroup) {
func (widget *Widget) updateData() {
defer func() {
recover()
if r := recover(); r != nil {
fmt.Println("recovered in updateSummary()", r)
}
}()
client := &http.Client{

View File

@ -177,7 +177,10 @@ func (widget *Widget) dropletDestroy() {
return
}
widget.client.Droplets.Delete(context.Background(), currDroplet.ID)
_, err := widget.client.Droplets.Delete(context.Background(), currDroplet.ID)
if err != nil {
return
}
widget.dropletRemoveSelected()
widget.Refresh()
@ -190,7 +193,11 @@ func (widget *Widget) dropletEnabledPrivateNetworking() {
return
}
widget.client.DropletActions.EnablePrivateNetworking(context.Background(), currDroplet.ID)
_, _, err := widget.client.DropletActions.EnablePrivateNetworking(context.Background(), currDroplet.ID)
if err != nil {
return
}
widget.Refresh()
}
@ -210,7 +217,10 @@ func (widget *Widget) dropletRestart() {
return
}
widget.client.DropletActions.Reboot(context.Background(), currDroplet.ID)
_, _, err := widget.client.DropletActions.Reboot(context.Background(), currDroplet.ID)
if err != nil {
return
}
widget.Refresh()
}
@ -221,7 +231,10 @@ func (widget *Widget) dropletShutDown() {
return
}
widget.client.DropletActions.Shutdown(context.Background(), currDroplet.ID)
_, _, err := widget.client.DropletActions.Shutdown(context.Background(), currDroplet.ID)
if err != nil {
return
}
widget.Refresh()
}

View File

@ -16,14 +16,14 @@ func FetchExchangeRates(settings *Settings) (map[string]map[string]float64, erro
out := map[string]map[string]float64{}
for base, rates := range settings.rates {
res, err := http.Get(fmt.Sprintf("https://api.exchangeratesapi.io/latest?base=%s", base))
resp, err := http.Get(fmt.Sprintf("https://api.exchangeratesapi.io/latest?base=%s", base))
if err != nil {
return nil, err
}
defer res.Body.Close()
defer func() { _ = resp.Body.Close() }()
var resp Response
err = utils.ParseJSON(&resp, res.Body)
var data Response
err = utils.ParseJSON(&data, resp.Body)
if err != nil {
return nil, err
}
@ -31,7 +31,7 @@ func FetchExchangeRates(settings *Settings) (map[string]map[string]float64, erro
out[base] = map[string]float64{}
for _, currency := range rates {
rate, ok := resp.Rates[currency]
rate, ok := data.Rates[currency]
if ok {
out[base][currency] = rate
}

View File

@ -95,7 +95,7 @@ func (widget *Widget) GetStandings(leagueId int) string {
if err != nil {
return fmt.Sprintf("Error fetching standings: %s", err.Error())
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Sprintf("Error fetching standings: %s", err.Error())
@ -141,7 +141,7 @@ func (widget *Widget) GetMatches(leagueId int) string {
if err != nil {
return fmt.Sprintf("Error fetching matches: %s", err.Error())
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Sprintf("Error fetching matches: %s", err.Error())

View File

@ -172,7 +172,8 @@ func tokenFromFile(file string) (*oauth2.Token, error) {
}
t := &oauth2.Token{}
err = json.NewDecoder(f).Decode(t)
defer f.Close()
defer func() { _ = f.Close() }()
return t, err
}
@ -182,11 +183,14 @@ func saveToken(file string, token *oauth2.Token) {
fmt.Printf("Saving credential file to: %s\n", file)
f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Unable to cache oauth token: %v", err)
log.Fatalf("unable to cache oauth token: %v", err)
}
defer f.Close()
defer func() { _ = f.Close() }()
json.NewEncoder(f).Encode(token)
err = json.NewEncoder(f).Encode(token)
if err != nil {
log.Fatalf("unable to encode oauth token: %v", err)
}
}
func (widget *Widget) getCalendarIdList(srv *calendar.Service) ([]string, error) {

View File

@ -14,7 +14,10 @@ func newContext(settings *Settings) (*context, error) {
gitlabClient := glb.NewClient(nil, settings.apiKey)
if baseURL != "" {
gitlabClient.SetBaseURL(baseURL)
err := gitlabClient.SetBaseURL(baseURL)
if err != nil {
return nil, err
}
}
user, _, err := gitlabClient.Users.CurrentUser()

View File

@ -112,10 +112,14 @@ func tokenCacheFile() (string, error) {
if err != nil {
return "", err
}
tokenCacheDir := filepath.Join(usr.HomeDir, ".credentials")
os.MkdirAll(tokenCacheDir, 0700)
return filepath.Join(tokenCacheDir,
url.QueryEscape("spreadsheets-go-quickstart.json")), err
err = os.MkdirAll(tokenCacheDir, 0700)
if err != nil {
return "", err
}
return filepath.Join(tokenCacheDir, url.QueryEscape("spreadsheets-go-quickstart.json")), err
}
// tokenFromFile retrieves a Token from a given file path.
@ -127,7 +131,7 @@ func tokenFromFile(file string) (*oauth2.Token, error) {
}
t := &oauth2.Token{}
err = json.NewDecoder(f).Decode(t)
defer f.Close()
defer func() { _ = f.Close() }()
return t, err
}
@ -139,7 +143,10 @@ func saveToken(file string, token *oauth2.Token) {
if err != nil {
log.Fatalf("Unable to cache oauth token: %v", err)
}
defer f.Close()
defer func() { _ = f.Close() }()
json.NewEncoder(f).Encode(token)
err = json.NewEncoder(f).Encode(token)
if err != nil {
log.Fatalf("Unable to encode oauth token: %v", err)
}
}

View File

@ -131,7 +131,10 @@ func (widget *Widget) validateHTTPResponse(responseCode int, body []byte) *hibpE
switch responseCode {
case 401, 402:
json.Unmarshal(body, hibpErr)
err := json.Unmarshal(body, hibpErr)
if err != nil {
return nil
}
default:
hibpErr = nil
}

View File

@ -69,7 +69,7 @@ func (widget *Widget) ipinfo() {
widget.result = err.Error()
return
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
var info ipinfo
err = json.NewDecoder(response.Body).Decode(&info)
if err != nil {
@ -96,7 +96,7 @@ func (widget *Widget) setResult(info *ipinfo) {
resultBuffer := new(bytes.Buffer)
resultTemplate.Execute(resultBuffer, map[string]string{
err := resultTemplate.Execute(resultBuffer, map[string]string{
"nameColor": widget.settings.colors.name,
"valueColor": widget.settings.colors.value,
"Ip": info.Query,
@ -111,6 +111,10 @@ func (widget *Widget) setResult(info *ipinfo) {
"Timezone": info.Timezone,
})
if err != nil {
widget.result = err.Error()
}
widget.result = resultBuffer.String()
}

View File

@ -61,7 +61,7 @@ func (widget *Widget) ipinfo() {
widget.result = err.Error()
return
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
var info ipinfo
err = json.NewDecoder(response.Body).Decode(&info)
@ -86,7 +86,7 @@ func (widget *Widget) setResult(info *ipinfo) {
resultBuffer := new(bytes.Buffer)
resultTemplate.Execute(resultBuffer, map[string]string{
err := resultTemplate.Execute(resultBuffer, map[string]string{
"subheadingColor": widget.settings.common.Colors.Subheading,
"valueColor": widget.settings.common.Colors.Text,
"Ip": info.Ip,
@ -99,6 +99,10 @@ func (widget *Widget) setResult(info *ipinfo) {
"Organization": info.Organization,
})
if err != nil {
widget.result = err.Error()
}
widget.result = resultBuffer.String()
}

View File

@ -70,7 +70,7 @@ func (widget *Widget) tailFile() []string {
if err != nil {
return []string{}
}
defer file.Close()
defer func() { _ = file.Close() }()
stat, err := file.Stat()
if err != nil {

View File

@ -67,7 +67,7 @@ func (widget *Widget) nbascore() (string, string, bool) {
if err != nil {
return title, err.Error(), true
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
if response.StatusCode != 200 {
return title, err.Error(), true
} // Get data from data.nba.net and check if successful
@ -77,7 +77,10 @@ func (widget *Widget) nbascore() (string, string, bool) {
return title, err.Error(), true
}
result := map[string]interface{}{}
json.Unmarshal(contents, &result)
err = json.Unmarshal(contents, &result)
if err != nil {
return title, err.Error(), true
}
allGame := fmt.Sprintf(" [%s]", widget.settings.common.Colors.Subheading) + (cur.Format(utils.FriendlyDateFormat) + "\n\n") + "[white]"

View File

@ -31,7 +31,7 @@ func (c *Client) doRequest(req *http.Request, out interface{}) error {
if err != nil {
return err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err

View File

@ -65,7 +65,7 @@ func opsGenieRequest(url string, apiKey string) (*OnCallResponse, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
response := &OnCallResponse{}
if err := json.NewDecoder(resp.Body).Decode(response); err != nil {

View File

@ -87,7 +87,7 @@ func (client *Client) request(req request, result interface{}) error {
if err != nil {
return err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
responseBody, err := ioutil.ReadAll(resp.Body)

View File

@ -18,7 +18,10 @@ func CurrentActiveItems(accessToken, assignedToName string, activeOnly bool) (*A
return items, err
}
utils.ParseJSON(&items, resp.Body)
err = utils.ParseJSON(&items, resp.Body)
if err != nil {
return items, err
}
return items, nil
}

View File

@ -19,30 +19,47 @@ func (widget *Widget) initializeKeyboardControls() {
}
func (widget *Widget) selectPrevious() {
widget.client.Previous()
err := widget.client.Previous()
if err != nil {
return
}
time.Sleep(time.Millisecond * 500)
widget.Refresh()
}
func (widget *Widget) selectNext() {
widget.client.Next()
err := widget.client.Next()
if err != nil {
return
}
time.Sleep(time.Millisecond * 500)
widget.Refresh()
}
func (widget *Widget) playPause() {
var err error
if widget.playerState.CurrentlyPlaying.Playing {
widget.client.Pause()
err = widget.client.Pause()
} else {
widget.client.Play()
err = widget.client.Play()
}
if err != nil {
return
}
time.Sleep(time.Millisecond * 500)
widget.Refresh()
}
func (widget *Widget) toggleShuffle() {
widget.playerState.ShuffleState = !widget.playerState.ShuffleState
widget.client.Shuffle(widget.playerState.ShuffleState)
err := widget.client.Shuffle(widget.playerState.ShuffleState)
if err != nil {
return
}
time.Sleep(time.Millisecond * 500)
widget.Refresh()
}

View File

@ -53,7 +53,10 @@ func authHandler(w http.ResponseWriter, r *http.Request) {
}
// use the token to get an authenticated client
client := auth.NewClient(tok)
fmt.Fprintf(w, "Login Completed!")
_, err = fmt.Fprintf(w, "Login Completed!")
if err != nil {
return
}
tempClientChan <- &client
}
@ -81,7 +84,12 @@ func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *
}
http.HandleFunc("/callback", authHandler)
go http.ListenAndServe(":"+callbackPort, nil)
go func() {
err := http.ListenAndServe(":"+callbackPort, nil)
if err != nil {
return
}
}()
go func() {
// wait for auth to complete

View File

@ -95,7 +95,7 @@ func (widget *Widget) formattedText() string {
if err != nil {
return err.Error()
}
defer file.Close()
defer func() { _ = file.Close() }()
lexer := lexers.Match(filePath)
if lexer == nil {
@ -115,7 +115,10 @@ func (widget *Widget) formattedText() string {
iterator, _ := lexer.Tokenise(nil, string(contents))
var buf bytes.Buffer
formatter.Format(&buf, style, iterator)
err = formatter.Format(&buf, style, iterator)
if err != nil {
return err.Error()
}
return tview.TranslateANSI(buf.String())
}
@ -152,7 +155,11 @@ func (widget *Widget) watchForFileChanges() {
for _, source := range widget.Sources {
fullPath, err := utils.ExpandHomeDir(source)
if err == nil {
watch.Add(fullPath)
e := watch.Add(fullPath)
if e != nil {
fmt.Println(e)
os.Exit(1)
}
}
}

View File

@ -91,11 +91,11 @@ func (widget *Widget) SetList(list checklist.Checklist) {
func (widget *Widget) init() {
_, err := cfg.CreateFile(widget.filePath)
if err != nil {
panic(err)
return
}
}
// isItemSelected returns weather any item of the todo is selected or not
// isItemSelected returns whether any item of the todo is selected or not
func (widget *Widget) isItemSelected() bool {
return widget.Selected >= 0 && widget.Selected < len(widget.list.Items)
}
@ -107,7 +107,10 @@ func (widget *Widget) load() {
fileData, _ := utils.ReadFileBytes(filePath)
yaml.Unmarshal(fileData, &widget.list)
err := yaml.Unmarshal(fileData, &widget.list)
if err != nil {
return
}
widget.ScrollableWidget.SetItemCount(len(widget.list.Items))
widget.setItemChecks()

View File

@ -158,7 +158,10 @@ func (widget *Widget) deleteSelectedTorrent() {
DeleteLocalData: false,
}
widget.client.TorrentRemove(removePayload)
err := widget.client.TorrentRemove(removePayload)
if err != nil {
return
}
widget.display()
}
@ -176,10 +179,15 @@ func (widget *Widget) pauseUnpauseTorrent() {
ids := []int64{*currTorrent.ID}
var err error
if *currTorrent.Status == transmissionrpc.TorrentStatusStopped {
widget.client.TorrentStartIDs(ids)
err = widget.client.TorrentStartIDs(ids)
} else {
widget.client.TorrentStopIDs(ids)
err = widget.client.TorrentStopIDs(ids)
}
if err != nil {
return
}
widget.display()

View File

@ -10,7 +10,7 @@ func Request(httpClient *http.Client, apiURL string) ([]byte, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
data, err := ParseBody(resp)
if err != nil {

View File

@ -73,19 +73,22 @@ func (client *Client) GetStatsForUser(username string) TwitterStats {
}
url := fmt.Sprintf("%s?screen_name=%s", userTimelineURL, username)
res, err := client.httpClient.Get(url)
resp, err := client.httpClient.Get(url)
if err != nil {
return stats
}
defer res.Body.Close()
defer func() { _ = resp.Body.Close() }()
body, err := ioutil.ReadAll(res.Body)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return stats
}
// If there is an error while parsing, just discard the error and return the empty stats
json.Unmarshal(body, &stats)
err = json.Unmarshal(body, &stats)
if err != nil {
return stats
}
return stats
}

View File

@ -38,7 +38,7 @@ func victorOpsRequest(url string, apiID string, apiKey string) ([]OnCallTeam, er
if resp.StatusCode != 200 {
return nil, fmt.Errorf("%s", resp.Status)
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
response := &OnCallResponse{}
if err := json.NewDecoder(resp.Body).Decode(response); err != nil {

View File

@ -55,7 +55,7 @@ func (widget *Widget) prettyWeather() {
return
}
defer response.Body.Close()
defer func() { _ = response.Body.Close() }()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {

View File

@ -36,8 +36,7 @@ func (widget *Widget) api(meth string, path string, params string) (*Resource, e
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {

View File

@ -55,12 +55,16 @@ func (widget *Widget) listTickets(pag ...string) (*TicketArray, error) {
} else {
path = pag[0]
}
resource, err := widget.api("GET", path, "")
if err != nil {
return nil, err
}
json.Unmarshal([]byte(resource.Raw), TicketStruct)
err = json.Unmarshal([]byte(resource.Raw), TicketStruct)
if err != nil {
return nil, err
}
return TicketStruct, err

View File

@ -92,26 +92,37 @@ func OpenFile(path string) {
if (strings.HasPrefix(path, "http://")) || (strings.HasPrefix(path, "https://")) {
if len(OpenUrlUtil) > 0 {
commands := append(OpenUrlUtil, path)
exec.Command(commands[0], commands[1:]...).Start()
cmd := exec.Command(commands[0], commands[1:]...)
err := cmd.Start()
if err != nil {
return
}
return
}
var cmd *exec.Cmd
switch runtime.GOOS {
case "linux":
exec.Command("xdg-open", path).Start()
cmd = exec.Command("xdg-open", path)
case "windows":
exec.Command("rundll32", "url.dll,FileProtocolHandler", path).Start()
cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", path)
case "darwin":
exec.Command("open", path).Start()
cmd = exec.Command("open", path)
default:
// for the BSDs
exec.Command("xdg-open", path).Start()
cmd = exec.Command("xdg-open", path)
}
} else {
err := cmd.Start()
if err != nil {
return
}
return
}
filePath, _ := ExpandHomeDir(path)
cmd := exec.Command(OpenFileUtil, filePath)
ExecuteCommand(cmd)
}
}
// ReadFileBytes reads the contents of a file and returns those contents as a slice of bytes

View File

@ -527,7 +527,7 @@ func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Res
return nil, err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
response := newResponse(resp)

View File

@ -21,7 +21,8 @@ type PageResult struct {
func PageResultFrom(resp *http.Response) (PageResult, error) {
var parsedBody interface{}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()
rawBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return PageResult{}, err