Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/ra_flycheck/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use crate::conv::{map_rust_diagnostic_to_lsp, MappedRustDiagnostic};

pub use crate::conv::url_from_path_with_drive_lowercasing;

#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum FlycheckConfig {
CargoCommand { command: String, all_targets: bool, extra_args: Vec<String> },
CustomCommand { command: String, args: Vec<String> },
Expand Down
19 changes: 8 additions & 11 deletions crates/ra_project_model/src/cargo_workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ use cargo_metadata::{BuildScript, CargoOpt, Message, MetadataCommand, PackageId}
use ra_arena::{Arena, Idx};
use ra_db::Edition;
use rustc_hash::FxHashMap;
use serde::Deserialize;

/// `CargoWorkspace` represents the logical structure of, well, a Cargo
/// workspace. It pretty closely mirrors `cargo metadata` output.
Expand Down Expand Up @@ -43,9 +42,8 @@ impl ops::Index<Target> for CargoWorkspace {
}
}

#[derive(Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase", default)]
pub struct CargoFeatures {
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CargoConfig {
/// Do not activate the `default` feature.
pub no_default_features: bool,

Expand All @@ -60,9 +58,9 @@ pub struct CargoFeatures {
pub load_out_dirs_from_check: bool,
}

impl Default for CargoFeatures {
impl Default for CargoConfig {
fn default() -> Self {
CargoFeatures {
CargoConfig {
no_default_features: false,
all_features: true,
features: Vec::new(),
Expand Down Expand Up @@ -141,7 +139,7 @@ impl PackageData {
impl CargoWorkspace {
pub fn from_cargo_metadata(
cargo_toml: &Path,
cargo_features: &CargoFeatures,
cargo_features: &CargoConfig,
) -> Result<CargoWorkspace> {
let mut meta = MetadataCommand::new();
meta.manifest_path(cargo_toml);
Expand Down Expand Up @@ -275,7 +273,7 @@ pub struct ExternResources {

pub fn load_extern_resources(
cargo_toml: &Path,
cargo_features: &CargoFeatures,
cargo_features: &CargoConfig,
) -> Result<ExternResources> {
let mut cmd = Command::new(cargo_binary());
cmd.args(&["check", "--message-format=json", "--manifest-path"]).arg(cargo_toml);
Expand All @@ -293,9 +291,8 @@ pub fn load_extern_resources(

let mut res = ExternResources::default();

let stdout = String::from_utf8(output.stdout)?;
for line in stdout.lines() {
if let Ok(message) = serde_json::from_str::<cargo_metadata::Message>(&line) {
for message in cargo_metadata::parse_messages(output.stdout.as_slice()) {
if let Ok(message) = message {
match message {
Message::BuildScriptExecuted(BuildScript { package_id, out_dir, .. }) => {
res.out_dirs.insert(package_id, out_dir);
Expand Down
6 changes: 3 additions & 3 deletions crates/ra_project_model/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use rustc_hash::FxHashMap;
use serde_json::from_reader;

pub use crate::{
cargo_workspace::{CargoFeatures, CargoWorkspace, Package, Target, TargetKind},
cargo_workspace::{CargoConfig, CargoWorkspace, Package, Target, TargetKind},
json_project::JsonProject,
sysroot::Sysroot,
};
Expand Down Expand Up @@ -78,14 +78,14 @@ impl PackageRoot {
}

impl ProjectWorkspace {
pub fn discover(path: &Path, cargo_features: &CargoFeatures) -> Result<ProjectWorkspace> {
pub fn discover(path: &Path, cargo_features: &CargoConfig) -> Result<ProjectWorkspace> {
ProjectWorkspace::discover_with_sysroot(path, true, cargo_features)
}

pub fn discover_with_sysroot(
path: &Path,
with_sysroot: bool,
cargo_features: &CargoFeatures,
cargo_features: &CargoConfig,
) -> Result<ProjectWorkspace> {
match find_rust_project_json(path) {
Some(json_path) => {
Expand Down
31 changes: 12 additions & 19 deletions crates/rust-analyzer/src/bin/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
mod args;

use lsp_server::Connection;

use rust_analyzer::{cli, from_json, show_message, Result, ServerConfig};
use rust_analyzer::{cli, config::Config, from_json, Result};

use crate::args::HelpPrinted;

Expand Down Expand Up @@ -78,24 +77,18 @@ fn run_server() -> Result<()> {
.filter(|workspaces| !workspaces.is_empty())
.unwrap_or_else(|| vec![root]);

let server_config = initialize_params
.initialization_options
.and_then(|v| {
from_json::<ServerConfig>("config", v)
.map_err(|e| {
log::error!("{}", e);
show_message(lsp_types::MessageType::Error, e.to_string(), &connection.sender);
})
.ok()
})
.unwrap_or_default();
let config = {
let mut config = Config::default();
if let Some(value) = &initialize_params.initialization_options {
config.update(value);
}
if let Some(caps) = &initialize_params.capabilities.text_document {
config.update_caps(caps);
}
config
};

rust_analyzer::main_loop(
workspace_roots,
initialize_params.capabilities,
server_config,
connection,
)?;
rust_analyzer::main_loop(workspace_roots, config, connection)?;

log::info!("shutting down IO...");
io_threads.join()?;
Expand Down
4 changes: 2 additions & 2 deletions crates/rust-analyzer/src/cli/load_cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crossbeam_channel::{unbounded, Receiver};
use ra_db::{ExternSourceId, FileId, SourceRootId};
use ra_ide::{AnalysisChange, AnalysisHost};
use ra_project_model::{
get_rustc_cfg_options, CargoFeatures, PackageRoot, ProcMacroClient, ProjectWorkspace,
get_rustc_cfg_options, CargoConfig, PackageRoot, ProcMacroClient, ProjectWorkspace,
};
use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch};
use rustc_hash::{FxHashMap, FxHashSet};
Expand All @@ -29,7 +29,7 @@ pub(crate) fn load_cargo(
let root = std::env::current_dir()?.join(root);
let ws = ProjectWorkspace::discover(
root.as_ref(),
&CargoFeatures { load_out_dirs_from_check, ..Default::default() },
&CargoConfig { load_out_dirs_from_check, ..Default::default() },
)?;

let mut extern_dirs = FxHashSet::default();
Expand Down
Loading