Inverse missing_docs logic (#11676)

# Objective

Currently the `missing_docs` lint is allowed-by-default and enabled at
crate level when their documentations is complete (see #3492).
This PR proposes to inverse this logic by making `missing_docs`
warn-by-default and mark crates with imcomplete docs allowed.

## Solution

Makes `missing_docs` warn at workspace level and allowed at crate level
when the docs is imcomplete.
This commit is contained in:
Tristan Guichaoua 2024-02-03 22:40:55 +01:00 committed by GitHub
parent 55493a823e
commit 694c06f3d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
85 changed files with 149 additions and 123 deletions

View file

@ -42,6 +42,7 @@ map_flatten = "warn"
[workspace.lints.rust] [workspace.lints.rust]
unsafe_op_in_unsafe_fn = "warn" unsafe_op_in_unsafe_fn = "warn"
missing_docs = "warn"
[lints] [lints]
workspace = true workspace = true

View file

@ -1,6 +1,5 @@
//! Accessibility for Bevy //! Accessibility for Bevy
#![warn(missing_docs)]
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
use std::sync::{ use std::sync::{

View file

@ -1,7 +1,5 @@
//! Animation for the game engine Bevy //! Animation for the game engine Bevy
#![warn(missing_docs)]
mod animatable; mod animatable;
mod util; mod util;

View file

@ -1,7 +1,5 @@
//! This crate is about everything concerning the highest-level, application layer of a Bevy app. //! This crate is about everything concerning the highest-level, application layer of a Bevy app.
#![warn(missing_docs)]
mod app; mod app;
mod main_schedule; mod main_schedule;
mod plugin; mod plugin;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
use bevy_macro_utils::BevyManifest; use bevy_macro_utils::BevyManifest;
use proc_macro::{Span, TokenStream}; use proc_macro::{Span, TokenStream};
use quote::{format_ident, quote}; use quote::{format_ident, quote};

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
pub mod io; pub mod io;
pub mod meta; pub mod meta;
pub mod processor; pub mod processor;

View file

@ -21,7 +21,6 @@
//! ``` //! ```
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
#![warn(missing_docs)]
mod audio; mod audio;
mod audio_output; mod audio_output;

View file

@ -1,5 +1,3 @@
#![warn(missing_docs)]
//! This crate provides core functionality for Bevy Engine. //! This crate provides core functionality for Bevy Engine.
mod name; mod name;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
pub mod blit; pub mod blit;
pub mod bloom; pub mod bloom;
pub mod contrast_adaptive_sharpening; pub mod contrast_adaptive_sharpening;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
extern crate proc_macro; extern crate proc_macro;
mod app_plugin; mod app_plugin;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
//! This crate provides a straightforward solution for integrating diagnostics in the [Bevy game engine](https://bevyengine.org/). //! This crate provides a straightforward solution for integrating diagnostics in the [Bevy game engine](https://bevyengine.org/).
//! It allows users to easily add diagnostic functionality to their Bevy applications, enhancing //! It allows users to easily add diagnostic functionality to their Bevy applications, enhancing
//! their ability to monitor and optimize their game's. //! their ability to monitor and optimize their game's.

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
#![allow(clippy::single_component_path_imports)] #![allow(clippy::single_component_path_imports)]
//! Forces dynamic linking of Bevy. //! Forces dynamic linking of Bevy.

View file

@ -1,5 +1,7 @@
// FIXME(11590): remove this once the lint is fixed // FIXME(11590): remove this once the lint is fixed
#![allow(unsafe_op_in_unsafe_fn)] #![allow(unsafe_op_in_unsafe_fn)]
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
mod loader; mod loader;

View file

@ -1,14 +1,15 @@
//! In this example we will simulate a population of entities. In every tick we will:
//! 1. spawn a new entity with a certain possibility
//! 2. age all entities
//! 3. despawn entities with age > 2
//!
//! To demonstrate change detection, there are some console outputs based on changes in
//! the `EntityCounter` resource and updated Age components
use bevy_ecs::prelude::*; use bevy_ecs::prelude::*;
use rand::Rng; use rand::Rng;
use std::ops::Deref; use std::ops::Deref;
// In this example we will simulate a population of entities. In every tick we will:
// 1. spawn a new entity with a certain possibility
// 2. age all entities
// 3. despawn entities with age > 2
//
// To demonstrate change detection, there are some console outputs based on changes in
// the EntityCounter resource and updated Age components
fn main() { fn main() {
// Create a new empty World to hold our Entities, Components and Resources // Create a new empty World to hold our Entities, Components and Resources
let mut world = World::new(); let mut world = World::new();

View file

@ -1,7 +1,8 @@
//! In this example a system sends a custom event with a 50/50 chance during any frame.
//! If an event was send, it will be printed by the console in a receiving system.
use bevy_ecs::prelude::*; use bevy_ecs::prelude::*;
// In this example a system sends a custom event with a 50/50 chance during any frame.
// If an event was send, it will be printed by the console in a receiving system.
fn main() { fn main() {
// Create a new empty world and add the event as a resource // Create a new empty world and add the event as a resource
let mut world = World::new(); let mut world = World::new();

View file

@ -1,9 +1,10 @@
//! In this example we add a counter resource and increase it's value in one system,
//! while a different system prints the current count to the console.
use bevy_ecs::prelude::*; use bevy_ecs::prelude::*;
use rand::Rng; use rand::Rng;
use std::ops::Deref; use std::ops::Deref;
// In this example we add a counter resource and increase it's value in one system,
// while a different system prints the current count to the console.
fn main() { fn main() {
// Create a world // Create a world
let mut world = World::new(); let mut world = World::new();

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
extern crate proc_macro; extern crate proc_macro;
mod component; mod component;

View file

@ -1,6 +1,5 @@
// FIXME(11590): remove this once the lint is fixed // FIXME(11590): remove this once the lint is fixed
#![allow(unsafe_op_in_unsafe_fn)] #![allow(unsafe_op_in_unsafe_fn)]
#![warn(missing_docs)]
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
#[cfg(target_pointer_width = "16")] #[cfg(target_pointer_width = "16")]

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
use bevy_macro_utils::BevyManifest; use bevy_macro_utils::BevyManifest;
use encase_derive_impl::{implement, syn}; use encase_derive_impl::{implement, syn};

View file

@ -3,8 +3,6 @@
//! This crate is built on top of [GilRs](gilrs), a library //! This crate is built on top of [GilRs](gilrs), a library
//! that handles abstracting over platform-specific gamepad APIs. //! that handles abstracting over platform-specific gamepad APIs.
#![warn(missing_docs)]
mod converter; mod converter;
mod gilrs_system; mod gilrs_system;
mod rumble; mod rumble;

View file

@ -1,5 +1,3 @@
#![warn(missing_docs)]
//! This crate adds an immediate mode drawing api to Bevy for visual debugging. //! This crate adds an immediate mode drawing api to Bevy for visual debugging.
//! //!
//! # Example //! # Example
@ -79,7 +77,7 @@ use bevy_render::{
renderer::RenderDevice, renderer::RenderDevice,
Extract, ExtractSchedule, Render, RenderApp, RenderSet, Extract, ExtractSchedule, Render, RenderApp, RenderSet,
}; };
use bevy_utils::{tracing::warn, HashMap}; use bevy_utils::HashMap;
use config::{ use config::{
DefaultGizmoConfigGroup, GizmoConfig, GizmoConfigGroup, GizmoConfigStore, GizmoMeshConfig, DefaultGizmoConfigGroup, GizmoConfig, GizmoConfigGroup, GizmoConfigStore, GizmoMeshConfig,
}; };

View file

@ -3,8 +3,6 @@
//! //!
//! The [glTF 2.0 specification](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html) defines the format of the glTF files. //! The [glTF 2.0 specification](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html) defines the format of the glTF files.
#![warn(missing_docs)]
#[cfg(feature = "bevy_animation")] #[cfg(feature = "bevy_animation")]
use bevy_animation::AnimationClip; use bevy_animation::AnimationClip;
use bevy_utils::HashMap; use bevy_utils::HashMap;

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
//! Parent-child relationships for Bevy entities. //! Parent-child relationships for Bevy entities.
//! //!
//! You should use the tools in this crate //! You should use the tools in this crate

View file

@ -1,5 +1,3 @@
#![warn(missing_docs)]
//! Input functionality for the [Bevy game engine](https://bevyengine.org/). //! Input functionality for the [Bevy game engine](https://bevyengine.org/).
//! //!
//! # Supported input devices //! # Supported input devices

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
//! This module is separated into its own crate to enable simple dynamic linking for Bevy, and should not be used directly //! This module is separated into its own crate to enable simple dynamic linking for Bevy, and should not be used directly
/// `use bevy::prelude::*;` to import common components, bundles, and plugins. /// `use bevy::prelude::*;` to import common components, bundles, and plugins.

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
//! This crate provides logging functions and configuration for [Bevy](https://bevyengine.org) //! This crate provides logging functions and configuration for [Bevy](https://bevyengine.org)
//! apps, and automatically configures platform specific log handlers (i.e. WASM or Android). //! apps, and automatically configures platform specific log handlers (i.e. WASM or Android).
//! //!

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
#![deny(unsafe_code)] #![deny(unsafe_code)]
//! A collection of helper types and functions for working on macros within the Bevy ecosystem. //! A collection of helper types and functions for working on macros within the Bevy ecosystem.

View file

@ -4,8 +4,6 @@
//! matrices like [`Mat2`], [`Mat3`] and [`Mat4`] and orientation representations //! matrices like [`Mat2`], [`Mat3`] and [`Mat4`] and orientation representations
//! like [`Quat`]. //! like [`Quat`].
#![warn(missing_docs)]
mod affine3; mod affine3;
mod aspect_ratio; mod aspect_ratio;
pub mod bounding; pub mod bounding;

View file

@ -1,8 +1,10 @@
//! This example demonstrates how to generate a mesh.
#![allow(clippy::bool_assert_comparison, clippy::useless_conversion)] #![allow(clippy::bool_assert_comparison, clippy::useless_conversion)]
use glam::{Vec2, Vec3}; use glam::{Vec2, Vec3};
pub type Face = [u32; 3]; type Face = [u32; 3];
#[derive(Debug)] #[derive(Debug)]
struct Vertex { struct Vertex {

View file

@ -3,6 +3,8 @@
clippy::all, clippy::all,
clippy::undocumented_unsafe_blocks clippy::undocumented_unsafe_blocks
)] )]
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
use glam::{Vec2, Vec3}; use glam::{Vec2, Vec3};

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
pub mod wireframe; pub mod wireframe;
mod alpha; mod alpha;

View file

@ -1,6 +1,5 @@
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
#![no_std] #![no_std]
#![warn(missing_docs)]
use core::fmt::{self, Formatter, Pointer}; use core::fmt::{self, Formatter, Pointer};
use core::{ use core::{

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
//! Reflection in Rust. //! Reflection in Rust.
//! //!
//! [Reflection] is a powerful tool provided within many programming languages //! [Reflection] is a powerful tool provided within many programming languages

View file

@ -1,5 +1,3 @@
#![warn(missing_docs)]
pub mod access; pub mod access;
pub use access::*; pub use access::*;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
mod as_bind_group; mod as_bind_group;
mod extract_component; mod extract_component;
mod extract_resource; mod extract_resource;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
#[cfg(target_pointer_width = "16")] #[cfg(target_pointer_width = "16")]
compile_error!("bevy_render cannot compile for a 16-bit platform."); compile_error!("bevy_render cannot compile for a 16-bit platform.");

View file

@ -19,8 +19,6 @@
//! # } //! # }
//! ``` //! ```
#![warn(missing_docs)]
mod dim2; mod dim2;
pub use dim2::{CircleMeshBuilder, EllipseMeshBuilder}; pub use dim2::{CircleMeshBuilder, EllipseMeshBuilder};

View file

@ -4,8 +4,6 @@
//! instantiated or removed from a world to allow composition. Scenes can be serialized/deserialized, //! instantiated or removed from a world to allow composition. Scenes can be serialized/deserialized,
//! for example to save part of the world state to a file. //! for example to save part of the world state to a file.
#![warn(missing_docs)]
mod bundle; mod bundle;
mod dynamic_scene; mod dynamic_scene;
mod dynamic_scene_builder; mod dynamic_scene_builder;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
//! Provides 2D sprite rendering functionality. //! Provides 2D sprite rendering functionality.
mod bundle; mod bundle;
mod dynamic_texture_atlas_builder; mod dynamic_texture_atlas_builder;

View file

@ -1,10 +1,10 @@
//! This sample demonstrates creating a thread pool with 4 tasks and spawning 40 tasks that spin
//! for 100ms. It's expected to take about a second to run (assuming the machine has >= 4 logical
//! cores)
use bevy_tasks::TaskPoolBuilder; use bevy_tasks::TaskPoolBuilder;
use web_time::{Duration, Instant}; use web_time::{Duration, Instant};
// This sample demonstrates creating a thread pool with 4 tasks and spawning 40 tasks that spin
// for 100ms. It's expected to take about a second to run (assuming the machine has >= 4 logical
// cores)
fn main() { fn main() {
let pool = TaskPoolBuilder::new() let pool = TaskPoolBuilder::new()
.thread_name("Busy Behavior ThreadPool".to_string()) .thread_name("Busy Behavior ThreadPool".to_string())

View file

@ -1,10 +1,10 @@
//! This sample demonstrates a thread pool with one thread per logical core and only one task
//! spinning. Other than the one thread, the system should remain idle, demonstrating good behavior
//! for small workloads.
use bevy_tasks::TaskPoolBuilder; use bevy_tasks::TaskPoolBuilder;
use web_time::{Duration, Instant}; use web_time::{Duration, Instant};
// This sample demonstrates a thread pool with one thread per logical core and only one task
// spinning. Other than the one thread, the system should remain idle, demonstrating good behavior
// for small workloads.
fn main() { fn main() {
let pool = TaskPoolBuilder::new() let pool = TaskPoolBuilder::new()
.thread_name("Idle Behavior ThreadPool".to_string()) .thread_name("Idle Behavior ThreadPool".to_string())

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
mod slice; mod slice;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
mod error; mod error;
mod font; mod font;
mod font_atlas; mod font_atlas;

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
/// Common run conditions /// Common run conditions

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
pub mod commands; pub mod commands;

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
//! This crate contains Bevy's UI system, which can be used to create UI for both 2D and 3D games //! This crate contains Bevy's UI system, which can be used to create UI for both 2D and 3D games
//! # Basic usage //! # Basic usage
//! Spawn UI elements with [`node_bundles::ButtonBundle`], [`node_bundles::ImageBundle`], [`node_bundles::TextBundle`] and [`node_bundles::NodeBundle`] //! Spawn UI elements with [`node_bundles::ButtonBundle`], [`node_bundles::ImageBundle`], [`node_bundles::TextBundle`] and [`node_bundles::NodeBundle`]

View file

@ -1,3 +1,6 @@
// FIXME(3492): remove once docs are ready
#![allow(missing_docs)]
use proc_macro::TokenStream; use proc_macro::TokenStream;
use quote::{format_ident, quote}; use quote::{format_ident, quote};
use syn::{ use syn::{

View file

@ -3,8 +3,6 @@
//! [Bevy]: https://bevyengine.org/ //! [Bevy]: https://bevyengine.org/
//! //!
#![warn(missing_docs)]
#[allow(missing_docs)] #[allow(missing_docs)]
pub mod prelude { pub mod prelude {
pub use crate::default; pub use crate::default;

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
//! `bevy_window` provides a platform-agnostic interface for windowing in Bevy. //! `bevy_window` provides a platform-agnostic interface for windowing in Bevy.
//! //!
//! This crate contains types for window management and events, //! This crate contains types for window management and events,

View file

@ -1,4 +1,3 @@
#![warn(missing_docs)]
//! `bevy_winit` provides utilities to handle window creation and the eventloop through [`winit`] //! `bevy_winit` provides utilities to handle window creation and the eventloop through [`winit`]
//! //!
//! Most commonly, the [`WinitPlugin`] is used as part of //! Most commonly, the [`WinitPlugin`] is used as part of

View file

@ -1,5 +1,3 @@
#![warn(missing_docs)]
use accesskit_winit::Adapter; use accesskit_winit::Adapter;
use bevy_a11y::{ use bevy_a11y::{
accesskit::{NodeBuilder, NodeClassSet, NodeId, Role, Tree, TreeUpdate}, accesskit::{NodeBuilder, NodeClassSet, NodeId, Role, Tree, TreeUpdate},

View file

@ -25,7 +25,7 @@ fn main() {
struct MyRoundGizmos {} struct MyRoundGizmos {}
#[derive(Debug, Clone, Resource)] #[derive(Debug, Clone, Resource)]
pub struct PrimitiveSegments(usize); struct PrimitiveSegments(usize);
impl Default for PrimitiveSegments { impl Default for PrimitiveSegments {
fn default() -> Self { fn default() -> Self {
Self(10) Self(10)

View file

@ -1,6 +1,7 @@
// ! This example demonstrates how to create a custom mesh, //! This example demonstrates how to create a custom mesh,
// ! assign a custom UV mapping for a custom texture, //! assign a custom UV mapping for a custom texture,
// ! and how to change the UV mapping at run-time. //! and how to change the UV mapping at run-time.
use bevy::prelude::*; use bevy::prelude::*;
use bevy::render::{ use bevy::render::{
mesh::{Indices, VertexAttributeValues}, mesh::{Indices, VertexAttributeValues},

View file

@ -87,8 +87,8 @@ impl Material for LineMaterial {
/// A list of lines with a start and end position /// A list of lines with a start and end position
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct LineList { struct LineList {
pub lines: Vec<(Vec3, Vec3)>, lines: Vec<(Vec3, Vec3)>,
} }
impl From<LineList> for Mesh { impl From<LineList> for Mesh {
@ -108,8 +108,8 @@ impl From<LineList> for Mesh {
/// A list of points that will have a line drawn between each consecutive points /// A list of points that will have a line drawn between each consecutive points
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct LineStrip { struct LineStrip {
pub points: Vec<Vec3>, points: Vec<Vec3>,
} }
impl From<LineStrip> for Mesh { impl From<LineStrip> for Mesh {

View file

@ -1,3 +1,5 @@
//! Illustrates spot lights.
use std::f32::consts::*; use std::f32::consts::*;
use bevy::{ use bevy::{

View file

@ -704,7 +704,7 @@ impl Material for ColorGradientMaterial {
} }
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct ColorGradientMaterial {} struct ColorGradientMaterial {}
#[derive(Resource)] #[derive(Resource)]
struct CameraTransform(Transform); struct CameraTransform(Transform);

View file

@ -6,7 +6,7 @@ use bevy::{
}; };
#[derive(Component)] #[derive(Component)]
pub struct Curve(CubicCurve<Vec3>); struct Curve(CubicCurve<Vec3>);
fn main() { fn main() {
App::new() App::new()
@ -72,11 +72,7 @@ fn setup(
}); });
} }
pub fn animate_cube( fn animate_cube(time: Res<Time>, mut query: Query<(&mut Transform, &Curve)>, mut gizmos: Gizmos) {
time: Res<Time>,
mut query: Query<(&mut Transform, &Curve)>,
mut gizmos: Gizmos,
) {
let t = (time.elapsed_seconds().sin() + 1.) / 2.; let t = (time.elapsed_seconds().sin() + 1.) / 2.;
for (mut transform, cubic_curve) in &mut query { for (mut transform, cubic_curve) in &mut query {

View file

@ -20,7 +20,7 @@ fn main() {
} }
// This "print message plugin" prints a `message` every `wait_duration` // This "print message plugin" prints a `message` every `wait_duration`
pub struct PrintMessagePlugin { struct PrintMessagePlugin {
// Put your plugin configuration here // Put your plugin configuration here
wait_duration: Duration, wait_duration: Duration,
message: String, message: String,

View file

@ -34,7 +34,7 @@ impl PluginGroup for HelloWorldPlugins {
} }
} }
pub struct PrintHelloPlugin; struct PrintHelloPlugin;
impl Plugin for PrintHelloPlugin { impl Plugin for PrintHelloPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
@ -46,7 +46,7 @@ fn print_hello_system() {
info!("hello"); info!("hello");
} }
pub struct PrintWorldPlugin; struct PrintWorldPlugin;
impl Plugin for PrintWorldPlugin { impl Plugin for PrintWorldPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {

View file

@ -16,12 +16,12 @@ use std::marker::PhantomData;
use thiserror::Error; use thiserror::Error;
#[derive(Asset, TypePath)] #[derive(Asset, TypePath)]
pub struct GzAsset { struct GzAsset {
pub uncompressed: ErasedLoadedAsset, uncompressed: ErasedLoadedAsset,
} }
#[derive(Default)] #[derive(Default)]
pub struct GzAssetLoader; struct GzAssetLoader;
/// Possible errors that can be produced by [`GzAssetLoader`] /// Possible errors that can be produced by [`GzAssetLoader`]
#[non_exhaustive] #[non_exhaustive]

View file

@ -11,12 +11,13 @@ use serde::Deserialize;
use thiserror::Error; use thiserror::Error;
#[derive(Asset, TypePath, Debug, Deserialize)] #[derive(Asset, TypePath, Debug, Deserialize)]
pub struct CustomAsset { struct CustomAsset {
pub value: i32, #[allow(dead_code)]
value: i32,
} }
#[derive(Default)] #[derive(Default)]
pub struct CustomAssetLoader; struct CustomAssetLoader;
/// Possible errors that can be produced by [`CustomAssetLoader`] /// Possible errors that can be produced by [`CustomAssetLoader`]
#[non_exhaustive] #[non_exhaustive]
@ -54,12 +55,12 @@ impl AssetLoader for CustomAssetLoader {
} }
#[derive(Asset, TypePath, Debug)] #[derive(Asset, TypePath, Debug)]
pub struct Blob { struct Blob {
pub bytes: Vec<u8>, bytes: Vec<u8>,
} }
#[derive(Default)] #[derive(Default)]
pub struct BlobAssetLoader; struct BlobAssetLoader;
/// Possible errors that can be produced by [`CustomAssetLoader`] /// Possible errors that can be produced by [`CustomAssetLoader`]
#[non_exhaustive] #[non_exhaustive]

View file

@ -107,14 +107,14 @@ impl AssetLoader for TextLoader {
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct CoolTextRon { struct CoolTextRon {
text: String, text: String,
dependencies: Vec<String>, dependencies: Vec<String>,
embedded_dependencies: Vec<String>, embedded_dependencies: Vec<String>,
} }
#[derive(Asset, TypePath, Debug)] #[derive(Asset, TypePath, Debug)]
pub struct CoolText { struct CoolText {
text: String, text: String,
#[allow(unused)] #[allow(unused)]
dependencies: Vec<Handle<Text>>, dependencies: Vec<Handle<Text>>,
@ -174,7 +174,7 @@ impl AssetLoader for CoolTextLoader {
struct CoolTextTransformer; struct CoolTextTransformer;
#[derive(Default, Serialize, Deserialize)] #[derive(Default, Serialize, Deserialize)]
pub struct CoolTextTransformerSettings { struct CoolTextTransformerSettings {
appended: String, appended: String,
} }

View file

@ -22,8 +22,7 @@ fn main() {
} }
// All diagnostics should have a unique DiagnosticPath. // All diagnostics should have a unique DiagnosticPath.
pub const SYSTEM_ITERATION_COUNT: DiagnosticPath = const SYSTEM_ITERATION_COUNT: DiagnosticPath = DiagnosticPath::const_new("system_iteration_count");
DiagnosticPath::const_new("system_iteration_count");
fn my_system(mut diagnostics: Diagnostics) { fn my_system(mut diagnostics: Diagnostics) {
// Add a measurement of 10.0 for our diagnostic each time this system runs. // Add a measurement of 10.0 for our diagnostic each time this system runs.

View file

@ -11,10 +11,10 @@ fn main() {
} }
#[derive(Component)] #[derive(Component)]
pub struct Player; struct Player;
#[derive(Resource)] #[derive(Resource)]
pub struct PlayerCount(usize); struct PlayerCount(usize);
/// The [`SystemParam`] struct can contain any types that can also be included in a /// The [`SystemParam`] struct can contain any types that can also be included in a
/// system function signature. /// system function signature.

View file

@ -1,3 +1,5 @@
//! Demonstrate stepping through systems in order of execution.
use bevy::{ecs::schedule::Stepping, log::LogPlugin, prelude::*}; use bevy::{ecs::schedule::Stepping, log::LogPlugin, prelude::*};
fn main() { fn main() {

View file

@ -1,3 +1,5 @@
//! A minimal example that outputs "hello world"
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {

View file

@ -1,3 +1,5 @@
//! A 3d Scene with a button and playing sound.
use bevy::{ use bevy::{
input::touch::TouchPhase, input::touch::TouchPhase,
prelude::*, prelude::*,

View file

@ -49,7 +49,7 @@ pub struct Bar {
} }
#[derive(Default)] #[derive(Default)]
pub struct NonReflectedValue { struct NonReflectedValue {
_a: usize, _a: usize,
} }

View file

@ -34,7 +34,7 @@ pub struct C(usize);
/// Deriving reflect on an enum will implement the `Reflect` and `Enum` traits /// Deriving reflect on an enum will implement the `Reflect` and `Enum` traits
#[derive(Reflect)] #[derive(Reflect)]
pub enum D { enum D {
A, A,
B(usize), B(usize),
C { value: f32 }, C { value: f32 },
@ -57,7 +57,7 @@ pub struct E {
/// that these values behave as expected when nested underneath Reflect-ed structs. /// that these values behave as expected when nested underneath Reflect-ed structs.
#[derive(Reflect, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Reflect, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[reflect_value(PartialEq, Serialize, Deserialize)] #[reflect_value(PartialEq, Serialize, Deserialize)]
pub enum F { enum F {
X, X,
Y, Y,
} }

View file

@ -23,7 +23,7 @@ impl DoThing for MyType {
} }
#[reflect_trait] #[reflect_trait]
pub trait DoThing { trait DoThing {
fn do_thing(&self) -> String; fn do_thing(&self) -> String;
} }

View file

@ -1,3 +1,6 @@
//! This example illustrates how to create a texture for use with a `texture_2d_array<f32>` shader
//! uniform variable.
use bevy::{ use bevy::{
asset::LoadState, asset::LoadState,
prelude::*, prelude::*,
@ -5,8 +8,6 @@ use bevy::{
render::render_resource::{AsBindGroup, ShaderRef}, render::render_resource::{AsBindGroup, ShaderRef},
}; };
/// This example illustrates how to create a texture for use with a `texture_2d_array<f32>` shader
/// uniform variable.
fn main() { fn main() {
App::new() App::new()
.add_plugins(( .add_plugins((

View file

@ -68,10 +68,10 @@ fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
commands.insert_resource(GameOfLifeImage { texture: image }); commands.insert_resource(GameOfLifeImage { texture: image });
} }
pub struct GameOfLifeComputePlugin; struct GameOfLifeComputePlugin;
#[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)] #[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)]
pub struct GameOfLifeLabel; struct GameOfLifeLabel;
impl Plugin for GameOfLifeComputePlugin { impl Plugin for GameOfLifeComputePlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
@ -121,7 +121,7 @@ fn prepare_bind_group(
} }
#[derive(Resource)] #[derive(Resource)]
pub struct GameOfLifePipeline { struct GameOfLifePipeline {
texture_bind_group_layout: BindGroupLayout, texture_bind_group_layout: BindGroupLayout,
init_pipeline: CachedComputePipelineId, init_pipeline: CachedComputePipelineId,
update_pipeline: CachedComputePipelineId, update_pipeline: CachedComputePipelineId,

View file

@ -58,7 +58,7 @@ fn setup(
// This is the struct that will be passed to your shader // This is the struct that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
} }

View file

@ -107,7 +107,7 @@ impl Plugin for PostProcessPlugin {
} }
#[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)] #[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)]
pub struct PostProcessLabel; struct PostProcessLabel;
// The post process node used for the render graph // The post process node used for the render graph
#[derive(Default)] #[derive(Default)]

View file

@ -76,7 +76,7 @@ impl Material for CustomMaterial {
// This is the struct that will be passed to your shader // This is the struct that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
#[bind_group_data(CustomMaterialKey)] #[bind_group_data(CustomMaterialKey)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
is_red: bool, is_red: bool,
@ -87,7 +87,7 @@ pub struct CustomMaterial {
// Specialization keys should be kept as small / cheap to hash as possible, // Specialization keys should be kept as small / cheap to hash as possible,
// as they will be used to look up the pipeline for each drawn entity with this material type. // as they will be used to look up the pipeline for each drawn entity with this material type.
#[derive(Eq, PartialEq, Hash, Clone)] #[derive(Eq, PartialEq, Hash, Clone)]
pub struct CustomMaterialKey { struct CustomMaterialKey {
is_red: bool, is_red: bool,
} }

View file

@ -77,7 +77,7 @@ impl ExtractComponent for InstanceMaterialData {
} }
} }
pub struct CustomMaterialPlugin; struct CustomMaterialPlugin;
impl Plugin for CustomMaterialPlugin { impl Plugin for CustomMaterialPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
@ -151,7 +151,7 @@ fn queue_custom(
} }
#[derive(Component)] #[derive(Component)]
pub struct InstanceBuffer { struct InstanceBuffer {
buffer: Buffer, buffer: Buffer,
length: usize, length: usize,
} }
@ -175,7 +175,7 @@ fn prepare_instance_buffers(
} }
#[derive(Resource)] #[derive(Resource)]
pub struct CustomPipeline { struct CustomPipeline {
shader: Handle<Shader>, shader: Handle<Shader>,
mesh_pipeline: MeshPipeline, mesh_pipeline: MeshPipeline,
} }
@ -233,7 +233,7 @@ type DrawCustom = (
DrawMeshInstanced, DrawMeshInstanced,
); );
pub struct DrawMeshInstanced; struct DrawMeshInstanced;
impl<P: PhaseItem> RenderCommand<P> for DrawMeshInstanced { impl<P: PhaseItem> RenderCommand<P> for DrawMeshInstanced {
type Param = (SRes<RenderAssets<Mesh>>, SRes<RenderMeshInstances>); type Param = (SRes<RenderAssets<Mesh>>, SRes<RenderMeshInstances>);

View file

@ -41,7 +41,7 @@ fn setup(
// This struct defines the data that will be passed to your shader // This struct defines the data that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
#[texture(1)] #[texture(1)]

View file

@ -41,7 +41,7 @@ fn setup(
// This is the struct that will be passed to your shader // This is the struct that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
#[texture(1)] #[texture(1)]

View file

@ -47,7 +47,7 @@ fn setup(
// This is the struct that will be passed to your shader // This is the struct that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Clone)] #[derive(Asset, TypePath, AsBindGroup, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
#[texture(1)] #[texture(1)]

View file

@ -70,7 +70,7 @@ fn rotate_camera(mut camera: Query<&mut Transform, With<MainCamera>>, time: Res<
} }
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[texture(0)] #[texture(0)]
#[sampler(1)] #[sampler(1)]
texture: Handle<Image>, texture: Handle<Image>,

View file

@ -157,7 +157,7 @@ fn setup(
// This is the struct that will be passed to your shader // This is the struct that will be passed to your shader
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct CustomMaterial { struct CustomMaterial {
#[uniform(0)] #[uniform(0)]
color: Color, color: Color,
#[texture(1)] #[texture(1)]
@ -205,7 +205,7 @@ struct ShowPrepassSettings {
// This shader simply loads the prepass texture and outputs it directly // This shader simply loads the prepass texture and outputs it directly
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] #[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct PrepassOutputMaterial { struct PrepassOutputMaterial {
#[uniform(0)] #[uniform(0)]
settings: ShowPrepassSettings, settings: ShowPrepassSettings,
} }

View file

@ -1,4 +1,5 @@
/// General UI benchmark that stress tests layouting, text, interaction and rendering //! General UI benchmark that stress tests layouting, text, interaction and rendering
use argh::FromArgs; use argh::FromArgs;
use bevy::{ use bevy::{
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},

View file

@ -1,3 +1,5 @@
//! Test rendering of many gizmos.
use std::f32::consts::TAU; use std::f32::consts::TAU;
use bevy::{ use bevy::{

View file

@ -1,3 +1,5 @@
//! An example that illustrates how Time is handled in ECS.
use bevy::prelude::*; use bevy::prelude::*;
use std::io::{self, BufRead}; use std::io::{self, BufRead};

View file

@ -12,12 +12,12 @@ fn main() {
} }
#[derive(Component, Deref, DerefMut)] #[derive(Component, Deref, DerefMut)]
pub struct PrintOnCompletionTimer(Timer); struct PrintOnCompletionTimer(Timer);
#[derive(Resource)] #[derive(Resource)]
pub struct Countdown { struct Countdown {
pub percent_trigger: Timer, percent_trigger: Timer,
pub main_timer: Timer, main_timer: Timer,
} }
impl Countdown { impl Countdown {