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.
| -rw-r--r-- | crates/hir/src/semantics.rs | 13 | ||||
| -rw-r--r-- | crates/ide-assists/src/lib.rs | 6 | ||||
| -rw-r--r-- | crates/ide-assists/src/tests.rs | 5 | ||||
| -rw-r--r-- | crates/ide-completion/src/context.rs | 2 | ||||
| -rw-r--r-- | crates/ide-completion/src/lib.rs | 2 | ||||
| -rw-r--r-- | crates/ide-diagnostics/src/lib.rs | 10 | ||||
| -rw-r--r-- | crates/ide-ssr/src/lib.rs | 4 | ||||
| -rw-r--r-- | crates/ide-ssr/src/search.rs | 6 | ||||
| -rw-r--r-- | crates/ide/src/expand_macro.rs | 2 | ||||
| -rw-r--r-- | crates/ide/src/goto_definition.rs | 5 | ||||
| -rw-r--r-- | crates/ide/src/highlight_related.rs | 4 | ||||
| -rw-r--r-- | crates/ide/src/hover.rs | 3 | ||||
| -rw-r--r-- | crates/ide/src/inlay_hints.rs | 8 | ||||
| -rw-r--r-- | crates/ide/src/references.rs | 6 | ||||
| -rw-r--r-- | crates/ide/src/rename.rs | 2 | ||||
| -rw-r--r-- | crates/ide/src/signature_help.rs | 3 | ||||
| -rw-r--r-- | crates/ide/src/static_index.rs | 6 | ||||
| -rw-r--r-- | crates/ide/src/syntax_highlighting.rs | 4 | ||||
| -rw-r--r-- | crates/ide/src/syntax_highlighting/html.rs | 6 | ||||
| -rw-r--r-- | crates/ide/src/view_item_tree.rs | 6 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/cli/unresolved_references.rs | 8 |
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 { //  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(); |