rename module source
This commit is contained in:
parent
2ed1514df3
commit
22949dab26
@ -34,10 +34,11 @@ pub(crate) fn resolve_based_completion(
|
||||
let source_root_id = db.file_source_root(position.file_id);
|
||||
let file = db.file_syntax(position.file_id);
|
||||
let module_tree = db.module_tree(source_root_id)?;
|
||||
let module_id = match module_tree.any_module_for_source(ModuleSource::File(position.file_id)) {
|
||||
None => return Ok(None),
|
||||
Some(it) => it,
|
||||
};
|
||||
let module_id =
|
||||
match module_tree.any_module_for_source(ModuleSource::SourceFile(position.file_id)) {
|
||||
None => return Ok(None),
|
||||
Some(it) => it,
|
||||
};
|
||||
let file = {
|
||||
let edit = AtomEdit::insert(position.offset, "intellijRulezz".to_string());
|
||||
file.reparse(&edit)
|
||||
|
@ -41,8 +41,8 @@ pub(crate) fn submodules(
|
||||
db::check_canceled(db)?;
|
||||
let file_id = source.file_id();
|
||||
let submodules = match source.resolve(db) {
|
||||
ModuleSourceNode::Root(it) => collect_submodules(file_id, it.borrowed()),
|
||||
ModuleSourceNode::Inline(it) => it
|
||||
ModuleSourceNode::SourceFile(it) => collect_submodules(file_id, it.borrowed()),
|
||||
ModuleSourceNode::Module(it) => it
|
||||
.borrowed()
|
||||
.item_list()
|
||||
.map(|it| collect_submodules(file_id, it))
|
||||
@ -89,8 +89,8 @@ pub(crate) fn module_scope(
|
||||
let tree = db.module_tree(source_root_id)?;
|
||||
let source = module_id.source(&tree).resolve(db);
|
||||
let res = match source {
|
||||
ModuleSourceNode::Root(root) => ModuleScope::new(root.borrowed().items()),
|
||||
ModuleSourceNode::Inline(inline) => match inline.borrowed().item_list() {
|
||||
ModuleSourceNode::SourceFile(it) => ModuleScope::new(it.borrowed().items()),
|
||||
ModuleSourceNode::Module(it) => match it.borrowed().item_list() {
|
||||
Some(items) => ModuleScope::new(items.items()),
|
||||
None => ModuleScope::new(std::iter::empty()),
|
||||
},
|
||||
@ -121,7 +121,7 @@ fn create_module_tree<'a>(
|
||||
|
||||
let source_root = db.source_root(source_root);
|
||||
for &file_id in source_root.files.iter() {
|
||||
let source = ModuleSource::File(file_id);
|
||||
let source = ModuleSource::SourceFile(file_id);
|
||||
if visited.contains(&source) {
|
||||
continue; // TODO: use explicit crate_roots here
|
||||
}
|
||||
@ -181,7 +181,7 @@ fn build_subtree(
|
||||
visited,
|
||||
roots,
|
||||
Some(link),
|
||||
ModuleSource::File(file_id),
|
||||
ModuleSource::SourceFile(file_id),
|
||||
),
|
||||
})
|
||||
.collect::<Cancelable<Vec<_>>>()?;
|
||||
@ -213,8 +213,8 @@ fn resolve_submodule(
|
||||
file_resolver: &FileResolverImp,
|
||||
) -> (Vec<FileId>, Option<Problem>) {
|
||||
let file_id = match source {
|
||||
ModuleSource::File(it) => it,
|
||||
ModuleSource::Inline(..) => {
|
||||
ModuleSource::SourceFile(it) => it,
|
||||
ModuleSource::Module(..) => {
|
||||
// TODO
|
||||
return (Vec::new(), None);
|
||||
}
|
||||
|
@ -41,19 +41,18 @@ impl ModuleTree {
|
||||
|
||||
/// `ModuleSource` is the syntax tree element that produced this module:
|
||||
/// either a file, or an inlinde module.
|
||||
/// TODO: we don't produce Inline modules yet
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
pub(crate) enum ModuleSource {
|
||||
File(FileId),
|
||||
SourceFile(FileId),
|
||||
#[allow(dead_code)]
|
||||
Inline(SyntaxPtr),
|
||||
Module(SyntaxPtr),
|
||||
}
|
||||
|
||||
/// An owned syntax node for a module. Unlike `ModuleSource`,
|
||||
/// this holds onto the AST for the whole file.
|
||||
enum ModuleSourceNode {
|
||||
Root(ast::SourceFileNode),
|
||||
Inline(ast::ModuleNode),
|
||||
SourceFile(ast::SourceFileNode),
|
||||
Module(ast::ModuleNode),
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
|
||||
@ -135,14 +134,14 @@ impl LinkId {
|
||||
) -> ast::ModuleNode {
|
||||
let owner = self.owner(tree);
|
||||
match owner.source(tree).resolve(db) {
|
||||
ModuleSourceNode::Root(root) => {
|
||||
ModuleSourceNode::SourceFile(root) => {
|
||||
let ast = imp::modules(root.borrowed())
|
||||
.find(|(name, _)| name == &tree.link(self).name)
|
||||
.unwrap()
|
||||
.1;
|
||||
ast.owned()
|
||||
}
|
||||
ModuleSourceNode::Inline(it) => it,
|
||||
ModuleSourceNode::Module(it) => it,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -158,34 +157,34 @@ impl ModuleSource {
|
||||
pub(crate) fn new_inline(file_id: FileId, module: ast::Module) -> ModuleSource {
|
||||
assert!(!module.has_semi());
|
||||
let ptr = SyntaxPtr::new(file_id, module.syntax());
|
||||
ModuleSource::Inline(ptr)
|
||||
ModuleSource::Module(ptr)
|
||||
}
|
||||
|
||||
pub(crate) fn as_file(self) -> Option<FileId> {
|
||||
match self {
|
||||
ModuleSource::File(f) => Some(f),
|
||||
ModuleSource::Inline(..) => None,
|
||||
ModuleSource::SourceFile(f) => Some(f),
|
||||
ModuleSource::Module(..) => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn file_id(self) -> FileId {
|
||||
match self {
|
||||
ModuleSource::File(f) => f,
|
||||
ModuleSource::Inline(ptr) => ptr.file_id(),
|
||||
ModuleSource::SourceFile(f) => f,
|
||||
ModuleSource::Module(ptr) => ptr.file_id(),
|
||||
}
|
||||
}
|
||||
|
||||
fn resolve(self, db: &impl SyntaxDatabase) -> ModuleSourceNode {
|
||||
match self {
|
||||
ModuleSource::File(file_id) => {
|
||||
ModuleSource::SourceFile(file_id) => {
|
||||
let syntax = db.file_syntax(file_id);
|
||||
ModuleSourceNode::Root(syntax.ast().owned())
|
||||
ModuleSourceNode::SourceFile(syntax.ast().owned())
|
||||
}
|
||||
ModuleSource::Inline(ptr) => {
|
||||
ModuleSource::Module(ptr) => {
|
||||
let syntax = db.resolve_syntax_ptr(ptr);
|
||||
let syntax = syntax.borrowed();
|
||||
let module = ast::Module::cast(syntax).unwrap();
|
||||
ModuleSourceNode::Inline(module.owned())
|
||||
ModuleSourceNode::Module(module.owned())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -226,7 +226,7 @@ impl AnalysisImpl {
|
||||
let module_source = match find_node_at_offset::<ast::Module>(file.syntax(), position.offset)
|
||||
{
|
||||
Some(m) if !m.has_semi() => ModuleSource::new_inline(position.file_id, m),
|
||||
_ => ModuleSource::File(position.file_id),
|
||||
_ => ModuleSource::SourceFile(position.file_id),
|
||||
};
|
||||
|
||||
let res = module_tree
|
||||
@ -254,7 +254,7 @@ impl AnalysisImpl {
|
||||
let module_tree = self.module_tree(file_id)?;
|
||||
let crate_graph = self.db.crate_graph();
|
||||
let res = module_tree
|
||||
.modules_for_source(ModuleSource::File(file_id))
|
||||
.modules_for_source(ModuleSource::SourceFile(file_id))
|
||||
.into_iter()
|
||||
.map(|it| it.root(&module_tree))
|
||||
.filter_map(|it| it.source(&module_tree).as_file())
|
||||
@ -386,7 +386,7 @@ impl AnalysisImpl {
|
||||
fix: None,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
if let Some(m) = module_tree.any_module_for_source(ModuleSource::File(file_id)) {
|
||||
if let Some(m) = module_tree.any_module_for_source(ModuleSource::SourceFile(file_id)) {
|
||||
for (name_node, problem) in m.problems(&module_tree, &*self.db) {
|
||||
let diag = match problem {
|
||||
Problem::UnresolvedModule { candidate } => {
|
||||
@ -548,7 +548,7 @@ impl AnalysisImpl {
|
||||
Some(name) => name.text(),
|
||||
None => return Vec::new(),
|
||||
};
|
||||
let module_id = match module_tree.any_module_for_source(ModuleSource::File(file_id)) {
|
||||
let module_id = match module_tree.any_module_for_source(ModuleSource::SourceFile(file_id)) {
|
||||
Some(id) => id,
|
||||
None => return Vec::new(),
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user