Auto merge of #44785 - alexcrichton:update-cargo, r=nikomatsakis
Update some minor dependencies * run `cargo update` * Update cargo submodule * Update to the `cc` crate from `gcc`
This commit is contained in:
commit
688a858391
File diff suppressed because it is too large
Load Diff
|
@ -38,6 +38,8 @@ members = [
|
|||
"tools/rls/test_data/infer_custom_bin",
|
||||
"tools/rls/test_data/infer_lib",
|
||||
"tools/rls/test_data/omit_init_build",
|
||||
"tools/rls/test_data/unicødë",
|
||||
"tools/rls/test_data/workspace_symbol",
|
||||
]
|
||||
|
||||
# Curiously, compiletest will segfault if compiled with opt-level=3 on 64-bit
|
||||
|
@ -60,10 +62,5 @@ debug-assertions = false
|
|||
[patch."https://github.com/rust-lang/cargo"]
|
||||
cargo = { path = "tools/cargo" }
|
||||
|
||||
# Override rustfmt dependencies both on the repo and the crate (the RLS
|
||||
# sometimes uses either).
|
||||
# FIXME should only need the crates.io patch, long term.
|
||||
[patch."https://github.com/rust-lang-nursery/rustfmt"]
|
||||
rustfmt-nightly = { path = "tools/rustfmt" }
|
||||
[patch.crates-io]
|
||||
rustfmt-nightly = { path = "tools/rustfmt" }
|
||||
|
|
|
@ -34,7 +34,7 @@ cmake = "0.1.23"
|
|||
filetime = "0.1"
|
||||
num_cpus = "1.0"
|
||||
getopts = "0.2"
|
||||
gcc = "0.3.54"
|
||||
cc = "1.0"
|
||||
libc = "0.2"
|
||||
serde = "1.0.8"
|
||||
serde_derive = "1.0.8"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
|
||||
use std::env;
|
||||
use std::process::{self, Command};
|
||||
|
@ -18,7 +18,7 @@ fn main() {
|
|||
// Locate the actual compiler that we're invoking
|
||||
env::remove_var("CC");
|
||||
env::remove_var("CXX");
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
cfg.cargo_metadata(false)
|
||||
.out_dir("/")
|
||||
.target(&target)
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
//! 6. "cc"
|
||||
//!
|
||||
//! Some of this logic is implemented here, but much of it is farmed out to the
|
||||
//! `gcc` crate itself, so we end up having the same fallbacks as there.
|
||||
//! `cc` crate itself, so we end up having the same fallbacks as there.
|
||||
//! Similar logic is then used to find a C++ compiler, just some s/cc/c++/ is
|
||||
//! used.
|
||||
//!
|
||||
|
@ -35,7 +35,7 @@ use std::process::Command;
|
|||
use std::iter;
|
||||
|
||||
use build_helper::{cc2ar, output};
|
||||
use gcc;
|
||||
use cc;
|
||||
|
||||
use Build;
|
||||
use config::Target;
|
||||
|
@ -45,7 +45,7 @@ pub fn find(build: &mut Build) {
|
|||
// For all targets we're going to need a C compiler for building some shims
|
||||
// and such as well as for being a linker for Rust code.
|
||||
for target in build.targets.iter().chain(&build.hosts).cloned().chain(iter::once(build.build)) {
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
cfg.cargo_metadata(false).opt_level(0).warnings(false).debug(false)
|
||||
.target(&target).host(&build.build);
|
||||
|
||||
|
@ -67,7 +67,7 @@ pub fn find(build: &mut Build) {
|
|||
|
||||
// For all host triples we need to find a C++ compiler as well
|
||||
for host in build.hosts.iter().cloned().chain(iter::once(build.build)) {
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
cfg.cargo_metadata(false).opt_level(0).warnings(false).debug(false).cpp(true)
|
||||
.target(&host).host(&build.build);
|
||||
let config = build.config.target_config.get(&host);
|
||||
|
@ -82,7 +82,7 @@ pub fn find(build: &mut Build) {
|
|||
}
|
||||
}
|
||||
|
||||
fn set_compiler(cfg: &mut gcc::Build,
|
||||
fn set_compiler(cfg: &mut cc::Build,
|
||||
gnu_compiler: &str,
|
||||
target: Interned<String>,
|
||||
config: Option<&Target>,
|
|
@ -254,7 +254,11 @@ impl Step for Rls {
|
|||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
|
||||
try_run(build, &mut cargo);
|
||||
try_run_expecting(
|
||||
build,
|
||||
&mut cargo,
|
||||
builder.build.config.toolstate.rls.passes(ToolState::Testing),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -295,7 +299,11 @@ impl Step for Rustfmt {
|
|||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
|
||||
try_run(build, &mut cargo);
|
||||
try_run_expecting(
|
||||
build,
|
||||
&mut cargo,
|
||||
builder.build.config.toolstate.rustfmt.passes(ToolState::Testing),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1098,13 +1098,8 @@ impl Step for Rls {
|
|||
.arg("--output-dir").arg(&distdir(build))
|
||||
.arg("--non-installed-overlay").arg(&overlay)
|
||||
.arg(format!("--package-name={}-{}", name, target))
|
||||
.arg("--legacy-manifest-dirs=rustlib,cargo");
|
||||
|
||||
if build.config.channel == "nightly" {
|
||||
cmd.arg("--component-name=rls");
|
||||
} else {
|
||||
cmd.arg("--component-name=rls-preview");
|
||||
}
|
||||
.arg("--legacy-manifest-dirs=rustlib,cargo")
|
||||
.arg("--component-name=rls-preview");
|
||||
|
||||
build.run(&mut cmd);
|
||||
distdir(build).join(format!("{}-{}.tar.gz", name, target))
|
||||
|
@ -1333,12 +1328,8 @@ impl Step for Extended {
|
|||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-std"), target))
|
||||
.join(format!("rust-std-{}", target)),
|
||||
&exe.join("rust-std"));
|
||||
let rls_path = if build.config.channel == "nightly" {
|
||||
work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls")
|
||||
} else {
|
||||
work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls-preview")
|
||||
};
|
||||
cp_r(&rls_path, &exe.join("rls"));
|
||||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls-preview"),
|
||||
&exe.join("rls"));
|
||||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-analysis"), target))
|
||||
.join(format!("rust-analysis-{}", target)),
|
||||
&exe.join("rust-analysis"));
|
||||
|
|
|
@ -126,7 +126,7 @@ extern crate lazy_static;
|
|||
extern crate serde_json;
|
||||
extern crate cmake;
|
||||
extern crate filetime;
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
extern crate getopts;
|
||||
extern crate num_cpus;
|
||||
extern crate toml;
|
||||
|
@ -148,7 +148,7 @@ use build_helper::{run_silent, run_suppressed, try_run_silent, try_run_suppresse
|
|||
|
||||
use util::{exe, libdir, OutputFolder, CiEnv};
|
||||
|
||||
mod cc;
|
||||
mod cc_detect;
|
||||
mod channel;
|
||||
mod check;
|
||||
mod clean;
|
||||
|
@ -241,9 +241,9 @@ pub struct Build {
|
|||
|
||||
// Runtime state filled in later on
|
||||
// target -> (cc, ar)
|
||||
cc: HashMap<Interned<String>, (gcc::Tool, Option<PathBuf>)>,
|
||||
cc: HashMap<Interned<String>, (cc::Tool, Option<PathBuf>)>,
|
||||
// host -> (cc, ar)
|
||||
cxx: HashMap<Interned<String>, gcc::Tool>,
|
||||
cxx: HashMap<Interned<String>, cc::Tool>,
|
||||
crates: HashMap<Interned<String>, Crate>,
|
||||
is_sudo: bool,
|
||||
ci_env: CiEnv,
|
||||
|
@ -350,7 +350,7 @@ impl Build {
|
|||
}
|
||||
|
||||
self.verbose("finding compilers");
|
||||
cc::find(self);
|
||||
cc_detect::find(self);
|
||||
self.verbose("running sanity check");
|
||||
sanity::check(self);
|
||||
// If local-rust is the same major.minor as the current version, then force a local-rebuild
|
||||
|
@ -619,7 +619,7 @@ impl Build {
|
|||
/// specified.
|
||||
fn cflags(&self, target: Interned<String>) -> Vec<String> {
|
||||
// Filter out -O and /O (the optimization flags) that we picked up from
|
||||
// gcc-rs because the build scripts will determine that for themselves.
|
||||
// cc-rs because the build scripts will determine that for themselves.
|
||||
let mut base = self.cc[&target].0.args().iter()
|
||||
.map(|s| s.to_string_lossy().into_owned())
|
||||
.filter(|s| !s.starts_with("-O") && !s.starts_with("/O"))
|
||||
|
|
|
@ -27,7 +27,7 @@ use std::process::Command;
|
|||
|
||||
use build_helper::output;
|
||||
use cmake;
|
||||
use gcc;
|
||||
use cc;
|
||||
|
||||
use Build;
|
||||
use util;
|
||||
|
@ -289,7 +289,7 @@ impl Step for TestHelpers {
|
|||
let _folder = build.fold_output(|| "build_test_helpers");
|
||||
println!("Building test helpers");
|
||||
t!(fs::create_dir_all(&dst));
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
|
||||
// We may have found various cross-compilers a little differently due to our
|
||||
// extra configuration, so inform gcc of these compilers. Note, though, that
|
||||
|
|
|
@ -126,6 +126,10 @@ pub fn prepare_tool_cargo(
|
|||
cargo.env("LIBZ_SYS_STATIC", "1");
|
||||
}
|
||||
|
||||
// if tools are using lzma we want to force the build script to build its
|
||||
// own copy
|
||||
cargo.env("LZMA_API_STATIC", "1");
|
||||
|
||||
cargo.env("CFG_RELEASE_CHANNEL", &build.config.channel);
|
||||
cargo.env("CFG_VERSION", build.rust_version());
|
||||
|
||||
|
@ -454,7 +458,7 @@ impl Step for Rls {
|
|||
tool: "rls",
|
||||
mode: Mode::Librustc,
|
||||
path: "src/tools/rls",
|
||||
expectation: BuildExpectation::None,
|
||||
expectation: builder.build.config.toolstate.rls.passes(ToolState::Compiling),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -489,7 +493,7 @@ impl Step for Rustfmt {
|
|||
tool: "rustfmt",
|
||||
mode: Mode::Librustc,
|
||||
path: "src/tools/rustfmt",
|
||||
expectation: BuildExpectation::None,
|
||||
expectation: builder.build.config.toolstate.rustfmt.passes(ToolState::Compiling),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,4 +46,6 @@ impl Default for ToolState {
|
|||
pub struct ToolStates {
|
||||
pub miri: ToolState,
|
||||
pub clippy: ToolState,
|
||||
pub rls: ToolState,
|
||||
pub rustfmt: ToolState,
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ libc = { path = "../rustc/libc_shim" }
|
|||
|
||||
[build-dependencies]
|
||||
build_helper = { path = "../build_helper" }
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
||||
[features]
|
||||
debug = []
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#![deny(warnings)]
|
||||
|
||||
extern crate build_helper;
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
|
@ -63,7 +63,7 @@ fn main() {
|
|||
_ => return,
|
||||
};
|
||||
|
||||
let compiler = gcc::Build::new().get_compiler();
|
||||
let compiler = cc::Build::new().get_compiler();
|
||||
// only msvc returns None for ar so unwrap is okay
|
||||
let ar = build_helper::cc2ar(compiler.path(), &target).unwrap();
|
||||
let cflags = compiler.args()
|
||||
|
@ -150,7 +150,7 @@ fn main() {
|
|||
// sure the symbols are available.
|
||||
if target.contains("androideabi") {
|
||||
println!("cargo:rerun-if-changed=pthread_atfork_dummy.c");
|
||||
gcc::Build::new()
|
||||
cc::Build::new()
|
||||
.flag("-fvisibility=hidden")
|
||||
.file("pthread_atfork_dummy.c")
|
||||
.compile("libpthread_atfork_dummy.a");
|
||||
|
|
|
@ -15,4 +15,4 @@ doc = false
|
|||
core = { path = "../libcore" }
|
||||
|
||||
[build-dependencies]
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
|
|
@ -12,14 +12,14 @@
|
|||
//!
|
||||
//! See the build.rs for libcompiler_builtins crate for details.
|
||||
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
|
||||
use std::env;
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
let target = env::var("TARGET").expect("TARGET was not set");
|
||||
let cfg = &mut gcc::Build::new();
|
||||
let cfg = &mut cc::Build::new();
|
||||
|
||||
let mut profile_sources = vec!["GCDAProfiling.c",
|
||||
"InstrProfiling.c",
|
||||
|
|
|
@ -1373,20 +1373,20 @@ pub fn rustc_optgroups() -> Vec<RustcOptGroup> {
|
|||
always = always colorize output;
|
||||
never = never colorize output", "auto|always|never"),
|
||||
|
||||
opt::flagopt("", "pretty",
|
||||
"Pretty-print the input instead of compiling;
|
||||
valid types are: `normal` (un-annotated source),
|
||||
`expanded` (crates expanded), or
|
||||
`expanded,identified` (fully parenthesized, AST nodes with IDs).",
|
||||
"TYPE"),
|
||||
opt::flagopt("", "unpretty",
|
||||
"Present the input source, unstable (and less-pretty) variants;
|
||||
valid types are any of the types for `--pretty`, as well as:
|
||||
`flowgraph=<nodeid>` (graphviz formatted flowgraph for node),
|
||||
`everybody_loops` (all function bodies replaced with `loop {}`),
|
||||
`hir` (the HIR), `hir,identified`, or
|
||||
`hir,typed` (HIR with types for each node).",
|
||||
"TYPE"),
|
||||
opt::opt("", "pretty",
|
||||
"Pretty-print the input instead of compiling;
|
||||
valid types are: `normal` (un-annotated source),
|
||||
`expanded` (crates expanded), or
|
||||
`expanded,identified` (fully parenthesized, AST nodes with IDs).",
|
||||
"TYPE"),
|
||||
opt::opt("", "unpretty",
|
||||
"Present the input source, unstable (and less-pretty) variants;
|
||||
valid types are any of the types for `--pretty`, as well as:
|
||||
`flowgraph=<nodeid>` (graphviz formatted flowgraph for node),
|
||||
`everybody_loops` (all function bodies replaced with `loop {}`),
|
||||
`hir` (the HIR), `hir,identified`, or
|
||||
`hir,typed` (HIR with types for each node).",
|
||||
"TYPE"),
|
||||
]);
|
||||
opts
|
||||
}
|
||||
|
|
|
@ -18,4 +18,4 @@ rustc_cratesio_shim = { path = "../librustc_cratesio_shim" }
|
|||
|
||||
[build-dependencies]
|
||||
build_helper = { path = "../build_helper" }
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
extern crate build_helper;
|
||||
|
||||
use std::process::Command;
|
||||
|
@ -136,7 +136,7 @@ fn main() {
|
|||
let mut cmd = Command::new(&llvm_config);
|
||||
cmd.arg("--cxxflags");
|
||||
let cxxflags = output(&mut cmd);
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
cfg.warnings(false);
|
||||
for flag in cxxflags.split_whitespace() {
|
||||
// Ignore flags like `-m64` when we're doing a cross build
|
||||
|
|
|
@ -32,4 +32,4 @@ syntax = { path = "../libsyntax" }
|
|||
syntax_pos = { path = "../libsyntax_pos" }
|
||||
|
||||
[target."cfg(windows)".dependencies]
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
|
|
@ -125,7 +125,7 @@ pub fn get_linker(sess: &Session) -> (String, Command, Vec<(OsString, OsString)>
|
|||
|
||||
#[cfg(windows)]
|
||||
pub fn msvc_link_exe_cmd(sess: &Session) -> (Command, Vec<(OsString, OsString)>) {
|
||||
use gcc::windows_registry;
|
||||
use cc::windows_registry;
|
||||
|
||||
let target = &sess.opts.target_triple;
|
||||
let tool = windows_registry::find_tool(target, "link.exe");
|
||||
|
|
|
@ -61,7 +61,7 @@ extern crate syntax_pos;
|
|||
extern crate rustc_errors as errors;
|
||||
extern crate serialize;
|
||||
#[cfg(windows)]
|
||||
extern crate gcc; // Used to locate MSVC, not gcc :)
|
||||
extern crate cc; // Used to locate MSVC
|
||||
|
||||
pub use base::trans_crate;
|
||||
|
||||
|
|
|
@ -18,4 +18,4 @@ html-diff = "0.0.4"
|
|||
|
||||
[build-dependencies]
|
||||
build_helper = { path = "../build_helper" }
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
// except according to those terms.
|
||||
|
||||
extern crate build_helper;
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
|
||||
fn main() {
|
||||
let src_dir = std::path::Path::new("../rt/hoedown/src");
|
||||
build_helper::rerun_if_changed_anything_in_dir(src_dir);
|
||||
let mut cfg = gcc::Build::new();
|
||||
let mut cfg = cc::Build::new();
|
||||
cfg.file("../rt/hoedown/src/autolink.c")
|
||||
.file("../rt/hoedown/src/buffer.c")
|
||||
.file("../rt/hoedown/src/document.c")
|
||||
|
|
|
@ -36,7 +36,7 @@ rustc_tsan = { path = "../librustc_tsan" }
|
|||
|
||||
[build-dependencies]
|
||||
build_helper = { path = "../build_helper" }
|
||||
gcc = "0.3.50"
|
||||
cc = "1.0"
|
||||
|
||||
[features]
|
||||
backtrace = []
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#![deny(warnings)]
|
||||
|
||||
extern crate build_helper;
|
||||
extern crate gcc;
|
||||
extern crate cc;
|
||||
|
||||
use std::env;
|
||||
use std::process::Command;
|
||||
|
@ -77,7 +77,7 @@ fn main() {
|
|||
fn build_libbacktrace(host: &str, target: &str) -> Result<(), ()> {
|
||||
let native = native_lib_boilerplate("libbacktrace", "libbacktrace", "backtrace", ".libs")?;
|
||||
|
||||
let compiler = gcc::Build::new().get_compiler();
|
||||
let compiler = cc::Build::new().get_compiler();
|
||||
// only msvc returns None for ar so unwrap is okay
|
||||
let ar = build_helper::cc2ar(compiler.path(), target).unwrap();
|
||||
let mut cflags = compiler.args().iter().map(|s| s.to_str().unwrap())
|
||||
|
|
|
@ -109,6 +109,7 @@ struct Manifest {
|
|||
manifest_version: String,
|
||||
date: String,
|
||||
pkg: BTreeMap<String, Package>,
|
||||
renames: BTreeMap<String, Rename>
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
|
@ -118,6 +119,11 @@ struct Package {
|
|||
target: BTreeMap<String, Target>,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Rename {
|
||||
to: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Target {
|
||||
available: bool,
|
||||
|
@ -237,6 +243,7 @@ impl Builder {
|
|||
manifest_version: "2".to_string(),
|
||||
date: self.date.to_string(),
|
||||
pkg: BTreeMap::new(),
|
||||
renames: BTreeMap::new(),
|
||||
};
|
||||
|
||||
self.package("rustc", &mut manifest.pkg, HOSTS);
|
||||
|
@ -245,14 +252,11 @@ impl Builder {
|
|||
self.package("rust-std", &mut manifest.pkg, TARGETS);
|
||||
self.package("rust-docs", &mut manifest.pkg, TARGETS);
|
||||
self.package("rust-src", &mut manifest.pkg, &["*"]);
|
||||
let rls_package_name = if self.rust_release == "nightly" {
|
||||
"rls"
|
||||
} else {
|
||||
"rls-preview"
|
||||
};
|
||||
self.package(rls_package_name, &mut manifest.pkg, HOSTS);
|
||||
self.package("rls-preview", &mut manifest.pkg, HOSTS);
|
||||
self.package("rust-analysis", &mut manifest.pkg, TARGETS);
|
||||
|
||||
manifest.renames.insert("rls".to_owned(), Rename { to: "rls-preview".to_owned() });
|
||||
|
||||
let mut pkg = Package {
|
||||
version: self.cached_version("rust").to_string(),
|
||||
git_commit_hash: self.cached_git_commit_hash("rust").clone(),
|
||||
|
@ -288,7 +292,7 @@ impl Builder {
|
|||
}
|
||||
|
||||
extensions.push(Component {
|
||||
pkg: rls_package_name.to_string(),
|
||||
pkg: "rls-preview".to_string(),
|
||||
target: host.to_string(),
|
||||
});
|
||||
extensions.push(Component {
|
||||
|
@ -320,7 +324,7 @@ impl Builder {
|
|||
}
|
||||
manifest.pkg.insert("rust".to_string(), pkg);
|
||||
|
||||
return manifest
|
||||
return manifest;
|
||||
}
|
||||
|
||||
fn package(&mut self,
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 8118b02ac5ce49b22e049ff03316d5e1574852cf
|
||||
Subproject commit e447ac7e94b7f56ab13e361f9e324dafe3eb0a34
|
|
@ -1 +1 @@
|
|||
Subproject commit 7221e38023c41ff2532ebbf54a7da296fd488b50
|
||||
Subproject commit 93b47d14cef5720bba7cfb4dcb8078fbf1f706c1
|
|
@ -27,3 +27,10 @@ miri = "Broken"
|
|||
|
||||
# ping @Manishearth @llogiq @mcarton @oli-obk
|
||||
clippy = "Broken"
|
||||
|
||||
# ping @nrc
|
||||
rls = "Testing"
|
||||
|
||||
# ping @nrc
|
||||
rustfmt = "Testing"
|
||||
|
||||
|
|
Loading…
Reference in New Issue