Separate red_knot into CLI and red_knot_workspace crates (#12623)

## Summary

This PR separates the current `red_knot` crate into two crates:
1. `red_knot` - This will be similar to the `ruff` crate, it'll act as
the CLI crate
2. `red_knot_workspace` - This includes everything except for the CLI
functionality from the existing `red_knot` crate

Note that the code related to the file watcher is in
`red_knot_workspace` for now but might be required to extract it out in
the future.

The main motivation for this change is so that we can have a `red_knot
server` command. This makes it easier to test the server out without
making any changes in the VS Code extension. All we need is to specify
the `red_knot` executable path in `ruff.path` extension setting.

## Test Plan

- `cargo build`
- `cargo clippy --workspace --all-targets --all-features`
- `cargo shear --fix`
This commit is contained in:
Dhruv Manilawala 2024-08-02 16:54:36 +05:30 committed by GitHub
parent 966563c79b
commit 9aa43d5f91
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
290 changed files with 66 additions and 25 deletions

View file

@ -10,7 +10,7 @@ exclude: |
crates/ruff_python_formatter/tests/snapshots/.*| crates/ruff_python_formatter/tests/snapshots/.*|
crates/ruff_python_resolver/resources/.*| crates/ruff_python_resolver/resources/.*|
crates/ruff_python_resolver/tests/snapshots/.*| crates/ruff_python_resolver/tests/snapshots/.*|
crates/red_knot/resources/.* crates/red_knot_workspace/resources/.*
)$ )$
repos: repos:

23
Cargo.lock generated
View file

@ -1945,13 +1945,10 @@ dependencies = [
"crossbeam", "crossbeam",
"ctrlc", "ctrlc",
"filetime", "filetime",
"notify",
"rayon", "rayon",
"red_knot_module_resolver", "red_knot_module_resolver",
"red_knot_python_semantic", "red_knot_workspace",
"ruff_db", "ruff_db",
"ruff_python_ast",
"rustc-hash 2.0.0",
"salsa", "salsa",
"tempfile", "tempfile",
"tracing", "tracing",
@ -1999,6 +1996,22 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "red_knot_workspace"
version = "0.0.0"
dependencies = [
"anyhow",
"crossbeam",
"notify",
"red_knot_module_resolver",
"red_knot_python_semantic",
"ruff_db",
"ruff_python_ast",
"rustc-hash 2.0.0",
"salsa",
"tracing",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.4.1" version = "0.4.1"
@ -2137,7 +2150,7 @@ dependencies = [
"codspeed-criterion-compat", "codspeed-criterion-compat",
"mimalloc", "mimalloc",
"once_cell", "once_cell",
"red_knot", "red_knot_workspace",
"ruff_db", "ruff_db",
"ruff_linter", "ruff_linter",
"ruff_python_ast", "ruff_python_ast",

View file

@ -35,9 +35,9 @@ ruff_source_file = { path = "crates/ruff_source_file" }
ruff_text_size = { path = "crates/ruff_text_size" } ruff_text_size = { path = "crates/ruff_text_size" }
ruff_workspace = { path = "crates/ruff_workspace" } ruff_workspace = { path = "crates/ruff_workspace" }
red_knot = { path = "crates/red_knot" }
red_knot_module_resolver = { path = "crates/red_knot_module_resolver" } red_knot_module_resolver = { path = "crates/red_knot_module_resolver" }
red_knot_python_semantic = { path = "crates/red_knot_python_semantic" } red_knot_python_semantic = { path = "crates/red_knot_python_semantic" }
red_knot_workspace = { path = "crates/red_knot_workspace" }
aho-corasick = { version = "1.1.3" } aho-corasick = { version = "1.1.3" }
annotate-snippets = { version = "0.9.2", features = ["color"] } annotate-snippets = { version = "0.9.2", features = ["color"] }

View file

@ -13,19 +13,16 @@ license.workspace = true
[dependencies] [dependencies]
red_knot_module_resolver = { workspace = true } red_knot_module_resolver = { workspace = true }
red_knot_python_semantic = { workspace = true } red_knot_workspace = { workspace = true }
ruff_db = { workspace = true, features = ["os", "cache"] } ruff_db = { workspace = true, features = ["os", "cache"] }
ruff_python_ast = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
clap = { workspace = true, features = ["wrap_help"] } clap = { workspace = true, features = ["wrap_help"] }
countme = { workspace = true, features = ["enable"] } countme = { workspace = true, features = ["enable"] }
crossbeam = { workspace = true } crossbeam = { workspace = true }
ctrlc = { version = "3.4.4" } ctrlc = { version = "3.4.4" }
notify = { workspace = true }
rayon = { workspace = true } rayon = { workspace = true }
rustc-hash = { workspace = true }
salsa = { workspace = true } salsa = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
tracing-subscriber = { workspace = true } tracing-subscriber = { workspace = true }

View file

@ -9,10 +9,10 @@ use tracing_subscriber::layer::{Context, Filter, SubscriberExt};
use tracing_subscriber::{Layer, Registry}; use tracing_subscriber::{Layer, Registry};
use tracing_tree::time::Uptime; use tracing_tree::time::Uptime;
use red_knot::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot::watch; use red_knot_workspace::watch;
use red_knot::watch::WorkspaceWatcher; use red_knot_workspace::watch::WorkspaceWatcher;
use red_knot::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::program::{ProgramSettings, SearchPathSettings}; use ruff_db::program::{ProgramSettings, SearchPathSettings};
use ruff_db::system::{OsSystem, System, SystemPathBuf}; use ruff_db::system::{OsSystem, System, SystemPathBuf};

View file

@ -6,11 +6,11 @@ use std::time::Duration;
use anyhow::{anyhow, Context}; use anyhow::{anyhow, Context};
use salsa::Setter; use salsa::Setter;
use red_knot::db::RootDatabase;
use red_knot::watch;
use red_knot::watch::{directory_watcher, WorkspaceWatcher};
use red_knot::workspace::WorkspaceMetadata;
use red_knot_module_resolver::{resolve_module, ModuleName}; use red_knot_module_resolver::{resolve_module, ModuleName};
use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::watch;
use red_knot_workspace::watch::{directory_watcher, WorkspaceWatcher};
use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::files::{system_path_to_file, File, FileError}; use ruff_db::files::{system_path_to_file, File, FileError};
use ruff_db::program::{Program, ProgramSettings, SearchPathSettings, TargetVersion}; use ruff_db::program::{Program, ProgramSettings, SearchPathSettings, TargetVersion};
use ruff_db::source::source_text; use ruff_db::source::source_text;

View file

@ -0,0 +1,31 @@
[package]
name = "red_knot_workspace"
version = "0.0.0"
edition.workspace = true
rust-version.workspace = true
homepage.workspace = true
documentation.workspace = true
repository.workspace = true
authors.workspace = true
license.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
red_knot_module_resolver = { workspace = true }
red_knot_python_semantic = { workspace = true }
ruff_db = { workspace = true, features = ["os", "cache"] }
ruff_python_ast = { workspace = true }
anyhow = { workspace = true }
crossbeam = { workspace = true }
notify = { workspace = true }
rustc-hash = { workspace = true }
salsa = { workspace = true }
tracing = { workspace = true }
[dev-dependencies]
[lints]
workspace = true

Some files were not shown because too many files have changed in this diff Show more