docs: fix the broken intra doc links and check them in CI
Running rustdoc with -D warnings found nine broken links: a misspelt WGS84, links to methods and constants that are private or in a crate that is not a dependency, and three redundant explicit targets. Fix each and add a documentation step to CI so a doc comment cannot drift away from the code it describes without the build noticing.
This commit is contained in:
parent
7531ebacd6
commit
c9d2605385
|
|
@ -37,6 +37,12 @@ jobs:
|
||||||
# meaningful on a quiet machine, but it must still compile so that it
|
# meaningful on a quiet machine, but it must still compile so that it
|
||||||
# does not rot.
|
# does not rot.
|
||||||
run: cargo build -p apsis-rs --features full --example bench
|
run: cargo build -p apsis-rs --features full --example bench
|
||||||
|
- name: Documentation
|
||||||
|
# Catches a doc link that no longer resolves, which is how a doc
|
||||||
|
# comment drifts away from the code it describes.
|
||||||
|
env:
|
||||||
|
RUSTDOCFLAGS: -D warnings
|
||||||
|
run: cargo doc --workspace --all-features --no-deps
|
||||||
- name: Check the layer rule
|
- name: Check the layer rule
|
||||||
# README.md states that a crate may only depend on layers to its
|
# README.md states that a crate may only depend on layers to its
|
||||||
# left. Nothing else in the build enforces that, so a reverse
|
# left. Nothing else in the build enforces that, so a reverse
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
//! Each quantity is a newtype over `f64` that carries its unit in the type
|
//! Each quantity is a newtype over `f64` that carries its unit in the type
|
||||||
//! system, so a length cannot be passed where a duration is expected. Units
|
//! system, so a length cannot be passed where a duration is expected. Units
|
||||||
//! of the same dimension convert through
|
//! of the same dimension convert through
|
||||||
//! [`Quantity::to_unit`](apsis_core::Quantity::to_unit), and each unit also
|
//! [`Quantity::to_unit`], and each unit also
|
||||||
//! offers direct conversions for the common cases.
|
//! offers direct conversions for the common cases.
|
||||||
//!
|
//!
|
||||||
//! A newtype implements both [`Unit`] and [`Quantity`], with its own type as
|
//! A newtype implements both [`Unit`] and [`Quantity`], with its own type as
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
//!
|
//!
|
||||||
//! The topology of a satellite network changes as the satellites move, so a
|
//! The topology of a satellite network changes as the satellites move, so a
|
||||||
//! route is only valid over an interval. This crate computes least cost
|
//! route is only valid over an interval. This crate computes least cost
|
||||||
//! routes through a [`Topology`](apsis_topology::Topology) and reports the
|
//! routes through a [`Topology`] and reports the
|
||||||
//! route together with the time it remains valid.
|
//! route together with the time it remains valid.
|
||||||
//!
|
//!
|
||||||
//! Two forms of routing are provided:
|
//! Two forms of routing are provided:
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
//! two-body theory, or read from a file all work the same way.
|
//! two-body theory, or read from a file all work the same way.
|
||||||
//! - [`Sampler`] fills a table by calling a function that produces a state
|
//! - [`Sampler`] fills a table by calling a function that produces a state
|
||||||
//! from a time. In this workspace that function is normally
|
//! from a time. In this workspace that function is normally
|
||||||
//! [`apsis_sgp4::Satellite::propagate_at`], but the sampler only requires
|
//! `apsis_sgp4::Satellite::propagate_at`, but the sampler only requires
|
||||||
//! a closure, so a test can use an analytic function.
|
//! a closure, so a test can use an analytic function.
|
||||||
//!
|
//!
|
||||||
//! Interpolation is Hermite cubic, which uses both the position and the
|
//! Interpolation is Hermite cubic, which uses both the position and the
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ impl Sampler {
|
||||||
///
|
///
|
||||||
/// The function maps a time in seconds to a position and velocity. In
|
/// The function maps a time in seconds to a position and velocity. In
|
||||||
/// this workspace it is normally a closure over
|
/// this workspace it is normally a closure over
|
||||||
/// [`apsis_sgp4::Satellite::propagate_at`], but any function works, so
|
/// `apsis_sgp4::Satellite::propagate_at`, but any function works, so
|
||||||
/// the sampler can be tested against an analytic orbit.
|
/// the sampler can be tested against an analytic orbit.
|
||||||
///
|
///
|
||||||
/// Returns an error when the sampler is not usable or when the function
|
/// Returns an error when the sampler is not usable or when the function
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ pub fn eccentric_from_true(true_anomaly: f64, eccentricity: f64) -> f64 {
|
||||||
/// by Newton's method. The starting guess is the mean anomaly plus a term
|
/// by Newton's method. The starting guess is the mean anomaly plus a term
|
||||||
/// proportional to the eccentricity, which keeps the iteration stable for
|
/// proportional to the eccentricity, which keeps the iteration stable for
|
||||||
/// eccentricities approaching one. The iteration always terminates, and the
|
/// eccentricities approaching one. The iteration always terminates, and the
|
||||||
/// result is the value reached after at most [`MAX_ITERATIONS`] steps.
|
/// result is the value reached after at most a fixed number of steps.
|
||||||
pub fn eccentric_from_mean(mean_anomaly: f64, eccentricity: f64) -> f64 {
|
pub fn eccentric_from_mean(mean_anomaly: f64, eccentricity: f64) -> f64 {
|
||||||
let mean = wrap_to_pi(mean_anomaly);
|
let mean = wrap_to_pi(mean_anomaly);
|
||||||
// A first order correction to the circular guess.
|
// A first order correction to the circular guess.
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ pub(crate) fn rotation_x(angle: f64) -> Mat3 {
|
||||||
|
|
||||||
/// Returns a rotation of `angle` about the second axis, in radians.
|
/// Returns a rotation of `angle` about the second axis, in radians.
|
||||||
///
|
///
|
||||||
/// The convention is the one of [`rotation_x`].
|
/// The sign convention matches the other axis rotations in this module.
|
||||||
fn rotation_y(angle: f64) -> Mat3 {
|
fn rotation_y(angle: f64) -> Mat3 {
|
||||||
let (sine, cosine) = angle.sin_cos();
|
let (sine, cosine) = angle.sin_cos();
|
||||||
Mat3::from_rows([cosine, 0.0, -sine], [0.0, 1.0, 0.0], [sine, 0.0, cosine])
|
Mat3::from_rows([cosine, 0.0, -sine], [0.0, 1.0, 0.0], [sine, 0.0, cosine])
|
||||||
|
|
@ -173,7 +173,7 @@ fn rotation_y(angle: f64) -> Mat3 {
|
||||||
|
|
||||||
/// Returns a rotation of `angle` about the third axis, in radians.
|
/// Returns a rotation of `angle` about the third axis, in radians.
|
||||||
///
|
///
|
||||||
/// The convention is the one of [`rotation_x`].
|
/// The sign convention matches the other axis rotations in this module.
|
||||||
pub fn rotation_z(angle: f64) -> Mat3 {
|
pub fn rotation_z(angle: f64) -> Mat3 {
|
||||||
let (sine, cosine) = angle.sin_cos();
|
let (sine, cosine) = angle.sin_cos();
|
||||||
Mat3::from_rows([cosine, sine, 0.0], [-sine, cosine, 0.0], [0.0, 0.0, 1.0])
|
Mat3::from_rows([cosine, sine, 0.0], [-sine, cosine, 0.0], [0.0, 0.0, 1.0])
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
//! differ by up to about 0.19 degrees at mid latitudes, so the distinction
|
//! differ by up to about 0.19 degrees at mid latitudes, so the distinction
|
||||||
//! matters for pointing and ranging.
|
//! matters for pointing and ranging.
|
||||||
//!
|
//!
|
||||||
//! [`Wgs84`] is the ellipsoid used by GPS and by almost all satellite work.
|
//! [`WGS84`] is the ellipsoid used by GPS and by almost all satellite work.
|
||||||
//! Its defining parameters are the semi-major axis and the inverse
|
//! Its defining parameters are the semi-major axis and the inverse
|
||||||
//! flattening; every other quantity is derived from those two, so the
|
//! flattening; every other quantity is derived from those two, so the
|
||||||
//! derived values agree with the ones published in the standard to the
|
//! derived values agree with the ones published in the standard to the
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
//! uniformly illuminated circular aperture it is about minus 17.6 dB.
|
//! uniformly illuminated circular aperture it is about minus 17.6 dB.
|
||||||
//!
|
//!
|
||||||
//! Every function here takes or returns angles in radians and gains as
|
//! Every function here takes or returns angles in radians and gains as
|
||||||
//! [`Gain`], so a result can be fed straight into a link budget.
|
//! [`apsis_rf::Gain`], so a result can be fed straight into a link budget.
|
||||||
//!
|
//!
|
||||||
//! Sources:
|
//! Sources:
|
||||||
//!
|
//!
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
//! implementation meaningful.
|
//! implementation meaningful.
|
||||||
//!
|
//!
|
||||||
//! The engine stops for one of four reasons, reported as a
|
//! The engine stops for one of four reasons, reported as a
|
||||||
//! [`StopReason`](crate::StopReason):
|
//! [`StopReason`]:
|
||||||
//! the queue empties, the simulation reaches its time limit, the caller asks
|
//! the queue empties, the simulation reaches its time limit, the caller asks
|
||||||
//! it to stop, or an event limit is reached. The last two exist so that a
|
//! it to stop, or an event limit is reached. The last two exist so that a
|
||||||
//! model that schedules events forever cannot run without bound.
|
//! model that schedules events forever cannot run without bound.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue