Unnamed repository; edit this file 'description' to name the repository.
Make `Semantics::attach_first_edition()` not return `Option`
And instead call `EditionedFileId::current_edition_guess_origin`, as most callers do it anyway.
Chayim Refael Friedman 5 months ago
parent 33986f0 · commit b927677
-rw-r--r--crates/hir/src/semantics.rs13
-rw-r--r--crates/ide-assists/src/lib.rs6
-rw-r--r--crates/ide-assists/src/tests.rs5
-rw-r--r--crates/ide-completion/src/context.rs2
-rw-r--r--crates/ide-completion/src/lib.rs2
-rw-r--r--crates/ide-diagnostics/src/lib.rs10
-rw-r--r--crates/ide-ssr/src/lib.rs4
-rw-r--r--crates/ide-ssr/src/search.rs6
-rw-r--r--crates/ide/src/expand_macro.rs2
-rw-r--r--crates/ide/src/goto_definition.rs5
-rw-r--r--crates/ide/src/highlight_related.rs4
-rw-r--r--crates/ide/src/hover.rs3
-rw-r--r--crates/ide/src/inlay_hints.rs8
-rw-r--r--crates/ide/src/references.rs6
-rw-r--r--crates/ide/src/rename.rs2
-rw-r--r--crates/ide/src/signature_help.rs3
-rw-r--r--crates/ide/src/static_index.rs6
-rw-r--r--crates/ide/src/syntax_highlighting.rs4
-rw-r--r--crates/ide/src/syntax_highlighting/html.rs6
-rw-r--r--crates/ide/src/view_item_tree.rs6
-rw-r--r--crates/rust-analyzer/src/cli/unresolved_references.rs8
21 files changed, 39 insertions, 72 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 8cd218f04e..3d4859424f 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -384,15 +384,18 @@ impl<'db> SemanticsImpl<'db> {
}
}
- pub fn attach_first_edition(&self, file: FileId) -> Option<EditionedFileId> {
+ pub fn attach_first_edition_opt(&self, file: FileId) -> Option<EditionedFileId> {
let krate = self.file_to_module_defs(file).next()?.krate();
Some(EditionedFileId::new(self.db, file, krate.edition(self.db), krate.id))
}
+ pub fn attach_first_edition(&self, file: FileId) -> EditionedFileId {
+ self.attach_first_edition_opt(file)
+ .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(self.db, file))
+ }
+
pub fn parse_guess_edition(&self, file_id: FileId) -> ast::SourceFile {
- let file_id = self
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(self.db, file_id));
+ let file_id = self.attach_first_edition(file_id);
let tree = self.db.parse(file_id).tree();
self.cache(tree.syntax().clone(), file_id.into());
@@ -401,7 +404,7 @@ impl<'db> SemanticsImpl<'db> {
pub fn adjust_edition(&self, file_id: HirFileId) -> HirFileId {
if let Some(editioned_file_id) = file_id.file_id() {
- self.attach_first_edition(editioned_file_id.file_id(self.db))
+ self.attach_first_edition_opt(editioned_file_id.file_id(self.db))
.map_or(file_id, Into::into)
} else {
file_id
diff --git a/crates/ide-assists/src/lib.rs b/crates/ide-assists/src/lib.rs
index 8f754bcf21..0b5dae6bc4 100644
--- a/crates/ide-assists/src/lib.rs
+++ b/crates/ide-assists/src/lib.rs
@@ -67,7 +67,7 @@ mod tests;
pub mod utils;
use hir::Semantics;
-use ide_db::{EditionedFileId, RootDatabase};
+use ide_db::RootDatabase;
use syntax::TextRange;
pub(crate) use crate::assist_context::{AssistContext, Assists};
@@ -88,9 +88,7 @@ pub fn assists(
range: ide_db::FileRange,
) -> Vec<Assist> {
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(range.file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, range.file_id));
+ let file_id = sema.attach_first_edition(range.file_id);
let ctx = AssistContext::new(sema, config, hir::FileRange { file_id, range: range.range });
let mut acc = Assists::new(&ctx, resolve);
handlers::all().iter().for_each(|handler| {
diff --git a/crates/ide-assists/src/tests.rs b/crates/ide-assists/src/tests.rs
index 2e220b129f..c9044fe111 100644
--- a/crates/ide-assists/src/tests.rs
+++ b/crates/ide-assists/src/tests.rs
@@ -322,8 +322,9 @@ fn check_with_config(
let (mut db, file_with_caret_id, range_or_offset) = RootDatabase::with_range_or_offset(before);
db.enable_proc_attr_macros();
let sema = Semantics::new(&db);
- let file_with_caret_id =
- sema.attach_first_edition(file_with_caret_id.file_id(&db)).unwrap_or(file_with_caret_id);
+ let file_with_caret_id = sema
+ .attach_first_edition_opt(file_with_caret_id.file_id(&db))
+ .unwrap_or(file_with_caret_id);
let text_without_caret = db.file_text(file_with_caret_id.file_id(&db)).text(&db).to_string();
let frange = hir::FileRange { file_id: file_with_caret_id, range: range_or_offset.into() };
diff --git a/crates/ide-completion/src/context.rs b/crates/ide-completion/src/context.rs
index 971067d4a2..ffffc2635e 100644
--- a/crates/ide-completion/src/context.rs
+++ b/crates/ide-completion/src/context.rs
@@ -707,7 +707,7 @@ impl<'db> CompletionContext<'db> {
let _p = tracing::info_span!("CompletionContext::new").entered();
let sema = Semantics::new(db);
- let editioned_file_id = sema.attach_first_edition(file_id)?;
+ let editioned_file_id = sema.attach_first_edition(file_id);
let original_file = sema.parse(editioned_file_id);
// Insert a fake ident to get a valid parse tree. We will use this file
diff --git a/crates/ide-completion/src/lib.rs b/crates/ide-completion/src/lib.rs
index 8a0aaf3f0c..f7a118db50 100644
--- a/crates/ide-completion/src/lib.rs
+++ b/crates/ide-completion/src/lib.rs
@@ -274,7 +274,7 @@ pub fn resolve_completion_edits(
let _p = tracing::info_span!("resolve_completion_edits").entered();
let sema = hir::Semantics::new(db);
- let editioned_file_id = sema.attach_first_edition(file_id)?;
+ let editioned_file_id = sema.attach_first_edition(file_id);
let original_file = sema.parse(editioned_file_id);
let original_token =
diff --git a/crates/ide-diagnostics/src/lib.rs b/crates/ide-diagnostics/src/lib.rs
index 5c8f030de4..41ae854455 100644
--- a/crates/ide-diagnostics/src/lib.rs
+++ b/crates/ide-diagnostics/src/lib.rs
@@ -90,7 +90,7 @@ use hir::{
Crate, DisplayTarget, InFile, Semantics, db::ExpandDatabase, diagnostics::AnyDiagnostic,
};
use ide_db::{
- EditionedFileId, FileId, FileRange, FxHashMap, FxHashSet, RootDatabase, Severity, SnippetCap,
+ FileId, FileRange, FxHashMap, FxHashSet, RootDatabase, Severity, SnippetCap,
assists::{Assist, AssistId, AssistResolveStrategy, ExprFillDefaultMode},
base_db::{ReleaseChannel, RootQueryDb as _},
generated::lints::{CLIPPY_LINT_GROUPS, DEFAULT_LINT_GROUPS, DEFAULT_LINTS, Lint, LintGroup},
@@ -290,9 +290,7 @@ pub fn syntax_diagnostics(
}
let sema = Semantics::new(db);
- let editioned_file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let editioned_file_id = sema.attach_first_edition(file_id);
let (file_id, _) = editioned_file_id.unpack(db);
@@ -321,9 +319,7 @@ pub fn semantic_diagnostics(
) -> Vec<Diagnostic> {
let _p = tracing::info_span!("semantic_diagnostics").entered();
let sema = Semantics::new(db);
- let editioned_file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let editioned_file_id = sema.attach_first_edition(file_id);
let (file_id, edition) = editioned_file_id.unpack(db);
let mut res = Vec::new();
diff --git a/crates/ide-ssr/src/lib.rs b/crates/ide-ssr/src/lib.rs
index 7086e978dd..977dfb7466 100644
--- a/crates/ide-ssr/src/lib.rs
+++ b/crates/ide-ssr/src/lib.rs
@@ -125,9 +125,7 @@ impl<'db> MatchFinder<'db> {
) -> Result<MatchFinder<'db>, SsrError> {
restrict_ranges.retain(|range| !range.range.is_empty());
let sema = Semantics::new(db);
- let file_id = sema.attach_first_edition(lookup_context.file_id).unwrap_or_else(|| {
- EditionedFileId::current_edition_guess_origin(db, lookup_context.file_id)
- });
+ let file_id = sema.attach_first_edition(lookup_context.file_id);
let resolution_scope = resolving::ResolutionScope::new(
&sema,
hir::FilePosition { file_id, offset: lookup_context.offset },
diff --git a/crates/ide-ssr/src/search.rs b/crates/ide-ssr/src/search.rs
index 5700428b81..5f54c66d3c 100644
--- a/crates/ide-ssr/src/search.rs
+++ b/crates/ide-ssr/src/search.rs
@@ -6,7 +6,7 @@ use crate::{
};
use hir::FileRange;
use ide_db::{
- EditionedFileId, FileId, FxHashSet,
+ FileId, FxHashSet,
defs::Definition,
search::{SearchScope, UsageSearchResult},
symbol_index::LocalRoots,
@@ -136,9 +136,7 @@ impl<'db> MatchFinder<'db> {
// seems to get put into a single source root.
let mut files = Vec::new();
self.search_files_do(|file_id| {
- files.push(self.sema.attach_first_edition(file_id).unwrap_or_else(|| {
- EditionedFileId::current_edition_guess_origin(self.sema.db, file_id)
- }));
+ files.push(self.sema.attach_first_edition(file_id));
});
SearchScope::files(&files)
}
diff --git a/crates/ide/src/expand_macro.rs b/crates/ide/src/expand_macro.rs
index 094a4a7036..9d38a860a0 100644
--- a/crates/ide/src/expand_macro.rs
+++ b/crates/ide/src/expand_macro.rs
@@ -26,7 +26,7 @@ pub struct ExpandedMacro {
// ![Expand Macro Recursively](https://user-images.githubusercontent.com/48062697/113020648-b3973180-917a-11eb-84a9-ecb921293dc5.gif)
pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<ExpandedMacro> {
let sema = Semantics::new(db);
- let file_id = sema.attach_first_edition(position.file_id)?;
+ let file_id = sema.attach_first_edition(position.file_id);
let file = sema.parse(file_id);
let krate = sema.file_to_module_def(file_id.file_id(db))?.krate().into();
diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs
index d663b703c3..e1db370d44 100644
--- a/crates/ide/src/goto_definition.rs
+++ b/crates/ide/src/goto_definition.rs
@@ -18,7 +18,7 @@ use ide_db::{
helpers::pick_best_token,
};
use itertools::Itertools;
-use span::{Edition, FileId};
+use span::FileId;
use syntax::{
AstNode, AstToken,
SyntaxKind::*,
@@ -50,8 +50,7 @@ pub(crate) fn goto_definition(
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
let sema = &Semantics::new(db);
let file = sema.parse_guess_edition(file_id).syntax().clone();
- let edition =
- sema.attach_first_edition(file_id).map(|it| it.edition(db)).unwrap_or(Edition::CURRENT);
+ let edition = sema.attach_first_edition(file_id).edition(db);
let original_token = pick_best_token(file.token_at_offset(offset), |kind| match kind {
IDENT
| INT_NUMBER
diff --git a/crates/ide/src/highlight_related.rs b/crates/ide/src/highlight_related.rs
index f7870032ea..acba573cc0 100644
--- a/crates/ide/src/highlight_related.rs
+++ b/crates/ide/src/highlight_related.rs
@@ -60,9 +60,7 @@ pub(crate) fn highlight_related(
ide_db::FilePosition { offset, file_id }: ide_db::FilePosition,
) -> Option<Vec<HighlightedRange>> {
let _p = tracing::info_span!("highlight_related").entered();
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(sema.db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
let syntax = sema.parse(file_id).syntax().clone();
let token = pick_best_token(syntax.token_at_offset(offset), |kind| match kind {
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index dae2136f25..958de8930d 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -135,8 +135,7 @@ pub(crate) fn hover(
) -> Option<RangeInfo<HoverResult>> {
let sema = &hir::Semantics::new(db);
let file = sema.parse_guess_edition(file_id).syntax().clone();
- let edition =
- sema.attach_first_edition(file_id).map(|it| it.edition(db)).unwrap_or(Edition::CURRENT);
+ let edition = sema.attach_first_edition(file_id).edition(db);
let display_target = sema.first_crate(file_id)?.to_display_target(db);
let mut res = if range.is_empty() {
hover_offset(
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs
index 155d6b52f1..deacc7fafb 100644
--- a/crates/ide/src/inlay_hints.rs
+++ b/crates/ide/src/inlay_hints.rs
@@ -89,9 +89,7 @@ pub(crate) fn inlay_hints(
) -> Vec<InlayHint> {
let _p = tracing::info_span!("inlay_hints").entered();
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
let file = sema.parse(file_id);
let file = file.syntax();
@@ -142,9 +140,7 @@ pub(crate) fn inlay_hints_resolve(
) -> Option<InlayHint> {
let _p = tracing::info_span!("inlay_hints_resolve").entered();
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
let file = sema.parse(file_id);
let file = file.syntax();
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs
index 6bd60e2a13..0738b7fadc 100644
--- a/crates/ide/src/references.rs
+++ b/crates/ide/src/references.rs
@@ -28,7 +28,6 @@ use ide_db::{
use itertools::Itertools;
use macros::UpmapFromRaFixture;
use nohash_hasher::IntMap;
-use span::Edition;
use syntax::AstToken;
use syntax::{
AstNode,
@@ -419,10 +418,7 @@ fn handle_control_flow_keywords(
FilePosition { file_id, offset }: FilePosition,
) -> Option<ReferenceSearchResult> {
let file = sema.parse_guess_edition(file_id);
- let edition = sema
- .attach_first_edition(file_id)
- .map(|it| it.edition(sema.db))
- .unwrap_or(Edition::CURRENT);
+ let edition = sema.attach_first_edition(file_id).edition(sema.db);
let token = pick_best_token(file.syntax().token_at_offset(offset), |kind| match kind {
_ if kind.is_keyword(edition) => 4,
T![=>] => 3,
diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs
index ce5963919d..7955e9b6e7 100644
--- a/crates/ide/src/rename.rs
+++ b/crates/ide/src/rename.rs
@@ -121,7 +121,7 @@ pub(crate) fn rename(
) -> RenameResult<SourceChange> {
let sema = Semantics::new(db);
let file_id = sema
- .attach_first_edition(position.file_id)
+ .attach_first_edition_opt(position.file_id)
.ok_or_else(|| format_err!("No references found at position"))?;
let source_file = sema.parse(file_id);
let syntax = source_file.syntax();
diff --git a/crates/ide/src/signature_help.rs b/crates/ide/src/signature_help.rs
index 9c3204c199..78dc3f7e86 100644
--- a/crates/ide/src/signature_help.rs
+++ b/crates/ide/src/signature_help.rs
@@ -84,8 +84,7 @@ pub(crate) fn signature_help(
// this prevents us from leaving the CallExpression
.and_then(|tok| algo::skip_trivia_token(tok, Direction::Prev))?;
let token = sema.descend_into_macros_single_exact(token);
- let edition =
- sema.attach_first_edition(file_id).map(|it| it.edition(db)).unwrap_or(Edition::CURRENT);
+ let edition = sema.attach_first_edition(file_id).edition(db);
let display_target = sema.first_crate(file_id)?.to_display_target(db);
for node in token.parent_ancestors() {
diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs
index 7dc91fbc9e..0cf2e15bc6 100644
--- a/crates/ide/src/static_index.rs
+++ b/crates/ide/src/static_index.rs
@@ -10,7 +10,6 @@ use ide_db::{
documentation::Documentation,
famous_defs::FamousDefs,
};
-use span::Edition;
use syntax::{AstNode, SyntaxKind::*, SyntaxNode, SyntaxToken, T, TextRange};
use crate::navigation_target::UpmappingResult;
@@ -204,10 +203,7 @@ impl StaticIndex<'_> {
// hovers
let sema = hir::Semantics::new(self.db);
let root = sema.parse_guess_edition(file_id).syntax().clone();
- let edition = sema
- .attach_first_edition(file_id)
- .map(|it| it.edition(self.db))
- .unwrap_or(Edition::CURRENT);
+ let edition = sema.attach_first_edition(file_id).edition(sema.db);
let display_target = match sema.first_crate(file_id) {
Some(krate) => krate.to_display_target(sema.db),
None => return,
diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs
index 8d0f0c3e68..fd5ede865f 100644
--- a/crates/ide/src/syntax_highlighting.rs
+++ b/crates/ide/src/syntax_highlighting.rs
@@ -197,9 +197,7 @@ pub(crate) fn highlight(
) -> Vec<HlRange> {
let _p = tracing::info_span!("highlight").entered();
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
// Determine the root based on the given range.
let (root, range_to_highlight) = {
diff --git a/crates/ide/src/syntax_highlighting/html.rs b/crates/ide/src/syntax_highlighting/html.rs
index dae3e69fee..74567e8213 100644
--- a/crates/ide/src/syntax_highlighting/html.rs
+++ b/crates/ide/src/syntax_highlighting/html.rs
@@ -1,6 +1,6 @@
//! Renders a bit of code as HTML.
-use hir::{EditionedFileId, Semantics};
+use hir::Semantics;
use ide_db::MiniCore;
use oorandom::Rand32;
use stdx::format_to;
@@ -18,9 +18,7 @@ pub(crate) fn highlight_as_html_with_config(
rainbow: bool,
) -> String {
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
let file = sema.parse(file_id);
let file = file.syntax();
fn rainbowify(seed: u64) -> String {
diff --git a/crates/ide/src/view_item_tree.rs b/crates/ide/src/view_item_tree.rs
index c9a2f31696..e1a7e4e6ab 100644
--- a/crates/ide/src/view_item_tree.rs
+++ b/crates/ide/src/view_item_tree.rs
@@ -1,4 +1,4 @@
-use hir::{EditionedFileId, Semantics, db::DefDatabase};
+use hir::{Semantics, db::DefDatabase};
use ide_db::{FileId, RootDatabase};
// Feature: Debug ItemTree
@@ -10,8 +10,6 @@ use ide_db::{FileId, RootDatabase};
// | VS Code | **rust-analyzer: Debug ItemTree** |
pub(crate) fn view_item_tree(db: &RootDatabase, file_id: FileId) -> String {
let sema = Semantics::new(db);
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
db.file_item_tree(file_id.into()).pretty_print(db, file_id.edition(db))
}
diff --git a/crates/rust-analyzer/src/cli/unresolved_references.rs b/crates/rust-analyzer/src/cli/unresolved_references.rs
index 2cb0fe9eef..a400f86778 100644
--- a/crates/rust-analyzer/src/cli/unresolved_references.rs
+++ b/crates/rust-analyzer/src/cli/unresolved_references.rs
@@ -1,9 +1,7 @@
//! Reports references in code that the IDE layer cannot resolve.
use hir::{AnyDiagnostic, Crate, Module, Semantics, db::HirDatabase, sym};
use ide::{AnalysisHost, RootDatabase, TextRange};
-use ide_db::{
- EditionedFileId, FxHashSet, LineIndexDatabase as _, base_db::SourceDatabase, defs::NameRefClass,
-};
+use ide_db::{FxHashSet, LineIndexDatabase as _, base_db::SourceDatabase, defs::NameRefClass};
use load_cargo::{LoadCargoConfig, ProcMacroServerChoice, load_workspace_at};
use parser::SyntaxKind;
use syntax::{AstNode, WalkEvent, ast};
@@ -139,9 +137,7 @@ fn all_unresolved_references(
sema: &Semantics<'_, RootDatabase>,
file_id: FileId,
) -> Vec<TextRange> {
- let file_id = sema
- .attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition_guess_origin(sema.db, file_id));
+ let file_id = sema.attach_first_edition(file_id);
let file = sema.parse(file_id);
let root = file.syntax();