internal: Split serde derive feature into serde_derive usage

Ideally we'd not have any dependency pull in the derive feature for faster build times, once that is the case this change would have an actual effect.
See https://github.com/matklad/macro-dep-test/blob/master/README.md for context.
This commit is contained in:
Lukas Wirth 2024-12-20 11:07:05 +01:00
parent 27fac08c82
commit 5211972743
19 changed files with 58 additions and 56 deletions

57
Cargo.lock generated
View file

@ -1008,18 +1008,6 @@ version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "lsp-server"
version = "0.7.7"
dependencies = [
"crossbeam-channel",
"ctrlc",
"log",
"lsp-types",
"serde",
"serde_json",
]
[[package]] [[package]]
name = "lsp-server" name = "lsp-server"
version = "0.7.7" version = "0.7.7"
@ -1032,6 +1020,19 @@ dependencies = [
"serde_json", "serde_json",
] ]
[[package]]
name = "lsp-server"
version = "0.7.8"
dependencies = [
"crossbeam-channel",
"ctrlc",
"log",
"lsp-types",
"serde",
"serde_derive",
"serde_json",
]
[[package]] [[package]]
name = "lsp-types" name = "lsp-types"
version = "0.95.0" version = "0.95.0"
@ -1289,7 +1290,6 @@ name = "paths"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"camino", "camino",
"serde",
] ]
[[package]] [[package]]
@ -1357,6 +1357,7 @@ dependencies = [
"paths", "paths",
"rustc-hash 2.0.0", "rustc-hash 2.0.0",
"serde", "serde",
"serde_derive",
"serde_json", "serde_json",
"span", "span",
"stdx", "stdx",
@ -1446,6 +1447,7 @@ dependencies = [
"rustc-hash 2.0.0", "rustc-hash 2.0.0",
"semver", "semver",
"serde", "serde",
"serde_derive",
"serde_json", "serde_json",
"span", "span",
"stdx", "stdx",
@ -1674,7 +1676,7 @@ dependencies = [
"intern", "intern",
"itertools", "itertools",
"load-cargo", "load-cargo",
"lsp-server 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)", "lsp-server 0.7.7",
"lsp-types", "lsp-types",
"memchr", "memchr",
"mimalloc", "mimalloc",
@ -1693,6 +1695,7 @@ dependencies = [
"scip", "scip",
"semver", "semver",
"serde", "serde",
"serde_derive",
"serde_json", "serde_json",
"stdx", "stdx",
"syntax", "syntax",
@ -1820,18 +1823,18 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.206" version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284" checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.206" version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97" checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1922,12 +1925,6 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]] [[package]]
name = "stdx" name = "stdx"
version = "0.0.0" version = "0.0.0"
@ -1944,9 +1941,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.74" version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2262,13 +2259,9 @@ dependencies = [
[[package]] [[package]]
name = "triomphe" name = "triomphe"
version = "0.1.13" version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85"
dependencies = [
"serde",
"stable_deref_trait",
]
[[package]] [[package]]
name = "tt" name = "tt"

View file

@ -138,7 +138,8 @@ pulldown-cmark = { version = "0.9.0", default-features = false }
rayon = "1.8.0" rayon = "1.8.0"
rustc-hash = "2.0.0" rustc-hash = "2.0.0"
semver = "1.0.14" semver = "1.0.14"
serde = { version = "1.0.192", features = ["derive"] } serde = { version = "1.0.192" }
serde_derive = { version = "1.0.192" }
serde_json = "1.0.108" serde_json = "1.0.108"
smallvec = { version = "1.10.0", features = [ smallvec = { version = "1.10.0", features = [
"const_new", "const_new",
@ -157,7 +158,7 @@ tracing-subscriber = { version = "0.3.18", default-features = false, features =
"time", "time",
"tracing-log", "tracing-log",
] } ] }
triomphe = { version = "0.1.10", default-features = false, features = ["std"] } triomphe = { version = "0.1.14", default-features = false, features = ["std"] }
url = "2.3.1" url = "2.3.1"
xshell = "0.2.5" xshell = "0.2.5"

View file

@ -14,10 +14,9 @@ doctest = false
[dependencies] [dependencies]
camino.workspace = true camino.workspace = true
serde = { workspace = true, optional = true }
[features] [features]
serde1 = ["camino/serde1", "dep:serde"] serde1 = ["camino/serde1"]
[lints] [lints]
workspace = true workspace = true

View file

@ -14,6 +14,7 @@ doctest = false
[dependencies] [dependencies]
serde.workspace = true serde.workspace = true
serde_derive.workspace = true
serde_json = { workspace = true, features = ["unbounded_depth"] } serde_json = { workspace = true, features = ["unbounded_depth"] }
tracing.workspace = true tracing.workspace = true
rustc-hash.workspace = true rustc-hash.workspace = true

View file

@ -4,7 +4,8 @@ pub(crate) mod flat;
use std::io::{self, BufRead, Write}; use std::io::{self, BufRead, Write};
use paths::Utf8PathBuf; use paths::Utf8PathBuf;
use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde::de::DeserializeOwned;
use serde_derive::{Deserialize, Serialize};
use crate::ProcMacroKind; use crate::ProcMacroKind;
@ -123,7 +124,7 @@ impl ExpnGlobals {
} }
} }
pub trait Message: Serialize + DeserializeOwned { pub trait Message: serde::Serialize + DeserializeOwned {
fn read<R: BufRead>( fn read<R: BufRead>(
from_proto: ProtocolRead<R>, from_proto: ProtocolRead<R>,
inp: &mut R, inp: &mut R,

View file

@ -39,7 +39,7 @@ use std::collections::VecDeque;
use intern::Symbol; use intern::Symbol;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use serde::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use span::{EditionedFileId, ErasedFileAstId, Span, SpanAnchor, SyntaxContextId, TextRange}; use span::{EditionedFileId, ErasedFileAstId, Span, SpanAnchor, SyntaxContextId, TextRange};
use crate::msg::EXTENDED_LEAF_DATA; use crate::msg::EXTENDED_LEAF_DATA;

View file

@ -19,6 +19,7 @@ rustc-hash.workspace = true
semver.workspace = true semver.workspace = true
serde_json.workspace = true serde_json.workspace = true
serde.workspace = true serde.workspace = true
serde_derive.workspace = true
tracing.workspace = true tracing.workspace = true
triomphe.workspace = true triomphe.workspace = true
la-arena.workspace = true la-arena.workspace = true

View file

@ -15,7 +15,7 @@ use itertools::Itertools;
use la_arena::ArenaMap; use la_arena::ArenaMap;
use paths::{AbsPath, AbsPathBuf, Utf8PathBuf}; use paths::{AbsPath, AbsPathBuf, Utf8PathBuf};
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use serde::Deserialize; use serde::Deserialize as _;
use toolchain::Tool; use toolchain::Tool;
use crate::{ use crate::{

View file

@ -8,7 +8,7 @@ use cargo_metadata::{CargoOpt, MetadataCommand};
use la_arena::{Arena, Idx}; use la_arena::{Arena, Idx};
use paths::{AbsPath, AbsPathBuf, Utf8PathBuf}; use paths::{AbsPath, AbsPathBuf, Utf8PathBuf};
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use serde::Deserialize; use serde_derive::Deserialize;
use serde_json::from_value; use serde_json::from_value;
use span::Edition; use span::Edition;
use toolchain::Tool; use toolchain::Tool;

View file

@ -20,7 +20,7 @@ parking_lot = "0.12.1"
rustc-hash = "2.0.0" rustc-hash = "2.0.0"
smallvec = "1.0.0" smallvec = "1.0.0"
oorandom = "11" oorandom = "11"
triomphe = "0.1.11" triomphe.workspace = true
itertools.workspace = true itertools.workspace = true
ra-salsa-macros = { version = "0.0.0", path = "ra-salsa-macros", package = "salsa-macros" } ra-salsa-macros = { version = "0.0.0", path = "ra-salsa-macros", package = "salsa-macros" }

View file

@ -36,6 +36,7 @@ rayon.workspace = true
rustc-hash.workspace = true rustc-hash.workspace = true
serde_json = { workspace = true, features = ["preserve_order"] } serde_json = { workspace = true, features = ["preserve_order"] }
serde.workspace = true serde.workspace = true
serde_derive.workspace = true
tenthash = "0.4.0" tenthash = "0.4.0"
num_cpus = "1.15.0" num_cpus = "1.15.0"
mimalloc = { version = "0.1.30", default-features = false, optional = true } mimalloc = { version = "0.1.30", default-features = false, optional = true }

View file

@ -6,7 +6,8 @@ use std::{fmt, io, process::Command, time::Duration};
use crossbeam_channel::{select_biased, unbounded, Receiver, Sender}; use crossbeam_channel::{select_biased, unbounded, Receiver, Sender};
use paths::{AbsPath, AbsPathBuf, Utf8PathBuf}; use paths::{AbsPath, AbsPathBuf, Utf8PathBuf};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use serde::Deserialize; use serde::Deserialize as _;
use serde_derive::Deserialize;
pub(crate) use cargo_metadata::diagnostic::{ pub(crate) use cargo_metadata::diagnostic::{
Applicability, Diagnostic, DiagnosticCode, DiagnosticLevel, DiagnosticSpan, Applicability, Diagnostic, DiagnosticCode, DiagnosticLevel, DiagnosticSpan,

View file

@ -5,7 +5,8 @@ use std::process::Command;
use crossbeam_channel::Sender; use crossbeam_channel::Sender;
use paths::AbsPath; use paths::AbsPath;
use serde::Deserialize; use serde::Deserialize as _;
use serde_derive::Deserialize;
use toolchain::Tool; use toolchain::Tool;
use crate::{ use crate::{

View file

@ -54,7 +54,7 @@ where
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>) {} fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>) {}
fn on_close(&self, id: Id, ctx: Context<'_, S>) { fn on_close(&self, id: Id, ctx: Context<'_, S>) {
#[derive(serde::Serialize)] #[derive(serde_derive::Serialize)]
struct JsonDataInner { struct JsonDataInner {
name: &'static str, name: &'static str,
elapsed_ms: u128, elapsed_ms: u128,

View file

@ -262,8 +262,9 @@ pub struct MacroFileId {
/// `MacroCallId` identifies a particular macro invocation, like /// `MacroCallId` identifies a particular macro invocation, like
/// `println!("Hello, {}", world)`. /// `println!("Hello, {}", world)`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct MacroCallId(ra_salsa::InternId); pub struct MacroCallId(InternId);
#[cfg(feature = "ra-salsa")]
impl ra_salsa::InternKey for MacroCallId { impl ra_salsa::InternKey for MacroCallId {
fn from_intern_id(v: ra_salsa::InternId) -> Self { fn from_intern_id(v: ra_salsa::InternId) -> Self {
MacroCallId(v) MacroCallId(v)
@ -362,6 +363,7 @@ mod intern_id_proxy {
use std::fmt; use std::fmt;
use std::num::NonZeroU32; use std::num::NonZeroU32;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(super) struct InternId { pub(super) struct InternId {
value: NonZeroU32, value: NonZeroU32,
} }

View file

@ -1,6 +1,6 @@
[package] [package]
name = "lsp-server" name = "lsp-server"
version = "0.7.7" version = "0.7.8"
description = "Generic LSP server scaffold." description = "Generic LSP server scaffold."
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
repository = "https://github.com/rust-lang/rust-analyzer/tree/master/lib/lsp-server" repository = "https://github.com/rust-lang/rust-analyzer/tree/master/lib/lsp-server"
@ -9,7 +9,8 @@ edition = "2021"
[dependencies] [dependencies]
log = "0.4.17" log = "0.4.17"
serde_json = "1.0.108" serde_json = "1.0.108"
serde = { version = "1.0.192", features = ["derive"] } serde = { version = "1.0.216" }
serde_derive = { version = "1.0.216" }
crossbeam-channel.workspace = true crossbeam-channel.workspace = true
[dev-dependencies] [dev-dependencies]

View file

@ -3,7 +3,8 @@ use std::{
io::{self, BufRead, Write}, io::{self, BufRead, Write},
}; };
use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde::de::DeserializeOwned;
use serde_derive::{Deserialize, Serialize};
use crate::error::ExtractError; use crate::error::ExtractError;
@ -196,7 +197,7 @@ impl Message {
} }
impl Response { impl Response {
pub fn new_ok<R: Serialize>(id: RequestId, result: R) -> Response { pub fn new_ok<R: serde::Serialize>(id: RequestId, result: R) -> Response {
Response { id, result: Some(serde_json::to_value(result).unwrap()), error: None } Response { id, result: Some(serde_json::to_value(result).unwrap()), error: None }
} }
pub fn new_err(id: RequestId, code: i32, message: String) -> Response { pub fn new_err(id: RequestId, code: i32, message: String) -> Response {
@ -206,7 +207,7 @@ impl Response {
} }
impl Request { impl Request {
pub fn new<P: Serialize>(id: RequestId, method: String, params: P) -> Request { pub fn new<P: serde::Serialize>(id: RequestId, method: String, params: P) -> Request {
Request { id, method, params: serde_json::to_value(params).unwrap() } Request { id, method, params: serde_json::to_value(params).unwrap() }
} }
pub fn extract<P: DeserializeOwned>( pub fn extract<P: DeserializeOwned>(
@ -231,7 +232,7 @@ impl Request {
} }
impl Notification { impl Notification {
pub fn new(method: String, params: impl Serialize) -> Notification { pub fn new(method: String, params: impl serde::Serialize) -> Notification {
Notification { method, params: serde_json::to_value(params).unwrap() } Notification { method, params: serde_json::to_value(params).unwrap() }
} }
pub fn extract<P: DeserializeOwned>( pub fn extract<P: DeserializeOwned>(

View file

@ -1,7 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use serde::Serialize;
use crate::{ErrorCode, Request, RequestId, Response, ResponseError}; use crate::{ErrorCode, Request, RequestId, Response, ResponseError};
/// Manages the set of pending requests, both incoming and outgoing. /// Manages the set of pending requests, both incoming and outgoing.
@ -56,7 +54,7 @@ impl<I> Incoming<I> {
} }
impl<O> Outgoing<O> { impl<O> Outgoing<O> {
pub fn register<P: Serialize>(&mut self, method: String, params: P, data: O) -> Request { pub fn register<P: serde::Serialize>(&mut self, method: String, params: P, data: O) -> Request {
let id = RequestId::from(self.next_id); let id = RequestId::from(self.next_id);
self.pending.insert(id.clone(), data); self.pending.insert(id.clone(), data);
self.next_id += 1; self.next_id += 1;

View file

@ -16,7 +16,8 @@ xflags = "0.3.0"
time = { version = "0.3", default-features = false } time = { version = "0.3", default-features = false }
zip = { version = "0.6", default-features = false, features = ["deflate", "time"] } zip = { version = "0.6", default-features = false, features = ["deflate", "time"] }
stdx.workspace = true stdx.workspace = true
proc-macro2 = "1.0.47" # https://github.com/dtolnay/proc-macro2/issues/475
proc-macro2 = "=1.0.86"
quote = "1.0.20" quote = "1.0.20"
ungrammar = "1.16.1" ungrammar = "1.16.1"
either.workspace = true either.workspace = true