From f3c6ee1c56a76bcc18d6d4c75fcf1efcc3c4cd44 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Mon, 23 Jan 2023 22:20:58 -0500 Subject: [PATCH] Publish docs for optional features on docs.rs --- Cargo.toml | 4 ++++ src/lib.rs | 7 +++++-- src/media_query.rs | 1 + src/parser.rs | 1 + src/printer.rs | 4 ++++ src/properties/custom.rs | 3 +++ src/properties/grid.rs | 1 + src/properties/mod.rs | 21 +++++++++++++++++++++ src/properties/text.rs | 2 ++ src/properties/ui.rs | 3 +++ src/rules/mod.rs | 2 ++ src/selector.rs | 2 ++ src/stylesheet.rs | 2 ++ src/targets.rs | 1 + src/values/color.rs | 1 + src/values/length.rs | 1 + src/values/string.rs | 2 ++ src/vendor_prefix.rs | 4 ++++ 18 files changed, 60 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 017edd30..95414420 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,10 @@ edition = "2021" keywords = [ "CSS", "minifier", "Parcel" ] repository = "https://github.com/parcel-bundler/lightningcss" +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + [[bin]] name = "lightningcss" path = "src/main.rs" diff --git a/src/lib.rs b/src/lib.rs index 62485828..a50aff21 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,8 +15,10 @@ //! style sheet. See the individual module documentation for more details and examples. #![deny(missing_docs)] +#![cfg_attr(docsrs, feature(doc_cfg))] #[cfg(feature = "bundler")] +#[cfg_attr(docsrs, doc(cfg(feature = "bundler")))] pub mod bundler; mod compat; mod context; @@ -39,6 +41,7 @@ pub mod traits; pub mod values; pub mod vendor_prefix; #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] pub mod visitor; #[cfg(feature = "serde")] @@ -10181,7 +10184,7 @@ mod tests { @bottom-left-corner { content: "Foo"; } - + @bottom-right-corner { content: "Bar"; } @@ -19670,7 +19673,7 @@ mod tests { color: green; & { color: blue; } color: red; - } + } "#, indoc! {r#" article { diff --git a/src/media_query.rs b/src/media_query.rs index e260f6a0..dda2ead0 100644 --- a/src/media_query.rs +++ b/src/media_query.rs @@ -208,6 +208,7 @@ impl<'i> Parse<'i> for MediaType<'i> { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for MediaType<'a> { fn is_referenceable() -> bool { true diff --git a/src/parser.rs b/src/parser.rs index 8da21db3..3c5fc237 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -114,6 +114,7 @@ impl crate::traits::ToCss for DefaultAtRule { } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, V: Visitor<'i, DefaultAtRule>> Visit<'i, DefaultAtRule, V> for DefaultAtRule { const CHILD_TYPES: VisitTypes = VisitTypes::empty(); fn visit_children(&mut self, _: &mut V) {} diff --git a/src/printer.rs b/src/printer.rs index 4dfce5de..424b585e 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -17,6 +17,7 @@ pub struct PrinterOptions<'a> { pub minify: bool, /// An optional reference to a source map to write mappings into. #[cfg(feature = "sourcemap")] + #[cfg_attr(docsrs, doc(cfg(feature = "sourcemap")))] pub source_map: Option<&'a mut SourceMap>, /// An optional project root path, used to generate relative paths for sources used in CSS module hashes. pub project_root: Option<&'a str>, @@ -65,8 +66,10 @@ pub struct Printer<'a, 'b, 'c, W> { pub(crate) sources: Option<&'c Vec>, dest: &'a mut W, #[cfg(feature = "sourcemap")] + #[cfg_attr(docsrs, doc(cfg(feature = "sourcemap")))] pub(crate) source_map: Option<&'a mut SourceMap>, #[cfg(feature = "sourcemap")] + #[cfg_attr(docsrs, doc(cfg(feature = "sourcemap")))] pub(crate) source_maps: Vec>, pub(crate) loc: Location, indent: u8, @@ -216,6 +219,7 @@ impl<'a, 'b, 'c, W: std::fmt::Write + Sized> Printer<'a, 'b, 'c, W> { /// Adds a mapping to the source map, if any. #[cfg(feature = "sourcemap")] + #[cfg_attr(docsrs, doc(cfg(feature = "sourcemap")))] pub fn add_mapping(&mut self, loc: Location) { self.loc = loc; diff --git a/src/properties/custom.rs b/src/properties/custom.rs index 3ee6d9cd..6d3e22e7 100644 --- a/src/properties/custom.rs +++ b/src/properties/custom.rs @@ -111,6 +111,7 @@ impl<'i> ToCss for CustomPropertyName<'i> { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i, 'de: 'i> serde::Deserialize<'de> for CustomPropertyName<'i> { fn deserialize(deserializer: D) -> Result where @@ -177,6 +178,7 @@ impl<'i> UnparsedProperty<'i> { /// Substitutes variables and re-parses the property. #[cfg(feature = "substitute_variables")] + #[cfg_attr(docsrs, doc(cfg(feature = "substitute_variables")))] pub fn substitute_variables<'x>( mut self, vars: &std::collections::HashMap<&str, TokenList<'i>>, @@ -994,6 +996,7 @@ impl<'i> TokenList<'i> { /// Substitutes variables with the provided values. #[cfg(feature = "substitute_variables")] + #[cfg_attr(docsrs, doc(cfg(feature = "substitute_variables")))] pub fn substitute_variables(&mut self, vars: &std::collections::HashMap<&str, TokenList<'i>>) { self.visit(&mut VarInliner { vars }) } diff --git a/src/properties/grid.rs b/src/properties/grid.rs index ea28fbe0..6cd94ef8 100644 --- a/src/properties/grid.rs +++ b/src/properties/grid.rs @@ -1043,6 +1043,7 @@ enum AutoFlowDirection { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for GridAutoFlow { fn is_referenceable() -> bool { true diff --git a/src/properties/mod.rs b/src/properties/mod.rs index 1c3409ba..adc3182d 100644 --- a/src/properties/mod.rs +++ b/src/properties/mod.rs @@ -498,6 +498,7 @@ macro_rules! define_properties { } #[cfg(feature = "serde")] + #[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i> serde::Serialize for PropertyId<'i> { fn serialize(&self, serializer: S) -> Result where @@ -522,6 +523,7 @@ macro_rules! define_properties { } #[cfg(feature = "serde")] + #[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i, 'de: 'i> serde::Deserialize<'de> for PropertyId<'i> { fn deserialize(deserializer: D) -> Result where @@ -572,6 +574,7 @@ macro_rules! define_properties { } #[cfg(feature = "jsonschema")] + #[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'i> schemars::JsonSchema for PropertyId<'i> { fn is_referenceable() -> bool { true @@ -896,6 +899,7 @@ macro_rules! define_properties { } #[cfg(feature = "serde")] + #[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i> serde::Serialize for Property<'i> { fn serialize(&self, serializer: S) -> Result where @@ -950,6 +954,7 @@ macro_rules! define_properties { } #[cfg(feature = "serde")] + #[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i, 'de: 'i> serde::Deserialize<'de> for Property<'i> { fn deserialize(deserializer: D) -> Result where @@ -1053,6 +1058,7 @@ macro_rules! define_properties { } #[cfg(feature = "jsonschema")] + #[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'i> schemars::JsonSchema for Property<'i> { fn is_referenceable() -> bool { true @@ -1322,34 +1328,49 @@ define_properties! { "flex-preferred-size": FlexPreferredSize(LengthPercentageOrAuto, VendorPrefix) / Ms unprefixed: false, #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-template-columns": GridTemplateColumns(TrackSizing<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-template-rows": GridTemplateRows(TrackSizing<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-auto-columns": GridAutoColumns(TrackSizeList), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-auto-rows": GridAutoRows(TrackSizeList), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-auto-flow": GridAutoFlow(GridAutoFlow), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-template-areas": GridTemplateAreas(GridTemplateAreas), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-template": GridTemplate(GridTemplate<'i>) shorthand: true, #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid": Grid(Grid<'i>) shorthand: true, #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-row-start": GridRowStart(GridLine<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-row-end": GridRowEnd(GridLine<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-column-start": GridColumnStart(GridLine<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-column-end": GridColumnEnd(GridLine<'i>), #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-row": GridRow(GridRow<'i>) shorthand: true, #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-column": GridColumn(GridColumn<'i>) shorthand: true, #[cfg(feature = "grid")] + #[cfg_attr(docsrs, doc(cfg(feature = "grid")))] "grid-area": GridArea(GridArea<'i>) shorthand: true, "margin-top": MarginTop(LengthPercentageOrAuto) [logical_group: Margin, category: Physical], diff --git a/src/properties/text.rs b/src/properties/text.rs index 584273aa..594e904b 100644 --- a/src/properties/text.rs +++ b/src/properties/text.rs @@ -131,6 +131,7 @@ impl From for TextTransformOther { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for TextTransformOther { fn is_referenceable() -> bool { true @@ -655,6 +656,7 @@ impl From for TextDecorationLine { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for TextDecorationLine { fn is_referenceable() -> bool { true diff --git a/src/properties/ui.rs b/src/properties/ui.rs index 280dfea2..5e0b36b2 100644 --- a/src/properties/ui.rs +++ b/src/properties/ui.rs @@ -378,6 +378,7 @@ impl<'i> ToCss for Appearance<'i> { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i> serde::Serialize for Appearance<'i> { fn serialize(&self, serializer: S) -> Result where @@ -388,6 +389,7 @@ impl<'i> serde::Serialize for Appearance<'i> { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i, 'de: 'i> serde::Deserialize<'de> for Appearance<'i> { fn deserialize(deserializer: D) -> Result where @@ -399,6 +401,7 @@ impl<'i, 'de: 'i> serde::Deserialize<'de> for Appearance<'i> { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for Appearance<'a> { fn is_referenceable() -> bool { true diff --git a/src/rules/mod.rs b/src/rules/mod.rs index b16dc8cf..add4ff91 100644 --- a/src/rules/mod.rs +++ b/src/rules/mod.rs @@ -180,6 +180,7 @@ pub enum CssRule<'i, R = DefaultAtRule> { // Manually implemented deserialize to reduce binary size. #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'i, 'de: 'i, R: serde::Deserialize<'de>> serde::Deserialize<'de> for CssRule<'i, R> { fn deserialize(deserializer: D) -> Result where @@ -397,6 +398,7 @@ pub struct CssRuleList<'i, R = DefaultAtRule>( // Manually implemented to avoid circular child types. #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, T: Visit<'i, T, V>, V: Visitor<'i, T>> Visit<'i, T, V> for CssRuleList<'i, T> { const CHILD_TYPES: VisitTypes = VisitTypes::all(); diff --git a/src/selector.rs b/src/selector.rs index fb175229..4f1a5261 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -1824,6 +1824,7 @@ pub(crate) fn is_unused( } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, T: Visit<'i, T, V>, V: Visitor<'i, T>> Visit<'i, T, V> for SelectorList<'i> { const CHILD_TYPES: VisitTypes = VisitTypes::SELECTORS; @@ -1843,6 +1844,7 @@ impl<'i, T: Visit<'i, T, V>, V: Visitor<'i, T>> Visit<'i, T, V> for SelectorList } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, T: Visit<'i, T, V>, V: Visitor<'i, T>> Visit<'i, T, V> for Selector<'i> { const CHILD_TYPES: VisitTypes = VisitTypes::SELECTORS; diff --git a/src/stylesheet.rs b/src/stylesheet.rs index 8404624a..7b523bc3 100644 --- a/src/stylesheet.rs +++ b/src/stylesheet.rs @@ -183,6 +183,7 @@ where /// Returns the inline source map associated with the source at the given index. #[cfg(feature = "sourcemap")] + #[cfg_attr(docsrs, doc(cfg(feature = "sourcemap")))] pub fn source_map(&self, source_index: usize) -> Option { SourceMap::from_data_url("/", self.source_map_url(source_index)?).ok() } @@ -278,6 +279,7 @@ where } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, 'o, T, V> Visit<'i, T::AtRule, V> for StyleSheet<'i, 'o, T> where T: AtRuleParser<'i>, diff --git a/src/targets.rs b/src/targets.rs index 7fe1a19d..e68cea09 100644 --- a/src/targets.rs +++ b/src/targets.rs @@ -37,6 +37,7 @@ pub struct Browsers { } #[cfg(feature = "browserslist")] +#[cfg_attr(docsrs, doc(cfg(feature = "browserslist")))] impl Browsers { /// Parses a list of browserslist queries into Lightning CSS targets. pub fn from_browserslist, I: IntoIterator>( diff --git a/src/values/color.rs b/src/values/color.rs index 296303e9..b0d3a18b 100644 --- a/src/values/color.rs +++ b/src/values/color.rs @@ -3224,6 +3224,7 @@ impl HueInterpolationMethod { } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, V: Visitor<'i, T>, T: Visit<'i, T, V>> Visit<'i, T, V> for RGBA { const CHILD_TYPES: VisitTypes = VisitTypes::empty(); fn visit_children(&mut self, _: &mut V) {} diff --git a/src/values/length.rs b/src/values/length.rs index 7479e5cd..15fa6efa 100644 --- a/src/values/length.rs +++ b/src/values/length.rs @@ -281,6 +281,7 @@ macro_rules! define_length_units { impl_try_from_angle!(LengthValue); #[cfg(feature = "jsonschema")] + #[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl schemars::JsonSchema for LengthValue { fn is_referenceable() -> bool { true diff --git a/src/values/string.rs b/src/values/string.rs index f3b7d1c1..39865f10 100644 --- a/src/values/string.rs +++ b/src/values/string.rs @@ -248,6 +248,7 @@ impl<'a> Serialize for CowArcStr<'a> { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'a, 'de: 'a> Deserialize<'de> for CowArcStr<'a> { fn deserialize(deserializer: D) -> Result where @@ -258,6 +259,7 @@ impl<'a, 'de: 'a> Deserialize<'de> for CowArcStr<'a> { } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl<'a> schemars::JsonSchema for CowArcStr<'a> { fn is_referenceable() -> bool { true diff --git a/src/vendor_prefix.rs b/src/vendor_prefix.rs index 93146ea6..5e606bc2 100644 --- a/src/vendor_prefix.rs +++ b/src/vendor_prefix.rs @@ -135,6 +135,7 @@ impl cssparser::ToCss for VendorPrefix { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl serde::Serialize for VendorPrefix { fn serialize(&self, serializer: S) -> Result where @@ -163,6 +164,7 @@ impl serde::Serialize for VendorPrefix { } #[cfg(feature = "serde")] +#[cfg_attr(docsrs, doc(cfg(feature = "serde")))] impl<'de> serde::Deserialize<'de> for VendorPrefix { fn deserialize(deserializer: D) -> Result where @@ -189,12 +191,14 @@ impl<'de> serde::Deserialize<'de> for VendorPrefix { } #[cfg(feature = "visitor")] +#[cfg_attr(docsrs, doc(cfg(feature = "visitor")))] impl<'i, V: Visitor<'i, T>, T: Visit<'i, T, V>> Visit<'i, T, V> for VendorPrefix { const CHILD_TYPES: VisitTypes = VisitTypes::empty(); fn visit_children(&mut self, _: &mut V) {} } #[cfg(feature = "jsonschema")] +#[cfg_attr(docsrs, doc(cfg(feature = "jsonschema")))] impl schemars::JsonSchema for VendorPrefix { fn is_referenceable() -> bool { true