mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Move FeatureFlags
This commit is contained in:
parent
bf582e77d6
commit
14094e4477
8 changed files with 24 additions and 42 deletions
|
@ -84,7 +84,6 @@ pub use ra_db::{
|
|||
};
|
||||
pub use ra_ide_db::{
|
||||
change::{AnalysisChange, LibraryData},
|
||||
feature_flags::FeatureFlags,
|
||||
line_index::{LineCol, LineIndex},
|
||||
line_index_utils::translate_offset_with_edit,
|
||||
search::SearchScope,
|
||||
|
@ -131,13 +130,13 @@ pub struct AnalysisHost {
|
|||
|
||||
impl Default for AnalysisHost {
|
||||
fn default() -> AnalysisHost {
|
||||
AnalysisHost::new(None, FeatureFlags::default())
|
||||
AnalysisHost::new(None)
|
||||
}
|
||||
}
|
||||
|
||||
impl AnalysisHost {
|
||||
pub fn new(lru_capcity: Option<usize>, feature_flags: FeatureFlags) -> AnalysisHost {
|
||||
AnalysisHost { db: RootDatabase::new(lru_capcity, feature_flags) }
|
||||
pub fn new(lru_capacity: Option<usize>) -> AnalysisHost {
|
||||
AnalysisHost { db: RootDatabase::new(lru_capacity) }
|
||||
}
|
||||
/// Returns a snapshot of the current state, which you can query for
|
||||
/// semantic information.
|
||||
|
@ -145,10 +144,6 @@ impl AnalysisHost {
|
|||
Analysis { db: self.db.snapshot() }
|
||||
}
|
||||
|
||||
pub fn feature_flags(&self) -> &FeatureFlags {
|
||||
&self.db.feature_flags
|
||||
}
|
||||
|
||||
/// Applies changes to the current state of the world. If there are
|
||||
/// outstanding snapshots, they will be canceled.
|
||||
pub fn apply_change(&mut self, change: AnalysisChange) {
|
||||
|
@ -224,11 +219,6 @@ impl Analysis {
|
|||
(host.analysis(), file_id)
|
||||
}
|
||||
|
||||
/// Features for Analysis.
|
||||
pub fn feature_flags(&self) -> &FeatureFlags {
|
||||
&self.db.feature_flags
|
||||
}
|
||||
|
||||
/// Debug info about the current state of the analysis.
|
||||
pub fn status(&self) -> Cancelable<String> {
|
||||
self.with_db(|db| status::status(&*db))
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
pub mod marks;
|
||||
pub mod line_index;
|
||||
pub mod line_index_utils;
|
||||
pub mod feature_flags;
|
||||
pub mod symbol_index;
|
||||
pub mod change;
|
||||
pub mod defs;
|
||||
|
@ -22,7 +21,7 @@ use ra_db::{
|
|||
};
|
||||
use rustc_hash::FxHashMap;
|
||||
|
||||
use crate::{feature_flags::FeatureFlags, line_index::LineIndex, symbol_index::SymbolsDatabase};
|
||||
use crate::{line_index::LineIndex, symbol_index::SymbolsDatabase};
|
||||
|
||||
#[salsa::database(
|
||||
ra_db::SourceDatabaseStorage,
|
||||
|
@ -37,7 +36,6 @@ use crate::{feature_flags::FeatureFlags, line_index::LineIndex, symbol_index::Sy
|
|||
#[derive(Debug)]
|
||||
pub struct RootDatabase {
|
||||
runtime: salsa::Runtime<RootDatabase>,
|
||||
pub feature_flags: Arc<FeatureFlags>,
|
||||
pub(crate) debug_data: Arc<DebugData>,
|
||||
pub last_gc: crate::wasm_shims::Instant,
|
||||
pub last_gc_check: crate::wasm_shims::Instant,
|
||||
|
@ -82,17 +80,16 @@ impl salsa::Database for RootDatabase {
|
|||
|
||||
impl Default for RootDatabase {
|
||||
fn default() -> RootDatabase {
|
||||
RootDatabase::new(None, FeatureFlags::default())
|
||||
RootDatabase::new(None)
|
||||
}
|
||||
}
|
||||
|
||||
impl RootDatabase {
|
||||
pub fn new(lru_capacity: Option<usize>, feature_flags: FeatureFlags) -> RootDatabase {
|
||||
pub fn new(lru_capacity: Option<usize>) -> RootDatabase {
|
||||
let mut db = RootDatabase {
|
||||
runtime: salsa::Runtime::default(),
|
||||
last_gc: crate::wasm_shims::Instant::now(),
|
||||
last_gc_check: crate::wasm_shims::Instant::now(),
|
||||
feature_flags: Arc::new(feature_flags),
|
||||
debug_data: Default::default(),
|
||||
};
|
||||
db.set_crate_graph_with_durability(Default::default(), Durability::HIGH);
|
||||
|
@ -112,7 +109,6 @@ impl salsa::ParallelDatabase for RootDatabase {
|
|||
runtime: self.runtime.snapshot(self),
|
||||
last_gc: self.last_gc,
|
||||
last_gc_check: self.last_gc_check,
|
||||
feature_flags: Arc::clone(&self.feature_flags),
|
||||
debug_data: Arc::clone(&self.debug_data),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use std::path::Path;
|
|||
use anyhow::Result;
|
||||
use crossbeam_channel::{unbounded, Receiver};
|
||||
use ra_db::{CrateGraph, FileId, SourceRootId};
|
||||
use ra_ide::{AnalysisChange, AnalysisHost, FeatureFlags};
|
||||
use ra_ide::{AnalysisChange, AnalysisHost};
|
||||
use ra_project_model::{get_rustc_cfg_options, PackageRoot, ProjectWorkspace};
|
||||
use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch};
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
|
@ -82,7 +82,7 @@ pub(crate) fn load(
|
|||
receiver: Receiver<VfsTask>,
|
||||
) -> AnalysisHost {
|
||||
let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<usize>().ok());
|
||||
let mut host = AnalysisHost::new(lru_cap, FeatureFlags::default());
|
||||
let mut host = AnalysisHost::new(lru_cap);
|
||||
let mut analysis_change = AnalysisChange::new();
|
||||
analysis_change.set_crate_graph(crate_graph);
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ mod config;
|
|||
mod world;
|
||||
mod diagnostics;
|
||||
mod semantic_tokens;
|
||||
mod feature_flags;
|
||||
|
||||
use serde::de::DeserializeOwned;
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ use crossbeam_channel::{select, unbounded, RecvError, Sender};
|
|||
use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response};
|
||||
use lsp_types::{ClientCapabilities, NumberOrString};
|
||||
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckTask};
|
||||
use ra_ide::{Canceled, FeatureFlags, FileId, LibraryData, SourceRootId};
|
||||
use ra_ide::{Canceled, FileId, LibraryData, SourceRootId};
|
||||
use ra_prof::profile;
|
||||
use ra_vfs::{VfsFile, VfsTask, Watch};
|
||||
use relative_path::RelativePathBuf;
|
||||
|
@ -28,6 +28,7 @@ use threadpool::ThreadPool;
|
|||
|
||||
use crate::{
|
||||
diagnostics::DiagnosticTask,
|
||||
feature_flags::FeatureFlags,
|
||||
main_loop::{
|
||||
pending_requests::{PendingRequest, PendingRequests},
|
||||
subscriptions::Subscriptions,
|
||||
|
@ -423,7 +424,7 @@ fn loop_turn(
|
|||
{
|
||||
loop_state.workspace_loaded = true;
|
||||
let n_packages: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum();
|
||||
if world_state.feature_flags().get("notifications.workspace-loaded") {
|
||||
if world_state.feature_flags.get("notifications.workspace-loaded") {
|
||||
let msg = format!("workspace loaded, {} rust packages", n_packages);
|
||||
show_message(req::MessageType::Info, msg, &connection.sender);
|
||||
}
|
||||
|
@ -839,7 +840,7 @@ fn update_file_notifications_on_threadpool(
|
|||
subscriptions: Vec<FileId>,
|
||||
) {
|
||||
log::trace!("updating notifications for {:?}", subscriptions);
|
||||
let publish_diagnostics = world.feature_flags().get("lsp.diagnostics");
|
||||
let publish_diagnostics = world.feature_flags.get("lsp.diagnostics");
|
||||
pool.execute(move || {
|
||||
for file_id in subscriptions {
|
||||
if publish_diagnostics {
|
||||
|
|
|
@ -425,12 +425,10 @@ pub fn handle_completion(
|
|||
}
|
||||
|
||||
let options = CompletionOptions {
|
||||
enable_postfix_completions: world.feature_flags().get("completion.enable-postfix"),
|
||||
add_call_parenthesis: world
|
||||
.feature_flags()
|
||||
.get("completion.insertion.add-call-parenthesis"),
|
||||
enable_postfix_completions: world.feature_flags.get("completion.enable-postfix"),
|
||||
add_call_parenthesis: world.feature_flags.get("completion.insertion.add-call-parenthesis"),
|
||||
add_call_argument_snippets: world
|
||||
.feature_flags()
|
||||
.feature_flags
|
||||
.get("completion.insertion.add-argument-snippets"),
|
||||
};
|
||||
|
||||
|
@ -471,7 +469,7 @@ pub fn handle_signature_help(
|
|||
let _p = profile("handle_signature_help");
|
||||
let position = params.try_conv_with(&world)?;
|
||||
if let Some(call_info) = world.analysis().call_info(position)? {
|
||||
let concise = !world.analysis().feature_flags().get("call-info.full");
|
||||
let concise = !world.feature_flags.get("call-info.full");
|
||||
let mut active_parameter = call_info.active_parameter.map(|it| it as i64);
|
||||
if concise && call_info.signature.has_self_param {
|
||||
active_parameter = active_parameter.map(|it| it.saturating_sub(1));
|
||||
|
|
|
@ -13,8 +13,7 @@ use lsp_types::Url;
|
|||
use parking_lot::RwLock;
|
||||
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher};
|
||||
use ra_ide::{
|
||||
Analysis, AnalysisChange, AnalysisHost, CrateGraph, FeatureFlags, FileId, LibraryData,
|
||||
SourceRootId,
|
||||
Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, LibraryData, SourceRootId,
|
||||
};
|
||||
use ra_project_model::{get_rustc_cfg_options, ProjectWorkspace};
|
||||
use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask, Watch};
|
||||
|
@ -22,6 +21,7 @@ use relative_path::RelativePathBuf;
|
|||
|
||||
use crate::{
|
||||
diagnostics::{CheckFixes, DiagnosticCollection},
|
||||
feature_flags::FeatureFlags,
|
||||
main_loop::pending_requests::{CompletedRequest, LatestRequests},
|
||||
vfs_glob::{Glob, RustPackageFilterBuilder},
|
||||
LspError, Result,
|
||||
|
@ -45,6 +45,7 @@ pub struct Options {
|
|||
#[derive(Debug)]
|
||||
pub struct WorldState {
|
||||
pub options: Options,
|
||||
pub feature_flags: Arc<FeatureFlags>,
|
||||
//FIXME: this belongs to `LoopState` rather than to `WorldState`
|
||||
pub roots_to_scan: usize,
|
||||
pub roots: Vec<PathBuf>,
|
||||
|
@ -60,6 +61,7 @@ pub struct WorldState {
|
|||
/// An immutable snapshot of the world's state at a point in time.
|
||||
pub struct WorldSnapshot {
|
||||
pub options: Options,
|
||||
pub feature_flags: Arc<FeatureFlags>,
|
||||
pub workspaces: Arc<Vec<ProjectWorkspace>>,
|
||||
pub analysis: Analysis,
|
||||
pub latest_requests: Arc<RwLock<LatestRequests>>,
|
||||
|
@ -146,10 +148,11 @@ impl WorldState {
|
|||
CheckWatcher::dummy()
|
||||
});
|
||||
|
||||
let mut analysis_host = AnalysisHost::new(lru_capacity, feature_flags);
|
||||
let mut analysis_host = AnalysisHost::new(lru_capacity);
|
||||
analysis_host.apply_change(change);
|
||||
WorldState {
|
||||
options,
|
||||
feature_flags: Arc::new(feature_flags),
|
||||
roots_to_scan,
|
||||
roots: folder_roots,
|
||||
workspaces: Arc::new(workspaces),
|
||||
|
@ -216,6 +219,7 @@ impl WorldState {
|
|||
pub fn snapshot(&self) -> WorldSnapshot {
|
||||
WorldSnapshot {
|
||||
options: self.options.clone(),
|
||||
feature_flags: Arc::clone(&self.feature_flags),
|
||||
workspaces: Arc::clone(&self.workspaces),
|
||||
analysis: self.analysis_host.analysis(),
|
||||
vfs: Arc::clone(&self.vfs),
|
||||
|
@ -235,10 +239,6 @@ impl WorldState {
|
|||
pub fn complete_request(&mut self, request: CompletedRequest) {
|
||||
self.latest_requests.write().record(request)
|
||||
}
|
||||
|
||||
pub fn feature_flags(&self) -> &FeatureFlags {
|
||||
self.analysis_host.feature_flags()
|
||||
}
|
||||
}
|
||||
|
||||
impl WorldSnapshot {
|
||||
|
@ -306,8 +306,4 @@ impl WorldSnapshot {
|
|||
let path = self.vfs.read().file2path(VfsFile(file_id.0));
|
||||
self.workspaces.iter().find_map(|ws| ws.workspace_root_for(&path))
|
||||
}
|
||||
|
||||
pub fn feature_flags(&self) -> &FeatureFlags {
|
||||
self.analysis.feature_flags()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue