Skip to content

Commit 5bd0f50

Browse files
committed
remove glob import and cancellables
1 parent 7377120 commit 5bd0f50

File tree

2 files changed

+75
-72
lines changed

2 files changed

+75
-72
lines changed

crates/ide/src/static_index.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use syntax::{SyntaxToken, TextRange};
1414

1515
use crate::display::TryToNav;
1616
use crate::hover::hover_for_definition;
17-
use crate::{Analysis, Cancellable, Fold, HoverConfig, HoverDocFormat, HoverResult};
17+
use crate::{Analysis, Fold, HoverConfig, HoverDocFormat, HoverResult};
1818

1919
/// A static representation of fully analyzed source code.
2020
///
@@ -84,8 +84,8 @@ fn all_modules(db: &dyn HirDatabase) -> Vec<Module> {
8484
}
8585

8686
impl StaticIndex<'_> {
87-
fn add_file(&mut self, file_id: FileId) -> Cancellable<()> {
88-
let folds = self.analysis.folding_ranges(file_id)?;
87+
fn add_file(&mut self, file_id: FileId) {
88+
let folds = self.analysis.folding_ranges(file_id).unwrap();
8989
// hovers
9090
let sema = hir::Semantics::new(self.db);
9191
let tokens_or_nodes = sema.parse(file_id).syntax().clone();
@@ -133,13 +133,9 @@ impl StaticIndex<'_> {
133133
result.tokens.push((range, id));
134134
}
135135
self.files.push(result);
136-
Ok(())
137136
}
138137

139-
pub fn compute<'a>(
140-
db: &'a RootDatabase,
141-
analysis: &'a Analysis,
142-
) -> Cancellable<StaticIndex<'a>> {
138+
pub fn compute<'a>(db: &'a RootDatabase, analysis: &'a Analysis) -> StaticIndex<'a> {
143139
let work = all_modules(db).into_iter().filter(|module| {
144140
let file_id = module.definition_source(db).file_id.original_file(db);
145141
let source_root = db.file_source_root(file_id);
@@ -159,12 +155,11 @@ impl StaticIndex<'_> {
159155
if visited_files.contains(&file_id) {
160156
continue;
161157
}
162-
this.add_file(file_id)?;
158+
this.add_file(file_id);
163159
// mark the file
164160
visited_files.insert(file_id);
165161
}
166-
//eprintln!("{:#?}", token_map);
167-
Ok(this)
162+
this
168163
}
169164
}
170165

