mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-07 09:00:31 +00:00
Add support for configuring knot in pyproject.toml
files (#15493)
## Summary This PR adds support for configuring Red Knot in the `tool.knot` section of the project's `pyproject.toml` section. Options specified on the CLI precede the options in the configuration file. This PR only supports the `environment` and the `src.root` options for now. Other options will be added as separate PRs. There are also a few concerns that I intentionally ignored as part of this PR: * Handling of relative paths: We need to anchor paths relative to the current working directory (CLI), or the project (`pyproject.toml` or `knot.toml`) * Tracking the source of a value. Diagnostics would benefit from knowing from which configuration a value comes so that we can point the user to the right configuration file (or CLI) if the configuration is invalid. * Schema generation and there's a lot more; see https://github.com/astral-sh/ruff/issues/15491 This PR changes the default for first party codes: Our existing default was to only add the project root. Now, Red Knot adds the project root and `src` (if such a directory exists). Theoretically, we'd have to add a file watcher event that changes the first-party search paths if a user later creates a `src` directory. I think this is pretty uncommon, which is why I ignored the complexity for now but I can be persuaded to handle it if it's considered important. Part of https://github.com/astral-sh/ruff/issues/15491 ## Test Plan Existing tests, new file watching test demonstrating that changing the python version and platform is correctly reflected.
This commit is contained in:
parent
9ed67ba33e
commit
eb47a6634d
36 changed files with 820 additions and 413 deletions
|
@ -4,7 +4,7 @@ use js_sys::Error;
|
|||
use wasm_bindgen::prelude::*;
|
||||
|
||||
use red_knot_workspace::db::{Db, ProjectDatabase};
|
||||
use red_knot_workspace::project::settings::Configuration;
|
||||
use red_knot_workspace::project::options::{EnvironmentOptions, Options};
|
||||
use red_knot_workspace::project::ProjectMetadata;
|
||||
use ruff_db::diagnostic::Diagnostic;
|
||||
use ruff_db::files::{system_path_to_file, File};
|
||||
|
@ -42,15 +42,17 @@ impl Workspace {
|
|||
#[wasm_bindgen(constructor)]
|
||||
pub fn new(root: &str, settings: &Settings) -> Result<Workspace, Error> {
|
||||
let system = WasmSystem::new(SystemPath::new(root));
|
||||
let workspace = ProjectMetadata::discover(
|
||||
SystemPath::new(root),
|
||||
&system,
|
||||
Some(&Configuration {
|
||||
|
||||
let mut workspace =
|
||||
ProjectMetadata::discover(SystemPath::new(root), &system).map_err(into_error)?;
|
||||
|
||||
workspace.apply_cli_options(Options {
|
||||
environment: Some(EnvironmentOptions {
|
||||
python_version: Some(settings.python_version.into()),
|
||||
..Configuration::default()
|
||||
..EnvironmentOptions::default()
|
||||
}),
|
||||
)
|
||||
.map_err(into_error)?;
|
||||
..Options::default()
|
||||
});
|
||||
|
||||
let db = ProjectDatabase::new(workspace, system.clone()).map_err(into_error)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue