Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/completions/ra_fixture.rs2
-rw-r--r--crates/ide-completion/src/config.rs5
-rw-r--r--crates/ide-completion/src/tests.rs5
-rw-r--r--crates/ide-db/src/ra_fixture.rs19
-rw-r--r--crates/ide/src/annotations.rs12
-rw-r--r--crates/ide/src/call_hierarchy.rs12
-rw-r--r--crates/ide/src/goto_declaration.rs4
-rw-r--r--crates/ide/src/goto_definition.rs10
-rw-r--r--crates/ide/src/hover.rs10
-rw-r--r--crates/ide/src/hover/tests.rs4
-rw-r--r--crates/ide/src/inlay_hints.rs9
-rw-r--r--crates/ide/src/inlay_hints/ra_fixture.rs2
-rw-r--r--crates/ide/src/lib.rs11
-rw-r--r--crates/ide/src/references.rs12
-rw-r--r--crates/ide/src/static_index.rs7
-rw-r--r--crates/ide/src/syntax_highlighting.rs4
-rw-r--r--crates/ide/src/syntax_highlighting/html.rs4
-rw-r--r--crates/ide/src/syntax_highlighting/inject.rs6
-rw-r--r--crates/ide/src/syntax_highlighting/tests.rs4
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs8
-rw-r--r--crates/rust-analyzer/src/config.rs32
-rw-r--r--crates/rust-analyzer/src/handlers/request.rs10
-rw-r--r--crates/rust-analyzer/src/integrated_benchmarks.rs10
-rw-r--r--docs/book/src/configuration_generated.md9
-rw-r--r--editors/code/package.json10
25 files changed, 143 insertions, 78 deletions
diff --git a/crates/ide-completion/src/completions/ra_fixture.rs b/crates/ide-completion/src/completions/ra_fixture.rs
index b44c90757f..5a8881edc7 100644
--- a/crates/ide-completion/src/completions/ra_fixture.rs
+++ b/crates/ide-completion/src/completions/ra_fixture.rs
@@ -22,7 +22,7 @@ pub(crate) fn complete_ra_fixture(
&ctx.sema,
original.clone(),
expanded,
- ctx.config.minicore,
+ &ctx.config.ra_fixture,
&mut |_| {},
)?;
let (virtual_file_id, virtual_offset) = analysis.map_offset_down(ctx.position.offset)?;
diff --git a/crates/ide-completion/src/config.rs b/crates/ide-completion/src/config.rs
index 5623257a27..80c1572972 100644
--- a/crates/ide-completion/src/config.rs
+++ b/crates/ide-completion/src/config.rs
@@ -6,8 +6,9 @@
use hir::FindPathConfig;
use ide_db::{
- MiniCore, SnippetCap,
+ SnippetCap,
imports::{import_assets::ImportPathConfig, insert_use::InsertUseConfig},
+ ra_fixture::RaFixtureConfig,
};
use crate::{CompletionFieldsToResolve, snippet::Snippet};
@@ -35,7 +36,7 @@ pub struct CompletionConfig<'a> {
pub fields_to_resolve: CompletionFieldsToResolve,
pub exclude_flyimport: Vec<(String, AutoImportExclusionType)>,
pub exclude_traits: &'a [String],
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
diff --git a/crates/ide-completion/src/tests.rs b/crates/ide-completion/src/tests.rs
index cb1adfcfb6..02e299b2a9 100644
--- a/crates/ide-completion/src/tests.rs
+++ b/crates/ide-completion/src/tests.rs
@@ -29,8 +29,9 @@ use expect_test::Expect;
use hir::db::HirDatabase;
use hir::{PrefixKind, setup_tracing};
use ide_db::{
- FilePosition, MiniCore, RootDatabase, SnippetCap,
+ FilePosition, RootDatabase, SnippetCap,
imports::insert_use::{ImportGranularity, InsertUseConfig},
+ ra_fixture::RaFixtureConfig,
};
use itertools::Itertools;
use stdx::{format_to, trim_indent};
@@ -90,7 +91,7 @@ pub(crate) const TEST_CONFIG: CompletionConfig<'_> = CompletionConfig {
exclude_traits: &[],
enable_auto_await: true,
enable_auto_iter: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
pub(crate) fn completion_list(#[rust_analyzer::rust_fixture] ra_fixture: &str) -> String {
diff --git a/crates/ide-db/src/ra_fixture.rs b/crates/ide-db/src/ra_fixture.rs
index c9a670b2d1..2f4d319ec8 100644
--- a/crates/ide-db/src/ra_fixture.rs
+++ b/crates/ide-db/src/ra_fixture.rs
@@ -52,6 +52,18 @@ impl RootDatabase {
}
}
+#[derive(Debug, Clone, Copy)]
+pub struct RaFixtureConfig<'a> {
+ pub minicore: MiniCore<'a>,
+ pub disable_ra_fixture: bool,
+}
+
+impl<'a> RaFixtureConfig<'a> {
+ pub const fn default() -> Self {
+ Self { minicore: MiniCore::default(), disable_ra_fixture: false }
+ }
+}
+
pub struct RaFixtureAnalysis {
pub db: RootDatabase,
tmp_file_ids: Vec<(FileId, usize)>,
@@ -69,9 +81,14 @@ impl RaFixtureAnalysis {
sema: &Semantics<'_, RootDatabase>,
literal: ast::String,
expanded: &ast::String,
- minicore: MiniCore<'_>,
+ config: &RaFixtureConfig<'_>,
on_cursor: &mut dyn FnMut(TextRange),
) -> Option<RaFixtureAnalysis> {
+ if config.disable_ra_fixture {
+ return None;
+ }
+ let minicore = config.minicore;
+
if !literal.is_raw() {
return None;
}
diff --git a/crates/ide/src/annotations.rs b/crates/ide/src/annotations.rs
index 6fb8dedea4..107977cb11 100644
--- a/crates/ide/src/annotations.rs
+++ b/crates/ide/src/annotations.rs
@@ -1,7 +1,7 @@
use hir::{HasSource, InFile, InRealFile, Semantics};
use ide_db::{
- FileId, FilePosition, FileRange, FxIndexSet, MiniCore, RootDatabase, defs::Definition,
- helpers::visit_file_defs,
+ FileId, FilePosition, FileRange, FxIndexSet, RootDatabase, defs::Definition,
+ helpers::visit_file_defs, ra_fixture::RaFixtureConfig,
};
use itertools::Itertools;
use syntax::{AstNode, TextRange, ast::HasName};
@@ -45,7 +45,7 @@ pub struct AnnotationConfig<'a> {
pub annotate_enum_variant_references: bool,
pub location: AnnotationLocation,
pub filter_adjacent_derive_implementations: bool,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
pub enum AnnotationLocation {
@@ -216,7 +216,7 @@ pub(crate) fn resolve_annotation(
*data = find_all_refs(
&Semantics::new(db),
pos,
- &FindAllRefsConfig { search_scope: None, minicore: config.minicore },
+ &FindAllRefsConfig { search_scope: None, ra_fixture: config.ra_fixture },
)
.map(|result| {
result
@@ -244,7 +244,7 @@ fn should_skip_runnable(kind: &RunnableKind, binary_target: bool) -> bool {
#[cfg(test)]
mod tests {
use expect_test::{Expect, expect};
- use ide_db::MiniCore;
+ use ide_db::ra_fixture::RaFixtureConfig;
use crate::{Annotation, AnnotationConfig, fixture};
@@ -258,7 +258,7 @@ mod tests {
annotate_method_references: true,
annotate_enum_variant_references: true,
location: AnnotationLocation::AboveName,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
filter_adjacent_derive_implementations: false,
};
diff --git a/crates/ide/src/call_hierarchy.rs b/crates/ide/src/call_hierarchy.rs
index aded911a8d..402764f112 100644
--- a/crates/ide/src/call_hierarchy.rs
+++ b/crates/ide/src/call_hierarchy.rs
@@ -4,9 +4,10 @@ use std::iter;
use hir::Semantics;
use ide_db::{
- FileRange, FxIndexMap, MiniCore, RootDatabase,
+ FileRange, FxIndexMap, RootDatabase,
defs::{Definition, NameClass, NameRefClass},
helpers::pick_best_token,
+ ra_fixture::RaFixtureConfig,
search::FileReference,
};
use syntax::{AstNode, SyntaxKind::IDENT, ast};
@@ -25,7 +26,7 @@ pub struct CallItem {
pub struct CallHierarchyConfig<'a> {
/// Whether to exclude tests from the call hierarchy
pub exclude_tests: bool,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
pub(crate) fn call_hierarchy(
@@ -36,7 +37,7 @@ pub(crate) fn call_hierarchy(
goto_definition::goto_definition(
db,
position,
- &GotoDefinitionConfig { minicore: config.minicore },
+ &GotoDefinitionConfig { ra_fixture: config.ra_fixture },
)
}
@@ -174,7 +175,7 @@ impl CallLocations {
#[cfg(test)]
mod tests {
use expect_test::{Expect, expect};
- use ide_db::{FilePosition, MiniCore};
+ use ide_db::{FilePosition, ra_fixture::RaFixtureConfig};
use itertools::Itertools;
use crate::fixture;
@@ -197,7 +198,8 @@ mod tests {
)
}
- let config = crate::CallHierarchyConfig { exclude_tests, minicore: MiniCore::default() };
+ let config =
+ crate::CallHierarchyConfig { exclude_tests, ra_fixture: RaFixtureConfig::default() };
let (analysis, pos) = fixture::position(ra_fixture);
let mut navs = analysis.call_hierarchy(pos, &config).unwrap().unwrap().info;
diff --git a/crates/ide/src/goto_declaration.rs b/crates/ide/src/goto_declaration.rs
index 375ce94bf6..d2b47a37c7 100644
--- a/crates/ide/src/goto_declaration.rs
+++ b/crates/ide/src/goto_declaration.rs
@@ -79,13 +79,13 @@ pub(crate) fn goto_declaration(
#[cfg(test)]
mod tests {
- use ide_db::{FileRange, MiniCore};
+ use ide_db::{FileRange, ra_fixture::RaFixtureConfig};
use itertools::Itertools;
use crate::{GotoDefinitionConfig, fixture};
const TEST_CONFIG: GotoDefinitionConfig<'_> =
- GotoDefinitionConfig { minicore: MiniCore::default() };
+ GotoDefinitionConfig { ra_fixture: RaFixtureConfig::default() };
fn check(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
let (analysis, position, expected) = fixture::annotations(ra_fixture);
diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs
index 3890bcad7f..4cdf0eac75 100644
--- a/crates/ide/src/goto_definition.rs
+++ b/crates/ide/src/goto_definition.rs
@@ -9,7 +9,7 @@ use crate::{
use hir::{
AsAssocItem, AssocItem, CallableKind, FileRange, HasCrate, InFile, ModuleDef, Semantics, sym,
};
-use ide_db::{MiniCore, ra_fixture::UpmapFromRaFixture};
+use ide_db::ra_fixture::{RaFixtureConfig, UpmapFromRaFixture};
use ide_db::{
RootDatabase, SymbolKind,
base_db::{AnchoredPath, SourceDatabase},
@@ -26,7 +26,7 @@ use syntax::{
#[derive(Debug)]
pub struct GotoDefinitionConfig<'a> {
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
// Feature: Go to Definition
@@ -105,7 +105,7 @@ pub(crate) fn goto_definition(
if let Some(token) = ast::String::cast(token.value.clone())
&& let Some(original_token) = ast::String::cast(original_token.clone())
&& let Some((analysis, fixture_analysis)) =
- Analysis::from_ra_fixture(sema, original_token, &token, config.minicore)
+ Analysis::from_ra_fixture(sema, original_token, &token, &config.ra_fixture)
&& let Some((virtual_file_id, file_offset)) = fixture_analysis.map_offset_down(offset)
{
return hir::attach_db_allow_change(&analysis.db, || {
@@ -605,11 +605,11 @@ fn expr_to_nav(
#[cfg(test)]
mod tests {
use crate::{GotoDefinitionConfig, fixture};
- use ide_db::{FileRange, MiniCore};
+ use ide_db::{FileRange, ra_fixture::RaFixtureConfig};
use itertools::Itertools;
const TEST_CONFIG: GotoDefinitionConfig<'_> =
- GotoDefinitionConfig { minicore: MiniCore::default() };
+ GotoDefinitionConfig { ra_fixture: RaFixtureConfig::default() };
#[track_caller]
fn check(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index 958de8930d..df1fcecc99 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -8,11 +8,11 @@ use std::{iter, ops::Not};
use either::Either;
use hir::{DisplayTarget, GenericDef, GenericSubstitution, HasCrate, HasSource, Semantics};
use ide_db::{
- FileRange, FxIndexSet, MiniCore, Ranker, RootDatabase,
+ FileRange, FxIndexSet, Ranker, RootDatabase,
defs::{Definition, IdentClass, NameRefClass, OperatorClass},
famous_defs::FamousDefs,
helpers::pick_best_token,
- ra_fixture::UpmapFromRaFixture,
+ ra_fixture::{RaFixtureConfig, UpmapFromRaFixture},
};
use itertools::{Itertools, multizip};
use macros::UpmapFromRaFixture;
@@ -44,7 +44,7 @@ pub struct HoverConfig<'a> {
pub max_enum_variants_count: Option<usize>,
pub max_subst_ty_len: SubstTyLen,
pub show_drop_glue: bool,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
@@ -221,7 +221,7 @@ fn hover_offset(
if let Some(literal) = ast::String::cast(original_token.clone())
&& let Some((analysis, fixture_analysis)) =
- Analysis::from_ra_fixture(sema, literal.clone(), &literal, config.minicore)
+ Analysis::from_ra_fixture(sema, literal.clone(), &literal, &config.ra_fixture)
{
let (virtual_file_id, virtual_offset) = fixture_analysis.map_offset_down(offset)?;
return analysis
@@ -422,7 +422,7 @@ fn hover_ranged(
Either::Left(ast::Expr::Literal(literal)) => {
if let Some(literal) = ast::String::cast(literal.token())
&& let Some((analysis, fixture_analysis)) =
- Analysis::from_ra_fixture(sema, literal.clone(), &literal, config.minicore)
+ Analysis::from_ra_fixture(sema, literal.clone(), &literal, &config.ra_fixture)
{
let (virtual_file_id, virtual_range) = fixture_analysis.map_range_down(range)?;
return analysis
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index 7fbbc576dd..7a758cd4c1 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -1,5 +1,5 @@
use expect_test::{Expect, expect};
-use ide_db::{FileRange, MiniCore, base_db::SourceDatabase};
+use ide_db::{FileRange, base_db::SourceDatabase, ra_fixture::RaFixtureConfig};
use syntax::TextRange;
use crate::{
@@ -25,7 +25,7 @@ const HOVER_BASE_CONFIG: HoverConfig<'_> = HoverConfig {
max_enum_variants_count: Some(5),
max_subst_ty_len: super::SubstTyLen::Unlimited,
show_drop_glue: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
fn check_hover_no_result(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs
index a58dc6f030..83f2660433 100644
--- a/crates/ide/src/inlay_hints.rs
+++ b/crates/ide/src/inlay_hints.rs
@@ -9,7 +9,8 @@ use hir::{
HirDisplay, HirDisplayError, HirWrite, InRealFile, ModuleDef, ModuleDefId, Semantics, sym,
};
use ide_db::{
- FileRange, MiniCore, RootDatabase, famous_defs::FamousDefs, text_edit::TextEditBuilder,
+ FileRange, RootDatabase, famous_defs::FamousDefs, ra_fixture::RaFixtureConfig,
+ text_edit::TextEditBuilder,
};
use ide_db::{FxHashSet, text_edit::TextEdit};
use itertools::Itertools;
@@ -328,7 +329,7 @@ pub struct InlayHintsConfig<'a> {
pub max_length: Option<usize>,
pub closing_brace_hints_min_lines: Option<usize>,
pub fields_to_resolve: InlayFieldsToResolve,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
impl InlayHintsConfig<'_> {
@@ -899,7 +900,7 @@ mod tests {
use expect_test::Expect;
use hir::ClosureStyle;
- use ide_db::MiniCore;
+ use ide_db::ra_fixture::RaFixtureConfig;
use itertools::Itertools;
use test_utils::extract_annotations;
@@ -942,7 +943,7 @@ mod tests {
implicit_drop_hints: false,
implied_dyn_trait_hints: false,
range_exclusive_hints: false,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
pub(super) const TEST_CONFIG: InlayHintsConfig<'_> = InlayHintsConfig {
type_hints: true,
diff --git a/crates/ide/src/inlay_hints/ra_fixture.rs b/crates/ide/src/inlay_hints/ra_fixture.rs
index bee1841642..701c8a8612 100644
--- a/crates/ide/src/inlay_hints/ra_fixture.rs
+++ b/crates/ide/src/inlay_hints/ra_fixture.rs
@@ -16,7 +16,7 @@ pub(super) fn hints(
let file_id = file_id.file_id(sema.db);
let literal = ast::String::cast(literal.token())?;
let (analysis, fixture_analysis) =
- Analysis::from_ra_fixture(sema, literal.clone(), &literal, config.minicore)?;
+ Analysis::from_ra_fixture(sema, literal.clone(), &literal, &config.ra_fixture)?;
for virtual_file_id in fixture_analysis.files() {
acc.extend(
analysis
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 81a771fec8..2f89efd33f 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -63,6 +63,7 @@ use std::panic::{AssertUnwindSafe, UnwindSafe};
use cfg::CfgOptions;
use fetch_crates::CrateInfo;
use hir::{ChangeWithProcMacros, EditionedFileId, crate_def_map, sym};
+use ide_db::ra_fixture::RaFixtureAnalysis;
use ide_db::{
FxHashMap, FxIndexSet, LineIndexDatabase,
base_db::{
@@ -71,7 +72,6 @@ use ide_db::{
},
prime_caches, symbol_index,
};
-use ide_db::{MiniCore, ra_fixture::RaFixtureAnalysis};
use macros::UpmapFromRaFixture;
use syntax::{AstNode, SourceFile, ast};
use triomphe::Arc;
@@ -135,6 +135,7 @@ pub use ide_db::{
label::Label,
line_index::{LineCol, LineIndex},
prime_caches::ParallelPrimeCachesProgress,
+ ra_fixture::RaFixtureConfig,
search::{ReferenceCategory, SearchScope},
source_change::{FileSystemEdit, SnippetEdit, SourceChange},
symbol_index::Query,
@@ -289,9 +290,9 @@ impl Analysis {
sema: &Semantics<'_, RootDatabase>,
literal: ast::String,
expanded: &ast::String,
- minicore: MiniCore<'_>,
+ config: &RaFixtureConfig<'_>,
) -> Option<(Analysis, RaFixtureAnalysis)> {
- Self::from_ra_fixture_with_on_cursor(sema, literal, expanded, minicore, &mut |_| {})
+ Self::from_ra_fixture_with_on_cursor(sema, literal, expanded, config, &mut |_| {})
}
/// Like [`Analysis::from_ra_fixture()`], but also calls `on_cursor` with the cursor position.
@@ -299,11 +300,11 @@ impl Analysis {
sema: &Semantics<'_, RootDatabase>,
literal: ast::String,
expanded: &ast::String,
- minicore: MiniCore<'_>,
+ config: &RaFixtureConfig<'_>,
on_cursor: &mut dyn FnMut(TextRange),
) -> Option<(Analysis, RaFixtureAnalysis)> {
let analysis =
- RaFixtureAnalysis::analyze_ra_fixture(sema, literal, expanded, minicore, on_cursor)?;
+ RaFixtureAnalysis::analyze_ra_fixture(sema, literal, expanded, config, on_cursor)?;
Some((Analysis { db: analysis.db.clone() }, analysis))
}
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs
index 9392651c17..0288099bbc 100644
--- a/crates/ide/src/references.rs
+++ b/crates/ide/src/references.rs
@@ -19,10 +19,10 @@
use hir::{PathResolution, Semantics};
use ide_db::{
- FileId, MiniCore, RootDatabase,
+ FileId, RootDatabase,
defs::{Definition, NameClass, NameRefClass},
helpers::pick_best_token,
- ra_fixture::UpmapFromRaFixture,
+ ra_fixture::{RaFixtureConfig, UpmapFromRaFixture},
search::{ReferenceCategory, SearchScope, UsageSearchResult},
};
use itertools::Itertools;
@@ -90,7 +90,7 @@ pub struct Declaration {
#[derive(Debug)]
pub struct FindAllRefsConfig<'a> {
pub search_scope: Option<SearchScope>,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
/// Find all references to the item at the given position.
@@ -179,7 +179,7 @@ pub(crate) fn find_all_refs(
if let Some(token) = syntax.token_at_offset(position.offset).left_biased()
&& let Some(token) = ast::String::cast(token.clone())
&& let Some((analysis, fixture_analysis)) =
- Analysis::from_ra_fixture(sema, token.clone(), &token, config.minicore)
+ Analysis::from_ra_fixture(sema, token.clone(), &token, &config.ra_fixture)
&& let Some((virtual_file_id, file_offset)) =
fixture_analysis.map_offset_down(position.offset)
{
@@ -462,7 +462,7 @@ fn handle_control_flow_keywords(
mod tests {
use expect_test::{Expect, expect};
use hir::EditionedFileId;
- use ide_db::{FileId, MiniCore, RootDatabase};
+ use ide_db::{FileId, RootDatabase, ra_fixture::RaFixtureConfig};
use stdx::format_to;
use crate::{SearchScope, fixture, references::FindAllRefsConfig};
@@ -1567,7 +1567,7 @@ fn main() {
let (analysis, pos) = fixture::position(ra_fixture);
let config = FindAllRefsConfig {
search_scope: search_scope.map(|it| it(&analysis.db)),
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
let refs = analysis.find_all_refs(pos, &config).unwrap().unwrap();
diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs
index aba6b64f97..2f63aa0d8c 100644
--- a/crates/ide/src/static_index.rs
+++ b/crates/ide/src/static_index.rs
@@ -4,11 +4,12 @@
use arrayvec::ArrayVec;
use hir::{Crate, Module, Semantics, db::HirDatabase};
use ide_db::{
- FileId, FileRange, FxHashMap, FxHashSet, MiniCore, RootDatabase,
+ FileId, FileRange, FxHashMap, FxHashSet, RootDatabase,
base_db::{RootQueryDb, SourceDatabase, VfsPath},
defs::{Definition, IdentClass},
documentation::Documentation,
famous_defs::FamousDefs,
+ ra_fixture::RaFixtureConfig,
};
use syntax::{AstNode, SyntaxNode, SyntaxToken, TextRange};
@@ -196,7 +197,7 @@ impl StaticIndex<'_> {
closing_brace_hints_min_lines: Some(25),
fields_to_resolve: InlayFieldsToResolve::empty(),
range_exclusive_hints: false,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
},
file_id,
None,
@@ -225,7 +226,7 @@ impl StaticIndex<'_> {
max_enum_variants_count: Some(5),
max_subst_ty_len: SubstTyLen::Unlimited,
show_drop_glue: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
let mut result = StaticIndexedFile { file_id, inlay_hints, folds, tokens: vec![] };
diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs
index 217b13b4ef..9fd3f005ec 100644
--- a/crates/ide/src/syntax_highlighting.rs
+++ b/crates/ide/src/syntax_highlighting.rs
@@ -17,7 +17,7 @@ use either::Either;
use hir::{
DefWithBody, EditionedFileId, ExpressionStoreOwner, InFile, InRealFile, MacroKind, Semantics,
};
-use ide_db::{FxHashMap, FxHashSet, MiniCore, Ranker, RootDatabase, SymbolKind};
+use ide_db::{FxHashMap, FxHashSet, Ranker, RootDatabase, SymbolKind, ra_fixture::RaFixtureConfig};
use syntax::{
AstNode, AstToken, NodeOrToken,
SyntaxKind::*,
@@ -65,7 +65,7 @@ pub struct HighlightConfig<'a> {
pub macro_bang: bool,
/// Whether to highlight unresolved things be their syntax
pub syntactic_name_ref_highlighting: bool,
- pub minicore: MiniCore<'a>,
+ pub ra_fixture: RaFixtureConfig<'a>,
}
// Feature: Semantic Syntax Highlighting
diff --git a/crates/ide/src/syntax_highlighting/html.rs b/crates/ide/src/syntax_highlighting/html.rs
index 74567e8213..423c0c349c 100644
--- a/crates/ide/src/syntax_highlighting/html.rs
+++ b/crates/ide/src/syntax_highlighting/html.rs
@@ -1,7 +1,7 @@
//! Renders a bit of code as HTML.
use hir::Semantics;
-use ide_db::MiniCore;
+use ide_db::ra_fixture::RaFixtureConfig;
use oorandom::Rand32;
use stdx::format_to;
use syntax::AstNode;
@@ -69,7 +69,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
inject_doc_comment: true,
macro_bang: true,
syntactic_name_ref_highlighting: false,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
},
file_id,
rainbow,
diff --git a/crates/ide/src/syntax_highlighting/inject.rs b/crates/ide/src/syntax_highlighting/inject.rs
index 74a8d93dfe..6afe5681a9 100644
--- a/crates/ide/src/syntax_highlighting/inject.rs
+++ b/crates/ide/src/syntax_highlighting/inject.rs
@@ -27,7 +27,7 @@ pub(super) fn ra_fixture(
sema,
literal.clone(),
expanded,
- config.minicore,
+ &config.ra_fixture,
&mut |range| {
hl.add(HlRange {
range,
@@ -56,7 +56,7 @@ pub(super) fn ra_fixture(
macro_bang: config.macro_bang,
// What if there is a fixture inside a fixture? It's fixtures all the way down.
// (In fact, we have a fixture inside a fixture in our test suite!)
- minicore: config.minicore,
+ ra_fixture: config.ra_fixture,
},
tmp_file_id,
)
@@ -186,7 +186,7 @@ pub(super) fn doc_comment(
specialize_operator: config.operator,
inject_doc_comment: config.inject_doc_comment,
macro_bang: config.macro_bang,
- minicore: config.minicore,
+ ra_fixture: config.ra_fixture,
},
tmp_file_id,
None,
diff --git a/crates/ide/src/syntax_highlighting/tests.rs b/crates/ide/src/syntax_highlighting/tests.rs
index aecd1d3fdb..e8d185b7b6 100644
--- a/crates/ide/src/syntax_highlighting/tests.rs
+++ b/crates/ide/src/syntax_highlighting/tests.rs
@@ -1,7 +1,7 @@
use std::time::Instant;
use expect_test::{ExpectFile, expect_file};
-use ide_db::{MiniCore, SymbolKind};
+use ide_db::{SymbolKind, ra_fixture::RaFixtureConfig};
use span::Edition;
use test_utils::{AssertLinear, bench, bench_fixture, skip_slow_tests};
@@ -17,7 +17,7 @@ const HL_CONFIG: HighlightConfig<'_> = HighlightConfig {
inject_doc_comment: true,
macro_bang: true,
syntactic_name_ref_highlighting: false,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
#[test]
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index 74828cba02..19d5e8fdce 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -23,10 +23,10 @@ use hir_def::{
use hir_ty::InferenceResult;
use ide::{
Analysis, AnalysisHost, AnnotationConfig, DiagnosticsConfig, Edition, InlayFieldsToResolve,
- InlayHintsConfig, LineCol, RootDatabase,
+ InlayHintsConfig, LineCol, RaFixtureConfig, RootDatabase,
};
use ide_db::{
- EditionedFileId, LineIndexDatabase, MiniCore, SnippetCap,
+ EditionedFileId, LineIndexDatabase, SnippetCap,
base_db::{SourceDatabase, salsa::Database},
};
use itertools::Itertools;
@@ -1397,7 +1397,7 @@ impl flags::AnalysisStats {
closing_brace_hints_min_lines: Some(20),
fields_to_resolve: InlayFieldsToResolve::empty(),
range_exclusive_hints: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
},
analysis.editioned_file_id_to_vfs(file_id),
None,
@@ -1416,7 +1416,7 @@ impl flags::AnalysisStats {
annotate_enum_variant_references: false,
location: ide::AnnotationLocation::AboveName,
filter_adjacent_derive_implementations: false,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
for &file_id in file_ids {
let msg = format!("annotations: {}", vfs.file_path(file_id.file_id(db)));
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index 2ccd85f0e3..eb390f024f 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -12,7 +12,8 @@ use ide::{
CompletionFieldsToResolve, DiagnosticsConfig, GenericParameterHints, GotoDefinitionConfig,
GotoImplementationConfig, HighlightConfig, HighlightRelatedConfig, HoverConfig, HoverDocFormat,
InlayFieldsToResolve, InlayHintsConfig, JoinLinesConfig, MemoryLayoutHoverConfig,
- MemoryLayoutHoverRenderKind, RenameConfig, Snippet, SnippetScope, SourceRootId,
+ MemoryLayoutHoverRenderKind, RaFixtureConfig, RenameConfig, Snippet, SnippetScope,
+ SourceRootId,
};
use ide_db::{
MiniCore, SnippetCap,
@@ -727,6 +728,11 @@ config_data! {
/// the `Problems Panel`.
diagnostics_warningsAsInfo: Vec<String> = vec![],
+ /// Disable support for `#[rust_analyzer::rust_fixture]` snippets.
+ ///
+ /// If you are not working on rust-analyzer itself, you should ignore this config.
+ disableFixtureSupport: bool = false,
+
/// Enforce the import granularity setting for all files. If set to false rust-analyzer will
/// try to keep import styles consistent per file.
imports_granularity_enforce: bool = false,
@@ -1504,6 +1510,8 @@ pub struct LensConfig {
// annotations
pub location: AnnotationLocation,
pub filter_adjacent_derive_implementations: bool,
+
+ disable_ra_fixture: bool,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
@@ -1559,7 +1567,7 @@ impl LensConfig {
annotate_method_references: self.method_refs,
annotate_enum_variant_references: self.enum_variant_refs,
location: self.location.into(),
- minicore,
+ ra_fixture: RaFixtureConfig { minicore, disable_ra_fixture: self.disable_ra_fixture },
filter_adjacent_derive_implementations: self.filter_adjacent_derive_implementations,
}
}
@@ -1816,8 +1824,15 @@ impl Config {
}
}
+ pub fn ra_fixture<'a>(&self, minicore: MiniCore<'a>) -> RaFixtureConfig<'a> {
+ RaFixtureConfig { minicore, disable_ra_fixture: *self.disableFixtureSupport(None) }
+ }
+
pub fn call_hierarchy<'a>(&self, minicore: MiniCore<'a>) -> CallHierarchyConfig<'a> {
- CallHierarchyConfig { exclude_tests: self.references_excludeTests().to_owned(), minicore }
+ CallHierarchyConfig {
+ exclude_tests: self.references_excludeTests().to_owned(),
+ ra_fixture: self.ra_fixture(minicore),
+ }
}
pub fn completion<'a>(
@@ -1878,7 +1893,7 @@ impl Config {
})
.collect(),
exclude_traits: self.completion_excludeTraits(source_root),
- minicore,
+ ra_fixture: self.ra_fixture(minicore),
}
}
@@ -1987,12 +2002,12 @@ impl Config {
None => ide::SubstTyLen::Unlimited,
},
show_drop_glue: *self.hover_dropGlue_enable(),
- minicore,
+ ra_fixture: self.ra_fixture(minicore),
}
}
pub fn goto_definition<'a>(&self, minicore: MiniCore<'a>) -> GotoDefinitionConfig<'a> {
- GotoDefinitionConfig { minicore }
+ GotoDefinitionConfig { ra_fixture: self.ra_fixture(minicore) }
}
pub fn inlay_hints<'a>(&self, minicore: MiniCore<'a>) -> InlayHintsConfig<'a> {
@@ -2082,7 +2097,7 @@ impl Config {
implicit_drop_hints: self.inlayHints_implicitDrops_enable().to_owned(),
implied_dyn_trait_hints: self.inlayHints_impliedDynTraitHints_enable().to_owned(),
range_exclusive_hints: self.inlayHints_rangeExclusiveHints_enable().to_owned(),
- minicore,
+ ra_fixture: self.ra_fixture(minicore),
}
}
@@ -2135,7 +2150,7 @@ impl Config {
.to_owned(),
inject_doc_comment: self.semanticHighlighting_doc_comment_inject_enable().to_owned(),
syntactic_name_ref_highlighting: false,
- minicore,
+ ra_fixture: self.ra_fixture(minicore),
}
}
@@ -2621,6 +2636,7 @@ impl Config {
location: *self.lens_location(),
filter_adjacent_derive_implementations: *self
.gotoImplementations_filterAdjacentDerives(),
+ disable_ra_fixture: *self.disableFixtureSupport(None),
}
}
diff --git a/crates/rust-analyzer/src/handlers/request.rs b/crates/rust-analyzer/src/handlers/request.rs
index ad07da7759..64b4e39449 100644
--- a/crates/rust-analyzer/src/handlers/request.rs
+++ b/crates/rust-analyzer/src/handlers/request.rs
@@ -1395,7 +1395,10 @@ pub(crate) fn handle_references(
let Some(refs) = snap.analysis.find_all_refs(
position,
- &FindAllRefsConfig { search_scope: None, minicore: snap.minicore() },
+ &FindAllRefsConfig {
+ search_scope: None,
+ ra_fixture: snap.config.ra_fixture(snap.minicore()),
+ },
)?
else {
return Ok(None);
@@ -2202,7 +2205,10 @@ fn show_ref_command_link(
.analysis
.find_all_refs(
*position,
- &FindAllRefsConfig { search_scope: None, minicore: snap.minicore() },
+ &FindAllRefsConfig {
+ search_scope: None,
+ ra_fixture: snap.config.ra_fixture(snap.minicore()),
+ },
)
.unwrap_or(None)
{
diff --git a/crates/rust-analyzer/src/integrated_benchmarks.rs b/crates/rust-analyzer/src/integrated_benchmarks.rs
index 6a74b8a54d..af449c473a 100644
--- a/crates/rust-analyzer/src/integrated_benchmarks.rs
+++ b/crates/rust-analyzer/src/integrated_benchmarks.rs
@@ -13,10 +13,10 @@
use hir::ChangeWithProcMacros;
use ide::{
AnalysisHost, CallableSnippets, CompletionConfig, CompletionFieldsToResolve, DiagnosticsConfig,
- FilePosition, TextSize,
+ FilePosition, RaFixtureConfig, TextSize,
};
use ide_db::{
- MiniCore, SnippetCap,
+ SnippetCap,
imports::insert_use::{ImportGranularity, InsertUseConfig},
};
use project_model::CargoConfig;
@@ -190,7 +190,7 @@ fn integrated_completion_benchmark() {
exclude_traits: &[],
enable_auto_await: true,
enable_auto_iter: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
let position =
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };
@@ -245,7 +245,7 @@ fn integrated_completion_benchmark() {
exclude_traits: &[],
enable_auto_await: true,
enable_auto_iter: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
let position =
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };
@@ -298,7 +298,7 @@ fn integrated_completion_benchmark() {
exclude_traits: &[],
enable_auto_await: true,
enable_auto_iter: true,
- minicore: MiniCore::default(),
+ ra_fixture: RaFixtureConfig::default(),
};
let position =
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };
diff --git a/docs/book/src/configuration_generated.md b/docs/book/src/configuration_generated.md
index 35fba5accd..31ef4fddea 100644
--- a/docs/book/src/configuration_generated.md
+++ b/docs/book/src/configuration_generated.md
@@ -618,6 +618,15 @@ The warnings will be indicated by a blue squiggly underline in code and a blue i
the `Problems Panel`.
+## rust-analyzer.disableFixtureSupport {#disableFixtureSupport}
+
+Default: `false`
+
+Disable support for `#[rust_analyzer::rust_fixture]` snippets.
+
+If you are not working on rust-analyzer itself, you should ignore this config.
+
+
## rust-analyzer.document.symbol.search.excludeLocals {#document.symbol.search.excludeLocals}
Default: `true`
diff --git a/editors/code/package.json b/editors/code/package.json
index 1dd513c9de..a1a414b4f4 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -1592,6 +1592,16 @@
}
},
{
+ "title": "rust-analyzer",
+ "properties": {
+ "rust-analyzer.disableFixtureSupport": {
+ "markdownDescription": "Disable support for `#[rust_analyzer::rust_fixture]` snippets.\n\nIf you are not working on rust-analyzer itself, you should ignore this config.",
+ "default": false,
+ "type": "boolean"
+ }
+ }
+ },
+ {
"title": "Document",
"properties": {
"rust-analyzer.document.symbol.search.excludeLocals": {