Skip to content
This repository was archived by the owner on Dec 29, 2022. It is now read-only.

Commit 64b8292

Browse files
Fix RLS-internal breakage
A separate commit will be necessary to bump racer, which is also currently broken, but this at least gets us part of the way there.
1 parent d8478d8 commit 64b8292

File tree

8 files changed

+67
-25
lines changed

8 files changed

+67
-25
lines changed

rls-ipc/src/rpc.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,6 @@ pub enum Edition {
7575
Edition2018,
7676
/// Rust 2021
7777
Edition2021,
78+
/// Rust 2024
79+
Edition2024,
7880
}

rls-rustc/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ impl Callbacks for ShimCalls {
137137
rustc_span::edition::Edition::Edition2015 => Edition::Edition2015,
138138
rustc_span::edition::Edition::Edition2018 => Edition::Edition2018,
139139
rustc_span::edition::Edition::Edition2021 => Edition::Edition2021,
140+
rustc_span::edition::Edition::Edition2024 => Edition::Edition2024,
140141
},
141142
};
142143

rls/src/actions/requests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ fn reformat(
697697
Edition::Edition2015 => RustfmtEdition::Edition2015,
698698
Edition::Edition2018 => RustfmtEdition::Edition2018,
699699
Edition::Edition2021 => RustfmtEdition::Edition2021,
700+
Edition::Edition2024 => RustfmtEdition::Edition2024,
700701
};
701702
config.set().edition(edition);
702703
trace!("Detected edition {:?} for file `{}`", edition, path.display());

