On Thu, Jan 13, 2022 at 8:07 AM Xavier Morel via code-quality <code-quality@python.org> wrote:
On 1/13/22 2:20 PM, Ian Stapleton Cordasco wrote:
> No this means that what you specify on the CLI will override whatever is
> in the configuration file. You can specify `--extend-select` on the CLI
> as well. Think of it like this:
>
> There's a default list of ignores and select so you have some code that
> looks vaguely like:
>
> select = ["E", "F", "W", "C"]
> ignore = [...]
>
> Then when you specify extend-select we do
>
> select.append(extend_select)
>
> Whereas if you use select in your config file we're doing
>
> select = user_specified_select  # cli or config
>
> So if you have extend-select in your config, and then specify --select
> on the CLI, we'll still follow that algorithm.

Right, so it is what I thought, sorry if it was not clear.

Though related to that, does flake8 only apply the defaults, one config
file, and the CLI, or can multiple config files get merged? And does
only the "last" extend-select (or others) get applied, or do all of them
from all sources get combined?

So for Flake8 4.0+ the order of precedence is:

CLI - highest precedence
Config files - flattened into one set of options
Defaults


>     - is `--select ''` the proper way to deselect everything?
> As in you only want to report the things you've selected? Yes.

Mostly as in "I want to ensure only the things which are extend-selected
by the configuration file apply"

So if you only want to see a subset of errors, --select is correct. That will not play well with what you seem to be trying to achieve though which is some mishmash of users using their own styles and having a project style simultaneously that aren't quite the same.
 

>     - is there a way to make exclusions error-specific, or is an other
>         workaround necessary to add large sections of the project to
>         exclusions for the CI, but not prevent linting for people?
 >
> I don't know what you mean. I'm going to take a guess though,
>
> You want to ignore errors from specific files? There's per-file-ignores
> you can specify in your config (or on the CLI) to do just that. That
> will affect everyone though if you put it in the config, so changing how
> you run flake8 for CI would mean needing to specify that.

It's a bit more complicated than that, basically we're trying to ramp up
the strictness, but some of the checks are only "fixed" on a subset of
the project. So I wanted to know if there's a way to say e.g.
"check E on the entire repository but check W only on "core/", aside
from having multiple configurations and running flake8 multiple times
with different configurations (or, alternatively, post-processing the
output).


No, there isn't. There is a way of selectively ignoring things, but not selectively selecting things. People most often want to ignore things rather than only select errors in a code-base and so there's no point in implementing every way of doing something given the massive complexity already present.
 
> Also, it's worth thinking about the fact that you can tell Flake8 which
> config file to read, so you _could_ tell it to read a different file for CI

Yeah, but the goal was to ensure the CI's stuff would apply both locally
and on CI, but the local configuration would still apply (e.g. if a user
wants to have more restrictions for their personal coding).

If a user wants Flake8 to do something differently, they should be specifying it via `--config` not having you try and juggle a project style that's different from their own personal style. You're seeking a technical solution to unreasonable requests being made by people of your project. Set boundaries. Put your foot down. One style, that's progressively improving.

Better yet, use an auto-formatter and get to that end state faster.