ionide / ionide/FSharp.Analyzers.SDK

Have Include/ExcludeFilter warn if an input glob didn't match any analyzers

Open
#203 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
F#
Stars
85
Forks
28
Avg merge
1d 8h
Merged PRs (30d)
20

Description

How would you feel about having IncludeFilter and ExcludeFilter be `Glob list`, instead of `string -> bool`? The FSharp.Analyzers.Cli consumer in this repo does this:

```fsharp
fun (s: string) -> i |> List.map Glob |> List.exists (fun g -> g.IsMatch s)
|> IncludeFilter
```

But what I would *really* like is to be able to report "this particular glob was never matched - are you sure you got it right?". That's because when I first tried using `--exclude-analyzers`, I used the name `GRA-PARTAPP-001` rather than the correct `PartialAppAnalyzer`, and it was sheer coincidence that I happened to be in a repo where that warning was already firing (so I noticed I had failed to suppress it).

(Doing this would require running every glob against every analyzer, but there's presumably not going to be more than 10k analyzers ever, so that isn't going to be too much of a slowdown.)

* The cleanest way to do this would be to defunctionalise `{Include/Exclude}Filter` to hold only a list of globs. That way, the analyzer SDK could tally how many times it matched each glob against an analyzer, and report the result. Disadvantages: breaking change which possibly removes functionality downstream consumers were depending on; another dependency (to obtain `Glob`)
* An alternative way would be for FSharp.Analyzers.Cli to pass a function which mutates some state, and then check the state at the end. I find that aesthetically displeasing, but it would confine the changes to the CLI rather than requiring a change in the library.

Which of those two would you prefer, if either? (I'm happy to implement either.)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.