Skip to content

Commit acc2c5d

Browse files
committed
Auto merge of #17876 - Veykril:semantics-include-simplify, r=Veykril
internal: Remove unreachable logic for include token mapping Turns out rust-lang/rust-analyzer#17863 made this obsolete 🎉
2 parents 84ac708 + 705a89e commit acc2c5d

File tree

2 files changed

+18
-88
lines changed

2 files changed

+18
-88
lines changed

src/tools/rust-analyzer/crates/hir/src/semantics.rs

+3-88
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use hir_expand::{
2828
use itertools::Itertools;
2929
use rustc_hash::{FxHashMap, FxHashSet};
3030
use smallvec::{smallvec, SmallVec};
31-
use span::{EditionedFileId, FileId, Span, SyntaxContextId, ROOT_ERASED_FILE_AST_ID};
31+
use span::{EditionedFileId, FileId};
3232
use stdx::TupleExt;
3333
use syntax::{
3434
algo::skip_trivia_token,
@@ -757,84 +757,9 @@ impl<'db> SemanticsImpl<'db> {
757757
res
758758
}
759759

760-
// return:
761-
// SourceAnalyzer(file_id that original call include!)
762-
// macro file id
763-
// token in include! macro mapped from token in params
764-
// span for the mapped token
765-
fn is_from_include_file(
766-
&self,
767-
token: SyntaxToken,
768-
) -> Option<(SourceAnalyzer, HirFileId, SyntaxToken, Span)> {
769-
let parent = token.parent()?;
770-
let file_id = self.find_file(&parent).file_id.file_id()?;
771-
772-
// iterate related crates and find all include! invocations that include_file_id matches
773-
for iter in self
774-
.db
775-
.relevant_crates(file_id.file_id())
776-
.iter()
777-
.map(|krate| self.db.include_macro_invoc(*krate))
778-
{
779-
for (invoc, _) in
780-
iter.iter().filter(|&&(_, include_file_id)| include_file_id == file_id)
781-
{
782-
let macro_file = invoc.as_macro_file();
783-
let expansion_info = {
784-
self.with_ctx(|ctx| {
785-
ctx.cache
786-
.expansion_info_cache
787-
.entry(macro_file)
788-
.or_insert_with(|| {
789-
let exp_info = macro_file.expansion_info(self.db.upcast());
790-
791-
let InMacroFile { file_id, value } = exp_info.expanded();
792-
if let InFile { file_id, value: Some(value) } = exp_info.arg() {
793-
self.cache(value.ancestors().last().unwrap(), file_id);
794-
}
795-
self.cache(value, file_id.into());
796-
797-
exp_info
798-
})
799-
.clone()
800-
})
801-
};
802-
803-
// FIXME: uncached parse
804-
// Create the source analyzer for the macro call scope
805-
let Some(sa) = expansion_info
806-
.arg()
807-
.value
808-
.and_then(|it| self.analyze_no_infer(&it.ancestors().last().unwrap()))
809-
else {
810-
continue;
811-
};
812-
813-
// get mapped token in the include! macro file
814-
let span = span::Span {
815-
range: token.text_range(),
816-
anchor: span::SpanAnchor { file_id, ast_id: ROOT_ERASED_FILE_AST_ID },
817-
ctx: SyntaxContextId::ROOT,
818-
};
819-
let Some(InMacroFile { file_id, value: mut mapped_tokens }) =
820-
expansion_info.map_range_down_exact(span)
821-
else {
822-
continue;
823-
};
824-
825-
// if we find one, then return
826-
if let Some(t) = mapped_tokens.next() {
827-
return Some((sa, file_id.into(), t, span));
828-
}
829-
}
830-
}
831-
832-
None
833-
}
834-
835760
fn descend_into_macros_impl(
836761
&self,
837-
mut token: SyntaxToken,
762+
token: SyntaxToken,
838763
f: &mut dyn FnMut(InFile<SyntaxToken>) -> ControlFlow<()>,
839764
) {
840765
let _p = tracing::info_span!("descend_into_macros_impl").entered();
@@ -851,17 +776,7 @@ impl<'db> SemanticsImpl<'db> {
851776
return;
852777
}
853778
},
854-
None => {
855-
// if we cannot find a source analyzer for this token, then we try to find out
856-
// whether this file is an included file and treat that as the include input
857-
let Some((it, macro_file_id, mapped_token, s)) =
858-
self.is_from_include_file(token)
859-
else {
860-
return;
861-
};
862-
token = mapped_token;
863-
(it, s, macro_file_id)
864-
}
779+
None => return,
865780
};
866781

867782
let mut m_cache = self.macro_call_cache.borrow_mut();

src/tools/rust-analyzer/crates/ide/src/inlay_hints/bind_pat.rs

+15
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,21 @@ async fn main() {
11441144
//^^ impl Future<Output = i32>
11451145
return 8_i32;
11461146
};
1147+
}"#,
1148+
);
1149+
}
1150+
1151+
#[test]
1152+
fn works_in_included_file() {
1153+
check_types(
1154+
r#"
1155+
//- minicore: include
1156+
//- /main.rs
1157+
include!("foo.rs");
1158+
//- /foo.rs
1159+
fn main() {
1160+
let _x = 42;
1161+
//^^ i32
11471162
}"#,
11481163
);
11491164
}

0 commit comments

Comments
 (0)