Skip to content

Commit ce360c4

Browse files
committed
Rust: adapt extractor to rust-analyzer 0.0.328 API changes
1 parent 5f76c94 commit ce360c4

File tree

4 files changed

+36
-15
lines changed

4 files changed

+36
-15
lines changed

rust/extractor/src/config.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use ra_ap_ide_db::FxHashMap;
1414
use ra_ap_intern::Symbol;
1515
use ra_ap_load_cargo::{LoadCargoConfig, ProcMacroServerChoice};
1616
use ra_ap_paths::{AbsPath, AbsPathBuf, Utf8PathBuf};
17-
use ra_ap_project_model::{CargoConfig, CargoFeatures, CfgOverrides, RustLibSource, Sysroot};
17+
use ra_ap_project_model::{CargoConfig, CargoFeatures, CfgOverrides, RustLibSource, Sysroot, TargetDirectoryConfig};
1818
use rust_extractor_macros::extractor_cli_config;
1919
use serde::{Deserialize, Serialize};
2020
use std::collections::HashSet;
@@ -171,12 +171,12 @@ impl Config {
171171
.iter()
172172
.map(|p| join_path_buf(dir, p))
173173
.collect(),
174-
target_dir: Utf8PathBuf::from_path_buf(
174+
target_dir_config: Utf8PathBuf::from_path_buf(
175175
self.cargo_target_dir
176176
.clone()
177177
.unwrap_or_else(|| self.scratch_dir.join("target")),
178178
)
179-
.ok(),
179+
.map_or(TargetDirectoryConfig::None, TargetDirectoryConfig::Directory),
180180
features: self.cargo_features(),
181181
target: self.cargo_target.clone(),
182182
cfg_overrides: to_cfg_overrides(&self.cargo_cfg_overrides),
@@ -192,6 +192,8 @@ impl Config {
192192
load_out_dirs_from_check: true,
193193
with_proc_macro_server: self.proc_macro_server_choice(dir),
194194
prefill_caches: false,
195+
num_worker_threads: 0,
196+
proc_macro_processes: 0,
195197
},
196198
)
197199
}

rust/extractor/src/crate_graph.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{generated, trap};
22

33
use itertools::Itertools;
4-
use ra_ap_base_db::{Crate, RootQueryDb};
4+
use ra_ap_base_db::Crate;
55
use ra_ap_cfg::CfgAtom;
66
use ra_ap_ide_db::RootDatabase;
77
use ra_ap_vfs::{Vfs, VfsPath};
@@ -12,7 +12,7 @@ use std::{cmp::Ordering, collections::HashMap, path::PathBuf};
1212
use tracing::error;
1313

1414
pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootDatabase, vfs: &Vfs) {
15-
let crate_graph = db.all_crates();
15+
let crate_graph = ra_ap_base_db::all_crates(db);
1616

1717
// According to the documentation of `CrateGraph`:
1818
// Each crate is defined by the `FileId` of its root module, the set of enabled

rust/extractor/src/rust_analyzer.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::trap;
22
use itertools::Itertools;
3-
use ra_ap_base_db::{EditionedFileId, FileText, RootQueryDb, SourceDatabase};
3+
use ra_ap_base_db::{EditionedFileId, FileText, SourceDatabase};
44
use ra_ap_hir::Semantics;
55
use ra_ap_ide_db::RootDatabase;
66
use ra_ap_load_cargo::{LoadCargoConfig, load_workspace_at};
@@ -115,7 +115,7 @@ impl<'a> RustAnalyzer<'a> {
115115
"no text available for the file in the project",
116116
)),
117117
)?;
118-
let editioned_file_id = semantics.attach_first_edition(file_id).ok_or(
118+
let editioned_file_id = semantics.attach_first_edition_opt(file_id).ok_or(
119119
RustAnalyzerNoSemantics::warning("failed to determine rust edition"),
120120
)?;
121121
Ok((semantics, editioned_file_id, input))
@@ -127,9 +127,8 @@ impl<'a> RustAnalyzer<'a> {
127127
match self.get_file_data(path) {
128128
Ok((semantics, file_id, input)) => {
129129
let source_file = semantics.parse(file_id);
130-
let errors = semantics
131-
.db
132-
.parse_errors(file_id)
130+
let errors = file_id
131+
.parse_errors(semantics.db)
133132
.into_iter()
134133
.flat_map(|x| x.to_vec())
135134
.collect();

rust/extractor/src/translate/base.rs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,27 @@ impl<'a> Translator<'a> {
465465
pub(crate) fn should_be_excluded(&self, item: &impl ast::HasAttrs) -> bool {
466466
self.semantics.is_some_and(|sema| {
467467
item.attrs().any(|attr| {
468-
attr.as_simple_call().is_some_and(|(name, tokens)| {
469-
name == "cfg" && sema.check_cfg_attr(&tokens) == Some(false)
470-
})
468+
let meta = match attr.meta() {
469+
Some(meta) => meta,
470+
None => return false,
471+
};
472+
let cfg_meta = match ast::CfgMeta::cast(meta.syntax().clone()) {
473+
Some(cfg_meta) => cfg_meta,
474+
None => return false,
475+
};
476+
let cfg_predicate = match cfg_meta.cfg_predicate() {
477+
Some(pred) => pred,
478+
None => return false,
479+
};
480+
let cfg_expr = ra_ap_cfg::CfgExpr::parse_from_ast(cfg_predicate);
481+
let file_id = sema.hir_file_for(item.syntax());
482+
let krate = match file_id.file_id().and_then(|fid| {
483+
sema.file_to_module_defs(fid.file_id(sema.db)).next()
484+
}) {
485+
Some(module) => module.krate(sema.db),
486+
None => return false,
487+
};
488+
krate.cfg(sema.db).check(&cfg_expr) == Some(false)
471489
})
472490
})
473491
}
@@ -551,9 +569,9 @@ impl<'a> Translator<'a> {
551569
is_const: false,
552570
is_gen: false,
553571
is_move: false,
554-
is_try: false,
555572
is_unsafe: false,
556573
stmt_list: Some(stmt_list),
574+
try_block_modifier: None,
557575
});
558576
self.emit_location(label, node);
559577
self.emit_tokens(node, label.into(), node.syntax().children_with_tokens());
@@ -695,7 +713,9 @@ impl<'a> Translator<'a> {
695713
let node: ast::Adt = node.clone().into();
696714
let expansions = node
697715
.attrs()
698-
.filter_map(|attr| semantics.expand_derive_macro(&attr))
716+
.filter_map(|attr| attr.meta())
717+
.filter_map(|meta| semantics.expand_derive_macro(&meta))
718+
.flatten()
699719
.flatten()
700720
.filter_map(|expanded| self.process_item_macro_expansion(&node, expanded))
701721
.collect::<Vec<_>>();

0 commit comments

Comments
 (0)