Skip to content

Commit 49c1202

Browse files
committed
docs: Make an attempt
1 parent a34c5f9 commit 49c1202

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

Diff for: src/level.rs

+12
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,41 @@
1+
//! [`Level`] constants for easy importing
2+
13
use crate::renderer::stylesheet::Stylesheet;
24
use crate::snippet::{ERROR_TXT, HELP_TXT, INFO_TXT, NOTE_TXT, WARNING_TXT};
35
use crate::{Element, Group, Message, Title};
46
use anstyle::Style;
57

8+
/// Default `error:` [`Level`]
69
pub const ERROR: Level<'_> = Level {
710
name: None,
811
level: LevelInner::Error,
912
};
1013

14+
/// Default `warning:` [`Level`]
1115
pub const WARNING: Level<'_> = Level {
1216
name: None,
1317
level: LevelInner::Warning,
1418
};
1519

20+
/// Default `info:` [`Level`]
1621
pub const INFO: Level<'_> = Level {
1722
name: None,
1823
level: LevelInner::Info,
1924
};
2025

26+
/// Default `note:` [`Level`]
2127
pub const NOTE: Level<'_> = Level {
2228
name: None,
2329
level: LevelInner::Note,
2430
};
2531

32+
/// Default `help:` [`Level`]
2633
pub const HELP: Level<'_> = Level {
2734
name: None,
2835
level: LevelInner::Help,
2936
};
3037

38+
/// [`Message`] or [`Title`] severity level
3139
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
3240
pub struct Level<'a> {
3341
pub(crate) name: Option<Option<&'a str>>,
@@ -41,9 +49,13 @@ impl<'a> Level<'a> {
4149
pub const NOTE: Level<'a> = NOTE;
4250
pub const HELP: Level<'a> = HELP;
4351

52+
/// <div class="warning">
53+
///
4454
/// Text passed to this function is considered "untrusted input", as such
4555
/// all text is passed through a normalization function. Pre-styled text is
4656
/// not allowed to be passed to this function.
57+
///
58+
/// </div>
4759
pub fn text(self, text: Option<&'a str>) -> Level<'a> {
4860
Level {
4961
name: Some(text),

Diff for: src/snippet.rs

+72
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,27 @@ pub(crate) const INFO_TXT: &str = "info";
1010
pub(crate) const NOTE_TXT: &str = "note";
1111
pub(crate) const WARNING_TXT: &str = "warning";
1212

13+
/// Top-level user message
1314
#[derive(Debug)]
1415
pub struct Message<'a> {
1516
pub(crate) id: Option<&'a str>, // for "correctness", could be sloppy and be on Title
1617
pub(crate) groups: Vec<Group<'a>>,
1718
}
1819

1920
impl<'a> Message<'a> {
21+
/// <div class="warning">
22+
///
23+
/// Text passed to this function is considered "untrusted input", as such
24+
/// all text is passed through a normalization function. Pre-styled text is
25+
/// not allowed to be passed to this function.
26+
///
27+
/// </div>
2028
pub fn id(mut self, id: &'a str) -> Self {
2129
self.id = Some(id);
2230
self
2331
}
2432

33+
/// Add an [`Element`] container
2534
pub fn group(mut self, group: Group<'a>) -> Self {
2635
self.groups.push(group);
2736
self
@@ -66,6 +75,7 @@ impl<'a> Message<'a> {
6675
}
6776
}
6877

78+
/// An [`Element`] container
6979
#[derive(Debug)]
7080
pub struct Group<'a> {
7181
pub(crate) elements: Vec<Element<'a>>,
@@ -97,6 +107,7 @@ impl<'a> Group<'a> {
97107
}
98108
}
99109

110+
/// A section of content within a [`Group`]
100111
#[derive(Debug)]
101112
#[non_exhaustive]
102113
pub enum Element<'a> {
@@ -137,9 +148,13 @@ impl From<Padding> for Element<'_> {
137148
}
138149
}
139150

151+
/// A whitespace [`Element`] in a [`Group`]
140152
#[derive(Debug)]
141153
pub struct Padding;
142154

155+
/// A text [`Element`] in a [`Group`]
156+
///
157+
/// See [`Level::title`] to create this.
143158
#[derive(Debug)]
144159
pub struct Title<'a> {
145160
pub(crate) level: Level<'a>,
@@ -154,6 +169,7 @@ impl Title<'_> {
154169
}
155170
}
156171

