ruff
cffc5557 - `ruff server`: Resolve configuration for each document individually (#10950)

Commit
1 year ago
`ruff server`: Resolve configuration for each document individually (#10950) ## Summary Configuration is no longer the property of a workspace but rather of individual documents. Just like the Ruff CLI, each document is configured based on the 'nearest' project configuration. See [the Ruff documentation](https://docs.astral.sh/ruff/configuration/#config-file-discovery) for more details. To reduce the amount of times we resolve configuration for a file, we have an index for each workspace that stores a reference-counted pointer to a configuration for a given folder. If another file in the same folder is opened, the configuration is simply re-used rather than us re-resolving it. ## Guide for reviewing The first commit is just the restructuring work, which adds some noise to the diff. If you want to quickly understand what's actually changed, I recommend looking at the two commits that come after it. f7c073d4412242dfe09fd620371432735ffa0c18 makes configuration a property of `DocumentController`/`DocumentRef`, moving it out of `Workspace`, and it also sets up the `ConfigurationIndex`, though it doesn't implement its key function, `get_or_insert`. In the commit after it, fc35618f17f761de170125f089ce7fc054df356b, we implement `get_or_insert`. ## Test Plan The best way to test this would be to ensure that the behavior matches the Ruff CLI. Open a project with multiple configuration files (or add them yourself), and then introduce problems in certain files that won't show due to their configuration. Add those same problems to a section of the project where those rules are run. Confirm that the lint rules are run as expected with `ruff check`. Then, open your editor and confirm that the diagnostics shown match the CLI output. As an example - I have a workspace with two separate folders, `pandas` and `scipy`. I created a `pyproject.toml` file in `pandas/pandas/io` and a `ruff.toml` file in `pandas/pandas/api`. I changed the `select` and `preview` settings in the sub-folder configuration files and confirmed that these were reflected in the diagnostics. I also confirmed that this did not change the diagnostics for the `scipy` folder whatsoever.
Author
Parents
Loading