From f6e9191a5d4d950445c82eacbe7ec1af1b1b828a Mon Sep 17 00:00:00 2001 From: roife Date: Sat, 30 May 2026 18:01:32 +0800 Subject: [PATCH 1/3] refactor: remove try_ macros --- crates/utils/src/utry.rs | 23 ----------- src/config/caps.rs | 82 ++++++++++++++++++++++++---------------- 2 files changed, 50 insertions(+), 55 deletions(-) diff --git a/crates/utils/src/utry.rs b/crates/utils/src/utry.rs index fa332728..f34992f8 100644 --- a/crates/utils/src/utry.rs +++ b/crates/utils/src/utry.rs @@ -1,26 +1,3 @@ -#[macro_export] -macro_rules! try_ { - ($expr:expr) => { - || -> _ { Some($expr) }() - }; - - ($($tt:tt)*) => { - try_!{{$($tt)*}} - }; -} - -#[macro_export] -macro_rules! try_or_default { - ($expr:expr) => { - try_!($expr).unwrap_or_default() - }; - - - ($($tt:tt)*) => { - try_or_default!{{$($tt)*}} - }; -} - #[macro_export] macro_rules! check_or_throw { ($expr:expr) => { diff --git a/src/config/caps.rs b/src/config/caps.rs index 3274dd63..7d3212d7 100644 --- a/src/config/caps.rs +++ b/src/config/caps.rs @@ -10,17 +10,24 @@ use lsp_types::{ WorkspaceFileOperationsServerCapabilities, WorkspaceFoldersServerCapabilities, WorkspaceServerCapabilities, }; -use utils::{line_index::WideEncoding, lines::PositionEncoding, try_, try_or_default}; +use utils::{line_index::WideEncoding, lines::PositionEncoding}; use crate::{ config::Config, lsp_ext::ext::{self, RELOAD_WORKSPACE_COMMAND, RUN_QIHE_ANALYSIS_COMMAND}, }; +macro_rules! check_support { + ($expr:expr) => {{ + let support = try { $expr }; + matches!(support, Some(true)) + }}; +} + impl Config { #[allow(dead_code)] pub fn cli_completion_label_details_support(&self) -> bool { - try_!( + check_support! { self.client_caps .text_document .as_ref()? @@ -28,15 +35,13 @@ impl Config { .as_ref()? .completion_item .as_ref()? - .label_details_support - .as_ref()? - ) - .is_some() + .label_details_support? + } } #[allow(dead_code)] pub fn cli_completion_item_edit_resolve(&self) -> bool { - try_!( + check_support! { self.client_caps .text_document .as_ref()? @@ -49,12 +54,12 @@ impl Config { .properties .iter() .any(|cap_string| cap_string.as_str() == "additionalTextEdits") - ) == Some(true) + } } pub fn cli_completion_snippet_support(&self) -> bool { - try_or_default!( - self.client_caps + check_support! { + self.client_caps .text_document .as_ref()? .completion @@ -62,48 +67,54 @@ impl Config { .completion_item .as_ref()? .snippet_support? - ) + } } pub fn hierarchical_symbols(&self) -> bool { - try_!( - self.client_caps + check_support! { + self.client_caps .text_document .as_ref()? .document_symbol .as_ref()? .hierarchical_document_symbol_support? - ) - .unwrap_or_default() + } } pub fn location_link(&self) -> bool { - try_or_default!(self.client_caps.text_document.as_ref()?.definition?.link_support?) + check_support! { + self.client_caps + .text_document + .as_ref()? + .definition? + .link_support? + } } pub fn cli_did_save_dyn_reg(&self) -> bool { - let caps = - try_or_default!(self.client_caps.text_document.as_ref()?.synchronization.clone()?); - caps.did_save == Some(true) && caps.dynamic_registration == Some(true) + check_support! {{ + let sync = self.client_caps.text_document.as_ref()?.synchronization.as_ref()?; + sync.did_save? && sync.dynamic_registration? + }} } pub fn cli_did_change_watched_files_dyn_reg(&self) -> bool { - try_or_default!( + check_support! { self.client_caps .workspace .as_ref()? .did_change_watched_files .as_ref()? .dynamic_registration? - ) + } } pub fn cli_work_done_progress(&self) -> bool { - try_or_default!(self.client_caps.window.as_ref()?.work_done_progress?) + check_support!(self.client_caps.window.as_ref()?.work_done_progress?) } pub fn cli_line_folding_only(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .text_document.as_ref()? .folding_range.as_ref()? @@ -112,7 +123,7 @@ impl Config { } pub fn cli_hover_markdown_support(&self) -> HoverFormat { - let support_markdown = try_or_default! { + let support_markdown = check_support! { self.client_caps .text_document.as_ref()? .hover.as_ref()? @@ -124,7 +135,7 @@ impl Config { } pub fn cli_inlay_hint_refresh_support(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .workspace.as_ref()? .inlay_hint.as_ref()? @@ -133,7 +144,7 @@ impl Config { } pub fn cli_code_lens_refresh_support(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .workspace.as_ref()? .code_lens.as_ref()? @@ -142,7 +153,7 @@ impl Config { } pub fn cli_workspace_diagnostic_refresh_support(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .workspace.as_ref()? .diagnostic.as_ref()? @@ -151,11 +162,18 @@ impl Config { } pub fn cli_pull_diagnostics_support(&self) -> bool { - try_!(self.client_caps.text_document.as_ref()?.diagnostic.as_ref()).is_some() + check_support! { + self.client_caps + .text_document + .as_ref()? + .diagnostic + .as_ref() + .is_some() + } } pub fn cli_signature_help_label_offsets_support(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .text_document .as_ref()? @@ -170,7 +188,7 @@ impl Config { } pub fn cli_code_action_literals(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .text_document .as_ref()? @@ -178,12 +196,12 @@ impl Config { .as_ref()? .code_action_literal_support .as_ref() + .is_some() } - .is_some() } pub fn cli_code_action_resolve(&self) -> bool { - try_or_default! { + check_support! { self.client_caps .text_document .as_ref()? From ee31bae811a73054a9d7b1a00a2c82842ddbe85c Mon Sep 17 00:00:00 2001 From: roife Date: Sat, 30 May 2026 18:38:47 +0800 Subject: [PATCH 2/3] refactor: reorg crates --- Cargo.toml | 7 --- crates/base-db/Cargo.toml | 18 ------- crates/hir/Cargo.toml | 2 +- .../src/lib.rs => hir/src/base_db.rs} | 0 .../src => hir/src/base_db}/change.rs | 2 +- .../src/base_db}/compilation_plan.rs | 2 +- .../src/base_db}/diagnostics_config.rs | 0 .../src => hir/src/base_db}/intern.rs | 10 ++-- .../src => hir/src/base_db}/preproc_index.rs | 0 .../src => hir/src/base_db}/project.rs | 2 +- .../src => hir/src/base_db}/source_db.rs | 2 +- .../src => hir/src/base_db}/source_root.rs | 2 +- crates/hir/src/container.rs | 2 +- crates/hir/src/db.rs | 3 +- crates/hir/src/display.rs | 2 +- crates/hir/src/has_source.rs | 2 +- crates/hir/src/hir_def/block.rs | 2 +- crates/hir/src/hir_def/module/generate.rs | 2 +- crates/hir/src/hir_def/subroutine.rs | 2 +- crates/hir/src/lib.rs | 1 + crates/ide-db/Cargo.toml | 16 ------ crates/ide/Cargo.toml | 3 -- crates/ide/src/analysis.rs | 7 ++- crates/ide/src/analysis_host.rs | 5 +- crates/ide/src/code_action/context.rs | 2 +- crates/ide/src/code_action/engine.rs | 2 +- .../handlers/add_missing_connections.rs | 6 ++- .../handlers/add_missing_parameters.rs | 6 ++- .../handlers/convert_ordered_connections.rs | 3 +- crates/ide/src/code_action/module_members.rs | 3 +- crates/ide/src/code_action/tests.rs | 4 +- crates/ide/src/code_lens.rs | 5 +- crates/ide/src/completion/context.rs | 9 ++-- crates/ide/src/completion/engine.rs | 13 ++--- crates/ide/src/completion/engine/expr.rs | 25 +++------ .../src/completion/engine/instantiation.rs | 24 +++++---- crates/ide/src/completion/engine/keywords.rs | 16 +++--- crates/ide/src/completion/engine/member.rs | 4 +- crates/ide/src/completion/engine/named.rs | 9 ++-- .../ide/src/completion/engine/paren_list.rs | 32 ++++++----- crates/ide/src/completion/engine/plan.rs | 13 ++--- crates/ide/src/completion/engine/port_list.rs | 8 +-- .../src/completion/engine/sensitivity_list.rs | 8 +-- crates/ide/src/completion/engine/tests.rs | 2 +- .../ide/src/completion/engine/typed_filter.rs | 24 +++++---- crates/{ide-db/src/lib.rs => ide/src/db.rs} | 0 .../src => ide/src/db}/apply_change.rs | 4 +- .../src => ide/src/db}/line_index_db.rs | 2 +- crates/{ide-db/src => ide/src/db}/root_db.rs | 54 +++++++++++-------- crates/ide/src/definitions.rs | 22 ++++---- crates/ide/src/diagnostics.rs | 29 ++++++---- crates/ide/src/document_highlight.rs | 7 ++- crates/ide/src/document_symbols.rs | 9 ++-- crates/ide/src/folding_ranges.rs | 5 +- crates/ide/src/formatting.rs | 15 +++--- crates/ide/src/goto_declaration.rs | 4 +- crates/ide/src/goto_definition.rs | 4 +- crates/ide/src/hover.rs | 7 +-- crates/ide/src/inlay_hint.rs | 7 ++- crates/ide/src/lib.rs | 5 +- crates/ide/src/module_resolution.rs | 21 +++++--- crates/ide/src/navigation_target.rs | 5 +- crates/ide/src/references.rs | 5 +- crates/ide/src/references/search.rs | 4 +- crates/ide/src/rename.rs | 10 ++-- crates/ide/src/render.rs | 10 ++-- crates/ide/src/selection_ranges.rs | 12 ++--- crates/ide/src/semantic_tokens.rs | 8 +-- crates/ide/src/semantic_tokens/port.rs | 8 +-- crates/ide/src/signature_help.rs | 7 +-- crates/{span/src/lib.rs => ide/src/types.rs} | 0 crates/ide/src/verilog_2005.rs | 35 ++++++------ crates/project-model/Cargo.toml | 2 +- crates/project-model/src/lib.rs | 4 +- crates/span/Cargo.toml | 12 ----- crates/vfs-notify/Cargo.toml | 20 ------- crates/vfs/Cargo.toml | 12 +++++ crates/vfs/src/lib.rs | 2 + .../src/lib.rs => vfs/src/notify.rs} | 31 +++++------ src/config.rs | 4 +- src/config/user_config.rs | 2 +- src/global_state.rs | 16 +++--- src/global_state/diagnostics.rs | 2 +- src/global_state/handlers/request.rs | 3 +- .../handlers/request/code_action.rs | 2 +- src/global_state/process_changes.rs | 2 +- src/global_state/qihe.rs | 6 +-- src/global_state/reload.rs | 4 +- src/global_state/snapshot.rs | 2 +- src/lsp_ext/from_proto.rs | 3 +- src/lsp_ext/to_proto.rs | 3 +- src/main.rs | 4 +- 92 files changed, 362 insertions(+), 385 deletions(-) delete mode 100644 crates/base-db/Cargo.toml rename crates/{base-db/src/lib.rs => hir/src/base_db.rs} (100%) rename crates/{base-db/src => hir/src/base_db}/change.rs (99%) rename crates/{base-db/src => hir/src/base_db}/compilation_plan.rs (99%) rename crates/{base-db/src => hir/src/base_db}/diagnostics_config.rs (100%) rename crates/{base-db/src => hir/src/base_db}/intern.rs (74%) rename crates/{base-db/src => hir/src/base_db}/preproc_index.rs (100%) rename crates/{base-db/src => hir/src/base_db}/project.rs (97%) rename crates/{base-db/src => hir/src/base_db}/source_db.rs (99%) rename crates/{base-db/src => hir/src/base_db}/source_root.rs (99%) delete mode 100644 crates/ide-db/Cargo.toml rename crates/{ide-db/src/lib.rs => ide/src/db.rs} (100%) rename crates/{ide-db/src => ide/src/db}/apply_change.rs (95%) rename crates/{ide-db/src => ide/src/db}/line_index_db.rs (88%) rename crates/{ide-db/src => ide/src/db}/root_db.rs (57%) rename crates/{span/src/lib.rs => ide/src/types.rs} (100%) delete mode 100644 crates/span/Cargo.toml delete mode 100644 crates/vfs-notify/Cargo.toml rename crates/{vfs-notify/src/lib.rs => vfs/src/notify.rs} (97%) diff --git a/Cargo.toml b/Cargo.toml index 208b9032..0b87c24b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,15 +17,12 @@ members = [".", "crates/*", "xtask"] edition = "2024" [dependencies] -base-db.workspace = true hir.workspace = true ide.workspace = true project-model.workspace = true -span.workspace = true syntax.workspace = true slang.workspace = true utils.workspace = true -vfs-notify.workspace = true vfs.workspace = true always-assert.workspace = true @@ -55,17 +52,13 @@ triomphe.workspace = true [workspace.dependencies] -base-db = { path = "./crates/base-db/", version = "0.0.0" } hir = { path = "./crates/hir/", version = "0.0.0" } ide = { path = "./crates/ide/", version = "0.0.0" } -ide-db = { path = "./crates/ide-db/", version = "0.0.0" } proc-macro-utils = { path = "./crates/proc-macro-utils/", version = "0.0.0" } project-model = { path = "./crates/project-model/", version = "0.0.0" } -span = { path = "./crates/span/", version = "0.0.0" } syntax = { path = "./crates/syntax/", version = "0.0.0" } utils = { path = "./crates/utils", version = "0.0.0" } vfs = { path = "./crates/vfs", version = "0.0.0" } -vfs-notify = { path = "./crates/vfs-notify/", version = "0.0.0" } slang = { path = "./crates/slang", version = "0.0.1" } parking_lot = "0.12.1" diff --git a/crates/base-db/Cargo.toml b/crates/base-db/Cargo.toml deleted file mode 100644 index 72d96a8e..00000000 --- a/crates/base-db/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "base-db" -version = "0.0.0" -description = "Indexing database" - -edition.workspace = true - -[dependencies] -itertools.workspace = true -la-arena.workspace = true -rustc-hash.workspace = true -salsa.workspace = true -smol_str.workspace = true -syntax.workspace = true -tracing.workspace = true -triomphe.workspace = true -utils.workspace = true -vfs.workspace = true diff --git a/crates/hir/Cargo.toml b/crates/hir/Cargo.toml index 80e3f164..c99b8984 100644 --- a/crates/hir/Cargo.toml +++ b/crates/hir/Cargo.toml @@ -4,7 +4,6 @@ version = "0.0.0" edition.workspace = true [dependencies] -base-db.workspace = true hashbrown = { version = "0.12.3", features = ["inline-more"], default-features = false } itertools.workspace = true la-arena.workspace = true @@ -14,6 +13,7 @@ salsa.workspace = true smallvec.workspace = true smol_str.workspace = true syntax.workspace = true +tracing.workspace = true triomphe.workspace = true utils.workspace = true vfs.workspace = true diff --git a/crates/base-db/src/lib.rs b/crates/hir/src/base_db.rs similarity index 100% rename from crates/base-db/src/lib.rs rename to crates/hir/src/base_db.rs diff --git a/crates/base-db/src/change.rs b/crates/hir/src/base_db/change.rs similarity index 99% rename from crates/base-db/src/change.rs rename to crates/hir/src/base_db/change.rs index c09fcff5..57250cb7 100644 --- a/crates/base-db/src/change.rs +++ b/crates/hir/src/base_db/change.rs @@ -2,7 +2,7 @@ use salsa::Durability; use triomphe::Arc; use vfs::ChangedFile; -use crate::{ +use crate::base_db::{ project::{PreprocessConfig, SharedProjectConfig}, source_db::SourceRootDb, source_root::{SourceRoot, SourceRootId}, diff --git a/crates/base-db/src/compilation_plan.rs b/crates/hir/src/base_db/compilation_plan.rs similarity index 99% rename from crates/base-db/src/compilation_plan.rs rename to crates/hir/src/base_db/compilation_plan.rs index b76f0147..da570907 100644 --- a/crates/base-db/src/compilation_plan.rs +++ b/crates/hir/src/base_db/compilation_plan.rs @@ -6,7 +6,7 @@ use utils::{ }; use vfs::FileId; -use crate::{ +use crate::base_db::{ preproc_index::MacroIncludeTarget, project::{CompilationProfileId, ProjectConfig}, source_db::{SourceFileKind, SourceRootDb}, diff --git a/crates/base-db/src/diagnostics_config.rs b/crates/hir/src/base_db/diagnostics_config.rs similarity index 100% rename from crates/base-db/src/diagnostics_config.rs rename to crates/hir/src/base_db/diagnostics_config.rs diff --git a/crates/base-db/src/intern.rs b/crates/hir/src/base_db/intern.rs similarity index 74% rename from crates/base-db/src/intern.rs rename to crates/hir/src/base_db/intern.rs index b17760ff..c6b92356 100644 --- a/crates/base-db/src/intern.rs +++ b/crates/hir/src/base_db/intern.rs @@ -13,12 +13,12 @@ pub trait Lookup { #[macro_export] macro_rules! impl_intern_key { ($name:ident) => { - impl $crate::salsa::InternKey for $name { - fn from_intern_id(v: $crate::salsa::InternId) -> Self { + impl $crate::base_db::salsa::InternKey for $name { + fn from_intern_id(v: $crate::base_db::salsa::InternId) -> Self { $name(v) } - fn as_intern_id(&self) -> $crate::salsa::InternId { + fn as_intern_id(&self) -> $crate::base_db::salsa::InternId { self.0 } } @@ -28,7 +28,7 @@ macro_rules! impl_intern_key { #[macro_export] macro_rules! impl_intern_lookup { ($db:ident, $id:ident, $loc:ident, $intern:ident, $lookup:ident) => { - impl $crate::intern::Intern for $loc { + impl $crate::base_db::intern::Intern for $loc { type Database<'db> = dyn $db + 'db; type ID = $id; @@ -37,7 +37,7 @@ macro_rules! impl_intern_lookup { } } - impl $crate::intern::Lookup for $id { + impl $crate::base_db::intern::Lookup for $id { type Data = $loc; type Database<'db> = dyn $db + 'db; diff --git a/crates/base-db/src/preproc_index.rs b/crates/hir/src/base_db/preproc_index.rs similarity index 100% rename from crates/base-db/src/preproc_index.rs rename to crates/hir/src/base_db/preproc_index.rs diff --git a/crates/base-db/src/project.rs b/crates/hir/src/base_db/project.rs similarity index 97% rename from crates/base-db/src/project.rs rename to crates/hir/src/base_db/project.rs index 6b657847..a42623d1 100644 --- a/crates/base-db/src/project.rs +++ b/crates/hir/src/base_db/project.rs @@ -1,7 +1,7 @@ use triomphe::Arc; use utils::paths::AbsPathBuf; -use crate::source_root::SourceRootId; +use crate::base_db::source_root::SourceRootId; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct CompilationProfileId(pub u32); diff --git a/crates/base-db/src/source_db.rs b/crates/hir/src/base_db/source_db.rs similarity index 99% rename from crates/base-db/src/source_db.rs rename to crates/hir/src/base_db/source_db.rs index 0f303be7..7cc3dc59 100644 --- a/crates/base-db/src/source_db.rs +++ b/crates/hir/src/base_db/source_db.rs @@ -7,7 +7,7 @@ use triomphe::Arc; use utils::{line_index::TextSize, path_identity::PathIdentityIndex}; use vfs::{FileId, VfsPath, anchored_path::AnchoredPath}; -use crate::{ +use crate::base_db::{ compilation_plan::{self, CompilationPlan}, diagnostics_config::{DiagnosticSource, DiagnosticsConfig}, preproc_index::{self, PreprocFileIndex}, diff --git a/crates/base-db/src/source_root.rs b/crates/hir/src/base_db/source_root.rs similarity index 99% rename from crates/base-db/src/source_root.rs rename to crates/hir/src/base_db/source_root.rs index f0abff31..66ac2a60 100644 --- a/crates/base-db/src/source_root.rs +++ b/crates/hir/src/base_db/source_root.rs @@ -1,6 +1,6 @@ use vfs::{FileId, FileSet, FileSetConfig, Vfs, VfsPath, anchored_path::AnchoredPath}; -use crate::source_db::SourceFileKind; +use crate::base_db::source_db::SourceFileKind; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct SourceRootId(pub u32); diff --git a/crates/hir/src/container.rs b/crates/hir/src/container.rs index b3ae3810..6b9a9485 100644 --- a/crates/hir/src/container.rs +++ b/crates/hir/src/container.rs @@ -1,4 +1,3 @@ -use base_db::intern::Lookup; use proc_macro_utils::impl_container; use smol_str::SmolStr; use triomphe::Arc; @@ -6,6 +5,7 @@ use utils::define_enum_deriving_from; use vfs::FileId; use crate::{ + base_db::intern::Lookup, db::{HirDb, InternDb}, file::HirFileId, hir_def::{ diff --git a/crates/hir/src/db.rs b/crates/hir/src/db.rs index 4f0d7f6a..5f9f3524 100644 --- a/crates/hir/src/db.rs +++ b/crates/hir/src/db.rs @@ -1,8 +1,8 @@ -use base_db::{impl_intern_key, impl_intern_lookup, salsa, source_db::SourceDb}; use syntax::SyntaxTree; use triomphe::Arc; use crate::{ + base_db::{salsa, source_db::SourceDb}, file::HirFileId, hir_def::{ block::{self, Block, BlockId, BlockLoc, BlockSourceMap}, @@ -16,6 +16,7 @@ use crate::{ }, subroutine::{self, Subroutine, SubroutineId, SubroutineLoc, SubroutineSourceMap}, }, + impl_intern_key, impl_intern_lookup, scope::{BlockScope, GenerateBlockScope, ModuleScope, SubroutineScope, UnitScope}, }; diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs index 99493e4b..df0d0c43 100644 --- a/crates/hir/src/display.rs +++ b/crates/hir/src/display.rs @@ -1,11 +1,11 @@ use std::fmt::{self, Debug}; -use base_db::intern::Lookup; use syntax::TimeUnit; use triomphe::Arc; use utils::get::GetRef; use crate::{ + base_db::intern::Lookup, container::{InContainer, InModule}, db::HirDb, hir_def::{ diff --git a/crates/hir/src/has_source.rs b/crates/hir/src/has_source.rs index 8adf2d36..029fa9d1 100644 --- a/crates/hir/src/has_source.rs +++ b/crates/hir/src/has_source.rs @@ -1,7 +1,7 @@ -use base_db::intern::Lookup; use utils::get::Get; use crate::{ + base_db::intern::Lookup, container::InFile, db::HirDb, hir_def::{ diff --git a/crates/hir/src/hir_def/block.rs b/crates/hir/src/hir_def/block.rs index dd20ccdc..6ebf8cf3 100644 --- a/crates/hir/src/hir_def/block.rs +++ b/crates/hir/src/hir_def/block.rs @@ -1,4 +1,3 @@ -use base_db::intern::Lookup; use la_arena::Arena; use proc_macro_utils::define_container; use rustc_hash::FxHashMap; @@ -33,6 +32,7 @@ use super::{ typedef::{Typedef, TypedefId, TypedefSrc, lower_typedef_data_ty}, }; use crate::{ + base_db::intern::Lookup, container::{ContainerId, InFile}, db::{HirDb, InternDb}, define_src_with_name, diff --git a/crates/hir/src/hir_def/module/generate.rs b/crates/hir/src/hir_def/module/generate.rs index ab4920dd..05b6398d 100644 --- a/crates/hir/src/hir_def/module/generate.rs +++ b/crates/hir/src/hir_def/module/generate.rs @@ -1,4 +1,3 @@ -use base_db::intern::Lookup; use la_arena::{Arena, Idx}; use proc_macro_utils::define_container; use smallvec::SmallVec; @@ -23,6 +22,7 @@ use super::{ }, }; use crate::{ + base_db::intern::Lookup, container::{ContainerId, InFile}, db::{HirDb, InternDb}, file::HirFileId, diff --git a/crates/hir/src/hir_def/subroutine.rs b/crates/hir/src/hir_def/subroutine.rs index 9fa5e4e2..e833b25c 100644 --- a/crates/hir/src/hir_def/subroutine.rs +++ b/crates/hir/src/hir_def/subroutine.rs @@ -1,4 +1,3 @@ -use base_db::intern::Lookup; use la_arena::{Arena, Idx}; use proc_macro_utils::define_container; use rustc_hash::FxHashMap; @@ -31,6 +30,7 @@ use super::{ typedef::{Typedef, TypedefId, TypedefSrc, lower_typedef_data_ty}, }; use crate::{ + base_db::intern::Lookup, container::{ContainerId, InFile}, db::{HirDb, InternDb}, define_src_with_name, diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 1bb18e99..a8eb4b30 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -1,5 +1,6 @@ #![feature(decl_macro)] +pub mod base_db; pub mod container; pub mod db; pub mod display; diff --git a/crates/ide-db/Cargo.toml b/crates/ide-db/Cargo.toml deleted file mode 100644 index d51a5f27..00000000 --- a/crates/ide-db/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "ide-db" -version = "0.0.0" -description = "IDE replated indexing DB" - -edition.workspace = true - -[dependencies] -base-db.workspace = true -hir.workspace = true -itertools.workspace = true -rustc-hash.workspace = true -tracing.workspace = true -triomphe.workspace = true -utils.workspace = true -vfs.workspace = true diff --git a/crates/ide/Cargo.toml b/crates/ide/Cargo.toml index 36cf18b3..f5c442cc 100644 --- a/crates/ide/Cargo.toml +++ b/crates/ide/Cargo.toml @@ -7,11 +7,9 @@ edition.workspace = true [dependencies] anyhow.workspace = true -base-db.workspace = true bitflags.workspace = true dissimilar = "1.0.9" hir.workspace = true -ide-db.workspace = true itertools.workspace = true la-arena.workspace = true memchr.workspace = true @@ -21,7 +19,6 @@ rustc-hash.workspace = true serde.workspace = true smol_str.workspace = true smallvec.workspace = true -span.workspace = true syntax.workspace = true thiserror.workspace = true toml = "0.9.8" diff --git a/crates/ide/src/analysis.rs b/crates/ide/src/analysis.rs index e59093ba..0edff044 100644 --- a/crates/ide/src/analysis.rs +++ b/crates/ide/src/analysis.rs @@ -1,6 +1,6 @@ use std::ops::Range; -use base_db::{ +use hir::base_db::{ Cancelled, compilation_plan::CompilationPlan, project::CompilationProfileId, @@ -8,8 +8,6 @@ use base_db::{ source_db::{SourceDb, SourceRootDb}, source_root::{SourceRootId, SourceRootRole}, }; -use ide_db::{line_index_db::LineIndexDb, root_db::RootDb}; -use span::{FilePosition, RangeInfo}; use triomphe::Arc; use utils::{ cancellation::CancellationToken, @@ -20,13 +18,14 @@ use utils::{ use vfs::FileId; use crate::{ - Cancellable, + Cancellable, FilePosition, RangeInfo, code_action::{self, CodeAction, CodeActionDiagnostics, CodeActionResolveStrategy}, code_lens::{self, CodeLens, CodeLensConfig, CodeLensKind}, completion::{ CompletionItem, context::{CompletionContext, TriggerChar}, }, + db::{line_index_db::LineIndexDb, root_db::RootDb}, diagnostics, document_highlight::{self, DocumentHighlight, DocumentHighlightConfig}, document_symbols::{self, DocumentSymbol}, diff --git a/crates/ide/src/analysis_host.rs b/crates/ide/src/analysis_host.rs index 65ea6f39..e153a23d 100644 --- a/crates/ide/src/analysis_host.rs +++ b/crates/ide/src/analysis_host.rs @@ -1,7 +1,6 @@ -use base_db::{change::Change, salsa::ParallelDatabase}; -use ide_db::root_db::RootDb; +use hir::base_db::{change::Change, salsa::ParallelDatabase}; -use crate::analysis::Analysis; +use crate::{analysis::Analysis, db::root_db::RootDb}; pub struct AnalysisHost { db: RootDb, diff --git a/crates/ide/src/code_action/context.rs b/crates/ide/src/code_action/context.rs index 557a43af..ebc3b965 100644 --- a/crates/ide/src/code_action/context.rs +++ b/crates/ide/src/code_action/context.rs @@ -1,5 +1,4 @@ use hir::semantics::{ParsedFile, Semantics}; -use ide_db::root_db::RootDb; use syntax::{ SyntaxNode, ast::{AstNode, CompilationUnit}, @@ -8,6 +7,7 @@ use utils::text_edit::{TextRange, TextSize}; use vfs::FileId; use super::{CodeActionDiagnostics, RepairKind}; +use crate::db::root_db::RootDb; pub(crate) struct CodeActionCtx<'a> { sema: &'a Semantics<'a, RootDb>, diff --git a/crates/ide/src/code_action/engine.rs b/crates/ide/src/code_action/engine.rs index 5a44f198..00bc1317 100644 --- a/crates/ide/src/code_action/engine.rs +++ b/crates/ide/src/code_action/engine.rs @@ -1,5 +1,4 @@ use hir::semantics::Semantics; -use ide_db::root_db::RootDb; use utils::text_edit::TextRange; use vfs::FileId; @@ -7,6 +6,7 @@ use super::{ CodeAction, CodeActionCollector, CodeActionCtx, CodeActionDiagnostics, CodeActionResolveStrategy, handlers, }; +use crate::db::root_db::RootDb; pub(crate) fn code_action( db: &RootDb, diff --git a/crates/ide/src/code_action/handlers/add_missing_connections.rs b/crates/ide/src/code_action/handlers/add_missing_connections.rs index 2dfc0407..4bc703f4 100644 --- a/crates/ide/src/code_action/handlers/add_missing_connections.rs +++ b/crates/ide/src/code_action/handlers/add_missing_connections.rs @@ -1,5 +1,7 @@ -use base_db::source_db::SourceDb; -use hir::{container::InModule, db::HirDb, hir_def::module::instantiation::PortConn}; +use hir::{ + base_db::source_db::SourceDb, container::InModule, db::HirDb, + hir_def::module::instantiation::PortConn, +}; use rustc_hash::FxHashSet; use syntax::{ ast::{self, AstNode}, diff --git a/crates/ide/src/code_action/handlers/add_missing_parameters.rs b/crates/ide/src/code_action/handlers/add_missing_parameters.rs index c29fc2cd..f0dee54f 100644 --- a/crates/ide/src/code_action/handlers/add_missing_parameters.rs +++ b/crates/ide/src/code_action/handlers/add_missing_parameters.rs @@ -1,5 +1,7 @@ -use base_db::source_db::SourceDb; -use hir::{container::InModule, db::HirDb, hir_def::module::instantiation::ParamAssign}; +use hir::{ + base_db::source_db::SourceDb, container::InModule, db::HirDb, + hir_def::module::instantiation::ParamAssign, +}; use rustc_hash::FxHashSet; use syntax::{ ast::{self, AstNode}, diff --git a/crates/ide/src/code_action/handlers/convert_ordered_connections.rs b/crates/ide/src/code_action/handlers/convert_ordered_connections.rs index d74eb7ca..9bd066e3 100644 --- a/crates/ide/src/code_action/handlers/convert_ordered_connections.rs +++ b/crates/ide/src/code_action/handlers/convert_ordered_connections.rs @@ -1,5 +1,4 @@ -use base_db::source_db::SourceDb; -use hir::db::HirDb; +use hir::{base_db::source_db::SourceDb, db::HirDb}; use itertools::Itertools; use syntax::{ ast::{self, AstNode}, diff --git a/crates/ide/src/code_action/module_members.rs b/crates/ide/src/code_action/module_members.rs index df95dfeb..6e7df959 100644 --- a/crates/ide/src/code_action/module_members.rs +++ b/crates/ide/src/code_action/module_members.rs @@ -6,10 +6,11 @@ use hir::{ }, semantics::Semantics, }; -use ide_db::root_db::RootDb; use smol_str::SmolStr; use utils::get::GetRef; +use crate::db::root_db::RootDb; + pub(crate) fn port_names(module: &Module) -> Vec { match &module.ports { Ports::NonAnsi { ports, .. } => { diff --git a/crates/ide/src/code_action/tests.rs b/crates/ide/src/code_action/tests.rs index 01862efd..dcd15aa4 100644 --- a/crates/ide/src/code_action/tests.rs +++ b/crates/ide/src/code_action/tests.rs @@ -1,10 +1,10 @@ -use base_db::{change::Change, source_root::SourceRoot}; -use ide_db::root_db::RootDb; +use hir::base_db::{change::Change, source_root::SourceRoot}; use triomphe::Arc; use utils::{lines::LineEnding, text_edit::TextSize}; use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use super::*; +use crate::db::root_db::RootDb; fn db_with_file(text: &str) -> (RootDb, FileId, TextSize) { let marker = "/*caret*/"; diff --git a/crates/ide/src/code_lens.rs b/crates/ide/src/code_lens.rs index 7b90a4f9..2308fc66 100644 --- a/crates/ide/src/code_lens.rs +++ b/crates/ide/src/code_lens.rs @@ -8,8 +8,6 @@ use hir::{ semantics::{Semantics, pathres::PathResolution}, source_map::IsSrc, }; -use ide_db::root_db::RootDb; -use span::{FilePosition, FileRange}; use syntax::{ ast::{self, AstNode}, has_text_range::HasTextRangeIn, @@ -18,7 +16,8 @@ use utils::{get::Get, text_edit::TextRange}; use vfs::FileId; use crate::{ - ScopeVisibility, + FilePosition, FileRange, ScopeVisibility, + db::root_db::RootDb, definitions::Definition, references::{ ReferencesConfig, diff --git a/crates/ide/src/completion/context.rs b/crates/ide/src/completion/context.rs index 14a1c371..7b78d736 100644 --- a/crates/ide/src/completion/context.rs +++ b/crates/ide/src/completion/context.rs @@ -8,11 +8,11 @@ mod parser; mod resolve; mod util; -use base_db::source_db::{SourceDb, SourceRootDb}; -use hir::semantics::Semantics; -use ide_db::root_db::RootDb; +use hir::{ + base_db::source_db::{SourceDb, SourceRootDb}, + semantics::Semantics, +}; use smallvec::{SmallVec, smallvec}; -use span::FilePosition; use syntax::{ ParserExpectedSyntax, SyntaxKeywordContext, SyntaxNode, SyntaxNodeExt, has_text_range::HasTextRange, @@ -20,6 +20,7 @@ use syntax::{ use utils::line_index::{TextRange, TextSize}; use self::caret::CaretSnapshot; +use crate::{FilePosition, db::root_db::RootDb}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum LexContext { diff --git a/crates/ide/src/completion/engine.rs b/crates/ide/src/completion/engine.rs index ba03ceae..68e56964 100644 --- a/crates/ide/src/completion/engine.rs +++ b/crates/ide/src/completion/engine.rs @@ -18,13 +18,14 @@ mod typed_filter; #[cfg(test)] mod tests; -use ide_db::root_db::RootDb; -use span::FilePosition; - pub use self::item::{CompletionItem, CompletionItemKind}; -use crate::completion::{ - context::{CompletionContext, TriggerChar, completion_context}, - request::CompletionRequest, +use crate::{ + FilePosition, + completion::{ + context::{CompletionContext, TriggerChar, completion_context}, + request::CompletionRequest, + }, + db::root_db::RootDb, }; pub fn completions( diff --git a/crates/ide/src/completion/engine/expr.rs b/crates/ide/src/completion/engine/expr.rs index 0b8ee60e..4eedd681 100644 --- a/crates/ide/src/completion/engine/expr.rs +++ b/crates/ide/src/completion/engine/expr.rs @@ -13,11 +13,9 @@ use hir::{ AnsiPortEntry, BlockEntry, GenerateBlockEntry, ModuleEntry, NonAnsiPortEntry, SubroutineEntry, UnitEntry, }, - semantics::Semantics, + semantics::{Semantics, pathres::PathResolution}, type_infer::{Ty, normalize_data_ty, type_class, type_of_decl, type_of_path_resolution}, }; -use ide_db::root_db::RootDb; -use span::FilePosition; use syntax::{ SyntaxKind, SyntaxNode, SyntaxNodeExt, ast::{self, AstNode}, @@ -26,7 +24,7 @@ use syntax::{ use utils::text_edit::TextSize; use super::{candidate::CompletionCandidate, system, typed_filter::is_compatible_typed_value}; -use crate::completion::context::CompletionContext; +use crate::{FilePosition, completion::context::CompletionContext, db::root_db::RootDb}; #[derive(Clone, Debug)] enum NameKind { @@ -158,9 +156,10 @@ fn collect_container_names( SubroutineEntry::SubroutinePortId(port_id) => { let ty = type_of_path_resolution( db, - hir::semantics::pathres::PathResolution::SubroutinePort( - InSubroutine::new(subroutine_id, port_id), - ), + PathResolution::SubroutinePort(InSubroutine::new( + subroutine_id, + port_id, + )), ) .ty; names.entry(ident.to_string()).or_insert(NameKind::Value { ty }); @@ -172,11 +171,7 @@ fn collect_container_names( } } -fn collect_file_names( - db: &RootDb, - file_id: hir::file::HirFileId, - names: &mut BTreeMap, -) { +fn collect_file_names(db: &RootDb, file_id: HirFileId, names: &mut BTreeMap) { let scope = db.file_scope(file_id); for (ident, entry) in scope.iter() { if let UnitEntry::FiledDeclId(decl_id) = entry { @@ -191,11 +186,7 @@ fn collect_file_names( } } -fn collect_module_names( - db: &RootDb, - module_id: hir::hir_def::module::ModuleId, - names: &mut BTreeMap, -) { +fn collect_module_names(db: &RootDb, module_id: ModuleId, names: &mut BTreeMap) { let scope = db.module_scope(module_id); for (ident, entry) in scope.iter() { match entry { diff --git a/crates/ide/src/completion/engine/instantiation.rs b/crates/ide/src/completion/engine/instantiation.rs index 2b6d58ca..f184ff05 100644 --- a/crates/ide/src/completion/engine/instantiation.rs +++ b/crates/ide/src/completion/engine/instantiation.rs @@ -1,14 +1,20 @@ use hir::{ db::HirDb, - hir_def::{Ident, module::ModuleId}, + hir_def::{ + Ident, + declaration::{Declaration, DeclarationSrc}, + expr::declarator::DeclaratorParent, + module::{ModuleId, port::Ports}, + }, }; -use ide_db::root_db::RootDb; use syntax::{ SyntaxAncestors, ast::{self, AstNode}, }; use utils::get::{Get, GetRef}; +use crate::db::root_db::RootDb; + pub(super) fn ports_of_module_sorted(db: &RootDb, module_id: ModuleId) -> Vec { let mut names = ports_of_module_in_order(db, module_id); names.sort(); @@ -21,7 +27,7 @@ pub(super) fn ports_of_module_in_order(db: &RootDb, module_id: ModuleId) -> Vec< let mut names = Vec::new(); match &module.ports { - hir::hir_def::module::port::Ports::Ansi(port_decls) => { + Ports::Ansi(port_decls) => { for (_, port_decl) in port_decls.iter() { for decl_id in port_decl.decls.clone() { if let Some(name) = module.get(decl_id).name.as_ref() { @@ -30,7 +36,7 @@ pub(super) fn ports_of_module_in_order(db: &RootDb, module_id: ModuleId) -> Vec< } } } - hir::hir_def::module::port::Ports::NonAnsi { ports, .. } => { + Ports::NonAnsi { ports, .. } => { for (_, port) in ports.iter() { if let Some(label) = port.label.as_ref() { names.push(label.clone()); @@ -62,18 +68,14 @@ pub(super) fn overridable_params_of_module_in_order( if decl.name.is_none() { continue; } - let hir::hir_def::expr::declarator::DeclaratorParent::DeclarationId(declaration_id) = - decl.parent - else { + let DeclaratorParent::DeclarationId(declaration_id) = decl.parent else { continue; }; - let hir::hir_def::declaration::Declaration::ParamDecl(_) = module.get(declaration_id) - else { + let Declaration::ParamDecl(_) = module.get(declaration_id) else { continue; }; - let Some(hir::hir_def::declaration::DeclarationSrc::ParameterDeclaration(ptr)) = - module_src_map.get(declaration_id) + let Some(DeclarationSrc::ParameterDeclaration(ptr)) = module_src_map.get(declaration_id) else { continue; }; diff --git a/crates/ide/src/completion/engine/keywords.rs b/crates/ide/src/completion/engine/keywords.rs index acc25038..2fa0f860 100644 --- a/crates/ide/src/completion/engine/keywords.rs +++ b/crates/ide/src/completion/engine/keywords.rs @@ -1,13 +1,15 @@ use hir::db::HirDb; -use ide_db::root_db::RootDb; -use span::FilePosition; use super::candidate::CompletionCandidate; -use crate::completion::{ - context::CompletionContext, - engine::snippets, - request::{KeywordProvider, KeywordSnippetScope}, - syntax_keywords, +use crate::{ + FilePosition, + completion::{ + context::CompletionContext, + engine::snippets, + request::{KeywordProvider, KeywordSnippetScope}, + syntax_keywords, + }, + db::root_db::RootDb, }; pub(super) fn complete_keywords( diff --git a/crates/ide/src/completion/engine/member.rs b/crates/ide/src/completion/engine/member.rs index 8a84d2fb..376d1d4a 100644 --- a/crates/ide/src/completion/engine/member.rs +++ b/crates/ide/src/completion/engine/member.rs @@ -3,8 +3,6 @@ use hir::{ semantics::Semantics, type_infer::{TyMember, members_of_ty, type_of_expr, type_of_path_resolution}, }; -use ide_db::root_db::RootDb; -use span::FilePosition; use syntax::{ SyntaxAncestors, SyntaxNode, SyntaxNodeExt, ast::{self, AstNode}, @@ -12,7 +10,7 @@ use syntax::{ }; use super::candidate::CompletionCandidate; -use crate::completion::context::CompletionContext; +use crate::{FilePosition, completion::context::CompletionContext, db::root_db::RootDb}; pub(super) fn complete_member_access( db: &RootDb, diff --git a/crates/ide/src/completion/engine/named.rs b/crates/ide/src/completion/engine/named.rs index dc9f290d..9b201054 100644 --- a/crates/ide/src/completion/engine/named.rs +++ b/crates/ide/src/completion/engine/named.rs @@ -1,7 +1,5 @@ use hir::{hir_def::lower_ident_opt, semantics::Semantics}; -use ide_db::root_db::RootDb; use rustc_hash::FxHashSet; -use span::FilePosition; use syntax::ast::{self, AstNode}; use super::{ @@ -15,7 +13,8 @@ use super::{ }, }; use crate::{ - completion::context::CompletionContext, module_resolution::resolve_instantiation_target, + FilePosition, completion::context::CompletionContext, db::root_db::RootDb, + module_resolution::resolve_instantiation_target, }; pub(super) fn complete_named_port_names( @@ -129,7 +128,7 @@ pub(super) fn complete_named_port_conn_expr( return Vec::new(); }; - let Some(port_name) = hir::hir_def::lower_ident_opt(conn.name()) else { + let Some(port_name) = lower_ident_opt(conn.name()) else { return Vec::new(); }; @@ -179,7 +178,7 @@ pub(super) fn complete_named_param_assign_expr( return Vec::new(); }; - let Some(param_name) = hir::hir_def::lower_ident_opt(assign.name()) else { + let Some(param_name) = lower_ident_opt(assign.name()) else { return Vec::new(); }; diff --git a/crates/ide/src/completion/engine/paren_list.rs b/crates/ide/src/completion/engine/paren_list.rs index 05397ebf..207a2e36 100644 --- a/crates/ide/src/completion/engine/paren_list.rs +++ b/crates/ide/src/completion/engine/paren_list.rs @@ -1,7 +1,13 @@ -use hir::{db::HirDb, hir_def::lower_ident_opt, semantics::Semantics}; -use ide_db::root_db::RootDb; +use hir::{ + db::HirDb, + hir_def::{ + Ident, lower_ident_opt, + module::{ModuleId, ModuleSrc}, + }, + scope::{ModuleEntry, UnitEntry}, + semantics::Semantics, +}; use rustc_hash::FxHashSet; -use span::FilePosition; use syntax::{ SyntaxAncestors, SyntaxNodeExt, ast::{self, AstNode}, @@ -22,10 +28,12 @@ use super::{ }, }; use crate::{ + FilePosition, completion::{ context::CompletionContext, request::{HashKind, ParenListKind}, }, + db::root_db::RootDb, module_resolution::resolve_instantiation_target, }; @@ -83,21 +91,17 @@ fn complete_parameter_port_list_with_typedefs( return Vec::new(); }; let (_, file_src_map) = db.hir_file_with_source_map(file_id); - let module_src = hir::hir_def::module::ModuleSrc::from(module); - let Some(module_id) = - file_src_map.get(module_src).map(|id| hir::hir_def::module::ModuleId::new(file_id, id)) - else { + let module_src = ModuleSrc::from(module); + let Some(module_id) = file_src_map.get(module_src).map(|id| ModuleId::new(file_id, id)) else { return Vec::new(); }; let mut items: Vec = db .unit_scope() .iter() - .filter_map(|(ident, entry)| { - matches!(entry, hir::scope::UnitEntry::FiledTypedefId(_)).then_some(ident) - }) + .filter_map(|(ident, entry)| matches!(entry, UnitEntry::FiledTypedefId(_)).then_some(ident)) .chain(db.module_scope(module_id).iter().filter_map(|(ident, entry)| { - matches!(entry, hir::scope::ModuleEntry::TypedefId(_)).then_some(ident) + matches!(entry, ModuleEntry::TypedefId(_)).then_some(ident) })) .map(|ident| ident.to_string()) .filter(|name| name.starts_with(prefix)) @@ -149,7 +153,7 @@ fn complete_port_connections( let mut has_named = false; let mut has_ordered = false; - let mut used_named_ports: FxHashSet = FxHashSet::default(); + let mut used_named_ports: FxHashSet = FxHashSet::default(); for conn in instance.connections().children() { if let Some(named) = conn.as_named_port_connection() { has_named = true; @@ -233,7 +237,7 @@ fn complete_param_value_assignment( let mut has_named = false; let mut has_ordered = false; - let mut used_named_params: FxHashSet = FxHashSet::default(); + let mut used_named_params: FxHashSet = FxHashSet::default(); for assignment in params.parameters().children() { if let Some(named) = assignment.as_named_param_assignment() { has_named = true; @@ -308,6 +312,6 @@ fn resolve_target_module_id( _sema: &Semantics<'_, RootDb>, from_file: vfs::FileId, instantiation: ast::HierarchyInstantiation<'_>, -) -> Option { +) -> Option { resolve_instantiation_target(db, from_file, instantiation).unique() } diff --git a/crates/ide/src/completion/engine/plan.rs b/crates/ide/src/completion/engine/plan.rs index e1a24ade..605208f0 100644 --- a/crates/ide/src/completion/engine/plan.rs +++ b/crates/ide/src/completion/engine/plan.rs @@ -1,13 +1,14 @@ -use ide_db::root_db::RootDb; -use span::FilePosition; - use super::{ CompletionItem, candidate, expr, keywords, literal, member, named, paren_list, port_list, preproc, sensitivity_list, system, }; -use crate::completion::{ - context::CompletionContext, - request::{CompletionProvider, CompletionRequest}, +use crate::{ + FilePosition, + completion::{ + context::CompletionContext, + request::{CompletionProvider, CompletionRequest}, + }, + db::root_db::RootDb, }; pub(super) fn complete_request( diff --git a/crates/ide/src/completion/engine/port_list.rs b/crates/ide/src/completion/engine/port_list.rs index b2d91741..4df1183b 100644 --- a/crates/ide/src/completion/engine/port_list.rs +++ b/crates/ide/src/completion/engine/port_list.rs @@ -4,13 +4,15 @@ use hir::{ scope::{ModuleEntry, UnitEntry}, semantics::Semantics, }; -use ide_db::root_db::RootDb; -use span::FilePosition; use syntax::ast; use utils::get::Get; use super::candidate::CompletionCandidate; -use crate::completion::{context::CompletionContext, request::PortListKind}; +use crate::{ + FilePosition, + completion::{context::CompletionContext, request::PortListKind}, + db::root_db::RootDb, +}; pub(super) fn complete_in_port_list( db: &RootDb, diff --git a/crates/ide/src/completion/engine/sensitivity_list.rs b/crates/ide/src/completion/engine/sensitivity_list.rs index bac05c88..1f90989f 100644 --- a/crates/ide/src/completion/engine/sensitivity_list.rs +++ b/crates/ide/src/completion/engine/sensitivity_list.rs @@ -1,10 +1,12 @@ use hir::{db::HirDb, file::HirFileId, hir_def::module::ModuleId, source_map::IsSrc}; -use ide_db::root_db::RootDb; -use span::FilePosition; use utils::{get::Get, text_edit::TextSize}; use super::{candidate::CompletionCandidate, typed_filter::value_candidates_in_module}; -use crate::completion::{context::CompletionContext, syntax_keywords}; +use crate::{ + FilePosition, + completion::{context::CompletionContext, syntax_keywords}, + db::root_db::RootDb, +}; pub(super) fn complete_sensitivity_list( db: &RootDb, diff --git a/crates/ide/src/completion/engine/tests.rs b/crates/ide/src/completion/engine/tests.rs index 11ebe642..0d1e9488 100644 --- a/crates/ide/src/completion/engine/tests.rs +++ b/crates/ide/src/completion/engine/tests.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use base_db::{change::Change, source_root::SourceRoot}; +use hir::base_db::{change::Change, source_root::SourceRoot}; use insta::assert_debug_snapshot; use triomphe::Arc; use utils::{lines::LineEnding, text_edit::TextSize}; diff --git a/crates/ide/src/completion/engine/typed_filter.rs b/crates/ide/src/completion/engine/typed_filter.rs index ece5598e..7b32e85b 100644 --- a/crates/ide/src/completion/engine/typed_filter.rs +++ b/crates/ide/src/completion/engine/typed_filter.rs @@ -1,16 +1,22 @@ use hir::{ container::InContainer, db::HirDb, - hir_def::{Ident, declaration::Declaration, module::ModuleId}, + hir_def::{ + Ident, + declaration::{Declaration, DeclarationId, DeclarationSrc}, + expr::declarator::DeclaratorParent, + module::{ModuleId, port::Ports}, + }, scope::ModuleEntry, semantics::pathres::PathResolution, type_infer::{ Ty, TyClass, packed_bit_width, type_class, type_of_decl, type_of_path_resolution, }, }; -use ide_db::root_db::RootDb; use utils::get::{Get, GetRef}; +use crate::db::root_db::RootDb; + pub(super) fn expected_port_ty( db: &RootDb, target_module_id: ModuleId, @@ -42,9 +48,7 @@ pub(super) fn expected_param_ty( return None; }; - let hir::hir_def::expr::declarator::DeclaratorParent::DeclarationId(declaration_id) = - target_module.get(decl_id).parent - else { + let DeclaratorParent::DeclarationId(declaration_id) = target_module.get(decl_id).parent else { return None; }; let Declaration::ParamDecl(_) = target_module.get(declaration_id) else { @@ -77,7 +81,7 @@ pub(super) fn value_candidates_in_module(db: &RootDb, module_id: ModuleId) -> Ve } match &module.ports { - hir::hir_def::module::port::Ports::Ansi(port_decls) => { + Ports::Ansi(port_decls) => { for (_, port_decl) in port_decls.iter() { for decl_id in port_decl.decls.clone() { if let Some(name) = module.get(decl_id).name.as_ref() { @@ -87,7 +91,7 @@ pub(super) fn value_candidates_in_module(db: &RootDb, module_id: ModuleId) -> Ve } } } - hir::hir_def::module::port::Ports::NonAnsi { decls, .. } => { + Ports::NonAnsi { decls, .. } => { for (_, port_decl) in decls.iter() { for decl_id in port_decl.decls.clone() { if let Some(name) = module.get(decl_id).name.as_ref() { @@ -148,13 +152,11 @@ pub(super) fn is_compatible_typed_value(db: &RootDb, expected: &Ty, candidate: & fn is_overridable_parameter_decl( db: &RootDb, module_id: ModuleId, - declaration_id: hir::hir_def::declaration::DeclarationId, + declaration_id: DeclarationId, ) -> bool { let (_, module_src_map) = db.module_with_source_map(module_id); let tree = db.parse(module_id.file_id); - let Some(hir::hir_def::declaration::DeclarationSrc::ParameterDeclaration(ptr)) = - module_src_map.get(declaration_id) - else { + let Some(DeclarationSrc::ParameterDeclaration(ptr)) = module_src_map.get(declaration_id) else { return false; }; let Some(node) = ptr.to_node(&tree) else { diff --git a/crates/ide-db/src/lib.rs b/crates/ide/src/db.rs similarity index 100% rename from crates/ide-db/src/lib.rs rename to crates/ide/src/db.rs diff --git a/crates/ide-db/src/apply_change.rs b/crates/ide/src/db/apply_change.rs similarity index 95% rename from crates/ide-db/src/apply_change.rs rename to crates/ide/src/db/apply_change.rs index 80e39a90..0cbeb3fd 100644 --- a/crates/ide-db/src/apply_change.rs +++ b/crates/ide/src/db/apply_change.rs @@ -1,4 +1,4 @@ -use base_db::{ +use hir::base_db::{ change::Change, salsa::{Database, Durability}, source_root::SourceRootId, @@ -6,7 +6,7 @@ use base_db::{ use itertools::{Either, Itertools}; use rustc_hash::FxHashSet; -use crate::root_db::RootDb; +use crate::db::root_db::RootDb; impl RootDb { pub fn request_cancellation(&mut self) { diff --git a/crates/ide-db/src/line_index_db.rs b/crates/ide/src/db/line_index_db.rs similarity index 88% rename from crates/ide-db/src/line_index_db.rs rename to crates/ide/src/db/line_index_db.rs index d31d9dc1..611fc652 100644 --- a/crates/ide-db/src/line_index_db.rs +++ b/crates/ide/src/db/line_index_db.rs @@ -1,4 +1,4 @@ -use base_db::{salsa, source_db::SourceDb}; +use hir::base_db::{salsa, source_db::SourceDb}; use triomphe::Arc; use utils::line_index::LineIndex; use vfs::FileId; diff --git a/crates/ide-db/src/root_db.rs b/crates/ide/src/db/root_db.rs similarity index 57% rename from crates/ide-db/src/root_db.rs rename to crates/ide/src/db/root_db.rs index 83367f48..742705fb 100644 --- a/crates/ide-db/src/root_db.rs +++ b/crates/ide/src/db/root_db.rs @@ -1,21 +1,31 @@ use std::{fmt, mem::ManuallyDrop}; -use base_db::{ - diagnostics_config::DiagnosticsConfig, - project::ProjectConfig, - salsa::{self, Durability}, - source_db::{FileLoader, SourceDb, SourceRootDb}, +use hir::{ + base_db::{ + diagnostics_config::DiagnosticsConfig, + project::ProjectConfig, + salsa::{self, Durability}, + source_db::{ + FileLoader, ParseSrcForCompilationQuery, ParseSrcQuery, SourceDb, SourceDbStorage, + SourceRootDb, SourceRootDbStorage, + }, + }, + db::{ + BlockQuery, BlockScopeQuery, BlockWithSourceMapQuery, FileScopeQuery, HirDbStorage, + HirFileQuery, HirFileWithSourceMapQuery, InternDbStorage, ModuleQuery, ModuleScopeQuery, + ModuleWithSourceMapQuery, + }, }; use triomphe::Arc; use vfs::{FileId, anchored_path::AnchoredPath}; -use crate::line_index_db::LineIndexDbStorage; +use crate::db::line_index_db::LineIndexDbStorage; #[salsa::database( - base_db::source_db::SourceDbStorage, - base_db::source_db::SourceRootDbStorage, - hir::db::HirDbStorage, - hir::db::InternDbStorage, + SourceDbStorage, + SourceRootDbStorage, + HirDbStorage, + InternDbStorage, LineIndexDbStorage )] pub struct RootDb { @@ -63,19 +73,17 @@ impl RootDb { pub fn update_parse_query_lru_capacity(&mut self, lru_capacity: Option) { let lru_capacity = lru_capacity.unwrap_or(DEFAULT_PARSE_LRU_CAP); - base_db::source_db::ParseSrcQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - base_db::source_db::ParseSrcForCompilationQuery - .in_db_mut(self) - .set_lru_capacity(lru_capacity); - hir::db::HirFileWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::ModuleWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::BlockWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::HirFileQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::ModuleQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::BlockQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::FileScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::ModuleScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); - hir::db::BlockScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + ParseSrcQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + ParseSrcForCompilationQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + HirFileWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + ModuleWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + BlockWithSourceMapQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + HirFileQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + ModuleQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + BlockQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + FileScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + ModuleScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); + BlockScopeQuery.in_db_mut(self).set_lru_capacity(lru_capacity); } } diff --git a/crates/ide/src/definitions.rs b/crates/ide/src/definitions.rs index 1b074fd9..7c4b6458 100644 --- a/crates/ide/src/definitions.rs +++ b/crates/ide/src/definitions.rs @@ -1,5 +1,5 @@ -use base_db::intern::Lookup; use hir::{ + base_db::intern::Lookup, container::{ContainerId, InContainer, InFile, InModule, InSubroutine}, db::HirDb, file::HirFileId, @@ -20,7 +20,6 @@ use hir::{ semantics::{Semantics, pathres::PathResolution}, source_map::{IsNamedSrc, IsSrc, ToAstNode}, }; -use ide_db::root_db::RootDb; use smallvec::{SmallVec, smallvec}; use smol_str::SmolStr; use syntax::{ @@ -37,9 +36,12 @@ use utils::{ line_index::TextRange, }; -use crate::module_resolution::{ - ModuleResolution, resolve_instantiation_target, resolve_named_param_assignment, - resolve_named_port_connection, +use crate::{ + db::root_db::RootDb, + module_resolution::{ + ModuleResolution, resolve_instantiation_target, resolve_named_param_assignment, + resolve_named_port_connection, + }, }; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -573,16 +575,18 @@ fn scoped_right_token(scoped: ast::ScopedName<'_>) -> Option> { #[cfg(test)] mod tests { - use base_db::{change::Change, source_root::SourceRoot}; - use hir::{container::InModule, semantics::pathres::PathResolution}; - use ide_db::root_db::RootDb; + use hir::{ + base_db::{change::Change, source_root::SourceRoot}, + container::InModule, + semantics::pathres::PathResolution, + }; use syntax::SyntaxNodeExt; use triomphe::Arc; use utils::{lines::LineEnding, text_edit::TextSize}; use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use super::*; - use crate::analysis_host::AnalysisHost; + use crate::{analysis_host::AnalysisHost, db::root_db::RootDb}; fn host_with_file(text: &str) -> (AnalysisHost, FileId) { let file_id = FileId(0); diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index 13f9aa0a..11a252d8 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -1,11 +1,14 @@ -use base_db::{ - diagnostics_config::DiagnosticSource as SlangDiagnosticSource, - project::CompilationProfileId, - source_db::{SourceDb, SourceRootDb}, - source_root::{SourceRootDiagnosticScope, SourceRootRole}, +use hir::{ + base_db::{ + diagnostics_config::DiagnosticSource as SlangDiagnosticSource, + project::CompilationProfileId, + source_db::{SourceDb, SourceRootDb}, + source_root::{SourceRootDiagnosticScope, SourceRootRole}, + }, + db::HirDb, + hir_def::module::ModuleId, + source_map::IsSrc, }; -use hir::{db::HirDb, hir_def::module::ModuleId, source_map::IsSrc}; -use ide_db::root_db::RootDb; use syntax::{DiagnosticSeverity, SyntaxDiagnostic}; use utils::{ get::Get, @@ -13,7 +16,10 @@ use utils::{ }; use vfs::FileId; -use crate::module_resolution::{ModuleResolution, ModuleResolutionAmbiguity, resolve_module_name}; +use crate::{ + db::root_db::RootDb, + module_resolution::{ModuleResolution, ModuleResolutionAmbiguity, resolve_module_name}, +}; const AMBIGUOUS_MODULE_INSTANTIATION: VideDiagnosticDescriptor = VideDiagnosticDescriptor { code: 1, subsystem: 0, name: "ambiguous-module-instantiation" }; @@ -428,15 +434,15 @@ fn to_text_range(diag: &SyntaxDiagnostic) -> TextRange { #[cfg(test)] mod tests { - use base_db::{ + use hir::base_db::{ change::Change, + compilation_plan::compilation_source_buffers_for_plan, diagnostics_config::DiagnosticsConfig, project::{CompilationProfile, CompilationProfileId, PreprocessConfig, ProjectConfig}, salsa::Durability, source_db::{SourceDb, SourceRootDb}, source_root::{SourceRoot, SourceRootId, SourceRootRole}, }; - use ide_db::root_db::RootDb; use triomphe::Arc; use utils::{lines::LineEnding, paths::AbsPathBuf, test_support::TestDir}; use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; @@ -445,6 +451,7 @@ mod tests { AMBIGUOUS_MODULE_INSTANTIATION, DIAGNOSTIC_INACTIVE_PREPROCESSOR_BRANCH, DiagnosticSource, DiagnosticTag, INACTIVE_PREPROCESSOR_BRANCH, diagnostics, source_root_diagnostics, }; + use crate::db::root_db::RootDb; fn db_with_files(files: &[(&str, &str)], configured: bool) -> RootDb { db_with_files_in_role(files, SourceRootRole::Local, configured) @@ -898,7 +905,7 @@ mod tests { let plan = db.compilation_plan_for_root(SourceRootId(0)); assert_eq!(plan.roots, vec![FileId(0), FileId(1)]); - let buffers = base_db::compilation_plan::compilation_source_buffers_for_plan(&db, &plan); + let buffers = compilation_source_buffers_for_plan(&db, &plan); let buffer_paths = buffers.iter().map(|buffer| buffer.path.as_str()).collect::>(); let a_path = a_path.to_string(); let b_path = b_path.to_string(); diff --git a/crates/ide/src/document_highlight.rs b/crates/ide/src/document_highlight.rs index 89e22629..0f0e05f3 100644 --- a/crates/ide/src/document_highlight.rs +++ b/crates/ide/src/document_highlight.rs @@ -1,12 +1,11 @@ use hir::{container::InFile, file::HirFileId, semantics::Semantics}; -use ide_db::root_db::RootDb; -use span::FilePosition; use syntax::{SyntaxNodeExt, SyntaxTokenWithParent, TokenKind, token::TokenKindExt}; use utils::line_index::TextRange; use vfs::FileId; use crate::{ - ScopeVisibility, + FilePosition, ScopeVisibility, + db::root_db::RootDb, definitions::{Definition, DefinitionClass}, references::{ self, ReferenceCategory, ReferencesConfig, @@ -100,7 +99,7 @@ fn highlight_refs<'a>( mod tests { use std::path::PathBuf; - use base_db::{change::Change, source_root::SourceRoot}; + use hir::base_db::{change::Change, source_root::SourceRoot}; use insta::assert_debug_snapshot; use triomphe::Arc; use utils::{lines::LineEnding, text_edit::TextSize}; diff --git a/crates/ide/src/document_symbols.rs b/crates/ide/src/document_symbols.rs index 70ba722b..367aa93b 100644 --- a/crates/ide/src/document_symbols.rs +++ b/crates/ide/src/document_symbols.rs @@ -1,7 +1,7 @@ use std::iter::Peekable; -use base_db::intern::Lookup; use hir::{ + base_db::intern::Lookup, container::InFile, db::HirDb, file::HirFileId, @@ -22,7 +22,7 @@ use hir::{ GenerateBlockId, GenerateBlockItem, GenerateBlockLoc, GenerateItem, GenerateRegion, GenerateRegionId, GenerateRegionSrc, }, - instantiation::{Instance, InstanceId, Instantiation, InstantiationId}, + instantiation::{Instance, InstanceId, InstanceSrc, Instantiation, InstantiationId}, port::Ports, specify::{SpecifyBlock, SpecifyBlockId, SpecifyBlockItem, SpecifyBlockSrc}, }, @@ -34,7 +34,6 @@ use hir::{ region_tree::{RegionNode, RegionTreeIterator}, source_map::{IsNamedSrc, IsSrc}, }; -use ide_db::root_db::RootDb; use la_arena::Idx; use smol_str::SmolStr; use syntax::WalkEvent; @@ -44,7 +43,7 @@ use utils::{ }; use vfs::FileId; -use crate::SymbolKind; +use crate::{SymbolKind, db::root_db::RootDb}; #[derive(Debug, Clone)] pub struct DocumentSymbol { @@ -494,7 +493,7 @@ fn build_generate_region( SrcMap: Get> + Get> + Get> - + Get> + + Get> + Get> + Get> + Get> diff --git a/crates/ide/src/folding_ranges.rs b/crates/ide/src/folding_ranges.rs index f58d3290..31982fa9 100644 --- a/crates/ide/src/folding_ranges.rs +++ b/crates/ide/src/folding_ranges.rs @@ -1,5 +1,5 @@ -use base_db::source_db::SourceDb; use hir::{ + base_db::source_db::SourceDb, db::HirDb, file::HirFileId, hir_def::{ @@ -10,7 +10,6 @@ use hir::{ region_tree::RegionTree, source_map::{IsNamedSrc, IsSrc, SourceMap}, }; -use ide_db::{line_index_db::LineIndexDb, root_db::RootDb}; use la_arena::Arena; use memchr::memmem::Finder; use rustc_hash::FxHashSet; @@ -27,6 +26,8 @@ use utils::{ }; use vfs::FileId; +use crate::db::{line_index_db::LineIndexDb, root_db::RootDb}; + #[derive(Debug, Clone, Copy)] pub struct FoldingConfig { pub line_fold_only: bool, diff --git a/crates/ide/src/formatting.rs b/crates/ide/src/formatting.rs index 90bf3ced..77e2df61 100644 --- a/crates/ide/src/formatting.rs +++ b/crates/ide/src/formatting.rs @@ -6,12 +6,9 @@ use std::{ }; use anyhow::Context as _; -use base_db::source_db::SourceDb; use dissimilar::Chunk; -use hir::semantics::Semantics; -use ide_db::root_db::RootDb; +use hir::{base_db::source_db::SourceDb, semantics::Semantics}; use itertools::Itertools; -use span::FilePosition; use syntax::{ SyntaxCursor, SyntaxCursorExt, SyntaxKind, SyntaxTrivia, Trivia, has_text_range::HasTextRange, token::SyntaxTokenWithParentExt, trivia::TriviaKindExt, @@ -26,6 +23,8 @@ use utils::{ }; use vfs::FileId; +use crate::{FilePosition, db::root_db::RootDb}; + #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Deserialize)] #[serde(rename_all = "lowercase")] pub enum FormatterProvider { @@ -373,9 +372,7 @@ fn format_previous<'a>( #[cfg(test)] mod tests { - use base_db::{change::Change, source_root::SourceRoot}; - use ide_db::{line_index_db::LineIndexDb, root_db::RootDb}; - use span::FilePosition; + use hir::base_db::{change::Change, source_root::SourceRoot}; use triomphe::Arc; use utils::{ cancellation::CancellationToken, @@ -385,6 +382,10 @@ mod tests { use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use super::{FmtConfig, FormatterProvider, format_on_type}; + use crate::{ + FilePosition, + db::{line_index_db::LineIndexDb, root_db::RootDb}, + }; fn db_with_file(text: &str) -> (RootDb, FileId) { let file_id = FileId(0); diff --git a/crates/ide/src/goto_declaration.rs b/crates/ide/src/goto_declaration.rs index abc9d811..7bdaf711 100644 --- a/crates/ide/src/goto_declaration.rs +++ b/crates/ide/src/goto_declaration.rs @@ -1,10 +1,10 @@ use hir::semantics::Semantics; -use ide_db::root_db::RootDb; use itertools::Itertools; -use span::{FilePosition, RangeInfo}; use syntax::{SyntaxNodeExt, has_text_range::HasTextRange}; use crate::{ + FilePosition, RangeInfo, + db::root_db::RootDb, definitions::DefinitionClass, goto_definition, navigation_target::{NavTarget, ToNav}, diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs index 5a2f9b41..b59983aa 100644 --- a/crates/ide/src/goto_definition.rs +++ b/crates/ide/src/goto_definition.rs @@ -1,7 +1,5 @@ use hir::{container::InFile, file::HirFileId, semantics::Semantics}; -use ide_db::root_db::RootDb; use itertools::Itertools; -use span::{FilePosition, RangeInfo}; use syntax::{ SyntaxNodeExt, SyntaxTokenWithParent, TokenKind, has_text_range::HasTextRange, @@ -9,6 +7,8 @@ use syntax::{ }; use crate::{ + FilePosition, RangeInfo, + db::root_db::RootDb, definitions::DefinitionClass, navigation_target::{NavTarget, ToNav}, }; diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index 5700ba42..38925457 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs @@ -1,6 +1,4 @@ use hir::{container::InContainer, file::HirFileId, hir_def::expr::Expr, semantics::Semantics}; -use ide_db::root_db::RootDb; -use span::{FilePosition, RangeInfo}; use syntax::{ SyntaxNodeExt, SyntaxTokenWithParent, TokenKind, ast::{self, AstNode}, @@ -9,7 +7,10 @@ use syntax::{ }; use utils::get::GetRef; -use crate::{definitions::DefinitionClass, markup::Markup, render}; +use crate::{ + FilePosition, RangeInfo, db::root_db::RootDb, definitions::DefinitionClass, markup::Markup, + render, +}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum HoverFormat { diff --git a/crates/ide/src/inlay_hint.rs b/crates/ide/src/inlay_hint.rs index 568553b5..5fb9d921 100644 --- a/crates/ide/src/inlay_hint.rs +++ b/crates/ide/src/inlay_hint.rs @@ -18,7 +18,6 @@ use hir::{ scope::{AnsiPortEntry, ModuleEntry, ModuleScope, NonAnsiPortEntry}, source_map::{IsNamedSrc, IsSrc}, }; -use ide_db::root_db::RootDb; use syntax::{ast, match_ast_kind}; use utils::{ check_or_throw, @@ -27,7 +26,7 @@ use utils::{ }; use vfs::FileId; -use crate::{markup::Markup, module_resolution::resolve_module_name}; +use crate::{db::root_db::RootDb, markup::Markup, module_resolution::resolve_module_name}; #[derive(Debug)] pub struct InlayHintConfig { @@ -476,8 +475,7 @@ fn should_skip(expr: &Expr, name: &str) -> bool { #[cfg(test)] mod tests { - use base_db::{change::Change, source_root::SourceRoot}; - use ide_db::root_db::RootDb; + use hir::base_db::{change::Change, source_root::SourceRoot}; use triomphe::Arc; use utils::{ lines::LineEnding, @@ -486,6 +484,7 @@ mod tests { use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use super::{InlayHintConfig, InlayKind, inlay_hint}; + use crate::db::root_db::RootDb; fn db_with_file(text: &str) -> (RootDb, FileId) { let file_id = FileId(0); diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index f7dff37e..e66f17d5 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs @@ -1,7 +1,7 @@ #![feature(try_blocks)] #![feature(decl_macro)] -pub use base_db::Cancelled; +pub use hir::base_db::Cancelled; use hir::hir_def::{ block::BlockId, expr::declarator::DeclId, @@ -9,6 +9,7 @@ use hir::hir_def::{ stmt::StmtId, }; use syntax::{SyntaxKind, ast, match_ast_kind}; +pub use types::{ErasedFileAstId, FilePosition, FileRange, RangeInfo}; pub type Cancellable = Result; pub mod analysis; @@ -23,6 +24,7 @@ pub mod source_change; pub mod code_action; pub mod code_lens; pub mod completion; +pub mod db; pub mod diagnostics; pub mod document_highlight; pub mod document_symbols; @@ -39,6 +41,7 @@ pub mod semantic_tokens; pub mod signature_help; #[cfg(test)] mod test_utils; +pub mod types; #[cfg(test)] mod verilog_2005; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] diff --git a/crates/ide/src/module_resolution.rs b/crates/ide/src/module_resolution.rs index 0cb35793..e535f235 100644 --- a/crates/ide/src/module_resolution.rs +++ b/crates/ide/src/module_resolution.rs @@ -1,16 +1,16 @@ use std::cmp::Ordering; -use base_db::{source_db::SourceRootDb, source_root::SourceRootRole}; use hir::{ + base_db::{source_db::SourceRootDb, source_root::SourceRootRole}, container::InModule, db::HirDb, hir_def::{ - Ident, declaration::Declaration, expr::declarator::DeclaratorParent, module::ModuleId, + Ident, declaration::Declaration, expr::declarator::DeclaratorParent, lower_ident_opt, + module::ModuleId, }, scope::{ModuleEntry, ScopeResolution}, semantics::pathres::PathResolution, }; -use ide_db::root_db::RootDb; use syntax::{ SyntaxAncestors, ast::{self, AstNode}, @@ -18,6 +18,8 @@ use syntax::{ use utils::get::GetRef; use vfs::{FileId, VfsPath}; +use crate::db::root_db::RootDb; + #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) enum ModuleResolution { Unique(ModuleId), @@ -47,7 +49,7 @@ pub(crate) fn resolve_instantiation_target( from_file: FileId, instantiation: ast::HierarchyInstantiation, ) -> ModuleResolution { - let Some(name) = hir::hir_def::lower_ident_opt(instantiation.type_()) else { + let Some(name) = lower_ident_opt(instantiation.type_()) else { return ModuleResolution::Unresolved; }; resolve_module_name(db, from_file, &name) @@ -67,7 +69,7 @@ pub(crate) fn resolve_named_port_connection( from_file: FileId, conn: ast::NamedPortConnection, ) -> Option { - let name = hir::hir_def::lower_ident_opt(conn.name())?; + let name = lower_ident_opt(conn.name())?; let instantiation = SyntaxAncestors::start_from(conn.syntax()).find_map(ast::HierarchyInstantiation::cast)?; resolve_named_port_in_instantiation(db, from_file, instantiation, &name) @@ -78,7 +80,7 @@ pub(crate) fn resolve_named_param_assignment( from_file: FileId, assign: ast::NamedParamAssignment, ) -> Option { - let name = hir::hir_def::lower_ident_opt(assign.name())?; + let name = lower_ident_opt(assign.name())?; let instantiation = SyntaxAncestors::start_from(assign.syntax()).find_map(ast::HierarchyInstantiation::cast)?; resolve_named_param_in_instantiation(db, from_file, instantiation, &name) @@ -279,8 +281,11 @@ fn dir_ancestors(path: VfsPath) -> Vec { #[cfg(test)] mod tests { - use base_db::{change::Change, source_db::SourceDb, source_root::SourceRoot}; - use hir::{container::InModule, semantics::pathres::PathResolution}; + use hir::{ + base_db::{change::Change, source_db::SourceDb, source_root::SourceRoot}, + container::InModule, + semantics::pathres::PathResolution, + }; use smol_str::SmolStr; use syntax::{SyntaxNodeExt, ast}; use triomphe::Arc; diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs index 5d8ee81f..7dda6ab8 100644 --- a/crates/ide/src/navigation_target.rs +++ b/crates/ide/src/navigation_target.rs @@ -1,5 +1,5 @@ -use base_db::intern::Lookup; use hir::{ + base_db::intern::Lookup, container::{ContainerId, InContainer, InFile, InModule, InSubroutine}, db::HirDb, hir_def::{ @@ -19,7 +19,6 @@ use hir::{ }, source_map::{IsNamedSrc, IsSrc, ToAstNode}, }; -use ide_db::root_db::RootDb; use smol_str::SmolStr; use syntax::{ SyntaxTokenWithParent, @@ -32,7 +31,7 @@ use utils::{ }; use vfs::FileId; -use crate::{SymbolKind, definitions::DefinitionOrigin}; +use crate::{SymbolKind, db::root_db::RootDb, definitions::DefinitionOrigin}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct NavTarget { diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs index fa242351..feb2e71f 100644 --- a/crates/ide/src/references.rs +++ b/crates/ide/src/references.rs @@ -1,9 +1,7 @@ use hir::{file::HirFileId, semantics::Semantics}; -use ide_db::root_db::RootDb; use itertools::Itertools; use nohash_hasher::IntMap; use search::{ReferencesCtx, SearchScope}; -use span::FilePosition; use syntax::{ SyntaxNodeExt, SyntaxTokenWithParent, TokenKind, has_text_range::HasTextRange, @@ -13,7 +11,8 @@ use utils::line_index::TextRange; use vfs::FileId; use crate::{ - ScopeVisibility, + FilePosition, ScopeVisibility, + db::root_db::RootDb, definitions::{Definition, DefinitionClass}, navigation_target::{NavTarget, ToNav}, }; diff --git a/crates/ide/src/references/search.rs b/crates/ide/src/references/search.rs index c439a501..90ccadd5 100644 --- a/crates/ide/src/references/search.rs +++ b/crates/ide/src/references/search.rs @@ -1,12 +1,11 @@ use std::cell::LazyCell; -use base_db::{intern::Lookup, salsa::Database, source_db::SourceDb}; use hir::{ + base_db::{intern::Lookup, salsa::Database, source_db::SourceDb}, container::{ContainerId, InFile}, semantics::Semantics, source_map::IsSrc, }; -use ide_db::root_db::RootDb; use itertools::Itertools; use memchr::memmem::Finder; use nohash_hasher::IntMap; @@ -26,6 +25,7 @@ use vfs::FileId; use super::{ReferenceCategory, ReferencesConfig}; use crate::{ ScopeVisibility, + db::root_db::RootDb, definitions::{Definition, DefinitionClass}, }; diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs index 81fcdf75..b07f3cb5 100644 --- a/crates/ide/src/rename.rs +++ b/crates/ide/src/rename.rs @@ -1,7 +1,6 @@ -use base_db::source_db::SourceDb; -use hir::{container::InFile, hir_def::lower_ident, semantics::Semantics}; -use ide_db::root_db::RootDb; -use span::FilePosition; +use hir::{ + base_db::source_db::SourceDb, container::InFile, hir_def::lower_ident, semantics::Semantics, +}; use syntax::{ SyntaxAncestors, SyntaxNode, SyntaxNodeExt, SyntaxTokenWithParent, ast::{self, AstNode}, @@ -17,7 +16,8 @@ use utils::{ use vfs::FileId; use crate::{ - ScopeVisibility, + FilePosition, ScopeVisibility, + db::root_db::RootDb, definitions::{Definition, DefinitionClass}, references::{ ReferencesConfig, diff --git a/crates/ide/src/render.rs b/crates/ide/src/render.rs index b322d001..0c935ee3 100644 --- a/crates/ide/src/render.rs +++ b/crates/ide/src/render.rs @@ -1,8 +1,8 @@ -use base_db::{ - intern::Lookup, - source_db::{SourceDb, SourceRootDb}, -}; use hir::{ + base_db::{ + intern::Lookup, + source_db::{SourceDb, SourceRootDb}, + }, container::{ContainerId, ContainerParent, InContainer, InFile, InModule, InSubroutine}, db::HirDb, display::HirDisplay, @@ -23,7 +23,6 @@ use hir::{ region_tree::RegionParent, semantics::Semantics, }; -use ide_db::{line_index_db::LineIndexDb, root_db::RootDb}; use itertools::Itertools; use syntax::{ SVInt, SyntaxCursorExt, SyntaxNodeExt, @@ -34,6 +33,7 @@ use syntax::{ use utils::get::GetRef; use crate::{ + db::{line_index_db::LineIndexDb, root_db::RootDb}, definitions::{Definition, DefinitionOrigin}, markup::Markup, }; diff --git a/crates/ide/src/selection_ranges.rs b/crates/ide/src/selection_ranges.rs index 8adf15cf..a34359de 100644 --- a/crates/ide/src/selection_ranges.rs +++ b/crates/ide/src/selection_ranges.rs @@ -1,7 +1,5 @@ use hir::semantics::Semantics; -use ide_db::root_db::RootDb; use itertools::Itertools; -use span::FilePosition; use syntax::{ SyntaxCursorExt, SyntaxNodeExt, TokenKind, has_text_range::HasTextRange, @@ -9,6 +7,8 @@ use syntax::{ }; use utils::line_index::TextRange; +use crate::{FilePosition, db::root_db::RootDb}; + pub(crate) fn selection_ranges( db: &RootDb, FilePosition { file_id, offset }: FilePosition, @@ -99,8 +99,7 @@ fn token_precedence(kind: TokenKind) -> usize { #[cfg(test)] mod tests { - use base_db::{change::Change, source_root::SourceRoot}; - use ide_db::root_db::RootDb; + use hir::base_db::{change::Change, source_root::SourceRoot}; use triomphe::Arc; use utils::{ line_index::{TextRange, TextSize}, @@ -109,6 +108,7 @@ mod tests { use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use super::selection_ranges; + use crate::db::root_db::RootDb; fn db_with_file(text: &str) -> (RootDb, FileId) { let file_id = FileId(0); @@ -133,7 +133,7 @@ mod tests { #[test] fn empty_file_keeps_cursor_selection_range() { let (db, file_id) = db_with_file(""); - let ranges = selection_ranges(&db, span::FilePosition { file_id, offset: 0.into() }); + let ranges = selection_ranges(&db, crate::FilePosition { file_id, offset: 0.into() }); assert_eq!(ranges.first(), Some(&TextRange::empty(0.into()))); } @@ -142,7 +142,7 @@ mod tests { fn trivia_only_file_keeps_cursor_and_comment_ranges() { let text = "// hello"; let (db, file_id) = db_with_file(text); - let ranges = selection_ranges(&db, span::FilePosition { file_id, offset: 3.into() }); + let ranges = selection_ranges(&db, crate::FilePosition { file_id, offset: 3.into() }); assert_eq!(ranges.first(), Some(&TextRange::empty(3.into()))); assert!(ranges.contains(&TextRange::new(0.into(), TextSize::of(text)))); diff --git a/crates/ide/src/semantic_tokens.rs b/crates/ide/src/semantic_tokens.rs index 5cc66b61..b3e27564 100644 --- a/crates/ide/src/semantic_tokens.rs +++ b/crates/ide/src/semantic_tokens.rs @@ -18,7 +18,6 @@ use hir::{ semantics::{Semantics, pathres::PathResolution}, source_map::{IsNamedSrc, IsSrc, ToAstNode}, }; -use ide_db::root_db::RootDb; use smol_str::SmolStr; use syntax::{ast, has_text_range::HasTextRange}; use utils::{ @@ -27,7 +26,10 @@ use utils::{ }; use vfs::FileId; -use crate::module_resolution::{resolve_named_param_assignment, resolve_named_port_connection}; +use crate::{ + db::root_db::RootDb, + module_resolution::{resolve_named_param_assignment, resolve_named_port_connection}, +}; mod collector; mod port; @@ -481,7 +483,7 @@ fn collect_resolved_path( mod tests { use std::path::PathBuf; - use base_db::{change::Change, source_root::SourceRoot}; + use hir::base_db::{change::Change, source_root::SourceRoot}; use insta::assert_debug_snapshot; use triomphe::Arc; use utils::{ diff --git a/crates/ide/src/semantic_tokens/port.rs b/crates/ide/src/semantic_tokens/port.rs index e99212e2..5ffa32ac 100644 --- a/crates/ide/src/semantic_tokens/port.rs +++ b/crates/ide/src/semantic_tokens/port.rs @@ -1,7 +1,7 @@ use std::sync::LazyLock; -use base_db::intern::Lookup; use hir::{ + base_db::intern::Lookup, db::HirDb, hir_def::{ expr::{ @@ -17,7 +17,6 @@ use hir::{ semantics::Semantics, source_map::{IsNamedSrc, IsSrc}, }; -use ide_db::root_db::RootDb; use regex::{Regex, RegexBuilder}; use smallvec::SmallVec; use utils::{ @@ -26,7 +25,10 @@ use utils::{ }; use super::{SemaTokenCollector, SemaTokenTag}; -use crate::semantic_tokens::{SemaToken, SemaTokenModifier, SemaTokenPort, check_range}; +use crate::{ + db::root_db::RootDb, + semantic_tokens::{SemaToken, SemaTokenModifier, SemaTokenPort, check_range}, +}; pub(super) fn collect_port( sema: &Semantics<'_, RootDb>, diff --git a/crates/ide/src/signature_help.rs b/crates/ide/src/signature_help.rs index aa72e6ac..ce801814 100644 --- a/crates/ide/src/signature_help.rs +++ b/crates/ide/src/signature_help.rs @@ -12,9 +12,7 @@ use hir::{ }, semantics::Semantics, }; -use ide_db::root_db::RootDb; use itertools::Either; -use span::FilePosition; use syntax::{ SyntaxAncestors, SyntaxNodeExt, ast::{self, AstNode}, @@ -29,7 +27,10 @@ use utils::{ text_edit::{TextRange, TextSize}, }; -use crate::{markup::Markup, module_resolution::resolve_instantiation_target}; +use crate::{ + FilePosition, db::root_db::RootDb, markup::Markup, + module_resolution::resolve_instantiation_target, +}; #[derive(Debug)] pub struct SignatureHelpConfig { diff --git a/crates/span/src/lib.rs b/crates/ide/src/types.rs similarity index 100% rename from crates/span/src/lib.rs rename to crates/ide/src/types.rs diff --git a/crates/ide/src/verilog_2005.rs b/crates/ide/src/verilog_2005.rs index 178625fc..16c21722 100644 --- a/crates/ide/src/verilog_2005.rs +++ b/crates/ide/src/verilog_2005.rs @@ -4,17 +4,17 @@ use std::{ path::{Path, PathBuf}, }; -use base_db::{ - change::Change, - preproc_index::MacroIncludeTarget, - project::{CompilationProfile, CompilationProfileId, PreprocessConfig, ProjectConfig}, - source_db::SourceDb, - source_root::{SourceRoot, SourceRootId}, +use hir::{ + base_db::{ + change::Change, + preproc_index::MacroIncludeTarget, + project::{CompilationProfile, CompilationProfileId, PreprocessConfig, ProjectConfig}, + source_db::SourceDb, + source_root::{SourceRoot, SourceRootId}, + }, + semantics::Semantics, }; -use hir::semantics::Semantics; -use ide_db::root_db::RootDb; use insta::assert_snapshot; -use span::FilePosition; use triomphe::Arc; use utils::{ lines::LineEnding, @@ -23,9 +23,10 @@ use utils::{ use vfs::{ChangeKind, ChangedFile, FileId, FileSet, VfsPath}; use crate::{ - ScopeVisibility, + FilePosition, ScopeVisibility, analysis_host::AnalysisHost, completion::CompletionItem, + db::root_db::RootDb, document_highlight::DocumentHighlightConfig, document_symbols::DocumentSymbol, folding_ranges::FoldingConfig, @@ -1607,14 +1608,17 @@ endmodule use hir::{ db::HirDb, file::HirFileId, - hir_def::{module::ModuleId, stmt::StmtKind}, + hir_def::{ + module::ModuleId, + stmt::{CaseItem, Stmt, StmtId, StmtKind}, + }, }; use la_arena::Arena; fn stmt_tree_has( db: &dyn HirDb, - stmts: &Arena, - stmt_id: hir::hir_def::stmt::StmtId, + stmts: &Arena, + stmt_id: StmtId, matches_kind: impl Copy + Fn(&StmtKind) -> bool, ) -> bool { let stmt = &stmts[stmt_id]; @@ -1640,8 +1644,7 @@ endmodule .is_some_and(|stmt_id| stmt_tree_has(db, stmts, stmt_id, matches_kind)) } StmtKind::Case { items, .. } => items.iter().any(|item| match item { - hir::hir_def::stmt::CaseItem::Case { clause, .. } - | hir::hir_def::stmt::CaseItem::Default(clause) => { + CaseItem::Case { clause, .. } | CaseItem::Default(clause) => { stmt_tree_has(db, stmts, *clause, matches_kind) } }), @@ -1656,7 +1659,7 @@ endmodule fn stmt_arena_has( db: &dyn HirDb, - stmts: &Arena, + stmts: &Arena, matches_kind: impl Copy + Fn(&StmtKind) -> bool, ) -> bool { stmts.iter().any(|(stmt_id, _)| stmt_tree_has(db, stmts, stmt_id, matches_kind)) diff --git a/crates/project-model/Cargo.toml b/crates/project-model/Cargo.toml index ebe2f680..9bd29c02 100644 --- a/crates/project-model/Cargo.toml +++ b/crates/project-model/Cargo.toml @@ -11,8 +11,8 @@ manifest-schema = ["dep:schemars", "dep:serde_json"] [dependencies] vfs.workspace = true anyhow.workspace = true -base-db.workspace = true const_format.workspace = true +hir.workspace = true itertools.workspace = true regex.workspace = true rustc-hash.workspace = true diff --git a/crates/project-model/src/lib.rs b/crates/project-model/src/lib.rs index da96ceda..ac90d4c1 100644 --- a/crates/project-model/src/lib.rs +++ b/crates/project-model/src/lib.rs @@ -5,7 +5,7 @@ mod toml_workspace; use std::collections::VecDeque; use anyhow::{Context, bail}; -use base_db::{ +use hir::base_db::{ project::{CompilationProfile, CompilationProfileId, PreprocessConfig, ProjectConfig}, source_root::{SourceRootConfig, SourceRootId, SourceRootRole}, }; @@ -786,7 +786,7 @@ fn collect_dependency_roots( mod tests { use std::fs; - use base_db::{source_db::SourceFileKind, source_root::SourceRootRole}; + use hir::base_db::{source_db::SourceFileKind, source_root::SourceRootRole}; use utils::{lines::LineEnding, test_support::TestDir}; use vfs::{Vfs, loader::LoadResult}; diff --git a/crates/span/Cargo.toml b/crates/span/Cargo.toml deleted file mode 100644 index 71400334..00000000 --- a/crates/span/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "span" -version = "0.0.0" -description = "Span" - -edition.workspace = true - -[dependencies] -la-arena.workspace = true -syntax.workspace = true -utils.workspace = true -vfs.workspace = true diff --git a/crates/vfs-notify/Cargo.toml b/crates/vfs-notify/Cargo.toml deleted file mode 100644 index 5348d7bf..00000000 --- a/crates/vfs-notify/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "vfs-notify" -version = "0.0.0" -description = "A impl for watching file system changes" - -edition.workspace = true - -[dependencies] -crossbeam-channel.workspace = true -itertools.workspace = true -notify = "6.1.1" -rayon = "1.10.0" -rustc-hash.workspace = true -tracing.workspace = true -utils.workspace = true -vfs.workspace = true -walkdir = "2.4.0" - -[dev-dependencies] -tempfile.workspace = true diff --git a/crates/vfs/Cargo.toml b/crates/vfs/Cargo.toml index 10205b94..14640a29 100644 --- a/crates/vfs/Cargo.toml +++ b/crates/vfs/Cargo.toml @@ -5,12 +5,24 @@ description = "Isolating high level crates from the file-system, preventing them edition.workspace = true +[features] +default = ["notify-backend"] +notify-backend = ["dep:itertools", "dep:notify", "dep:rayon", "dep:tracing", "dep:walkdir"] + [dependencies] crossbeam-channel.workspace = true fst = "0.4.7" globset.workspace = true indexmap = "2.0.0" +itertools = { workspace = true, optional = true } nohash-hasher.workspace = true +notify = { version = "6.1.1", optional = true } +rayon = { version = "1.10.0", optional = true } rustc-hash.workspace = true +tracing = { workspace = true, optional = true } triomphe.workspace = true utils.workspace = true +walkdir = { version = "2.4.0", optional = true } + +[dev-dependencies] +tempfile.workspace = true diff --git a/crates/vfs/src/lib.rs b/crates/vfs/src/lib.rs index a0e8da50..1e62c68b 100644 --- a/crates/vfs/src/lib.rs +++ b/crates/vfs/src/lib.rs @@ -1,6 +1,8 @@ pub mod anchored_path; mod file_set; pub mod loader; +#[cfg(feature = "notify-backend")] +pub mod notify; mod path_glob; #[cfg(test)] mod test_support; diff --git a/crates/vfs-notify/src/lib.rs b/crates/vfs/src/notify.rs similarity index 97% rename from crates/vfs-notify/src/lib.rs rename to crates/vfs/src/notify.rs index f4ee4f7c..99fc38b4 100644 --- a/crates/vfs-notify/src/lib.rs +++ b/crates/vfs/src/notify.rs @@ -1,8 +1,8 @@ use std::{fs, mem, sync::atomic::AtomicUsize}; +use ::notify::{Config, RecommendedWatcher, RecursiveMode, Watcher}; use crossbeam_channel::{Receiver, Sender, select, unbounded}; use itertools::Itertools; -use notify::{Config, RecommendedWatcher, RecursiveMode, Watcher}; use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator}; use rustc_hash::FxHashSet; use utils::{ @@ -10,9 +10,10 @@ use utils::{ paths::{AbsPath, AbsPathBuf}, thread, }; -use vfs::loader::{self, LoadResult}; use walkdir::WalkDir; +use crate::loader::{self, LoadResult}; + #[derive(Debug)] pub struct NotifyHandle { // Relative order of fields below is significant. @@ -160,7 +161,7 @@ impl BrowserLoader { } } -type NotifyEvent = notify::Result; +type NotifyEvent = ::notify::Result<::notify::Event>; struct NotifyActor { sender: loader::Sender, @@ -203,7 +204,7 @@ impl NotifyActor { fn run(mut self, server_inbox: Receiver) { while let Some(event) = self.next_event(&server_inbox) { - tracing::debug!(?event, "vfs-notify event"); + tracing::debug!(?event, "vfs-loader event"); match event { Event::ServerMsg(msg) => match msg { ServerMsg::Config(config) => { @@ -342,7 +343,7 @@ impl NotifyActor { } } - fn process_notify_event(&mut self, event: notify::Event) -> Vec<(AbsPathBuf, LoadResult)> { + fn process_notify_event(&mut self, event: ::notify::Event) -> Vec<(AbsPathBuf, LoadResult)> { if !(event.kind.is_create() || event.kind.is_modify() || event.kind.is_remove()) { return Vec::new(); } @@ -522,7 +523,7 @@ fn read(path: &AbsPath) -> LoadResult { LoadResult::Loaded(text, ending) } -fn log_notify_error(res: notify::Result) -> Option { +fn log_notify_error(res: ::notify::Result) -> Option { res.map_err(|err| tracing::warn!("notify error: {}", err)).ok() } @@ -530,18 +531,18 @@ fn log_notify_error(res: notify::Result) -> Option { mod tests { use std::time::Duration; - use notify::{ + use ::notify::{ Event as NotifyEvent, EventKind, event::{CreateKind, RemoveKind}, }; use utils::paths::AbsPathBuf; - use vfs::{ + + use super::*; + use crate::{ PathMatcher, loader::{self, Handle as _}, }; - use super::*; - struct TestDir { _dir: tempfile::TempDir, path: AbsPathBuf, @@ -641,7 +642,7 @@ mod tests { #[test] fn removed_config_file_is_unloaded() { - let dir = TestDir::new("vfs-notify-unload-file"); + let dir = TestDir::new("vfs-loader-unload-file"); let file = dir.join("top.sv"); std::fs::write(&file, "module top; endmodule\n").unwrap(); let (mut handle, receiver) = spawn_loader(); @@ -673,7 +674,7 @@ mod tests { #[test] fn configured_missing_file_is_not_reconciled_twice() { - let dir = TestDir::new("vfs-notify-missing-config-file"); + let dir = TestDir::new("vfs-loader-missing-config-file"); let file = dir.join("top.sv"); std::fs::write(&file, "module top; endmodule\n").unwrap(); let (mut handle, receiver) = spawn_loader(); @@ -714,7 +715,7 @@ mod tests { #[test] fn removed_config_directory_is_unloaded() { - let dir = TestDir::new("vfs-notify-unload-directory"); + let dir = TestDir::new("vfs-loader-unload-directory"); let source_dir = dir.join("rtl"); std::fs::create_dir_all(&source_dir).unwrap(); let file = source_dir.join("top.sv"); @@ -753,7 +754,7 @@ mod tests { #[test] fn created_watched_directory_is_loaded_immediately() { - let dir = TestDir::new("vfs-notify-created-directory-load"); + let dir = TestDir::new("vfs-loader-created-directory-load"); let root = dir.join("workspace"); let created_dir = root.join("generated"); let nested_dir = created_dir.join("nested"); @@ -788,7 +789,7 @@ mod tests { #[test] fn removed_watched_directory_unloads_loaded_descendants() { - let dir = TestDir::new("vfs-notify-removed-directory-unload"); + let dir = TestDir::new("vfs-loader-removed-directory-unload"); let root = dir.join("workspace"); let removed_dir = root.join("removed"); let top = removed_dir.join("top.sv"); diff --git a/src/config.rs b/src/config.rs index 564b949e..1fad36f9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -3,7 +3,7 @@ pub mod user_config; use std::fmt; -use base_db::diagnostics_config::DiagnosticsConfig; +use hir::base_db::diagnostics_config::DiagnosticsConfig; use itertools::Itertools; use lsp_types::ClientCapabilities; use project_model::project_manifest::ProjectManifest; @@ -122,7 +122,7 @@ impl Config { if errors.is_empty() { Ok(()) } else { Err(errors) } } - pub fn diagnostics_config(&self) -> base_db::diagnostics_config::DiagnosticsConfig { + pub fn diagnostics_config(&self) -> DiagnosticsConfig { self.diagnostics_config.clone() } diff --git a/src/config/user_config.rs b/src/config/user_config.rs index e9acd4d6..a4bcd1ba 100644 --- a/src/config/user_config.rs +++ b/src/config/user_config.rs @@ -1,6 +1,6 @@ use std::collections::BTreeMap; -use base_db::diagnostics_config::{ +use hir::base_db::diagnostics_config::{ DiagnosticPhaseConfig, DiagnosticRule, DiagnosticRuleSeverity, DiagnosticSelector, DiagnosticSource, DiagnosticsConfig, SlangDiagnosticsConfig, }; diff --git a/src/global_state.rs b/src/global_state.rs index ccb3b357..23f6cb34 100644 --- a/src/global_state.rs +++ b/src/global_state.rs @@ -19,12 +19,13 @@ use std::{ time::Instant, }; -use base_db::{ +use crossbeam_channel::{Receiver, Sender, unbounded}; +use hir::base_db::{ project::{ProjectConfig, SharedProjectConfig}, + salsa::Durability, source_db::SourceDb, source_root::SourceRootConfig, }; -use crossbeam_channel::{Receiver, Sender, unbounded}; use ide::analysis_host::AnalysisHost; use lsp_server::{Message, ReqQueue, Request}; use lsp_types::{TraceValue, Url}; @@ -39,7 +40,7 @@ use utils::{ lines::LineEnding, thread::{Pool, ThreadIntent}, }; -use vfs::{self, FileId, Vfs}; +use vfs::{self, FileId, Vfs, notify::NotifyHandle}; #[cfg(test)] pub(crate) use self::workspace_state::VfsProgress; @@ -212,7 +213,7 @@ impl GlobalState { ) -> GlobalState { let vfs_loader = { let (sender, receiver) = unbounded::(); - let handle: vfs_notify::NotifyHandle = vfs::loader::Handle::spawn(sender); + let handle: NotifyHandle = vfs::loader::Handle::spawn(sender); let handle = Box::new(handle) as Box; Handle { handle, receiver } }; @@ -225,10 +226,9 @@ impl GlobalState { let mut analysis_host = AnalysisHost::new(None); let diagnostics_config = Arc::new(config.diagnostics_config()); - analysis_host.raw_db_mut().set_diagnostics_config_with_durability( - diagnostics_config, - base_db::salsa::Durability::HIGH, - ); + analysis_host + .raw_db_mut() + .set_diagnostics_config_with_durability(diagnostics_config, Durability::HIGH); GlobalState { sender, diff --git a/src/global_state/diagnostics.rs b/src/global_state/diagnostics.rs index 6246978e..a11132ca 100644 --- a/src/global_state/diagnostics.rs +++ b/src/global_state/diagnostics.rs @@ -1,4 +1,4 @@ -use base_db::{project::CompilationProfileId, source_root::SourceRootId}; +use hir::base_db::{project::CompilationProfileId, source_root::SourceRootId}; use lsp_types::Url; use vfs::FileId; diff --git a/src/global_state/handlers/request.rs b/src/global_state/handlers/request.rs index f1779d76..c5ecb0db 100644 --- a/src/global_state/handlers/request.rs +++ b/src/global_state/handlers/request.rs @@ -1,8 +1,7 @@ use std::collections::{HashMap, HashSet}; -use ide::{folding_ranges::FoldingConfig, references::References}; +use ide::{FilePosition, FileRange, folding_ranges::FoldingConfig, references::References}; use itertools::Itertools; -use span::{FilePosition, FileRange}; use utils::text_edit::TextRange; use vfs::FileId; diff --git a/src/global_state/handlers/request/code_action.rs b/src/global_state/handlers/request/code_action.rs index c366dee1..2da3dc36 100644 --- a/src/global_state/handlers/request/code_action.rs +++ b/src/global_state/handlers/request/code_action.rs @@ -1,11 +1,11 @@ use ide::{ + FileRange, code_action::{ CodeActionDiagnostic, CodeActionDiagnostics, CodeActionKind, CodeActionResolveStrategy, DiagnosticCode, DiagnosticSource, RepairKind, }, diagnostics as ide_diagnostics, }; -use span::FileRange; use utils::text_edit::TextRange; use vfs::FileId; diff --git a/src/global_state/process_changes.rs b/src/global_state/process_changes.rs index c1ce539e..9e3db93c 100644 --- a/src/global_state/process_changes.rs +++ b/src/global_state/process_changes.rs @@ -1,6 +1,6 @@ use std::collections::hash_map::Entry::{Occupied, Vacant}; -use base_db::change::Change; +use hir::base_db::change::Change; use itertools::Itertools; use lsp_types::request::WorkspaceDiagnosticRefresh; use nohash_hasher::IntMap; diff --git a/src/global_state/qihe.rs b/src/global_state/qihe.rs index 90ebee17..81a22f9c 100644 --- a/src/global_state/qihe.rs +++ b/src/global_state/qihe.rs @@ -11,13 +11,13 @@ use std::{ }; use anyhow::{Context, Result, anyhow, bail}; -use base_db::compilation_plan::CompilationPlan; +use hir::base_db::compilation_plan::CompilationPlan; +use ide::FileRange; use lsp_types::{Diagnostic, DiagnosticRelatedInformation, DiagnosticSeverity, NumberOrString}; use project_model::project_manifest::{ProjectManifest, ProjectManifestFileName}; use regex::Regex; use rustc_hash::{FxHashMap, FxHashSet}; use serde::Deserialize; -use span::FileRange; use utils::{ cancellation::{CancellationError, CancellationToken}, line_index::{LineCol, TextRange, TextSize}, @@ -1070,8 +1070,8 @@ struct QiheJsonSupportInfo { mod tests { use std::{ffi::OsStr, io::Cursor, path::PathBuf, process::Command}; - use base_db::compilation_plan::CompilationPlan; use crossbeam_channel::unbounded; + use hir::base_db::compilation_plan::CompilationPlan; use lsp_types::{ Diagnostic, DiagnosticClientCapabilities, DiagnosticSeverity, DiagnosticWorkspaceClientCapabilities, NumberOrString, Position, Range, diff --git a/src/global_state/reload.rs b/src/global_state/reload.rs index 7abf72fd..869e0de7 100644 --- a/src/global_state/reload.rs +++ b/src/global_state/reload.rs @@ -1,6 +1,6 @@ use std::panic::{self, AssertUnwindSafe}; -use base_db::{change::Change, source_db::SourceDb}; +use hir::base_db::{change::Change, salsa::Durability, source_db::SourceDb}; use itertools::Itertools; use project_model::{ProjectModel, Workspace, get_workspace_folder, project_manifest}; use triomphe::Arc; @@ -202,7 +202,7 @@ impl GlobalState { if diagnostics_config_changed { self.analysis_host.raw_db_mut().set_diagnostics_config_with_durability( Arc::new(diagnostics_config), - base_db::salsa::Durability::HIGH, + Durability::HIGH, ); self.diagnostics_revision += 1; self.invalidate_diagnostics(DiagnosticInvalidation::WorkspaceChanged); diff --git a/src/global_state/snapshot.rs b/src/global_state/snapshot.rs index cddb8b2d..7eacbef8 100644 --- a/src/global_state/snapshot.rs +++ b/src/global_state/snapshot.rs @@ -1,7 +1,7 @@ use std::path::Path; use anyhow::Context; -use base_db::source_root::{SourceRootDiagnosticScope, SourceRootRole}; +use hir::base_db::source_root::{SourceRootDiagnosticScope, SourceRootRole}; use ide::{Cancellable, analysis::Analysis}; use lsp_types::Url; use nohash_hasher::IntMap; diff --git a/src/lsp_ext/from_proto.rs b/src/lsp_ext/from_proto.rs index a1ac0706..598633ef 100644 --- a/src/lsp_ext/from_proto.rs +++ b/src/lsp_ext/from_proto.rs @@ -1,5 +1,4 @@ -use ide::code_lens::CodeLensKind; -use span::{FilePosition, FileRange}; +use ide::{FilePosition, FileRange, code_lens::CodeLensKind}; use utils::{ line_index::{LineCol, TextRange, TextSize, WideLineCol}, lines::{LineInfo, PositionEncoding}, diff --git a/src/lsp_ext/to_proto.rs b/src/lsp_ext/to_proto.rs index a737bb4d..2662da11 100644 --- a/src/lsp_ext/to_proto.rs +++ b/src/lsp_ext/to_proto.rs @@ -3,7 +3,7 @@ use std::sync::atomic::{AtomicU32, Ordering}; use anyhow::{Context, Error}; use hir::container::InFile; use ide::{ - SymbolKind, + FilePosition, FileRange, SymbolKind, code_action::{CodeAction, CodeActionKind}, code_lens::{CodeLens, CodeLensKind}, diagnostics as ide_diagnostics, @@ -20,7 +20,6 @@ use ide::{ source_change::SourceChange, }; use itertools::Itertools; -use span::{FilePosition, FileRange}; use syntax::DiagnosticSeverity as SlangDiagnosticSeverity; use utils::{ cancellation::CancellationError, diff --git a/src/main.rs b/src/main.rs index f147d77e..54822b36 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,14 +13,14 @@ use vide::{Opt, run_server}; const DEFAULT_PROFILE_TRACE_FILTER: &str = concat!( "vide=trace,", - "base_db=trace,", + "hir::base_db=trace,", "hir=trace,", "ide=trace,", "project_model=trace,", "slang=trace,", "utils=trace,", "vfs=trace,", - "vfs_notify=trace" + "vfs::notify=trace" ); fn profile_trace_path(opt: &Opt) -> Option { From 8298d8ecdc4cf47c47f319ee33a3f24597767f5c Mon Sep 17 00:00:00 2001 From: roife Date: Sun, 31 May 2026 15:22:32 +0800 Subject: [PATCH 3/3] feat: display module sig for instance hover --- crates/ide/src/render.rs | 22 ++++++++++++++++++++++ crates/ide/src/verilog_2005.rs | 18 +++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/crates/ide/src/render.rs b/crates/ide/src/render.rs index 0c935ee3..2580e5bf 100644 --- a/crates/ide/src/render.rs +++ b/crates/ide/src/render.rs @@ -16,6 +16,7 @@ use hir::{ literal::Literal, module::{ ModuleId, + instantiation::InstanceId, port::{NonAnsiPortId, Ports}, }, subroutine::{SubroutineId, SubroutineKind, SubroutinePortId}, @@ -36,6 +37,7 @@ use crate::{ db::{line_index_db::LineIndexDb, root_db::RootDb}, definitions::{Definition, DefinitionOrigin}, markup::Markup, + module_resolution::resolve_module_name, }; pub(crate) fn render_literal(literal: &Literal) -> Option { @@ -217,6 +219,7 @@ fn render_signature(sema: &Semantics, origin: &DefinitionOrigin) -> Opti DefinitionOrigin::NonAnsiPort(port_id) => render_non_ansi_port_signature(db, *port_id), DefinitionOrigin::Decl(decl_id) => render_decl_signature(db, *decl_id), DefinitionOrigin::Typedef(typedef) => typedef.display_signature(db).ok(), + DefinitionOrigin::Instance(instance_id) => render_instance_signature(db, *instance_id), _ => render_label_signature(db, origin), } } @@ -379,6 +382,25 @@ fn render_non_ansi_port_signature(db: &RootDb, port_id: InModule) Some(format!("port {label}")) } +fn render_instance_signature(db: &RootDb, instance_id: InModule) -> Option { + let parent_module = db.module(instance_id.module_id); + let instance = parent_module.get(instance_id.value); + let instance_name = instance.name.as_ref()?; + let instantiation = parent_module.get(instance.parent); + let module_name = instantiation.module_name.as_ref()?; + + let mut signature = format!("instance {instance_name} of {module_name}"); + if let Some(target_module_id) = + resolve_module_name(db, instance_id.module_id.file_id.file_id(), module_name).unique() + && let Some(module_signature) = render_module_signature(db, target_module_id) + { + signature.push_str("\n\n"); + signature.push_str(&module_signature); + } + + Some(signature) +} + fn render_decl_signature(db: &RootDb, decl_id: InContainer) -> Option { let container = decl_id.cont_id.to_container(db); let decl = container.get(decl_id.value); diff --git a/crates/ide/src/verilog_2005.rs b/crates/ide/src/verilog_2005.rs index 16c21722..b8f2f240 100644 --- a/crates/ide/src/verilog_2005.rs +++ b/crates/ide/src/verilog_2005.rs @@ -1064,7 +1064,7 @@ module /*marker:module_def*/child #(parameter WIDTH = 8) ( endmodule module top; - /*marker:module_ref*/child u_child(.clk()); + /*marker:module_ref*/child /*marker:instance_ref*/u_child(.clk()); endmodule "#; let (host, file_id, _clean_text, markers) = setup_marked(text); @@ -1100,6 +1100,22 @@ endmodule inst_module_hover.info.as_str() ); + let instance_hover = analysis + .hover( + position(file_id, &markers, "instance_ref"), + HoverConfig { format: HoverFormat::PlainText }, + ) + .unwrap() + .expect("instance hover expected"); + assert!( + instance_hover.info.as_str().contains("instance u_child of child") + && instance_hover.info.as_str().contains( + "module child #(\n parameter logic WIDTH = 8\n) (\n input wire logic clk\n)" + ), + "instance hover should include the target module signature: {}", + instance_hover.info.as_str() + ); + let port_hover = analysis .hover( position(file_id, &markers, "port_def"),