172+
/// A source view [`Element`] in a [`Group`]
157173
#[derive(Debug)]
158174
pub struct Snippet<'a, T> {
159175
pub(crate) origin: Option<&'a str>,
@@ -164,9 +180,15 @@ pub struct Snippet<'a, T> {
164180
}
165181

166182
impl<'a, T: Clone> Snippet<'a, T> {
183+
/// The source code to be rendered
184+
///
185+
/// <div class="warning">
186+
///
167187
/// Text passed to this function is considered "untrusted input", as such
168188
/// all text is passed through a normalization function. Pre-styled text is
169189
/// not allowed to be passed to this function.
190+
///
191+
/// </div>
170192
pub fn source(source: &'a str) -> Self {
171193
Self {
172194
origin: None,
@@ -177,49 +199,65 @@ impl<'a, T: Clone> Snippet<'a, T> {
177199
}
178200
}
179201

202+
/// When manually [`fold`][Self::fold]ing,
203+
/// the [`source`][Self::source]s line offset from the original start
180204
pub fn line_start(mut self, line_start: usize) -> Self {
181205
self.line_start = line_start;
182206
self
183207
}
184208

209+
/// The location of the [`source`][Self::source] (e.g. a path)
210+
///
211+
/// <div class="warning">
212+
///
185213
/// Text passed to this function is considered "untrusted input", as such
186214
/// all text is passed through a normalization function. Pre-styled text is
187215
/// not allowed to be passed to this function.
216+
///
217+
/// </div>
188218
pub fn origin(mut self, origin: &'a str) -> Self {
189219
self.origin = Some(origin);
190220
self
191221
}
192222

223+
/// Hide lines without [`Annotation`]s
193224
pub fn fold(mut self, fold: bool) -> Self {
194225
self.fold = fold;
195226
self
196227
}
197228
}
198229

199230
impl<'a> Snippet<'a, Annotation<'a>> {
231+
/// Highlight and describe a span of text within the [`source`][Self::source]
200232
pub fn annotation(mut self, annotation: Annotation<'a>) -> Snippet<'a, Annotation<'a>> {
201233
self.markers.push(annotation);
202234
self
203235
}
204236

237+
/// Highlight and describe spans of text within the [`source`][Self::source]
205238
pub fn annotations(mut self, annotation: impl IntoIterator<Item = Annotation<'a>>) -> Self {
206239
self.markers.extend(annotation);
207240
self
208241
}
209242
}
210243

211244
impl<'a> Snippet<'a, Patch<'a>> {
245+
/// Suggest to the user an edit to the [`source`][Self::source]
212246
pub fn patch(mut self, patch: Patch<'a>) -> Snippet<'a, Patch<'a>> {
213247
self.markers.push(patch);
214248
self
215249
}
216250

251+
/// Suggest to the user edits to the [`source`][Self::source]
217252
pub fn patches(mut self, patches: impl IntoIterator<Item = Patch<'a>>) -> Self {
218253
self.markers.extend(patches);
219254
self
220255
}
221256
}
222257

258+
/// Highlighted and describe a span of text within a [`Snippet`]
259+
///
260+
/// See [`AnnotationKind`] to create an annotation.
223261
#[derive(Clone, Debug)]
224262
pub struct Annotation<'a> {
225263
pub(crate) span: Range<usize>,
@@ -229,20 +267,30 @@ pub struct Annotation<'a> {
229267
}
230268

