forbidigo icon indicating copy to clipboard operation
forbidigo copied to clipboard

Support a simple way to define exceptions for broad rules

Open na-- opened this issue 2 years ago • 3 comments

There doesn't seem to be an easy way to specify a broad rule, but add a few exceptions to it. Specifically, I'd like to do the following:

  1. Disable everything from the os package everywhere across k6
  2. Add //nolint:forbidigo in the single place where we assemble our global state from the OS
  3. Add exceptions for certain os types like os.Signal, which are safe to use and are valid return types even when we'd be mocking this global state in our tests.

Since Go doesn't support negative lookaheads in regular expressions, I am not sure there is an easy way to currently do this?

One way to solve this would be to be able to add a list (or even another regex) for every rule, for defining exceptions to the rule.

Another way would be to specify that only matching a specific group in the regexp constitutes a linter error. Then we'd be able to use "The Greatest Regex Trick Ever" to define rule exceptions :sweat_smile:

na-- avatar Feb 01 '23 08:02 na--

@na-- thanks for sharing this use case. Would it be possible to accomplish this by adding exceptions to exclude-rules in golangci-lint?

ashanbrown avatar Feb 05 '23 15:02 ashanbrown

Yeah, that should also work :thinking: From what I can see, the regular expressions there would have to be based on the whole error message and not just the Go identifiers, so it's a bit hacky and potentially fragile, but probably much less hacky than any other currently existing workarounds :sweat_smile:

na-- avatar Feb 07 '23 11:02 na--

Possibly related is that over at https://github.com/ashanbrown/forbidigo/pull/22#issuecomment-1418268823, I had proposed using tags embedded in comments as a way of targeting sets of rules in the exclude-rules.

atom-andrew avatar Feb 07 '23 14:02 atom-andrew