rls/src/build/cargo.rs

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -408,17 +408,18 @@ impl Executor for RlsExecutor {
408408
// Enforce JSON output so that we can parse the rustc output by
409409
// stripping --error-format if it was specified (e.g. Cargo pipelined
410410
// build)
411-
let filtered_args = filter_arg(cargo_cmd.get_args(), "--error-format");
411+
let filtered_args =
412+
filter_arg(&*cargo_cmd.get_args().collect::<Vec<_>>(), "--error-format");
412413
cargo_cmd.args_replace(&filtered_args);
413414
cargo_cmd.arg("--error-format=json");
414415
// Delete any stale data. We try and remove any json files with
415416
// the same crate name as Cargo would emit. This includes files
416417
// with the same crate name but different hashes, e.g., those
417418
// made with a different compiler.
418-
let cargo_args = cargo_cmd.get_args();
419+
let cargo_args = cargo_cmd.get_args().collect::<Vec<_>>();
419420
let crate_name =
420-
parse_arg(cargo_args, "--crate-name").expect("no crate-name in rustc command line");
421-
let cfg_test = cargo_args.iter().any(|arg| arg == "--test");
421+
parse_arg(&cargo_args, "--crate-name").expect("no crate-name in rustc command line");
422+
let cfg_test = cargo_args.iter().any(|arg| *arg == "--test");
422423
trace!("exec: {} {:?}", crate_name, cargo_cmd);
423424

424425
// Send off a window/progress notification for this compile target.
@@ -435,7 +436,8 @@ impl Executor for RlsExecutor {
435436
.expect("failed to send progress update");
436437
}
437438

438-
let out_dir = parse_arg(cargo_args, "--out-dir").expect("no out-dir in rustc command line");
439+
let out_dir =
440+
parse_arg(&cargo_args, "--out-dir").expect("no out-dir in rustc command line");
439441
let analysis_dir = Path::new(&out_dir).join("save-analysis");
440442
if let Ok(dir_contents) = read_dir(&analysis_dir) {
441443
let lib_crate_name = "lib".to_owned() + &crate_name;
@@ -478,7 +480,7 @@ impl Executor for RlsExecutor {
478480

479481
// Add args and envs to cmd.
480482
let mut args: Vec<_> =
481-
cargo_args.iter().map(|a| a.clone().into_string().unwrap()).collect();
483+
cargo_args.iter().map(|a| (*a).to_owned().into_string().unwrap()).collect();
482484
let envs = cargo_cmd.get_envs().clone();
483485

484486
let sysroot = super::rustc::current_sysroot()
@@ -508,7 +510,7 @@ impl Executor for RlsExecutor {
508510
"rustc not intercepted - {}{} - args: {:?} envs: {:?}",
509511
id.name(),
510512
build_script_notice,
511-
cmd.get_args(),
513+
cmd.get_args().collect::<Vec<_>>(),
512514
cmd.get_envs(),
513515
);
514516

@@ -712,9 +714,9 @@ pub fn make_cargo_config(
712714
config
713715
}
714716

715-
fn parse_arg(args: &[OsString], arg: &str) -> Option<String> {
717+
fn parse_arg(args: &[&OsString], arg: &str) -> Option<String> {
716718
for (i, a) in args.iter().enumerate() {
717-
if a == arg {
719+
if *a == arg {
718720
return Some(args[i + 1].clone().into_string().unwrap());
719721
}
720722
}
@@ -780,7 +782,7 @@ fn dedup_flags(flag_str: &str) -> String {
780782
}
781783

782784
/// Removes a selected flag of a `--flag=VALUE` or `--flag VALUE` shape from `args` (command line args for Rust).
783-
fn filter_arg(args: &[OsString], key: &str) -> Vec<String> {
785+
fn filter_arg(args: &[&OsString], key: &str) -> Vec<String> {
784786
let key_as_prefix = key.to_owned() + "=";
785787
let mut ret = vec![];
786788

@@ -934,12 +936,47 @@ mod test {
934936
input.split_whitespace().map(OsString::from).collect()
935937
}
936938

937-
assert!(filter_arg(&args("--error-format=json"), "--error-format").is_empty());
938-
assert!(filter_arg(&args("--error-format json"), "--error-format").is_empty());
939-
assert_eq!(filter_arg(&args("-a --error-format=json"), "--error-format"), ["-a"]);
940-
assert_eq!(filter_arg(&args("-a --error-format json"), "--error-format"), ["-a"]);
941-
assert_eq!(filter_arg(&args("-a --error-format=json -b"), "--error-format"), ["-a", "-b"]);
942-
assert_eq!(filter_arg(&args("-a --error-format json -b"), "--error-format"), ["-a", "-b"]);
943-
assert_eq!(filter_arg(&args("-a -b -x"), "--error-format"), ["-a", "-b", "-x"]);
939+
assert!(filter_arg(
940+
&args("--error-format=json").iter().collect::<Vec<_>>(),
941+
"--error-format"
942+
)
943+
.is_empty());
944+
assert!(filter_arg(
945+
&args("--error-format json").iter().collect::<Vec<_>>(),
946+
"--error-format"
947+
)
948+
.is_empty());
949+
assert_eq!(
950+
filter_arg(
951+
&args("-a --error-format=json").iter().collect::<Vec<_>>(),
952+
"--error-format"
953+
),
954+
["-a"]
955+
);
956+
assert_eq!(
957+
filter_arg(
958+
&args("-a --error-format json").iter().collect::<Vec<_>>(),
959+
"--error-format"
960+
),
961+
["-a"]
962+
);
963+
assert_eq!(
964+
filter_arg(
965+
&args("-a --error-format=json -b").iter().collect::<Vec<_>>(),
966+
"--error-format"
967+
),
968+
["-a", "-b"]
969+
);
970+
assert_eq!(
971+
filter_arg(
972+
&args("-a --error-format json -b").iter().collect::<Vec<_>>(),
973+
"--error-format"
974+
),
975+
["-a", "-b"]
976+
);
977+
assert_eq!(
978+
filter_arg(&args("-a -b -x").iter().collect::<Vec<_>>(), "--error-format"),
979+
["-a", "-b", "-x"]
980+
);
944981
}
945982
}

rls/src/build/external.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ impl BuildKey for Invocation {
197197
let mut hash = DefaultHasher::new();
198198

199199
self.command.get_program().hash(&mut hash);
200-
let /*mut*/ args = self.command.get_args().to_owned();
200+
let /*mut*/ args = self.command.get_args().map(|a| a.to_owned()).collect::<Vec<_>>();
201201
// args.sort(); // TODO: parse 2-part args (e.g., `["--extern", "a=b"]`)
202202
args.hash(&mut hash);
203203
let mut envs: Vec<_> = self.command.get_envs().iter().collect();
@@ -417,10 +417,8 @@ fn guess_rustc_src_path(build_dir: &Path, cmd: &ProcessBuilder) -> Option<PathBu
417417

418418
let cwd = cmd.get_cwd().or_else(|| Some(build_dir));
419419

420-
let file = cmd
421-
.get_args()
422-
.iter()
423-
.find(|&a| Path::new(a).extension().map(|e| e == "rs").unwrap_or(false))?;
420+
let file =
421+
cmd.get_args().find(|&a| Path::new(a).extension().map(|e| e == "rs").unwrap_or(false))?;
424422

425423
src_path(cwd, file)
426424
}

rls/src/build/ipc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ mod callbacks {
101101
rls_ipc::rpc::Edition::Edition2015 => crate::build::plan::Edition::Edition2015,
102102
rls_ipc::rpc::Edition::Edition2018 => crate::build::plan::Edition::Edition2018,
103103
rls_ipc::rpc::Edition::Edition2021 => crate::build::plan::Edition::Edition2021,
104+
rls_ipc::rpc::Edition::Edition2024 => crate::build::plan::Edition::Edition2024,
104105
},
105106
disambiguator: krate.disambiguator,
106107
}

rls/src/build/plan.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub(crate) struct JobQueue(Vec<ProcessBuilder>);
8484
/// For example, if `[.., "--crate-name", "rls", ...]` arguments are specified,
8585
/// then proc_arg(prc, "--crate-name") returns Some(&OsStr::new("rls"));
8686
fn proc_argument_value<T: AsRef<OsStr>>(prc: &ProcessBuilder, key: T) -> Option<&std::ffi::OsStr> {
87-
let args = prc.get_args();
87+
let args = prc.get_args().collect::<Vec<_>>();
8888
let (idx, _) = args.iter().enumerate().find(|(_, arg)| arg.as_os_str() == key.as_ref())?;
8989

9090
Some(args.get(idx + 1)?.as_os_str())
@@ -125,7 +125,6 @@ impl JobQueue {
125125
trace!("Executing: {:#?}", job);
126126
let mut args: Vec<_> = job
127127
.get_args()
128-
.iter()
129128
.cloned()
130129
.map(|x| x.into_string().expect("cannot stringify job args"))
131130
.collect();
@@ -155,7 +154,7 @@ impl JobQueue {
155154
let crate_name = proc_argument_value(&job, "--crate-name").and_then(OsStr::to_str);
156155
let update = match crate_name {
157156
Some(name) => {
158-
let cfg_test = job.get_args().iter().any(|arg| arg == "--test");
157+
let cfg_test = job.get_args().any(|arg| *arg == "--test");
159158
ProgressUpdate::Message(if cfg_test {
160159
format!("{} cfg(test)", name)
161160
} else {
@@ -237,6 +236,7 @@ pub enum Edition {
237236
Edition2015,
238237
Edition2018,
239238
Edition2021,
239+
Edition2024,
240240
}
241241

242242
impl Default for Edition {
@@ -253,6 +253,7 @@ impl std::convert::TryFrom<&str> for Edition {
253253
"2015" => Edition::Edition2015,
254254
"2018" => Edition::Edition2018,
255255
"2021" => Edition::Edition2021,
256+
"2024" => Edition::Edition2024,
256257
_ => return Err("unknown"),
257258
})
258259
}

rls/src/build/rustc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ impl rustc_driver::Callbacks for RlsRustcCalls {
255255
RustcEdition::Edition2015 => Edition::Edition2015,
256256
RustcEdition::Edition2018 => Edition::Edition2018,
257257
RustcEdition::Edition2021 => Edition::Edition2021,
258+
RustcEdition::Edition2024 => Edition::Edition2024,
258259
},
259260
};
260261

0 commit comments

Comments
 (0)