231269
impl<'a> Annotation<'a> {
270+
/// Describe the reason the span is highlighted
271+
///
272+
/// This will be styled according to the [`AnnotationKind`]
273+
///
274+
/// <div class="warning">
275+
///
232276
/// Text passed to this function is considered "untrusted input", as such
233277
/// all text is passed through a normalization function. Pre-styled text is
234278
/// not allowed to be passed to this function.
279+
///
280+
/// </div>
235281
pub fn label(mut self, label: &'a str) -> Self {
236282
self.label = Some(label);
237283
self
238284
}
239285

286+
/// Style the source according to the [`AnnotationKind`]
240287
pub fn highlight_source(mut self, highlight_source: bool) -> Self {
241288
self.highlight_source = highlight_source;
242289
self
243290
}
244291
}
245292

293+
/// The category of the [`Annotation`]
246294
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
247295
pub enum AnnotationKind {
248296
/// Color to [`Message`]'s [`Level`]
@@ -266,16 +314,23 @@ impl AnnotationKind {
266314
}
267315
}
268316

317+
/// Suggested edit to the [`Snippet`]
269318
#[derive(Clone, Debug)]
270319
pub struct Patch<'a> {
271320
pub(crate) span: Range<usize>,
272321
pub(crate) replacement: &'a str,
273322
}
274323

275324
impl<'a> Patch<'a> {
325+
/// Splice `replacement` into the [`Snippet`] at the `span`
326+
///
327+
/// <div class="warning">
328+
///
276329
/// Text passed to this function is considered "untrusted input", as such
277330
/// all text is passed through a normalization function. Pre-styled text is
278331
/// not allowed to be passed to this function.
332+
///
333+
/// </div>
279334
pub fn new(span: Range<usize>, replacement: &'a str) -> Self {
280335
Self { span, replacement }
281336
}
@@ -328,6 +383,7 @@ impl<'a> Patch<'a> {
328383
}
329384
}
330385

386+
/// The location of the [`Snippet`] (e.g. a path)
331387
#[derive(Clone, Debug)]
332388
pub struct Origin<'a> {
333389
pub(crate) origin: &'a str,
@@ -338,9 +394,13 @@ pub struct Origin<'a> {
338394
}
339395

340396
impl<'a> Origin<'a> {
397+
/// <div class="warning">
398+
///
341399
/// Text passed to this function is considered "untrusted input", as such
342400
/// all text is passed through a normalization function. Pre-styled text is
343401
/// not allowed to be passed to this function.
402+
///
403+
/// </div>
344404
pub fn new(origin: &'a str) -> Self {
345405
Self {
346406
origin,
@@ -351,11 +411,17 @@ impl<'a> Origin<'a> {
351411
}
352412
}
353413

414+
/// Set the default line number to display
415+
///
416+
/// Otherwise this will be inferred from the primary [`Annotation`]
354417
pub fn line(mut self, line: usize) -> Self {
355418
self.line = Some(line);
356419
self
357420
}
358421

422+
/// Set the default column to display
423+
///
424+
/// Otherwise this will be inferred from the primary [`Annotation`]
359425
pub fn char_column(mut self, char_column: usize) -> Self {
360426
self.char_column = Some(char_column);
361427
self
@@ -366,9 +432,15 @@ impl<'a> Origin<'a> {
366432
self
367433
}
368434

435+
/// Like [`Annotation::label`], but when there is no source
436+
///
437+
/// <div class="warning">
438+
///
369439
/// Text passed to this function is considered "untrusted input", as such
370440
/// all text is passed through a normalization function. Pre-styled text is
371441
/// not allowed to be passed to this function.
442+
///
443+
/// </div>
372444
pub fn label(mut self, label: &'a str) -> Self {
373445
self.label = Some(label);
374446
self

0 commit comments

Comments
 (0)