diff --git a/crates/ty_python_semantic/src/lib.rs b/crates/ty_python_semantic/src/lib.rs index 30300eef13..e82fc54c0b 100644 --- a/crates/ty_python_semantic/src/lib.rs +++ b/crates/ty_python_semantic/src/lib.rs @@ -7,7 +7,7 @@ use std::hash::BuildHasherDefault; use crate::lint::{LintRegistry, LintRegistryBuilder}; use crate::suppression::{INVALID_IGNORE_COMMENT, UNKNOWN_RULE, UNUSED_IGNORE_COMMENT}; pub use db::Db; -pub use module_name::ModuleName; +pub use module_name::{ModuleName, ModuleNameResolutionError}; pub use module_resolver::{ Module, SearchPath, SearchPathValidationError, SearchPaths, all_modules, list_modules, resolve_module, resolve_real_module, system_module_search_paths, diff --git a/crates/ty_python_semantic/src/module_name.rs b/crates/ty_python_semantic/src/module_name.rs index df7ae09e2a..e1aa4509bd 100644 --- a/crates/ty_python_semantic/src/module_name.rs +++ b/crates/ty_python_semantic/src/module_name.rs @@ -273,7 +273,14 @@ impl ModuleName { std::iter::successors(Some(self.clone()), Self::parent) } - pub(crate) fn from_import_statement<'db>( + /// Extracts a module name from the AST of a `from import ...` + /// statement. + /// + /// `importing_file` must be the [`File`] that contains the import + /// statement. + /// + /// This handles relative import statements. + pub fn from_import_statement<'db>( db: &'db dyn Db, importing_file: File, node: &'db ast::StmtImportFrom, @@ -372,7 +379,7 @@ fn relative_module_name( /// Various ways in which resolving a [`ModuleName`] /// from an [`ast::StmtImport`] or [`ast::StmtImportFrom`] node might fail #[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub(crate) enum ModuleNameResolutionError { +pub enum ModuleNameResolutionError { /// The import statement has invalid syntax InvalidSyntax, diff --git a/crates/ty_python_semantic/src/semantic_index/definition.rs b/crates/ty_python_semantic/src/semantic_index/definition.rs index b06390fa84..f43b999d5b 100644 --- a/crates/ty_python_semantic/src/semantic_index/definition.rs +++ b/crates/ty_python_semantic/src/semantic_index/definition.rs @@ -38,7 +38,7 @@ pub struct Definition<'db> { #[no_eq] #[returns(ref)] #[tracked] - pub(crate) kind: DefinitionKind<'db>, + pub kind: DefinitionKind<'db>, /// This is a dedicated field to avoid accessing `kind` to compute this value. pub(crate) is_reexported: bool, @@ -876,7 +876,7 @@ pub struct StarImportDefinitionKind { } impl StarImportDefinitionKind { - pub(crate) fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImportFrom { + pub fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImportFrom { self.node.node(module) } @@ -960,7 +960,7 @@ pub struct ImportDefinitionKind { } impl ImportDefinitionKind { - pub(crate) fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImport { + pub fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImport { self.node.node(module) } @@ -981,7 +981,7 @@ pub struct ImportFromDefinitionKind { } impl ImportFromDefinitionKind { - pub(crate) fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImportFrom { + pub fn import<'ast>(&self, module: &'ast ParsedModuleRef) -> &'ast ast::StmtImportFrom { self.node.node(module) } diff --git a/crates/ty_python_semantic/src/semantic_index/use_def.rs b/crates/ty_python_semantic/src/semantic_index/use_def.rs index e71068c7fc..39f3a1a8ec 100644 --- a/crates/ty_python_semantic/src/semantic_index/use_def.rs +++ b/crates/ty_python_semantic/src/semantic_index/use_def.rs @@ -670,7 +670,7 @@ pub(crate) struct EnclosingSnapshotKey { /// new binding. type EnclosingSnapshots = IndexVec; -#[derive(Debug)] +#[derive(Clone, Debug)] pub(crate) struct BindingWithConstraintsIterator<'map, 'db> { all_definitions: &'map IndexVec>, pub(crate) predicates: &'map Predicates<'db>, diff --git a/crates/ty_python_semantic/src/types.rs b/crates/ty_python_semantic/src/types.rs index addbc4491b..eef84552b7 100644 --- a/crates/ty_python_semantic/src/types.rs +++ b/crates/ty_python_semantic/src/types.rs @@ -19,7 +19,8 @@ use ruff_text_size::{Ranged, TextRange}; use type_ordering::union_or_intersection_elements_ordering; pub(crate) use self::builder::{IntersectionBuilder, UnionBuilder}; -pub(crate) use self::cyclic::{CycleDetector, PairVisitor, TypeTransformer}; +pub use self::cyclic::CycleDetector; +pub(crate) use self::cyclic::{PairVisitor, TypeTransformer}; pub use self::diagnostic::TypeCheckDiagnostics; pub(crate) use self::diagnostic::register_lints; pub(crate) use self::infer::{ @@ -54,9 +55,10 @@ use crate::types::generics::{ walk_partial_specialization, walk_specialization, }; pub use crate::types::ide_support::{ - CallSignatureDetails, Member, all_members, call_signature_details, definition_kind_for_name, - definitions_for_attribute, definitions_for_imported_symbol, definitions_for_keyword_argument, - definitions_for_name, find_active_signature_from_details, inlay_hint_function_argument_details, + CallSignatureDetails, Member, MemberWithDefinition, all_members, call_signature_details, + definition_kind_for_name, definitions_for_attribute, definitions_for_imported_symbol, + definitions_for_keyword_argument, definitions_for_name, find_active_signature_from_details, + inlay_hint_function_argument_details, }; use crate::types::infer::infer_unpack_types; use crate::types::mro::{Mro, MroError, MroIterator}; @@ -9953,7 +9955,7 @@ impl<'db> TypeAliasType<'db> { } } - pub(crate) fn value_type(self, db: &'db dyn Db) -> Type<'db> { + pub fn value_type(self, db: &'db dyn Db) -> Type<'db> { match self { TypeAliasType::PEP695(type_alias) => type_alias.value_type(db), TypeAliasType::ManualPEP695(type_alias) => type_alias.value(db), diff --git a/crates/ty_python_semantic/src/types/cyclic.rs b/crates/ty_python_semantic/src/types/cyclic.rs index 2d006a977d..e46d30f40f 100644 --- a/crates/ty_python_semantic/src/types/cyclic.rs +++ b/crates/ty_python_semantic/src/types/cyclic.rs @@ -44,7 +44,7 @@ impl Default for TypeTransformer<'_, Tag> { pub(crate) type PairVisitor<'db, Tag, C> = CycleDetector, Type<'db>), C>; #[derive(Debug)] -pub(crate) struct CycleDetector { +pub struct CycleDetector { /// If the type we're visiting is present in `seen`, it indicates that we've hit a cycle (due /// to a recursive type); we need to immediately short circuit the whole operation and return /// the fallback value. That's why we pop items off the end of `seen` after we've visited them. @@ -64,7 +64,7 @@ pub(crate) struct CycleDetector { } impl CycleDetector { - pub(crate) fn new(fallback: R) -> Self { + pub fn new(fallback: R) -> Self { CycleDetector { seen: RefCell::new(FxIndexSet::default()), cache: RefCell::new(FxHashMap::default()), @@ -73,7 +73,7 @@ impl CycleDetector { } } - pub(crate) fn visit(&self, item: T, func: impl FnOnce() -> R) -> R { + pub fn visit(&self, item: T, func: impl FnOnce() -> R) -> R { if let Some(val) = self.cache.borrow().get(&item) { return val.clone(); }