From 5dc2a0df540adb6e65e280716b3f0dc904bbedd3 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 28 Dec 2023 13:08:36 -0800 Subject: [PATCH] Eliminate syntect library's dependency on serde's "derive" feature --- .github/workflows/CI.yml | 3 +++ Cargo.toml | 3 ++- src/dumps.rs | 2 +- src/highlighting/selector.rs | 2 +- src/highlighting/style.rs | 2 +- src/highlighting/theme.rs | 2 +- src/highlighting/theme_set.rs | 2 +- src/parsing/metadata.rs | 5 +++-- src/parsing/regex.rs | 3 ++- src/parsing/scope.rs | 5 +++-- src/parsing/syntax_definition.rs | 3 ++- src/parsing/syntax_set.rs | 2 +- 12 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5b942518..39715992 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -33,6 +33,9 @@ jobs: - name: Run cargo check run: | cargo check --all-features --all-targets + # Check that if some other crate in the downstream dependency tree + # enables serde's "derive" feature, syntect still builds. + cargo check --all-features --features serde/derive documentation: name: Documentation checks diff --git a/Cargo.toml b/Cargo.toml index dc88e20e..ac6654f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,8 @@ plist = { version = "1.3", optional = true } bincode = { version = "1.0", optional = true } flate2 = { version = "1.0", optional = true } fnv = { version = "1.0", optional = true } -serde = { version = "1.0", features = ["derive"] } +serde = "1.0" +serde_derive = "1.0" serde_json = "1.0" once_cell = "1.8" thiserror = "1.0" diff --git a/src/dumps.rs b/src/dumps.rs index ddd7fa08..1fe0d8e5 100644 --- a/src/dumps.rs +++ b/src/dumps.rs @@ -34,7 +34,7 @@ use flate2::bufread::ZlibDecoder; #[cfg(feature = "dump-create")] use flate2::Compression; #[cfg(feature = "dump-create")] -use serde::Serialize; +use serde::ser::Serialize; #[cfg(feature = "dump-load")] use serde::de::DeserializeOwned; diff --git a/src/highlighting/selector.rs b/src/highlighting/selector.rs index 461724b9..9c9049e9 100644 --- a/src/highlighting/selector.rs +++ b/src/highlighting/selector.rs @@ -2,7 +2,7 @@ /// released under the MIT license by @defuz use crate::parsing::{Scope, ScopeStack, MatchPower, ParseScopeError}; use std::str::FromStr; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A single selector consisting of a stack to match and a possible stack to /// exclude from being matched. diff --git a/src/highlighting/style.rs b/src/highlighting/style.rs index dde5dccd..6f756cf9 100644 --- a/src/highlighting/style.rs +++ b/src/highlighting/style.rs @@ -1,7 +1,7 @@ // Code based on [https://github.com/defuz/sublimate/blob/master/src/core/syntax/scope.rs](https://github.com/defuz/sublimate/blob/master/src/core/syntax/scope.rs) // released under the MIT license by @defuz use bitflags::bitflags; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// Foreground and background colors, with font style #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] diff --git a/src/highlighting/theme.rs b/src/highlighting/theme.rs index 54deebbf..97377a0c 100644 --- a/src/highlighting/theme.rs +++ b/src/highlighting/theme.rs @@ -2,7 +2,7 @@ // released under the MIT license by @defuz use super::style::*; use super::selector::*; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A theme parsed from a `.tmTheme` file. /// diff --git a/src/highlighting/theme_set.rs b/src/highlighting/theme_set.rs index 1b26c1fe..2540c2d1 100644 --- a/src/highlighting/theme_set.rs +++ b/src/highlighting/theme_set.rs @@ -2,7 +2,7 @@ use super::super::LoadingError; #[cfg(feature = "plist-load")] use super::settings::*; use super::theme::Theme; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::collections::BTreeMap; use std::path::{Path, PathBuf}; diff --git a/src/parsing/metadata.rs b/src/parsing/metadata.rs index 4bdb4ccf..b9b87aa8 100644 --- a/src/parsing/metadata.rs +++ b/src/parsing/metadata.rs @@ -7,8 +7,9 @@ use std::fs::File; use std::io::BufReader; use std::str::FromStr; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use serde_json; +use serde::de::{Deserialize, Deserializer}; +use serde::ser::{Serialize, Serializer}; +use serde_derive::{Deserialize, Serialize}; use super::regex::Regex; use super::scope::{MatchPower, Scope}; diff --git a/src/parsing/regex.rs b/src/parsing/regex.rs index e120517e..bb0500f4 100644 --- a/src/parsing/regex.rs +++ b/src/parsing/regex.rs @@ -1,5 +1,6 @@ use once_cell::sync::OnceCell; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde::de::{Deserialize, Deserializer}; +use serde::ser::{Serialize, Serializer}; use std::error::Error; /// An abstraction for regex patterns. diff --git a/src/parsing/scope.rs b/src/parsing/scope.rs index da0e748e..ffdc1253 100644 --- a/src/parsing/scope.rs +++ b/src/parsing/scope.rs @@ -9,8 +9,9 @@ use std::cmp::{Ordering, min}; use std::mem; use once_cell::sync::Lazy; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use serde::de::{Error, Visitor}; +use serde::de::{Deserialize, Deserializer, Error, Visitor}; +use serde::ser::{Serialize, Serializer}; +use serde_derive::{Deserialize, Serialize}; /// Scope related errors #[derive(Debug, thiserror::Error)] diff --git a/src/parsing/syntax_definition.rs b/src/parsing/syntax_definition.rs index 81a6bcf2..aa704f98 100644 --- a/src/parsing/syntax_definition.rs +++ b/src/parsing/syntax_definition.rs @@ -9,7 +9,8 @@ use std::hash::Hash; use super::{scope::*, ParsingError}; use super::regex::{Regex, Region}; use regex_syntax::escape; -use serde::{Deserialize, Serialize, Serializer}; +use serde::ser::{Serialize, Serializer}; +use serde_derive::{Deserialize, Serialize}; use crate::parsing::syntax_set::SyntaxSet; pub type CaptureMapping = Vec<(usize, Vec)>; diff --git a/src/parsing/syntax_set.rs b/src/parsing/syntax_set.rs index 601dd66b..b0a647ca 100644 --- a/src/parsing/syntax_set.rs +++ b/src/parsing/syntax_set.rs @@ -17,7 +17,7 @@ use std::mem; use super::regex::Regex; use crate::parsing::syntax_definition::ContextId; use once_cell::sync::OnceCell; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A syntax set holds multiple syntaxes that have been linked together. ///