Move Program and related structs to red_knot_python_semantic (#12777)

This commit is contained in:
Micha Reiser 2024-08-09 11:50:45 +02:00 committed by GitHub
parent 64f1f3468d
commit 2abfab0f9b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 42 additions and 34 deletions

3
Cargo.lock generated
View file

@ -1918,6 +1918,7 @@ dependencies = [
"libc", "libc",
"lsp-server", "lsp-server",
"lsp-types", "lsp-types",
"red_knot_python_semantic",
"red_knot_workspace", "red_knot_workspace",
"ruff_db", "ruff_db",
"ruff_linter", "ruff_linter",
@ -1941,6 +1942,7 @@ dependencies = [
"console_log", "console_log",
"js-sys", "js-sys",
"log", "log",
"red_knot_python_semantic",
"red_knot_workspace", "red_knot_workspace",
"ruff_db", "ruff_db",
"ruff_notebook", "ruff_notebook",
@ -2104,6 +2106,7 @@ dependencies = [
"criterion", "criterion",
"mimalloc", "mimalloc",
"once_cell", "once_cell",
"red_knot_python_semantic",
"red_knot_workspace", "red_knot_workspace",
"ruff_db", "ruff_db",
"ruff_linter", "ruff_linter",

View file

@ -7,13 +7,13 @@ use colored::Colorize;
use crossbeam::channel as crossbeam_channel; use crossbeam::channel as crossbeam_channel;
use salsa::plumbing::ZalsaDatabase; use salsa::plumbing::ZalsaDatabase;
use red_knot_python_semantic::{ProgramSettings, SearchPathSettings};
use red_knot_server::run_server; use red_knot_server::run_server;
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::site_packages::site_packages_dirs_of_venv; use red_knot_workspace::site_packages::site_packages_dirs_of_venv;
use red_knot_workspace::watch; use red_knot_workspace::watch;
use red_knot_workspace::watch::WorkspaceWatcher; use red_knot_workspace::watch::WorkspaceWatcher;
use red_knot_workspace::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::program::{ProgramSettings, SearchPathSettings};
use ruff_db::system::{OsSystem, System, SystemPath, SystemPathBuf}; use ruff_db::system::{OsSystem, System, SystemPath, SystemPathBuf};
use target_version::TargetVersion; use target_version::TargetVersion;

View file

@ -15,11 +15,11 @@ pub enum TargetVersion {
impl std::fmt::Display for TargetVersion { impl std::fmt::Display for TargetVersion {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
ruff_db::program::TargetVersion::from(*self).fmt(f) red_knot_python_semantic::TargetVersion::from(*self).fmt(f)
} }
} }
impl From<TargetVersion> for ruff_db::program::TargetVersion { impl From<TargetVersion> for red_knot_python_semantic::TargetVersion {
fn from(value: TargetVersion) -> Self { fn from(value: TargetVersion) -> Self {
match value { match value {
TargetVersion::Py37 => Self::Py37, TargetVersion::Py37 => Self::Py37,

View file

@ -6,13 +6,14 @@ use std::time::Duration;
use anyhow::{anyhow, Context}; use anyhow::{anyhow, Context};
use salsa::Setter; use salsa::Setter;
use red_knot_python_semantic::{resolve_module, ModuleName}; use red_knot_python_semantic::{
resolve_module, ModuleName, Program, ProgramSettings, SearchPathSettings, TargetVersion,
};
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::watch; use red_knot_workspace::watch;
use red_knot_workspace::watch::{directory_watcher, WorkspaceWatcher}; use red_knot_workspace::watch::{directory_watcher, WorkspaceWatcher};
use red_knot_workspace::workspace::WorkspaceMetadata; 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::source::source_text; use ruff_db::source::source_text;
use ruff_db::system::{OsSystem, SystemPath, SystemPathBuf}; use ruff_db::system::{OsSystem, SystemPath, SystemPathBuf};
use ruff_db::Upcast; use ruff_db::Upcast;

View file

@ -5,6 +5,7 @@ use rustc_hash::FxHasher;
pub use db::Db; pub use db::Db;
pub use module_name::ModuleName; pub use module_name::ModuleName;
pub use module_resolver::{resolve_module, system_module_search_paths, vendored_typeshed_stubs}; pub use module_resolver::{resolve_module, system_module_search_paths, vendored_typeshed_stubs};
pub use program::{Program, ProgramSettings, SearchPathSettings, TargetVersion};
pub use semantic_model::{HasTy, SemanticModel}; pub use semantic_model::{HasTy, SemanticModel};
pub mod ast_node_ref; pub mod ast_node_ref;
@ -13,6 +14,7 @@ mod db;
mod module_name; mod module_name;
mod module_resolver; mod module_resolver;
mod node_key; mod node_key;
mod program;
pub mod semantic_index; pub mod semantic_index;
mod semantic_model; mod semantic_model;
pub mod types; pub mod types;

View file

@ -620,14 +620,13 @@ impl PartialEq<SearchPath> for VendoredPathBuf {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use ruff_db::program::TargetVersion;
use ruff_db::Db; use ruff_db::Db;
use crate::db::tests::TestDb; use crate::db::tests::TestDb;
use crate::module_resolver::testing::{FileSpec, MockedTypeshed, TestCase, TestCaseBuilder};
use super::*; use super::*;
use crate::module_resolver::testing::{FileSpec, MockedTypeshed, TestCase, TestCaseBuilder};
use crate::TargetVersion;
impl ModulePath { impl ModulePath {
#[must_use] #[must_use]

View file

@ -1,18 +1,18 @@
use std::borrow::Cow; use std::borrow::Cow;
use std::iter::FusedIterator; use std::iter::FusedIterator;
use ruff_db::files::{File, FilePath, FileRootKind};
use ruff_db::program::{Program, SearchPathSettings, TargetVersion};
use ruff_db::system::{DirectoryEntry, System, SystemPath, SystemPathBuf};
use ruff_db::vendored::VendoredPath;
use rustc_hash::{FxBuildHasher, FxHashSet}; use rustc_hash::{FxBuildHasher, FxHashSet};
use crate::db::Db; use ruff_db::files::{File, FilePath, FileRootKind};
use crate::module_name::ModuleName; use ruff_db::system::{DirectoryEntry, System, SystemPath, SystemPathBuf};
use ruff_db::vendored::VendoredPath;
use super::module::{Module, ModuleKind}; use super::module::{Module, ModuleKind};
use super::path::{ModulePath, SearchPath, SearchPathValidationError}; use super::path::{ModulePath, SearchPath, SearchPathValidationError};
use super::state::ResolverState; use super::state::ResolverState;
use crate::db::Db;
use crate::module_name::ModuleName;
use crate::{Program, SearchPathSettings, TargetVersion};
/// Resolves a module name to a module. /// Resolves a module name to a module.
pub fn resolve_module(db: &dyn Db, module_name: ModuleName) -> Option<Module> { pub fn resolve_module(db: &dyn Db, module_name: ModuleName) -> Option<Module> {
@ -1143,7 +1143,7 @@ mod tests {
fn symlink() -> anyhow::Result<()> { fn symlink() -> anyhow::Result<()> {
use anyhow::Context; use anyhow::Context;
use ruff_db::program::Program; use crate::program::Program;
use ruff_db::system::{OsSystem, SystemPath}; use ruff_db::system::{OsSystem, SystemPath};
use crate::db::tests::TestDb; use crate::db::tests::TestDb;

View file

@ -1,8 +1,8 @@
use ruff_db::program::TargetVersion;
use ruff_db::vendored::VendoredFileSystem; use ruff_db::vendored::VendoredFileSystem;
use super::typeshed::LazyTypeshedVersions; use super::typeshed::LazyTypeshedVersions;
use crate::db::Db; use crate::db::Db;
use crate::TargetVersion;
pub(crate) struct ResolverState<'db> { pub(crate) struct ResolverState<'db> {
pub(crate) db: &'db dyn Db, pub(crate) db: &'db dyn Db,

View file

@ -1,8 +1,8 @@
use ruff_db::program::{Program, SearchPathSettings, TargetVersion};
use ruff_db::system::{DbWithTestSystem, SystemPath, SystemPathBuf}; use ruff_db::system::{DbWithTestSystem, SystemPath, SystemPathBuf};
use ruff_db::vendored::VendoredPathBuf; use ruff_db::vendored::VendoredPathBuf;
use crate::db::tests::TestDb; use crate::db::tests::TestDb;
use crate::program::{Program, SearchPathSettings, TargetVersion};
/// A test case for the module resolver. /// A test case for the module resolver.
/// ///

View file

@ -6,16 +6,15 @@ use std::ops::{RangeFrom, RangeInclusive};
use std::str::FromStr; use std::str::FromStr;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use ruff_db::program::TargetVersion;
use ruff_db::system::SystemPath; use ruff_db::system::SystemPath;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use ruff_db::files::{system_path_to_file, File}; use ruff_db::files::{system_path_to_file, File};
use super::vendored::vendored_typeshed_stubs;
use crate::db::Db; use crate::db::Db;
use crate::module_name::ModuleName; use crate::module_name::ModuleName;
use crate::TargetVersion;
use super::vendored::vendored_typeshed_stubs;
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct LazyTypeshedVersions<'db>(OnceCell<&'db TypeshedVersions>); pub(crate) struct LazyTypeshedVersions<'db>(OnceCell<&'db TypeshedVersions>);
@ -440,7 +439,6 @@ mod tests {
use std::path::Path; use std::path::Path;
use insta::assert_snapshot; use insta::assert_snapshot;
use ruff_db::program::TargetVersion;
use super::*; use super::*;

View file

@ -1,4 +1,5 @@
use crate::{system::SystemPathBuf, Db}; use crate::Db;
use ruff_db::system::SystemPathBuf;
use salsa::Durability; use salsa::Durability;
#[salsa::input(singleton)] #[salsa::input(singleton)]

View file

@ -165,10 +165,10 @@ impl HasTy for ast::Alias {
mod tests { mod tests {
use ruff_db::files::system_path_to_file; use ruff_db::files::system_path_to_file;
use ruff_db::parsed::parsed_module; use ruff_db::parsed::parsed_module;
use ruff_db::program::{Program, SearchPathSettings, TargetVersion};
use ruff_db::system::{DbWithTestSystem, SystemPathBuf}; use ruff_db::system::{DbWithTestSystem, SystemPathBuf};
use crate::db::tests::TestDb; use crate::db::tests::TestDb;
use crate::program::{Program, SearchPathSettings, TargetVersion};
use crate::types::Type; use crate::types::Type;
use crate::{HasTy, SemanticModel}; use crate::{HasTy, SemanticModel};

View file

@ -1496,13 +1496,13 @@ impl<'db> TypeInferenceBuilder<'db> {
mod tests { mod tests {
use ruff_db::files::{system_path_to_file, File}; use ruff_db::files::{system_path_to_file, File};
use ruff_db::parsed::parsed_module; use ruff_db::parsed::parsed_module;
use ruff_db::program::{Program, SearchPathSettings, TargetVersion};
use ruff_db::system::{DbWithTestSystem, SystemPathBuf}; use ruff_db::system::{DbWithTestSystem, SystemPathBuf};
use ruff_db::testing::assert_function_query_was_not_run; use ruff_db::testing::assert_function_query_was_not_run;
use ruff_python_ast::name::Name; use ruff_python_ast::name::Name;
use crate::builtins::builtins_scope; use crate::builtins::builtins_scope;
use crate::db::tests::TestDb; use crate::db::tests::TestDb;
use crate::program::{Program, SearchPathSettings, TargetVersion};
use crate::semantic_index::definition::Definition; use crate::semantic_index::definition::Definition;
use crate::semantic_index::symbol::FileScopeId; use crate::semantic_index::symbol::FileScopeId;
use crate::semantic_index::{global_scope, semantic_index, symbol_table, use_def_map}; use crate::semantic_index::{global_scope, semantic_index, symbol_table, use_def_map};

View file

@ -11,6 +11,7 @@ repository = { workspace = true }
license = { workspace = true } license = { workspace = true }
[dependencies] [dependencies]
red_knot_python_semantic = { workspace = true }
red_knot_workspace = { workspace = true } red_knot_workspace = { workspace = true }
ruff_db = { workspace = true } ruff_db = { workspace = true }
ruff_linter = { workspace = true } ruff_linter = { workspace = true }

View file

@ -8,10 +8,10 @@ use std::sync::Arc;
use anyhow::anyhow; use anyhow::anyhow;
use lsp_types::{ClientCapabilities, Url}; use lsp_types::{ClientCapabilities, Url};
use red_knot_python_semantic::{ProgramSettings, SearchPathSettings, TargetVersion};
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::files::{system_path_to_file, File}; use ruff_db::files::{system_path_to_file, File};
use ruff_db::program::{ProgramSettings, SearchPathSettings, TargetVersion};
use ruff_db::system::SystemPath; use ruff_db::system::SystemPath;
use crate::edit::{DocumentKey, NotebookDocument}; use crate::edit::{DocumentKey, NotebookDocument};

View file

@ -19,6 +19,7 @@ doctest = false
default = ["console_error_panic_hook"] default = ["console_error_panic_hook"]
[dependencies] [dependencies]
red_knot_python_semantic = { workspace = true }
red_knot_workspace = { workspace = true } red_knot_workspace = { workspace = true }
ruff_db = { workspace = true } ruff_db = { workspace = true }

View file

@ -3,10 +3,10 @@ use std::any::Any;
use js_sys::Error; use js_sys::Error;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
use red_knot_python_semantic::{ProgramSettings, SearchPathSettings};
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::files::{system_path_to_file, File}; use ruff_db::files::{system_path_to_file, File};
use ruff_db::program::{ProgramSettings, SearchPathSettings};
use ruff_db::system::walk_directory::WalkDirectoryBuilder; use ruff_db::system::walk_directory::WalkDirectoryBuilder;
use ruff_db::system::{ use ruff_db::system::{
DirectoryEntry, MemoryFileSystem, Metadata, System, SystemPath, SystemPathBuf, DirectoryEntry, MemoryFileSystem, Metadata, System, SystemPath, SystemPathBuf,
@ -184,7 +184,7 @@ pub enum TargetVersion {
Py313, Py313,
} }
impl From<TargetVersion> for ruff_db::program::TargetVersion { impl From<TargetVersion> for red_knot_python_semantic::TargetVersion {
fn from(value: TargetVersion) -> Self { fn from(value: TargetVersion) -> Self {
match value { match value {
TargetVersion::Py37 => Self::Py37, TargetVersion::Py37 => Self::Py37,

View file

@ -1,9 +1,10 @@
use std::panic::RefUnwindSafe; use std::panic::RefUnwindSafe;
use std::sync::Arc; use std::sync::Arc;
use red_knot_python_semantic::{vendored_typeshed_stubs, Db as SemanticDb}; use red_knot_python_semantic::{
vendored_typeshed_stubs, Db as SemanticDb, Program, ProgramSettings,
};
use ruff_db::files::{File, Files}; use ruff_db::files::{File, Files};
use ruff_db::program::{Program, ProgramSettings};
use ruff_db::system::System; use ruff_db::system::System;
use ruff_db::vendored::VendoredFileSystem; use ruff_db::vendored::VendoredFileSystem;
use ruff_db::{Db as SourceDb, Upcast}; use ruff_db::{Db as SourceDb, Upcast};

View file

@ -305,13 +305,14 @@ enum AnyImportRef<'a> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use red_knot_python_semantic::{Program, SearchPathSettings, TargetVersion};
use ruff_db::files::system_path_to_file; use ruff_db::files::system_path_to_file;
use ruff_db::program::{Program, SearchPathSettings, TargetVersion};
use ruff_db::system::{DbWithTestSystem, SystemPathBuf}; use ruff_db::system::{DbWithTestSystem, SystemPathBuf};
use super::{lint_semantic, Diagnostics};
use crate::db::tests::TestDb; use crate::db::tests::TestDb;
use super::{lint_semantic, Diagnostics};
fn setup_db() -> TestDb { fn setup_db() -> TestDb {
setup_db_with_root(SystemPathBuf::from("/src")) setup_db_with_root(SystemPathBuf::from("/src"))
} }

View file

@ -1,8 +1,8 @@
use red_knot_python_semantic::{ProgramSettings, SearchPathSettings, TargetVersion};
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::lint::lint_semantic; use red_knot_workspace::lint::lint_semantic;
use red_knot_workspace::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_db::files::system_path_to_file; use ruff_db::files::system_path_to_file;
use ruff_db::program::{ProgramSettings, SearchPathSettings, TargetVersion};
use ruff_db::system::{OsSystem, SystemPathBuf}; use ruff_db::system::{OsSystem, SystemPathBuf};
use std::fs; use std::fs;
use std::path::PathBuf; use std::path::PathBuf;

View file

@ -52,6 +52,7 @@ ruff_python_ast = { workspace = true }
ruff_python_formatter = { workspace = true } ruff_python_formatter = { workspace = true }
ruff_python_parser = { workspace = true } ruff_python_parser = { workspace = true }
ruff_python_trivia = { workspace = true } ruff_python_trivia = { workspace = true }
red_knot_python_semantic = { workspace = true }
red_knot_workspace = { workspace = true } red_knot_workspace = { workspace = true }
[lints] [lints]

View file

@ -1,11 +1,11 @@
#![allow(clippy::disallowed_names)] #![allow(clippy::disallowed_names)]
use red_knot_python_semantic::{ProgramSettings, SearchPathSettings, TargetVersion};
use red_knot_workspace::db::RootDatabase; use red_knot_workspace::db::RootDatabase;
use red_knot_workspace::workspace::WorkspaceMetadata; use red_knot_workspace::workspace::WorkspaceMetadata;
use ruff_benchmark::criterion::{criterion_group, criterion_main, BatchSize, Criterion}; use ruff_benchmark::criterion::{criterion_group, criterion_main, BatchSize, Criterion};
use ruff_benchmark::TestFile; use ruff_benchmark::TestFile;
use ruff_db::files::{system_path_to_file, File}; use ruff_db::files::{system_path_to_file, File};
use ruff_db::program::{ProgramSettings, SearchPathSettings, TargetVersion};
use ruff_db::source::source_text; use ruff_db::source::source_text;
use ruff_db::system::{MemoryFileSystem, SystemPath, TestSystem}; use ruff_db::system::{MemoryFileSystem, SystemPath, TestSystem};

View file

@ -9,7 +9,6 @@ use crate::vendored::VendoredFileSystem;
pub mod file_revision; pub mod file_revision;
pub mod files; pub mod files;
pub mod parsed; pub mod parsed;
pub mod program;
pub mod source; pub mod source;
pub mod system; pub mod system;
#[cfg(feature = "testing")] #[cfg(feature = "testing")]