@@ -188,7 +183,7 @@ mod tests {
188183

189184
fn check_all_ranges(ra_fixture: &str) {
190185
let (analysis, ranges) = fixture::annotations_without_marker(ra_fixture);
191-
let s = StaticIndex::compute(&*analysis.db, &analysis).unwrap();
186+
let s = StaticIndex::compute(&*analysis.db, &analysis);
192187
let mut range_set: HashSet<_> = ranges.iter().map(|x| x.0).collect();
193188
for f in s.files {
194189
for (range, _) in f.tokens {
@@ -206,7 +201,7 @@ mod tests {
206201

207202
fn check_definitions(ra_fixture: &str) {
208203
let (analysis, ranges) = fixture::annotations_without_marker(ra_fixture);
209-
let s = StaticIndex::compute(&*analysis.db, &analysis).unwrap();
204+
let s = StaticIndex::compute(&*analysis.db, &analysis);
210205
let mut range_set: HashSet<_> = ranges.iter().map(|x| x.0).collect();
211206
for (_, t) in s.tokens.iter() {
212207
if let Some(x) = t.definition {

crates/rust-analyzer/src/cli/lsif.rs

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
//! Lsif generator
1+
//! LSIF (language server index format) generator
22
33
use std::collections::HashMap;
44
use std::env;
55
use std::time::Instant;
66

77
use ide::{
8-
Analysis, Cancellable, FileId, FileRange, RootDatabase, StaticIndex, StaticIndexedFile,
9-
TokenId, TokenStaticData,
8+
Analysis, FileId, FileRange, RootDatabase, StaticIndex, StaticIndexedFile, TokenId,
9+
TokenStaticData,
1010
};
1111
use ide_db::LineIndexDatabase;
1212

1313
use ide_db::base_db::salsa::{self, ParallelDatabase};
14-
use lsp_types::{lsif::*, Hover, HoverContents, NumberOrString};
14+
use lsp_types::{self, lsif};
1515
use project_model::{CargoConfig, ProjectManifest, ProjectWorkspace};
1616
use vfs::{AbsPathBuf, Vfs};
1717

@@ -44,9 +44,9 @@ struct LsifManager<'a> {
4444
#[derive(Clone, Copy)]
4545
struct Id(i32);
4646

47-
impl From<Id> for NumberOrString {
47+
impl From<Id> for lsp_types::NumberOrString {
4848
fn from(Id(x): Id) -> Self {
49-
NumberOrString::Number(x)
49+
lsp_types::NumberOrString::Number(x)
5050
}
5151
}
5252

@@ -63,13 +63,21 @@ impl LsifManager<'_> {
6363
}
6464
}
6565

66-
fn add(&mut self, data: Element) -> Id {
66+
fn add(&mut self, data: lsif::Element) -> Id {
6767
let id = Id(self.count);
68-
self.emit(&serde_json::to_string(&Entry { id: id.into(), data }).unwrap());
68+
self.emit(&serde_json::to_string(&lsif::Entry { id: id.into(), data }).unwrap());
6969
self.count += 1;
7070
id
7171
}
7272

73+
fn add_vertex(&mut self, vertex: lsif::Vertex) -> Id {
74+
self.add(lsif::Element::Vertex(vertex))
75+
}
76+
77+
fn add_edge(&mut self, edge: lsif::Edge) -> Id {
78+
self.add(lsif::Element::Edge(edge))
79+
}
80+
7381
// FIXME: support file in addition to stdout here
7482
fn emit(&self, data: &str) {
7583
println!("{}", data);
@@ -79,14 +87,14 @@ impl LsifManager<'_> {
7987
if let Some(x) = self.token_map.get(&id) {
8088
return *x;
8189
}
82-
let result_set_id = self.add(Element::Vertex(Vertex::ResultSet(ResultSet { key: None })));
90+
let result_set_id = self.add_vertex(lsif::Vertex::ResultSet(lsif::ResultSet { key: None }));
8391
self.token_map.insert(id, result_set_id);
8492
result_set_id
8593
}
8694

87-
fn get_range_id(&mut self, id: FileRange) -> Cancellable<Id> {
95+
fn get_range_id(&mut self, id: FileRange) -> Id {
8896
if let Some(x) = self.range_map.get(&id) {
89-
return Ok(*x);
97+
return *x;
9098
}
9199
let file_id = id.file_id;
92100
let doc_id = self.get_file_id(file_id);
@@ -96,15 +104,15 @@ impl LsifManager<'_> {
96104
encoding: OffsetEncoding::Utf16,
97105
endings: LineEndings::Unix,
98106
};
99-
let range_id = self.add(Element::Vertex(Vertex::Range {
107+
let range_id = self.add_vertex(lsif::Vertex::Range {
100108
range: to_proto::range(&line_index, id.range),
101109
tag: None,
102-
}));
103-
self.add(Element::Edge(Edge::Contains(EdgeDataMultiIn {
110+
});
111+
self.add_edge(lsif::Edge::Contains(lsif::EdgeDataMultiIn {
104112
in_vs: vec![range_id.into()],
105113
out_v: doc_id.into(),
106-
})));
107-
Ok(range_id)
114+
}));
115+
range_id
108116
}
109117

110118
fn get_file_id(&mut self, id: FileId) -> Id {
@@ -113,73 +121,74 @@ impl LsifManager<'_> {
113121
}
114122
let path = self.vfs.file_path(id);
115123
let path = path.as_path().unwrap();
116-
let doc_id = self.add(Element::Vertex(Vertex::Document(Document {
124+
let doc_id = self.add_vertex(lsif::Vertex::Document(lsif::Document {
117125
language_id: "rust".to_string(),
118126
uri: lsp_types::Url::from_file_path(path).unwrap(),
119-
})));
127+
}));
120128
self.file_map.insert(id, doc_id);
121129
doc_id
122130
}
123131

124-
fn add_token(&mut self, id: TokenId, token: TokenStaticData) -> Cancellable<()> {
132+
fn add_token(&mut self, id: TokenId, token: TokenStaticData) {
125133
let result_set_id = self.get_token_id(id);
126134
if let Some(hover) = token.hover {
127-
let hover_id = self.add(Element::Vertex(Vertex::HoverResult {
128-
result: Hover {
129-
contents: HoverContents::Markup(to_proto::markup_content(hover.markup)),
135+
let hover_id = self.add_vertex(lsif::Vertex::HoverResult {
136+
result: lsp_types::Hover {
137+
contents: lsp_types::HoverContents::Markup(to_proto::markup_content(
138+
hover.markup,
139+
)),
130140
range: None,
131141
},
132-
}));
133-
self.add(Element::Edge(Edge::Hover(EdgeData {
142+
});
143+
self.add_edge(lsif::Edge::Hover(lsif::EdgeData {
134144
in_v: hover_id.into(),
135145
out_v: result_set_id.into(),
136-
})));
146+
}));
137147
}
138148
if let Some(def) = token.definition {
139-
let result_id = self.add(Element::Vertex(Vertex::DefinitionResult));
140-
let def_vertex = self.get_range_id(def)?;
141-
self.add(Element::Edge(Edge::Item(Item {
149+
let result_id = self.add_vertex(lsif::Vertex::DefinitionResult);
150+
let def_vertex = self.get_range_id(def);
151+
self.add_edge(lsif::Edge::Item(lsif::Item {
142152
document: (*self.file_map.get(&def.file_id).unwrap()).into(),
143153
property: None,
144-
edge_data: EdgeDataMultiIn {
154+
edge_data: lsif::EdgeDataMultiIn {
145155
in_vs: vec![def_vertex.into()],
146156
out_v: result_id.into(),
147157
},
148-
})));
149-
self.add(Element::Edge(Edge::Definition(EdgeData {
158+
}));
159+
self.add_edge(lsif::Edge::Definition(lsif::EdgeData {
150160
in_v: result_id.into(),
151161
out_v: result_set_id.into(),
152-
})));
162+
}));
153163
}
154164
if !token.references.is_empty() {
155-
let result_id = self.add(Element::Vertex(Vertex::ReferenceResult));
156-
self.add(Element::Edge(Edge::References(EdgeData {
165+
let result_id = self.add_vertex(lsif::Vertex::ReferenceResult);
166+
self.add_edge(lsif::Edge::References(lsif::EdgeData {
157167
in_v: result_id.into(),
158168
out_v: result_set_id.into(),
159-
})));
169+
}));
160170
for x in token.references {
161171
let vertex = *self.range_map.get(&x.range).unwrap();
162-
self.add(Element::Edge(Edge::Item(Item {
172+
self.add_edge(lsif::Edge::Item(lsif::Item {
163173
document: (*self.file_map.get(&x.range.file_id).unwrap()).into(),
164174
property: Some(if x.is_definition {
165-
ItemKind::Definitions
175+
lsif::ItemKind::Definitions
166176
} else {
167-
ItemKind::References
177+
lsif::ItemKind::References
168178
}),
169-
edge_data: EdgeDataMultiIn {
179+
edge_data: lsif::EdgeDataMultiIn {
170180
in_vs: vec![vertex.into()],
171181
out_v: result_id.into(),
172182
},
173-
})));
183+
}));
174184
}
175185
}
176-
Ok(())
177186
}
178187

179-
fn add_file(&mut self, file: StaticIndexedFile) -> Cancellable<()> {
188+
fn add_file(&mut self, file: StaticIndexedFile) {
180189
let StaticIndexedFile { file_id, tokens, folds } = file;
181190
let doc_id = self.get_file_id(file_id);
182-
let text = self.analysis.file_text(file_id)?;
191+
let text = self.analysis.file_text(file_id).unwrap();
183192
let line_index = self.db.line_index(file_id);
184193
let line_index = LineIndex {
185194
index: line_index.clone(),
@@ -190,32 +199,31 @@ impl LsifManager<'_> {
190199
.into_iter()
191200
.map(|it| to_proto::folding_range(&*text, &line_index, false, it))
192201
.collect();
193-
let folding_id = self.add(Element::Vertex(Vertex::FoldingRangeResult { result }));
194-
self.add(Element::Edge(Edge::FoldingRange(EdgeData {
202+
let folding_id = self.add_vertex(lsif::Vertex::FoldingRangeResult { result });
203+
self.add_edge(lsif::Edge::FoldingRange(lsif::EdgeData {
195204
in_v: folding_id.into(),
196205
out_v: doc_id.into(),
197-
})));
206+
}));
198207
let tokens_id = tokens
199208
.into_iter()
200209
.map(|(range, id)| {
201-
let range_id = self.add(Element::Vertex(Vertex::Range {
210+
let range_id = self.add_vertex(lsif::Vertex::Range {
202211
range: to_proto::range(&line_index, range),
203212
tag: None,
204-
}));
213+
});
205214
self.range_map.insert(FileRange { file_id, range }, range_id);
206215
let result_set_id = self.get_token_id(id);
207-
self.add(Element::Edge(Edge::Next(EdgeData {
216+
self.add_edge(lsif::Edge::Next(lsif::EdgeData {
208217
in_v: result_set_id.into(),
209218
out_v: range_id.into(),
210-
})));
219+
}));
211220
range_id.into()
212221
})
213222
.collect();
214-
self.add(Element::Edge(Edge::Contains(EdgeDataMultiIn {
223+
self.add_edge(lsif::Edge::Contains(lsif::EdgeDataMultiIn {
215224
in_vs: tokens_id,
216225
out_v: doc_id.into(),
217-
})));
218-
Ok(())
226+
}));
219227
}
220228
}
221229

@@ -239,20 +247,20 @@ impl flags::Lsif {
239247
let db = host.raw_database();
240248
let analysis = host.analysis();
241249

242-
let si = StaticIndex::compute(db, &analysis)?;
250+
let si = StaticIndex::compute(db, &analysis);
243251

244252
let mut lsif = LsifManager::new(&analysis, db, &vfs);
245-
lsif.add(Element::Vertex(Vertex::MetaData(MetaData {
253+
lsif.add_vertex(lsif::Vertex::MetaData(lsif::MetaData {
246254
version: String::from("0.5.0"),
247255
project_root: lsp_types::Url::from_file_path(path).unwrap(),
248-
position_encoding: Encoding::Utf16,
256+
position_encoding: lsif::Encoding::Utf16,
249257
tool_info: None,
250-
})));
258+
}));
251259
for file in si.files {
252-
lsif.add_file(file)?;
260+
lsif.add_file(file);
253261
}
254262
for (id, token) in si.tokens.iter() {
255-
lsif.add_token(id, token)?;
263+
lsif.add_token(id, token);
256264
}
257265
eprintln!("Generating LSIF finished in {:?}", now.elapsed());
258266
Ok(())

0 commit comments

Comments
 (0)