mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-27 10:17:15 +00:00
Merge pull request #19062 from darichey/scip-fix-module-names
Fix scip indexing of module names
This commit is contained in:
commit
b7b09d2acb
4 changed files with 133 additions and 100 deletions
|
|
@ -289,7 +289,10 @@ fn def_to_non_local_moniker(
|
|||
definition: Definition,
|
||||
from_crate: Crate,
|
||||
) -> Option<Moniker> {
|
||||
let module = definition.module(db)?;
|
||||
let module = match definition {
|
||||
Definition::Module(module) if module.is_crate_root() => module,
|
||||
_ => definition.module(db)?,
|
||||
};
|
||||
let krate = module.krate();
|
||||
let edition = krate.edition(db);
|
||||
|
||||
|
|
@ -322,12 +325,18 @@ fn def_to_non_local_moniker(
|
|||
name: name.display(db, edition).to_string(),
|
||||
desc: def_to_kind(db, def).into(),
|
||||
});
|
||||
} else if reverse_description.is_empty() {
|
||||
// Don't allow the last descriptor to be absent.
|
||||
return None;
|
||||
} else {
|
||||
match def {
|
||||
Definition::Module(module) if module.is_crate_root() => {}
|
||||
Definition::Module(module) if module.is_crate_root() => {
|
||||
// only include `crate` namespace by itself because we prefer
|
||||
// `rust-analyzer cargo foo . bar/` over `rust-analyzer cargo foo . crate/bar/`
|
||||
if reverse_description.is_empty() {
|
||||
reverse_description.push(MonikerDescriptor {
|
||||
name: "crate".to_owned(),
|
||||
desc: MonikerDescriptorKind::Namespace,
|
||||
});
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
tracing::error!(?def, "Encountered enclosing definition with no name");
|
||||
}
|
||||
|
|
@ -340,6 +349,9 @@ fn def_to_non_local_moniker(
|
|||
};
|
||||
def = next_def;
|
||||
}
|
||||
if reverse_description.is_empty() {
|
||||
return None;
|
||||
}
|
||||
reverse_description.reverse();
|
||||
let description = reverse_description;
|
||||
|
||||
|
|
|
|||
|
|
@ -169,10 +169,10 @@ impl StaticIndex<'_> {
|
|||
.unwrap();
|
||||
// hovers
|
||||
let sema = hir::Semantics::new(self.db);
|
||||
let tokens_or_nodes = sema.parse_guess_edition(file_id).syntax().clone();
|
||||
let root = sema.parse_guess_edition(file_id).syntax().clone();
|
||||
let edition =
|
||||
sema.attach_first_edition(file_id).map(|it| it.edition()).unwrap_or(Edition::CURRENT);
|
||||
let tokens = tokens_or_nodes.descendants_with_tokens().filter_map(|it| match it {
|
||||
let tokens = root.descendants_with_tokens().filter_map(|it| match it {
|
||||
syntax::NodeOrToken::Node(_) => None,
|
||||
syntax::NodeOrToken::Token(it) => Some(it),
|
||||
});
|
||||
|
|
@ -194,24 +194,19 @@ impl StaticIndex<'_> {
|
|||
)
|
||||
});
|
||||
let mut result = StaticIndexedFile { file_id, inlay_hints, folds, tokens: vec![] };
|
||||
for token in tokens {
|
||||
let range = token.text_range();
|
||||
let node = token.parent().unwrap();
|
||||
let def = match get_definition(&sema, token.clone()) {
|
||||
Some(it) => it,
|
||||
None => continue,
|
||||
};
|
||||
|
||||
let mut add_token = |def: Definition, range: TextRange, scope_node: &SyntaxNode| {
|
||||
let id = if let Some(it) = self.def_map.get(&def) {
|
||||
*it
|
||||
} else {
|
||||
let it = self.tokens.insert(TokenStaticData {
|
||||
documentation: documentation_for_definition(&sema, def, &node),
|
||||
documentation: documentation_for_definition(&sema, def, scope_node),
|
||||
hover: Some(hover_for_definition(
|
||||
&sema,
|
||||
file_id,
|
||||
def,
|
||||
None,
|
||||
&node,
|
||||
scope_node,
|
||||
None,
|
||||
false,
|
||||
&hover_config,
|
||||
|
|
@ -240,6 +235,22 @@ impl StaticIndex<'_> {
|
|||
},
|
||||
});
|
||||
result.tokens.push((range, id));
|
||||
};
|
||||
|
||||
if let Some(module) = sema.file_to_module_def(file_id) {
|
||||
let def = Definition::Module(module);
|
||||
let range = root.text_range();
|
||||
add_token(def, range, &root);
|
||||
}
|
||||
|
||||
for token in tokens {
|
||||
let range = token.text_range();
|
||||
let node = token.parent().unwrap();
|
||||
let def = match get_definition(&sema, token.clone()) {
|
||||
Some(it) => it,
|
||||
None => continue,
|
||||
};
|
||||
add_token(def, range, &node);
|
||||
}
|
||||
self.files.push(result);
|
||||
}
|
||||
|
|
@ -300,6 +311,10 @@ mod tests {
|
|||
let mut range_set: FxHashSet<_> = ranges.iter().map(|it| it.0).collect();
|
||||
for f in s.files {
|
||||
for (range, _) in f.tokens {
|
||||
if range.start() == TextSize::from(0) {
|
||||
// ignore whole file range corresponding to module definition
|
||||
continue;
|
||||
}
|
||||
let it = FileRange { file_id: f.file_id, range };
|
||||
if !range_set.contains(&it) {
|
||||
panic!("additional range {it:?}");
|
||||
|
|
|
|||
|
|
@ -444,14 +444,14 @@ impl SymbolGenerator {
|
|||
MonikerResult::Moniker(moniker) => TokenSymbols {
|
||||
symbol: scip::symbol::format_symbol(moniker_to_symbol(moniker)),
|
||||
enclosing_symbol: None,
|
||||
is_inherent_impl: moniker
|
||||
.identifier
|
||||
.description
|
||||
.get(moniker.identifier.description.len() - 2)
|
||||
.is_some_and(|descriptor| {
|
||||
is_inherent_impl: match &moniker.identifier.description[..] {
|
||||
// inherent impls are represented as impl#[SelfType]
|
||||
[.., descriptor, _] => {
|
||||
descriptor.desc == MonikerDescriptorKind::Type
|
||||
&& descriptor.name == "impl"
|
||||
}),
|
||||
}
|
||||
_ => false,
|
||||
},
|
||||
},
|
||||
MonikerResult::Local { enclosing_moniker } => {
|
||||
let local_symbol = scip::types::Symbol::new_local(local_count);
|
||||
|
|
@ -549,7 +549,9 @@ mod test {
|
|||
continue;
|
||||
}
|
||||
for &(range, id) in &file.tokens {
|
||||
if range.contains(offset - TextSize::from(1)) {
|
||||
// check if cursor is within token, ignoring token for the module defined by the file (whose range is the whole file)
|
||||
if range.start() != TextSize::from(0) && range.contains(offset - TextSize::from(1))
|
||||
{
|
||||
let token = si.tokens.get(id).unwrap();
|
||||
found_symbol = match token.moniker.as_ref() {
|
||||
None => None,
|
||||
|
|
@ -885,7 +887,7 @@ pub mod example_mod {
|
|||
);
|
||||
|
||||
let file = si.files.first().unwrap();
|
||||
let (_, token_id) = file.tokens.first().unwrap();
|
||||
let (_, token_id) = file.tokens.get(1).unwrap(); // first token is file module, second is `bar`
|
||||
let token = si.tokens.get(*token_id).unwrap();
|
||||
|
||||
assert_eq!(token.documentation.as_ref().map(|d| d.as_str()), Some("foo"));
|
||||
|
|
|
|||
|
|
@ -43,89 +43,93 @@ mod tests {
|
|||
expect![[r#"
|
||||
{"id":2,"type":"vertex","label":"foldingRangeResult","result":[{"startLine":2,"startCharacter":43,"endLine":6,"endCharacter":1},{"startLine":3,"startCharacter":19,"endLine":5,"endCharacter":5},{"startLine":9,"startCharacter":10,"endLine":12,"endCharacter":1}]}
|
||||
{"id":3,"type":"edge","label":"textDocument/foldingRange","inV":2,"outV":1}
|
||||
{"id":4,"type":"vertex","label":"range","start":{"line":0,"character":3},"end":{"line":0,"character":8}}
|
||||
{"id":4,"type":"vertex","label":"range","start":{"line":0,"character":0},"end":{"line":13,"character":0}}
|
||||
{"id":5,"type":"vertex","label":"resultSet"}
|
||||
{"id":6,"type":"edge","label":"next","inV":5,"outV":4}
|
||||
{"id":7,"type":"vertex","label":"range","start":{"line":2,"character":13},"end":{"line":2,"character":43}}
|
||||
{"id":7,"type":"vertex","label":"range","start":{"line":0,"character":3},"end":{"line":0,"character":8}}
|
||||
{"id":8,"type":"vertex","label":"resultSet"}
|
||||
{"id":9,"type":"edge","label":"next","inV":8,"outV":7}
|
||||
{"id":10,"type":"vertex","label":"range","start":{"line":8,"character":0},"end":{"line":8,"character":30}}
|
||||
{"id":11,"type":"edge","label":"next","inV":8,"outV":10}
|
||||
{"id":12,"type":"vertex","label":"range","start":{"line":8,"character":32},"end":{"line":8,"character":39}}
|
||||
{"id":13,"type":"vertex","label":"resultSet"}
|
||||
{"id":14,"type":"edge","label":"next","inV":13,"outV":12}
|
||||
{"id":15,"type":"vertex","label":"range","start":{"line":9,"character":4},"end":{"line":9,"character":9}}
|
||||
{"id":10,"type":"vertex","label":"range","start":{"line":2,"character":13},"end":{"line":2,"character":43}}
|
||||
{"id":11,"type":"vertex","label":"resultSet"}
|
||||
{"id":12,"type":"edge","label":"next","inV":11,"outV":10}
|
||||
{"id":13,"type":"vertex","label":"range","start":{"line":8,"character":0},"end":{"line":8,"character":30}}
|
||||
{"id":14,"type":"edge","label":"next","inV":11,"outV":13}
|
||||
{"id":15,"type":"vertex","label":"range","start":{"line":8,"character":32},"end":{"line":8,"character":39}}
|
||||
{"id":16,"type":"vertex","label":"resultSet"}
|
||||
{"id":17,"type":"edge","label":"next","inV":16,"outV":15}
|
||||
{"id":18,"type":"vertex","label":"range","start":{"line":10,"character":8},"end":{"line":10,"character":13}}
|
||||
{"id":18,"type":"vertex","label":"range","start":{"line":9,"character":4},"end":{"line":9,"character":9}}
|
||||
{"id":19,"type":"vertex","label":"resultSet"}
|
||||
{"id":20,"type":"edge","label":"next","inV":19,"outV":18}
|
||||
{"id":21,"type":"vertex","label":"range","start":{"line":11,"character":4},"end":{"line":11,"character":34}}
|
||||
{"id":22,"type":"edge","label":"next","inV":8,"outV":21}
|
||||
{"id":23,"type":"vertex","label":"range","start":{"line":11,"character":36},"end":{"line":11,"character":43}}
|
||||
{"id":24,"type":"vertex","label":"resultSet"}
|
||||
{"id":25,"type":"edge","label":"next","inV":24,"outV":23}
|
||||
{"id":26,"type":"edge","label":"contains","inVs":[4,7,10,12,15,18,21,23],"outV":1}
|
||||
{"id":27,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\n#[allow]\n```\n\n---\n\nValid forms are:\n\n* \\#\\[allow(lint1, lint2, ..., /\\*opt\\*/ reason = \"...\")\\]"}}}
|
||||
{"id":28,"type":"edge","label":"textDocument/hover","inV":27,"outV":5}
|
||||
{"id":29,"type":"vertex","label":"referenceResult"}
|
||||
{"id":30,"type":"edge","label":"textDocument/references","inV":29,"outV":5}
|
||||
{"id":31,"type":"edge","label":"item","document":1,"property":"references","inVs":[4],"outV":29}
|
||||
{"id":32,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nmacro_rules! generate_const_from_identifier\n```"}}}
|
||||
{"id":33,"type":"edge","label":"textDocument/hover","inV":32,"outV":8}
|
||||
{"id":34,"type":"vertex","label":"packageInformation","name":"foo","manager":"cargo","version":"0.0.0"}
|
||||
{"id":35,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::generate_const_from_identifier","unique":"scheme","kind":"export"}
|
||||
{"id":36,"type":"edge","label":"packageInformation","inV":34,"outV":35}
|
||||
{"id":37,"type":"edge","label":"moniker","inV":35,"outV":8}
|
||||
{"id":38,"type":"vertex","label":"definitionResult"}
|
||||
{"id":39,"type":"edge","label":"item","document":1,"inVs":[7],"outV":38}
|
||||
{"id":40,"type":"edge","label":"textDocument/definition","inV":38,"outV":8}
|
||||
{"id":41,"type":"vertex","label":"referenceResult"}
|
||||
{"id":42,"type":"edge","label":"textDocument/references","inV":41,"outV":8}
|
||||
{"id":43,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[7],"outV":41}
|
||||
{"id":44,"type":"edge","label":"item","document":1,"property":"references","inVs":[10,21],"outV":41}
|
||||
{"id":45,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nconst REQ_001: &str = \"encoded_data\"\n```"}}}
|
||||
{"id":46,"type":"edge","label":"textDocument/hover","inV":45,"outV":13}
|
||||
{"id":47,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::REQ_001","unique":"scheme","kind":"export"}
|
||||
{"id":48,"type":"edge","label":"packageInformation","inV":34,"outV":47}
|
||||
{"id":49,"type":"edge","label":"moniker","inV":47,"outV":13}
|
||||
{"id":50,"type":"vertex","label":"definitionResult"}
|
||||
{"id":51,"type":"edge","label":"item","document":1,"inVs":[12],"outV":50}
|
||||
{"id":52,"type":"edge","label":"textDocument/definition","inV":50,"outV":13}
|
||||
{"id":53,"type":"vertex","label":"referenceResult"}
|
||||
{"id":54,"type":"edge","label":"textDocument/references","inV":53,"outV":13}
|
||||
{"id":55,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[12],"outV":53}
|
||||
{"id":56,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nmod tests\n```"}}}
|
||||
{"id":57,"type":"edge","label":"textDocument/hover","inV":56,"outV":16}
|
||||
{"id":58,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::tests","unique":"scheme","kind":"export"}
|
||||
{"id":59,"type":"edge","label":"packageInformation","inV":34,"outV":58}
|
||||
{"id":60,"type":"edge","label":"moniker","inV":58,"outV":16}
|
||||
{"id":61,"type":"vertex","label":"definitionResult"}
|
||||
{"id":62,"type":"edge","label":"item","document":1,"inVs":[15],"outV":61}
|
||||
{"id":63,"type":"edge","label":"textDocument/definition","inV":61,"outV":16}
|
||||
{"id":64,"type":"vertex","label":"referenceResult"}
|
||||
{"id":65,"type":"edge","label":"textDocument/references","inV":64,"outV":16}
|
||||
{"id":66,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[15],"outV":64}
|
||||
{"id":67,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nextern crate foo\n```"}}}
|
||||
{"id":68,"type":"edge","label":"textDocument/hover","inV":67,"outV":19}
|
||||
{"id":69,"type":"vertex","label":"definitionResult"}
|
||||
{"id":70,"type":"vertex","label":"range","start":{"line":0,"character":0},"end":{"line":13,"character":0}}
|
||||
{"id":71,"type":"edge","label":"contains","inVs":[70],"outV":1}
|
||||
{"id":72,"type":"edge","label":"item","document":1,"inVs":[70],"outV":69}
|
||||
{"id":73,"type":"edge","label":"textDocument/definition","inV":69,"outV":19}
|
||||
{"id":74,"type":"vertex","label":"referenceResult"}
|
||||
{"id":75,"type":"edge","label":"textDocument/references","inV":74,"outV":19}
|
||||
{"id":76,"type":"edge","label":"item","document":1,"property":"references","inVs":[18],"outV":74}
|
||||
{"id":77,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo::tests\n```\n\n```rust\nconst REQ_002: &str = \"encoded_data\"\n```"}}}
|
||||
{"id":78,"type":"edge","label":"textDocument/hover","inV":77,"outV":24}
|
||||
{"id":79,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::tests::REQ_002","unique":"scheme","kind":"export"}
|
||||
{"id":80,"type":"edge","label":"packageInformation","inV":34,"outV":79}
|
||||
{"id":81,"type":"edge","label":"moniker","inV":79,"outV":24}
|
||||
{"id":82,"type":"vertex","label":"definitionResult"}
|
||||
{"id":83,"type":"edge","label":"item","document":1,"inVs":[23],"outV":82}
|
||||
{"id":84,"type":"edge","label":"textDocument/definition","inV":82,"outV":24}
|
||||
{"id":85,"type":"vertex","label":"referenceResult"}
|
||||
{"id":86,"type":"edge","label":"textDocument/references","inV":85,"outV":24}
|
||||
{"id":87,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[23],"outV":85}
|
||||
{"id":21,"type":"vertex","label":"range","start":{"line":10,"character":8},"end":{"line":10,"character":13}}
|
||||
{"id":22,"type":"edge","label":"next","inV":5,"outV":21}
|
||||
{"id":23,"type":"vertex","label":"range","start":{"line":11,"character":4},"end":{"line":11,"character":34}}
|
||||
{"id":24,"type":"edge","label":"next","inV":11,"outV":23}
|
||||
{"id":25,"type":"vertex","label":"range","start":{"line":11,"character":36},"end":{"line":11,"character":43}}
|
||||
{"id":26,"type":"vertex","label":"resultSet"}
|
||||
{"id":27,"type":"edge","label":"next","inV":26,"outV":25}
|
||||
{"id":28,"type":"edge","label":"contains","inVs":[4,7,10,13,15,18,21,23,25],"outV":1}
|
||||
{"id":29,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nextern crate foo\n```"}}}
|
||||
{"id":30,"type":"edge","label":"textDocument/hover","inV":29,"outV":5}
|
||||
{"id":31,"type":"vertex","label":"packageInformation","name":"foo","manager":"cargo","version":"0.0.0"}
|
||||
{"id":32,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::crate","unique":"scheme","kind":"export"}
|
||||
{"id":33,"type":"edge","label":"packageInformation","inV":31,"outV":32}
|
||||
{"id":34,"type":"edge","label":"moniker","inV":32,"outV":5}
|
||||
{"id":35,"type":"vertex","label":"definitionResult"}
|
||||
{"id":36,"type":"edge","label":"item","document":1,"inVs":[4],"outV":35}
|
||||
{"id":37,"type":"edge","label":"textDocument/definition","inV":35,"outV":5}
|
||||
{"id":38,"type":"vertex","label":"referenceResult"}
|
||||
{"id":39,"type":"edge","label":"textDocument/references","inV":38,"outV":5}
|
||||
{"id":40,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[4],"outV":38}
|
||||
{"id":41,"type":"edge","label":"item","document":1,"property":"references","inVs":[21],"outV":38}
|
||||
{"id":42,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\n#[allow]\n```\n\n---\n\nValid forms are:\n\n* \\#\\[allow(lint1, lint2, ..., /\\*opt\\*/ reason = \"...\")\\]"}}}
|
||||
{"id":43,"type":"edge","label":"textDocument/hover","inV":42,"outV":8}
|
||||
{"id":44,"type":"vertex","label":"referenceResult"}
|
||||
{"id":45,"type":"edge","label":"textDocument/references","inV":44,"outV":8}
|
||||
{"id":46,"type":"edge","label":"item","document":1,"property":"references","inVs":[7],"outV":44}
|
||||
{"id":47,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nmacro_rules! generate_const_from_identifier\n```"}}}
|
||||
{"id":48,"type":"edge","label":"textDocument/hover","inV":47,"outV":11}
|
||||
{"id":49,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::generate_const_from_identifier","unique":"scheme","kind":"export"}
|
||||
{"id":50,"type":"edge","label":"packageInformation","inV":31,"outV":49}
|
||||
{"id":51,"type":"edge","label":"moniker","inV":49,"outV":11}
|
||||
{"id":52,"type":"vertex","label":"definitionResult"}
|
||||
{"id":53,"type":"edge","label":"item","document":1,"inVs":[10],"outV":52}
|
||||
{"id":54,"type":"edge","label":"textDocument/definition","inV":52,"outV":11}
|
||||
{"id":55,"type":"vertex","label":"referenceResult"}
|
||||
{"id":56,"type":"edge","label":"textDocument/references","inV":55,"outV":11}
|
||||
{"id":57,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[10],"outV":55}
|
||||
{"id":58,"type":"edge","label":"item","document":1,"property":"references","inVs":[13,23],"outV":55}
|
||||
{"id":59,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nconst REQ_001: &str = \"encoded_data\"\n```"}}}
|
||||
{"id":60,"type":"edge","label":"textDocument/hover","inV":59,"outV":16}
|
||||
{"id":61,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::REQ_001","unique":"scheme","kind":"export"}
|
||||
{"id":62,"type":"edge","label":"packageInformation","inV":31,"outV":61}
|
||||
{"id":63,"type":"edge","label":"moniker","inV":61,"outV":16}
|
||||
{"id":64,"type":"vertex","label":"definitionResult"}
|
||||
{"id":65,"type":"edge","label":"item","document":1,"inVs":[15],"outV":64}
|
||||
{"id":66,"type":"edge","label":"textDocument/definition","inV":64,"outV":16}
|
||||
{"id":67,"type":"vertex","label":"referenceResult"}
|
||||
{"id":68,"type":"edge","label":"textDocument/references","inV":67,"outV":16}
|
||||
{"id":69,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[15],"outV":67}
|
||||
{"id":70,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo\n```\n\n```rust\nmod tests\n```"}}}
|
||||
{"id":71,"type":"edge","label":"textDocument/hover","inV":70,"outV":19}
|
||||
{"id":72,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::tests","unique":"scheme","kind":"export"}
|
||||
{"id":73,"type":"edge","label":"packageInformation","inV":31,"outV":72}
|
||||
{"id":74,"type":"edge","label":"moniker","inV":72,"outV":19}
|
||||
{"id":75,"type":"vertex","label":"definitionResult"}
|
||||
{"id":76,"type":"edge","label":"item","document":1,"inVs":[18],"outV":75}
|
||||
{"id":77,"type":"edge","label":"textDocument/definition","inV":75,"outV":19}
|
||||
{"id":78,"type":"vertex","label":"referenceResult"}
|
||||
{"id":79,"type":"edge","label":"textDocument/references","inV":78,"outV":19}
|
||||
{"id":80,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[18],"outV":78}
|
||||
{"id":81,"type":"vertex","label":"hoverResult","result":{"contents":{"kind":"markdown","value":"\n```rust\nfoo::tests\n```\n\n```rust\nconst REQ_002: &str = \"encoded_data\"\n```"}}}
|
||||
{"id":82,"type":"edge","label":"textDocument/hover","inV":81,"outV":26}
|
||||
{"id":83,"type":"vertex","label":"moniker","scheme":"rust-analyzer","identifier":"foo::tests::REQ_002","unique":"scheme","kind":"export"}
|
||||
{"id":84,"type":"edge","label":"packageInformation","inV":31,"outV":83}
|
||||
{"id":85,"type":"edge","label":"moniker","inV":83,"outV":26}
|
||||
{"id":86,"type":"vertex","label":"definitionResult"}
|
||||
{"id":87,"type":"edge","label":"item","document":1,"inVs":[25],"outV":86}
|
||||
{"id":88,"type":"edge","label":"textDocument/definition","inV":86,"outV":26}
|
||||
{"id":89,"type":"vertex","label":"referenceResult"}
|
||||
{"id":90,"type":"edge","label":"textDocument/references","inV":89,"outV":26}
|
||||
{"id":91,"type":"edge","label":"item","document":1,"property":"definitions","inVs":[25],"outV":89}
|
||||
"#]].assert_eq(stdout);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue