Skip to content

mulint only detects function calls that are used as statements, not in expressions #6

@simonrad

Description

@simonrad

Hi, thank you for writing this linter, as I could not find anything similar anywhere else!

I notice that mulint seems to only traverse function calls that are written as simple statements where the return value is not used. So if a function call is used in an expression then mulint will ignore it.

For example, mulint can detect this deadlock:

type someStruct struct {
  m sync.RWMutex
}

func (s *someStruct) A() {
  s.m.RLock()
  s.B()
  s.m.RUnlock()
}

func (s *someStruct) B() bool {
  s.m.RLock() // This is a recursive lock and it should be detected by this tool
  s.m.RUnlock()
  return true
}

...but not this one:

type someStruct struct {
  m sync.RWMutex
}

func (s *someStruct) A() {
  s.m.RLock()
  v := s.B()           // ***** This is the only difference. *****
  fmt.Println(v)
  s.m.RUnlock()
}

func (s *someStruct) B() bool {
  s.m.RLock() // This is a recursive lock and it should be detected by this tool
  s.m.RUnlock()
  return true
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions