summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-11-04 09:30:44 +0100
committerLaurenz <laurmaedje@gmail.com>2022-11-04 11:38:09 +0100
commiteb951c008beea502042db4a3a0e8d1f8b51f6f52 (patch)
tree9856ee4ed0222222669de10e616a580b2a60135e /src
parent33928a00dc58250e24da1dae4e5db17e7b598d70 (diff)
Style changes
Diffstat (limited to 'src')
-rw-r--r--src/diag.rs4
-rw-r--r--src/export/mod.rs4
-rw-r--r--src/export/pdf/mod.rs2
-rw-r--r--src/export/render.rs16
-rw-r--r--src/font/book.rs32
-rw-r--r--src/font/mod.rs4
-rw-r--r--src/frame.rs15
-rw-r--r--src/geom/axes.rs15
-rw-r--r--src/geom/corners.rs16
-rw-r--r--src/geom/ellipse.rs6
-rw-r--r--src/geom/em.rs6
-rw-r--r--src/geom/length.rs5
-rw-r--r--src/geom/mod.rs54
-rw-r--r--src/geom/paint.rs11
-rw-r--r--src/geom/ratio.rs6
-rw-r--r--src/geom/rel.rs10
-rw-r--r--src/geom/rounded.rs6
-rw-r--r--src/model/args.rs6
-rw-r--r--src/model/array.rs10
-rw-r--r--src/model/content.rs5
-rw-r--r--src/model/eval.rs18
-rw-r--r--src/model/func.rs24
-rw-r--r--src/model/mod.rs30
-rw-r--r--src/model/ops.rs38
-rw-r--r--src/model/str.rs19
-rw-r--r--src/model/styles.rs28
-rw-r--r--src/model/value.rs17
-rw-r--r--src/syntax/ast.rs6
-rw-r--r--src/syntax/highlight.rs46
-rw-r--r--src/syntax/incremental.rs49
-rw-r--r--src/syntax/mod.rs13
-rw-r--r--src/syntax/node.rs16
-rw-r--r--src/syntax/parser.rs16
-rw-r--r--src/syntax/parsing.rs85
-rw-r--r--src/syntax/resolve.rs12
-rw-r--r--src/syntax/source.rs51
-rw-r--r--src/syntax/span.rs2
-rw-r--r--src/syntax/tokens.rs21
-rw-r--r--src/util/eco.rs26
-rw-r--r--src/util/fat.rs20
-rw-r--r--src/util/mod.rs6
41 files changed, 325 insertions, 451 deletions
diff --git a/src/diag.rs b/src/diag.rs
index 0a532713..7631b6d3 100644
--- a/src/diag.rs
+++ b/src/diag.rs
@@ -85,8 +85,8 @@ impl SourceError {
let full = world.source(self.span.source()).range(self.span);
match self.pos {
ErrorPos::Full => full,
- ErrorPos::Start => full.start .. full.start,
- ErrorPos::End => full.end .. full.end,
+ ErrorPos::Start => full.start..full.start,
+ ErrorPos::End => full.end..full.end,
}
}
}
diff --git a/src/export/mod.rs b/src/export/mod.rs
index 8e18174d..eb0731a9 100644
--- a/src/export/mod.rs
+++ b/src/export/mod.rs
@@ -3,5 +3,5 @@
mod pdf;
mod render;
-pub use pdf::pdf;
-pub use render::render;
+pub use self::pdf::pdf;
+pub use self::render::render;
diff --git a/src/export/pdf/mod.rs b/src/export/pdf/mod.rs
index 5f47043e..2547ddbf 100644
--- a/src/export/pdf/mod.rs
+++ b/src/export/pdf/mod.rs
@@ -174,7 +174,7 @@ where
&'a self,
refs: &'a [Ref],
) -> impl Iterator<Item = (Ref, usize)> + 'a {
- refs.iter().copied().zip(0 .. self.to_pdf.len())
+ refs.iter().copied().zip(0..self.to_pdf.len())
}
fn items(&self) -> impl Iterator<Item = &T> + '_ {
diff --git a/src/export/render.rs b/src/export/render.rs
index 41fff863..bc82e9c8 100644
--- a/src/export/render.rs
+++ b/src/export/render.rs
@@ -256,8 +256,8 @@ fn render_outline_glyph(
// Blend the glyph bitmap with the existing pixels on the canvas.
// FIXME: This doesn't respect the clipping mask.
let pixels = bytemuck::cast_slice_mut::<u8, u32>(canvas.data_mut());
- for x in left.clamp(0, cw) .. right.clamp(0, cw) {
- for y in top.clamp(0, ch) .. bottom.clamp(0, ch) {
+ for x in left.clamp(0, cw)..right.clamp(0, cw) {
+ for y in top.clamp(0, ch)..bottom.clamp(0, ch) {
let ai = ((y - top) * mw + (x - left)) as usize;
let cov = bitmap.coverage[ai];
if cov == 0 {
@@ -312,10 +312,7 @@ fn render_shape(
if let Some(Stroke { paint, thickness }) = shape.stroke {
let paint = paint.into();
- let stroke = sk::Stroke {
- width: thickness.to_f32(),
- ..Default::default()
- };
+ let stroke = sk::Stroke { width: thickness.to_f32(), ..Default::default() };
canvas.stroke_path(&path, &paint, &stroke, ts, mask);
}
@@ -342,11 +339,8 @@ fn render_image(
match image.decode().unwrap() {
DecodedImage::Raster(dynamic, _) => {
let downscale = w < image.width();
- let filter = if downscale {
- FilterType::Lanczos3
- } else {
- FilterType::CatmullRom
- };
+ let filter =
+ if downscale { FilterType::Lanczos3 } else { FilterType::CatmullRom };
let buf = dynamic.resize(w, h, filter);
for ((_, _, src), dest) in buf.pixels().zip(pixmap.pixels_mut()) {
let Rgba([r, g, b, a]) = src;
diff --git a/src/font/book.rs b/src/font/book.rs
index 49225c04..2ad30f1d 100644
--- a/src/font/book.rs
+++ b/src/font/book.rs
@@ -172,7 +172,7 @@ impl FontInfo {
/// Compute metadata for all fonts in the given data.
pub fn from_data(data: &[u8]) -> impl Iterator<Item = FontInfo> + '_ {
let count = ttf_parser::fonts_in_collection(data).unwrap_or(1);
- (0 .. count).filter_map(move |index| {
+ (0..count).filter_map(move |index| {
let ttf = ttf_parser::Face::parse(data, index).ok()?;
Self::from_ttf(&ttf)
})
@@ -241,9 +241,9 @@ impl FontInfo {
if let Some(panose) = ttf
.raw_face()
.table(Tag::from_bytes(b"OS/2"))
- .and_then(|os2| os2.get(32 .. 45))
+ .and_then(|os2| os2.get(32..45))
{
- if matches!(panose, [2, 2 ..= 10, ..]) {
+ if matches!(panose, [2, 2..=10, ..]) {
flags.insert(FontFlags::SERIF);
}
}
@@ -305,9 +305,8 @@ fn typographic_family(mut family: &str) -> &str {
const SEPARATORS: [char; 3] = [' ', '-', '_'];
// Modifiers that can appear in combination with suffixes.
- const MODIFIERS: &[&str] = &[
- "extra", "ext", "ex", "x", "semi", "sem", "sm", "demi", "dem", "ultra",
- ];
+ const MODIFIERS: &[&str] =
+ &["extra", "ext", "ex", "x", "semi", "sem", "sm", "demi", "dem", "ultra"];
// Style suffixes.
#[rustfmt::skip]
@@ -331,9 +330,8 @@ fn typographic_family(mut family: &str) -> &str {
len = trimmed.len();
// Find style suffix.
- let mut t = match SUFFIXES.iter().find_map(|s| trimmed.strip_suffix(s)) {
- Some(t) => t,
- None => break,
+ let Some(mut t) = SUFFIXES.iter().find_map(|s| trimmed.strip_suffix(s)) else {
+ break;
};
// Strip optional separator.
@@ -351,7 +349,7 @@ fn typographic_family(mut family: &str) -> &str {
}
}
- &family[.. len]
+ &family[..len]
}
/// How many words the two strings share in their prefix.
@@ -411,7 +409,7 @@ impl Coverage {
let mut cursor = 0;
for &run in &self.0 {
- if (cursor .. cursor + run).contains(&c) {
+ if (cursor..cursor + run).contains(&c) {
return inside;
}
cursor += run;
@@ -432,19 +430,13 @@ mod tests {
assert_eq!(typographic_family("eras bold"), "eras");
assert_eq!(typographic_family("footlight mt light"), "footlight mt");
assert_eq!(typographic_family("times new roman"), "times new roman");
- assert_eq!(
- typographic_family("noto sans mono cond sembd"),
- "noto sans mono"
- );
+ assert_eq!(typographic_family("noto sans mono cond sembd"), "noto sans mono");
assert_eq!(typographic_family("noto serif SEMCOND sembd"), "noto serif");
assert_eq!(typographic_family("crimson text"), "crimson text");
assert_eq!(typographic_family("footlight light"), "footlight");
assert_eq!(typographic_family("Noto Sans"), "Noto Sans");
assert_eq!(typographic_family("Noto Sans Light"), "Noto Sans");
- assert_eq!(
- typographic_family("Noto Sans Semicondensed Heavy"),
- "Noto Sans"
- );
+ assert_eq!(typographic_family("Noto Sans Semicondensed Heavy"), "Noto Sans");
assert_eq!(typographic_family("Familx"), "Familx");
assert_eq!(typographic_family("Font Ultra"), "Font Ultra");
assert_eq!(typographic_family("Font Ultra Bold"), "Font");
@@ -458,7 +450,7 @@ mod tests {
assert_eq!(coverage.0, runs);
let max = 5 + set.iter().copied().max().unwrap_or_default();
- for c in 0 .. max {
+ for c in 0..max {
assert_eq!(set.contains(&c), coverage.contains(c));
}
}
diff --git a/src/font/mod.rs b/src/font/mod.rs
index 7cddf1ea..98875d8f 100644
--- a/src/font/mod.rs
+++ b/src/font/mod.rs
@@ -3,8 +3,8 @@
mod book;
mod variant;
-pub use book::*;
-pub use variant::*;
+pub use self::book::*;
+pub use self::variant::*;
use std::fmt::{self, Debug, Formatter};
use std::hash::{Hash, Hasher};
diff --git a/src/frame.rs b/src/frame.rs
index 2eac6879..e2302d7c 100644
--- a/src/frame.rs
+++ b/src/frame.rs
@@ -153,7 +153,7 @@ impl Frame {
where
I: IntoIterator<Item = (Point, Element)>,
{
- Arc::make_mut(&mut self.elements).splice(0 .. 0, elements);
+ Arc::make_mut(&mut self.elements).splice(0..0, elements);
}
/// Add a frame at a position in the background.
@@ -181,7 +181,7 @@ impl Frame {
// Try to transfer the elements without adjusting the position.
// Also try to reuse the elements if the Arc isn't shared.
- let range = layer .. layer;
+ let range = layer..layer;
if pos.is_zero() {
let sink = Arc::make_mut(&mut self.elements);
match Arc::try_unwrap(frame.elements) {
@@ -407,7 +407,7 @@ impl Lang {
/// Return the language code as an all lowercase string slice.
pub fn as_str(&self) -> &str {
- std::str::from_utf8(&self.0[.. usize::from(self.1)]).unwrap_or_default()
+ std::str::from_utf8(&self.0[..usize::from(self.1)]).unwrap_or_default()
}
/// The default direction for the language.
@@ -426,9 +426,9 @@ impl FromStr for Lang {
/// Construct a language from a two- or three-byte ISO 639-1/2/3 code.
fn from_str(iso: &str) -> Result<Self, Self::Err> {
let len = iso.len();
- if matches!(len, 2 ..= 3) && iso.is_ascii() {
+ if matches!(len, 2..=3) && iso.is_ascii() {
let mut bytes = [b' '; 3];
- bytes[.. len].copy_from_slice(iso.as_bytes());
+ bytes[..len].copy_from_slice(iso.as_bytes());
bytes.make_ascii_lowercase();
Ok(Self(bytes, len as u8))
} else {
@@ -538,9 +538,6 @@ impl Role {
pub fn is_weak(self) -> bool {
// In Typst, all text is in a paragraph, so paragraph isn't very
// descriptive.
- matches!(
- self,
- Self::Paragraph | Self::GenericBlock | Self::GenericInline
- )
+ matches!(self, Self::Paragraph | Self::GenericBlock | Self::GenericInline)
}
}
diff --git a/src/geom/axes.rs b/src/geom/axes.rs
index bfc40c2e..04023898 100644
--- a/src/geom/axes.rs
+++ b/src/geom/axes.rs
@@ -54,10 +54,7 @@ impl<T> Axes<T> {
/// Zip two instances into an instance over a tuple.
pub fn zip<U>(self, other: Axes<U>) -> Axes<(T, U)> {
- Axes {
- x: (self.x, other.x),
- y: (self.y, other.y),
- }
+ Axes { x: (self.x, other.x), y: (self.y, other.y) }
}
/// Whether a condition is true for at least one of fields.
@@ -100,18 +97,12 @@ impl<T: Default> Axes<T> {
impl<T: Ord> Axes<T> {
/// The component-wise minimum of this and another instance.
pub fn min(self, other: Self) -> Self {
- Self {
- x: self.x.min(other.x),
- y: self.y.min(other.y),
- }
+ Self { x: self.x.min(other.x), y: self.y.min(other.y) }
}
/// The component-wise minimum of this and another instance.
pub fn max(self, other: Self) -> Self {
- Self {
- x: self.x.max(other.x),
- y: self.y.max(other.y),
- }
+ Self { x: self.x.max(other.x), y: self.y.max(other.y) }
}
}
diff --git a/src/geom/corners.rs b/src/geom/corners.rs
index 54fcd12f..d84160cc 100644
--- a/src/geom/corners.rs
+++ b/src/geom/corners.rs
@@ -16,12 +16,7 @@ pub struct Corners<T> {
impl<T> Corners<T> {
/// Create a new instance from the four components.
pub const fn new(top_left: T, top_right: T, bottom_right: T, bottom_left: T) -> Self {
- Self {
- top_left,
- top_right,
- bottom_right,
- bottom_left,
- }
+ Self { top_left, top_right, bottom_right, bottom_left }
}
/// Create an instance with four equal components.
@@ -66,13 +61,8 @@ impl<T> Corners<T> {
/// An iterator over the corners, starting with the top left corner,
/// clockwise.
pub fn iter(&self) -> impl Iterator<Item = &T> {
- [
- &self.top_left,
- &self.top_right,
- &self.bottom_right,
- &self.bottom_left,
- ]
- .into_iter()
+ [&self.top_left, &self.top_right, &self.bottom_right, &self.bottom_left]
+ .into_iter()
}
/// Whether all sides are equal.
diff --git a/src/geom/ellipse.rs b/src/geom/ellipse.rs
index e734682e..ac20ffd3 100644
--- a/src/geom/ellipse.rs
+++ b/src/geom/ellipse.rs
@@ -18,9 +18,5 @@ pub fn ellipse(size: Size, fill: Option<Paint>, stroke: Option<Stroke>) -> Shape
path.cubic_to(point(rx, my), point(mx, ry), point(z, ry));
path.cubic_to(point(-mx, ry), point(-rx, my), point(-rx, z));
- Shape {
- geometry: Geometry::Path(path),
- stroke,
- fill,
- }
+ Shape { geometry: Geometry::Path(path), stroke, fill }
}
diff --git a/src/geom/em.rs b/src/geom/em.rs
index d0ad9d98..93dc80e4 100644
--- a/src/geom/em.rs
+++ b/src/geom/em.rs
@@ -45,7 +45,11 @@ impl Em {
/// Convert to an absolute length at the given font size.
pub fn at(self, font_size: Abs) -> Abs {
let resolved = font_size * self.get();
- if resolved.is_finite() { resolved } else { Abs::zero() }
+ if resolved.is_finite() {
+ resolved
+ } else {
+ Abs::zero()
+ }
}
}
diff --git a/src/geom/length.rs b/src/geom/length.rs
index cd526f99..230ea48b 100644
--- a/src/geom/length.rs
+++ b/src/geom/length.rs
@@ -92,10 +92,7 @@ impl Add for Length {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
- Self {
- abs: self.abs + rhs.abs,
- em: self.em + rhs.em,
- }
+ Self { abs: self.abs + rhs.abs, em: self.em + rhs.em }
}
}
diff --git a/src/geom/mod.rs b/src/geom/mod.rs
index c1469b26..3c7c2fc9 100644
--- a/src/geom/mod.rs
+++ b/src/geom/mod.rs
@@ -24,27 +24,27 @@ mod size;
mod stroke;
mod transform;
-pub use abs::*;
-pub use align::*;
-pub use angle::*;
-pub use axes::*;
-pub use corners::*;
-pub use dir::*;
-pub use ellipse::*;
-pub use em::*;
-pub use fr::*;
-pub use length::*;
-pub use paint::*;
-pub use path::*;
-pub use point::*;
-pub use ratio::*;
-pub use rel::*;
-pub use rounded::*;
-pub use scalar::*;
-pub use sides::*;
-pub use size::*;
-pub use stroke::*;
-pub use transform::*;
+pub use self::abs::*;
+pub use self::align::*;
+pub use self::angle::*;
+pub use self::axes::*;
+pub use self::corners::*;
+pub use self::dir::*;
+pub use self::ellipse::*;
+pub use self::em::*;
+pub use self::fr::*;
+pub use self::length::*;
+pub use self::paint::*;
+pub use self::path::*;
+pub use self::point::*;
+pub use self::ratio::*;
+pub use self::rel::*;
+pub use self::rounded::*;
+pub use self::scalar::*;
+pub use self::sides::*;
+pub use self::size::*;
+pub use self::stroke::*;
+pub use self::transform::*;
use std::cmp::Ordering;
use std::f64::consts::PI;
@@ -95,20 +95,12 @@ pub enum Geometry {
impl Geometry {
/// Fill the geometry without a stroke.
pub fn filled(self, fill: Paint) -> Shape {
- Shape {
- geometry: self,
- fill: Some(fill),
- stroke: None,
- }
+ Shape { geometry: self, fill: Some(fill), stroke: None }
}
/// Stroke the geometry without a fill.
pub fn stroked(self, stroke: Stroke) -> Shape {
- Shape {
- geometry: self,
- fill: None,
- stroke: Some(stroke),
- }
+ Shape { geometry: self, fill: None, stroke: Some(stroke) }
}
}
diff --git a/src/geom/paint.rs b/src/geom/paint.rs
index b07f09af..58b034ae 100644
--- a/src/geom/paint.rs
+++ b/src/geom/paint.rs
@@ -244,11 +244,11 @@ impl FromStr for RgbaColor {
}
let mut values: [u8; 4] = [u8::MAX; 4];
- for elem in if alpha { 0 .. 4 } else { 0 .. 3 } {
+ for elem in if alpha { 0..4 } else { 0..3 } {
let item_len = if long { 2 } else { 1 };
let pos = elem * item_len;
- let item = &hex_str[pos .. (pos + item_len)];
+ let item = &hex_str[pos..(pos + item_len)];
values[elem] = u8::from_str_radix(item, 16).unwrap();
if short {
@@ -324,12 +324,7 @@ impl CmykColor {
round_u8(255.0 * (1.0 - c) * (1.0 - k))
};
- RgbaColor {
- r: f(self.c),
- g: f(self.m),
- b: f(self.y),
- a: 255,
- }
+ RgbaColor { r: f(self.c), g: f(self.m), b: f(self.y), a: 255 }
}
/// Lighten this color by a factor.
diff --git a/src/geom/ratio.rs b/src/geom/ratio.rs
index 69f06dd2..5c58649d 100644
--- a/src/geom/ratio.rs
+++ b/src/geom/ratio.rs
@@ -46,7 +46,11 @@ impl Ratio {
/// Return the ratio of the given `whole`.
pub fn of<T: Numeric>(self, whole: T) -> T {
let resolved = whole * self.get();
- if resolved.is_finite() { resolved } else { T::zero() }
+ if resolved.is_finite() {
+ resolved
+ } else {
+ T::zero()
+ }
}
}
diff --git a/src/geom/rel.rs b/src/geom/rel.rs
index 5c3b0b43..a8e75d1c 100644
--- a/src/geom/rel.rs
+++ b/src/geom/rel.rs
@@ -128,10 +128,7 @@ impl<T: Numeric> Mul<f64> for Rel<T> {
type Output = Self;
fn mul(self, other: f64) -> Self::Output {
- Self {
- rel: self.rel * other,
- abs: self.abs * other,
- }
+ Self { rel: self.rel * other, abs: self.abs * other }
}
}
@@ -147,10 +144,7 @@ impl<T: Numeric> Div<f64> for Rel<T> {
type Output = Self;
fn div(self, other: f64) -> Self::Output {
- Self {
- rel: self.rel / other,
- abs: self.abs / other,
- }
+ Self { rel: self.rel / other, abs: self.abs / other }
}
}
diff --git a/src/geom/rounded.rs b/src/geom/rounded.rs
index 70d351ee..7a58dae2 100644
--- a/src/geom/rounded.rs
+++ b/src/geom/rounded.rs
@@ -21,11 +21,7 @@ pub fn rounded_rect(
if !stroke.is_uniform() {
for (path, stroke) in stroke_segments(size, radius, stroke) {
if stroke.is_some() {
- res.push(Shape {
- geometry: Geometry::Path(path),
- fill: None,
- stroke,
- });
+ res.push(Shape { geometry: Geometry::Path(path), fill: None, stroke });
}
}
}
diff --git a/src/model/args.rs b/src/model/args.rs
index 9fb30b9c..fe5f8254 100644
--- a/src/model/args.rs
+++ b/src/model/args.rs
@@ -29,11 +29,7 @@ impl Args {
pub fn new(span: Span, values: impl IntoIterator<Item = Value>) -> Self {
let items = values
.into_iter()
- .map(|value| Arg {
- span,
- name: None,
- value: Spanned::new(value, span),
- })
+ .map(|value| Arg { span, name: None, value: Spanned::new(value, span) })
.collect();
Self { span, items }
}
diff --git a/src/model/array.rs b/src/model/array.rs
index 053248ec..40b063e2 100644
--- a/src/model/array.rs
+++ b/src/model/array.rs
@@ -119,7 +119,7 @@ impl Array {
.ok_or_else(|| out_of_bounds(end, len))?
.max(start);
- Ok(Self::from_vec(self.0[start .. end].to_vec()))
+ Ok(Self::from_vec(self.0[start..end].to_vec()))
}
/// Whether the array contains a specific value.
@@ -287,12 +287,8 @@ impl Array {
/// Resolve an index.
fn locate(&self, index: i64) -> Option<usize> {
- usize::try_from(if index >= 0 {
- index
- } else {
- self.len().checked_add(index)?
- })
- .ok()
+ usize::try_from(if index >= 0 { index } else { self.len().checked_add(index)? })
+ .ok()
}
}
diff --git a/src/model/content.rs b/src/model/content.rs
index 372f6ff6..7b09c697 100644
--- a/src/model/content.rs
+++ b/src/model/content.rs
@@ -161,10 +161,7 @@ impl Add for Content {
return lhs;
}
- let seq = match (
- lhs.downcast::<SequenceNode>(),
- rhs.downcast::<SequenceNode>(),
- ) {
+ let seq = match (lhs.downcast::<SequenceNode>(), rhs.downcast::<SequenceNode>()) {
(Some(lhs), Some(rhs)) => lhs.0.iter().chain(&rhs.0).cloned().collect(),
(Some(lhs), None) => lhs.0.iter().cloned().chain(iter::once(rhs)).collect(),
(None, Some(rhs)) => iter::once(lhs).chain(rhs.0.iter().cloned()).collect(),
diff --git a/src/model/eval.rs b/src/model/eval.rs
index 8e287f14..16e66818 100644
--- a/src/model/eval.rs
+++ b/src/model/eval.rs
@@ -140,7 +140,6 @@ fn eval_markup(
vm.scopes.top.define(wrap.binding().take(), tail);
wrap.body().eval(vm)?.display(vm.world)
}
-
_ => node.eval(vm)?,
});
@@ -162,7 +161,7 @@ impl Eval for ast::MarkupNode {
fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> {
match self {
Self::Space(v) => Ok(match v.newlines() {
- 0 ..= 1 => (vm.items.space)(),
+ 0..=1 => (vm.items.space)(),
_ => (vm.items.parbreak)(),
}),
Self::Linebreak(v) => v.eval(vm),
@@ -369,10 +368,7 @@ impl Eval for ast::Frac {
type Output = Content;
fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> {
- Ok((vm.items.math_frac)(
- self.num().eval(vm)?,
- self.denom().eval(vm)?,
- ))
+ Ok((vm.items.math_frac)(self.num().eval(vm)?, self.denom().eval(vm)?))
}
}
@@ -501,7 +497,6 @@ fn eval_code(
vm.scopes.top.define(wrap.binding().take(), tail);
wrap.body().eval(vm)?
}
-
_ => expr.eval(vm)?,
};
@@ -676,18 +671,12 @@ impl Eval for ast::FieldAccess {
Ok(match object {
Value::Dict(dict) => dict.get(&field).at(span)?.clone(),
-
Value::Content(node) => node
.to::<dyn Show>()
.and_then(|node| node.field(&field))
.ok_or_else(|| format!("unknown field {field:?}"))
.at(span)?,
-
- v => bail!(
- self.target().span(),
- "cannot access field on {}",
- v.type_name()
- ),
+ v => bail!(self.target().span(), "cannot access field on {}", v.type_name()),
})
}
}
@@ -706,7 +695,6 @@ impl Eval for ast::FuncCall {
let point = || Tracepoint::Call(func.name().map(Into::into));
func.call(vm, args).trace(vm.world, point, self.span())?
}
-
v => bail!(
self.callee().span(),
"expected callable or collection, found {}",
diff --git a/src/model/func.rs b/src/model/func.rs
index 5be1aae3..456b6aa6 100644
--- a/src/model/func.rs
+++ b/src/model/func.rs
@@ -32,12 +32,7 @@ impl Func {
name: &'static str,
func: fn(&mut Vm, &mut Args) -> SourceResult<Value>,
) -> Self {
- Self(Arc::new(Repr::Native(Native {
- name,
- func,
- set: None,
- node: None,
- })))
+ Self(Arc::new(Repr::Native(Native { name, func, set: None, node: None })))
}
/// Create a new function from a native rust node.
@@ -92,7 +87,7 @@ impl Func {
Repr::Native(native) => (native.func)(vm, &mut args)?,
Repr::Closure(closure) => closure.call(vm, &mut args)?,
Repr::With(wrapped, applied) => {
- args.items.splice(.. 0, applied.items.iter().cloned());
+ args.items.splice(..0, applied.items.iter().cloned());
return wrapped.call(vm, args);
}
};
@@ -194,12 +189,15 @@ impl Closure {
// Parse the arguments according to the parameter list.
for (param, default) in &self.params {
- scopes.top.define(param.clone(), match default {
- None => args.expect::<Value>(param)?,
- Some(default) => {
- args.named::<Value>(param)?.unwrap_or_else(|| default.clone())
- }
- });
+ scopes.top.define(
+ param.clone(),
+ match default {
+ Some(default) => {
+ args.named::<Value>(param)?.unwrap_or_else(|| default.clone())
+ }
+ None => args.expect::<Value>(param)?,
+ },
+ );
}
// Put the remaining arguments into the sink.
diff --git a/src/model/mod.rs b/src/model/mod.rs
index fdebce0a..20bca106 100644
--- a/src/model/mod.rs
+++ b/src/model/mod.rs
@@ -1,4 +1,4 @@
-//! Layout and computation model.
+//! Document and computation model.
#[macro_use]
mod items;
@@ -23,18 +23,18 @@ mod ops;
mod scope;
mod vm;
-pub use self::str::*;
-pub use args::*;
-pub use array::*;
-pub use cast::*;
-pub use content::*;
-pub use dict::*;
-pub use eval::*;
-pub use func::*;
-pub use items::*;
-pub use scope::*;
-pub use styles::*;
-pub use value::*;
-pub use vm::*;
-
pub use typst_macros::{capability, node};
+
+pub use self::args::*;
+pub use self::array::*;
+pub use self::cast::*;
+pub use self::content::*;
+pub use self::dict::*;
+pub use self::eval::*;
+pub use self::func::*;
+pub use self::items::*;
+pub use self::scope::*;
+pub use self::str::*;
+pub use self::styles::*;
+pub use self::value::*;
+pub use self::vm::*;
diff --git a/src/model/ops.rs b/src/model/ops.rs
index ee126b03..9d55fa63 100644
--- a/src/model/ops.rs
+++ b/src/model/ops.rs
@@ -103,17 +103,17 @@ pub fn add(lhs: Value, rhs: Value) -> StrResult<Value> {
if let (Some(&a), Some(&b)) =
(a.downcast::<GenAlign>(), b.downcast::<GenAlign>())
{
- if a.axis() != b.axis() {
- Value::dynamic(match a.axis() {
- Axis::X => Axes { x: a, y: b },
- Axis::Y => Axes { x: b, y: a },
- })
- } else {
+ if a.axis() == b.axis() {
return Err(format!("cannot add two {:?} alignments", a.axis()));
}
- } else {
- mismatch!("cannot add {} and {}", a, b);
- }
+
+ return Ok(Value::dynamic(match a.axis() {
+ Axis::X => Axes { x: a, y: b },
+ Axis::Y => Axes { x: b, y: a },
+ }));
+ };
+
+ mismatch!("cannot add {} and {}", a, b);
}
(a, b) => mismatch!("cannot add {} and {}", a, b),
@@ -370,17 +370,11 @@ pub fn not_in(lhs: Value, rhs: Value) -> StrResult<Value> {
/// Test for containment.
pub fn contains(lhs: &Value, rhs: &Value) -> Option<bool> {
- Some(match (lhs, rhs) {
- (Str(a), Str(b)) => b.as_str().contains(a.as_str()),
- (Dyn(a), Str(b)) => {
- if let Some(regex) = a.downcast::<Regex>() {
- regex.is_match(b)
- } else {
- return Option::None;
- }
- }
- (Str(a), Dict(b)) => b.contains(a),
- (a, Array(b)) => b.contains(a),
- _ => return Option::None,
- })
+ match (lhs, rhs) {
+ (Str(a), Str(b)) => Some(b.as_str().contains(a.as_str())),
+ (Dyn(a), Str(b)) => a.downcast::<Regex>().map(|regex| regex.is_match(b)),
+ (Str(a), Dict(b)) => Some(b.contains(a)),
+ (a, Array(b)) => Some(b.contains(a)),
+ _ => Option::None,
+ }
}
diff --git a/src/model/str.rs b/src/model/str.rs
index 4aa40c54..1fcf7075 100644
--- a/src/model/str.rs
+++ b/src/model/str.rs
@@ -67,17 +67,13 @@ impl Str {
.ok_or_else(|| out_of_bounds(end, len))?
.max(start);
- Ok(self.0[start .. end].into())
+ Ok(self.0[start..end].into())
}
/// Resolve an index.
fn locate(&self, index: i64) -> Option<usize> {
- usize::try_from(if index >= 0 {
- index
- } else {
- self.len().checked_add(index)?
- })
- .ok()
+ usize::try_from(if index >= 0 { index } else { self.len().checked_add(index)? })
+ .ok()
}
/// Whether the given pattern exists in this string.
@@ -207,7 +203,7 @@ impl Str {
Some(StrPattern::Regex(re)) => {
let s = self.as_str();
let mut last = 0;
- let mut range = 0 .. s.len();
+ let mut range = 0..s.len();
for m in re.find_iter(s) {
// Does this match follow directly after the last one?
@@ -235,7 +231,7 @@ impl Str {
range.end = s.len();
}
- &s[range.start .. range.start.max(range.end)]
+ &s[range.start..range.start.max(range.end)]
}
};
@@ -271,10 +267,7 @@ impl Str {
/// The out of bounds access error message.
#[cold]
fn out_of_bounds(index: i64, len: i64) -> String {
- format!(
- "string index out of bounds (index: {}, len: {})",
- index, len
- )
+ format!("string index out of bounds (index: {}, len: {})", index, len)
}
/// Convert an item of std's `match_indices` to a dictionary.
diff --git a/src/model/styles.rs b/src/model/styles.rs
index 24566b09..9463e55e 100644
--- a/src/model/styles.rs
+++ b/src/model/styles.rs
@@ -94,7 +94,7 @@ impl StyleMap {
/// This is useful over `chain` when you want to combine two maps, but you
/// still need an owned map without a lifetime.
pub fn apply_map(&mut self, tail: &Self) {
- self.0.splice(0 .. 0, tail.0.iter().cloned());
+ self.0.splice(0..0, tail.0.iter().cloned());
}
/// Mark all contained properties as _scoped_. This means that they only
@@ -159,10 +159,7 @@ impl StyleEntry {
}
}
- StyleChain {
- head: std::slice::from_ref(self),
- tail: Some(tail),
- }
+ StyleChain { head: std::slice::from_ref(self), tail: Some(tail) }
}
/// If this is a property, return it.
@@ -328,7 +325,7 @@ impl<'a> StyleChain<'a> {
let mut suffix = StyleMap::new();
let take = self.links().count().saturating_sub(len);
for link in self.links().take(take) {
- suffix.0.splice(0 .. 0, link.iter().cloned());
+ suffix.0.splice(0..0, link.iter().cloned());
}
suffix
}
@@ -344,10 +341,7 @@ impl<'a> StyleChain<'a> {
/// Iterate over the entries of the chain.
fn entries(self) -> Entries<'a> {
- Entries {
- inner: [].as_slice().iter(),
- links: self.links(),
- }
+ Entries { inner: [].as_slice().iter(), links: self.links() }
}
/// Iterate over the links of the chain.
@@ -582,12 +576,12 @@ impl<'a, T> StyleVecBuilder<'a, T> {
for &(mut chain, _) in iter {
let len = chain.links().count();
if len < shared {
- for _ in 0 .. shared - len {
+ for _ in 0..shared - len {
trunk.pop();
}
shared = len;
} else if len > shared {
- for _ in 0 .. len - shared {
+ for _ in 0..len - shared {
chain.pop();
}
}
@@ -1017,7 +1011,7 @@ impl Recipe {
for mat in regex.find_iter(text) {
let start = mat.start();
if cursor < start {
- result.push(make(text[cursor .. start].into()));
+ result.push(make(text[cursor..start].into()));
}
result.push(self.call(world, || Value::Str(mat.as_str().into()))?);
@@ -1029,7 +1023,7 @@ impl Recipe {
}
if cursor < text.len() {
- result.push(make(text[cursor ..].into()));
+ result.push(make(text[cursor..].into()));
}
Content::sequence(result)
@@ -1066,11 +1060,7 @@ impl Recipe {
impl Debug for Recipe {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
- write!(
- f,
- "Recipe matching {:?} from {:?}",
- self.pattern, self.func.span
- )
+ write!(f, "Recipe matching {:?} from {:?}", self.pattern, self.func.span)
}
}
diff --git a/src/model/value.rs b/src/model/value.rs
index 07719883..825e6f55 100644
--- a/src/model/value.rs
+++ b/src/model/value.rs
@@ -294,11 +294,8 @@ where
}
fn dyn_eq(&self, other: &Dynamic) -> bool {
- if let Some(other) = other.downcast::<Self>() {
- self == other
- } else {
- false
- }
+ let Some(other) = other.downcast::<Self>() else { return false };
+ self == other
}
fn dyn_type_name(&self) -> &'static str {
@@ -411,15 +408,9 @@ mod tests {
test(Abs::pt(5.5), "5.5pt");
test(Angle::deg(90.0), "90deg");
test(Ratio::one() / 2.0, "50%");
- test(
- Ratio::new(0.3) + Length::from(Abs::cm(2.0)),
- "30% + 56.69pt",
- );
+ test(Ratio::new(0.3) + Length::from(Abs::cm(2.0)), "30% + 56.69pt");
test(Fr::one() * 7.55, "7.55fr");
- test(
- Color::Rgba(RgbaColor::new(1, 1, 1, 0xff)),
- "rgb(\"#010101\")",
- );
+ test(Color::Rgba(RgbaColor::new(1, 1, 1, 0xff)), "rgb(\"#010101\")");
// Collections.
test("hello", r#""hello""#);
diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs
index 06e41fa0..61b8f0e6 100644
--- a/src/syntax/ast.rs
+++ b/src/syntax/ast.rs
@@ -1471,7 +1471,11 @@ impl ForPattern {
pub fn key(&self) -> Option<Ident> {
let mut children = self.0.children().filter_map(SyntaxNode::cast);
let key = children.next();
- if children.next().is_some() { key } else { None }
+ if children.next().is_some() {
+ key
+ } else {
+ None
+ }
}
/// The value part of the pattern.
diff --git a/src/syntax/highlight.rs b/src/syntax/highlight.rs
index 0db45785..d5345fab 100644
--- a/src/syntax/highlight.rs
+++ b/src/syntax/highlight.rs
@@ -81,7 +81,7 @@ where
F: FnMut(Range<usize>, Style),
{
if node.children().len() == 0 {
- let range = offset .. offset + node.len();
+ let range = offset..offset + node.len();
let style = highlighter.style_for_stack(&scopes);
f(range, style);
return;
@@ -112,7 +112,7 @@ where
F: FnMut(Range<usize>, Category),
{
for (i, child) in node.children().enumerate() {
- let span = offset .. offset + child.len();
+ let span = offset..offset + child.len();
if range.start <= span.end && range.end >= span.start {
if let Some(category) = Category::determine(child, node, i) {
f(span, category);
@@ -412,29 +412,35 @@ mod tests {
fn test(text: &str, goal: &[(Range<usize>, Category)]) {
let mut vec = vec![];
let source = Source::detached(text);
- let full = 0 .. text.len();
+ let full = 0..text.len();
highlight_categories(source.root(), full, &mut |range, category| {
vec.push((range, category));
});
assert_eq!(vec, goal);
}
- test("= *AB*", &[(0 .. 6, Heading), (2 .. 6, Strong)]);
-
- test("#f(x + 1)", &[
- (0 .. 2, Function),
- (2 .. 3, Bracket),
- (5 .. 6, Operator),
- (7 .. 8, Number),
- (8 .. 9, Bracket),
- ]);
-
- test("#let f(x) = x", &[
- (0 .. 4, Keyword),
- (5 .. 6, Function),
- (6 .. 7, Bracket),
- (8 .. 9, Bracket),
- (10 .. 11, Operator),
- ]);
+ test("= *AB*", &[(0..6, Heading), (2..6, Strong)]);
+
+ test(
+ "#f(x + 1)",
+ &[
+ (0..2, Function),
+ (2..3, Bracket),
+ (5..6, Operator),
+ (7..8, Number),
+ (8..9, Bracket),
+ ],
+ );
+
+ test(
+ "#let f(x) = x",
+ &[
+ (0..4, Keyword),
+ (5..6, Function),
+ (6..7, Bracket),
+ (8..9, Bracket),
+ (10..11, Operator),
+ ],
+ );
}
}
diff --git a/src/syntax/incremental.rs b/src/syntax/incremental.rs
index 15c0df0c..1087bb79 100644
--- a/src/syntax/incremental.rs
+++ b/src/syntax/incremental.rs
@@ -28,7 +28,7 @@ pub fn reparse(
let id = root.span().source();
*root = parse(text);
root.numberize(id, Span::FULL).unwrap();
- 0 .. text.len()
+ 0..text.len()
}
/// Try to reparse inside the given node.
@@ -55,7 +55,7 @@ fn try_reparse(
// Find the the first child in the range of children to reparse.
for (i, child) in node.children().enumerate() {
let pos = NodePos { idx: i, offset };
- let child_span = offset .. offset + child.len();
+ let child_span = offset..offset + child.len();
child_outermost = outermost && i + 1 == original_count;
match search {
@@ -81,7 +81,7 @@ fn try_reparse(
} else {
// Update compulsary state of `ahead_nontrivia`.
if let Some(ahead_nontrivia) = ahead.as_mut() {
- if let NodeKind::Space { newlines: (1 ..) } = child.kind() {
+ if let NodeKind::Space { newlines: (1..) } = child.kind() {
ahead_nontrivia.newline();
}
}
@@ -126,10 +126,13 @@ fn try_reparse(
// If we were looking for a non-whitespace element and hit the end of
// the file here, we instead use EOF as the end of the span.
if let SearchState::RequireNonTrivia(start) = search {
- search = SearchState::SpanFound(start, NodePos {
- idx: node.children().len() - 1,
- offset: offset - node.children().last().unwrap().len(),
- })
+ search = SearchState::SpanFound(
+ start,
+ NodePos {
+ idx: node.children().len() - 1,
+ offset: offset - node.children().last().unwrap().len(),
+ },
+ )
}
if let SearchState::Contained(pos) = search {
@@ -156,7 +159,7 @@ fn try_reparse(
return Some(range);
}
- let superseded_span = pos.offset .. pos.offset + prev_len;
+ let superseded_span = pos.offset..pos.offset + prev_len;
let func: Option<ReparseMode> = match child.kind() {
NodeKind::CodeBlock => Some(ReparseMode::Code),
NodeKind::ContentBlock => Some(ReparseMode::Content),
@@ -170,7 +173,7 @@ fn try_reparse(
change,
node,
func,
- pos.idx .. pos.idx + 1,
+ pos.idx..pos.idx + 1,
superseded_span,
outermost,
) {
@@ -197,13 +200,13 @@ fn try_reparse(
}
let superseded_span =
- start.offset .. end.offset + node.children().as_slice()[end.idx].len();
+ start.offset..end.offset + node.children().as_slice()[end.idx].len();
replace(
change,
node,
ReparseMode::MarkupElements { at_start, min_indent },
- start.idx .. end.idx + 1,
+ start.idx..end.idx + 1,
superseded_span,
outermost,
)
@@ -223,33 +226,33 @@ fn replace(
let differential: isize =
change.replacement_len as isize - change.replaced.len() as isize;
let newborn_end = (superseded_span.end as isize + differential) as usize;
- let newborn_span = superseded_span.start .. newborn_end;
+ let newborn_span = superseded_span.start..newborn_end;
let mut prefix = "";
- for (i, c) in change.text[.. newborn_span.start].char_indices().rev() {
+ for (i, c) in change.text[..newborn_span.start].char_indices().rev() {
if is_newline(c) {
break;
}
- prefix = &change.text[i .. newborn_span.start];
+ prefix = &change.text[i..newborn_span.start];
}
let (newborns, terminated, amount) = match mode {
ReparseMode::Code => reparse_code_block(
prefix,
- &change.text[newborn_span.start ..],
+ &change.text[newborn_span.start..],
newborn_span.len(),
),
ReparseMode::Content => reparse_content_block(
prefix,
- &change.text[newborn_span.start ..],
+ &change.text[newborn_span.start..],
newborn_span.len(),
),
ReparseMode::MarkupElements { at_start, min_indent } => reparse_markup_elements(
prefix,
- &change.text[newborn_span.start ..],
+ &change.text[newborn_span.start..],
newborn_span.len(),
differential,
- &node.children().as_slice()[superseded_start ..],
+ &node.children().as_slice()[superseded_start..],
at_start,
min_indent,
),
@@ -261,7 +264,7 @@ fn replace(
return None;
}
- node.replace_children(superseded_start .. superseded_start + amount, newborns)
+ node.replace_children(superseded_start..superseded_start + amount, newborns)
.ok()?;
Some(newborn_span)
@@ -351,11 +354,7 @@ impl Ahead {
Self {
pos,
at_start,
- kind: if bounded {
- AheadKind::Normal
- } else {
- AheadKind::Unbounded(true)
- },
+ kind: if bounded { AheadKind::Normal } else { AheadKind::Unbounded(true) },
}
}
@@ -402,7 +401,7 @@ fn is_bounded(kind: &NodeKind) -> bool {
/// previous value of the property.
fn next_at_start(kind: &NodeKind, prev: bool) -> bool {
match kind {
- NodeKind::Space { newlines: (1 ..) } => true,
+ NodeKind::Space { newlines: (1..) } => true,
NodeKind::Space { .. } | NodeKind::LineComment | NodeKind::BlockComment => prev,
_ => false,
}
diff --git a/src/syntax/mod.rs b/src/syntax/mod.rs
index 1a23db5f..2ef49322 100644
--- a/src/syntax/mod.rs
+++ b/src/syntax/mod.rs
@@ -2,6 +2,7 @@
pub mod ast;
pub mod highlight;
+
mod incremental;
mod kind;
mod node;
@@ -12,12 +13,12 @@ mod source;
mod span;
mod tokens;
-pub use kind::*;
-pub use node::*;
-pub use parsing::*;
-pub use source::*;
-pub use span::*;
-pub use tokens::*;
+pub use self::kind::*;
+pub use self::node::*;
+pub use self::parsing::*;
+pub use self::source::*;
+pub use self::span::*;
+pub use self::tokens::*;
use incremental::reparse;
use parser::*;
diff --git a/src/syntax/node.rs b/src/syntax/node.rs
index 4ec4abdf..5758a4bf 100644
--- a/src/syntax/node.rs
+++ b/src/syntax/node.rs
@@ -291,16 +291,16 @@ impl InnerNode {
let mut start = within.start;
if range.is_none() {
let end = start + stride;
- self.data.numberize(id, start .. end)?;
+ self.data.numberize(id, start..end)?;
self.upper = within.end;
start = end;
}
// Number the children.
let len = self.children.len();
- for child in &mut self.children[range.unwrap_or(0 .. len)] {
+ for child in &mut self.children[range.unwrap_or(0..len)] {
let end = start + child.descendants() as u64 * stride;
- child.numberize(id, start .. end)?;
+ child.numberize(id, start..end)?;
start = end;
}
@@ -377,8 +377,8 @@ impl InnerNode {
// - or if we were erroneous before due to a non-superseded node.
self.erroneous = replacement.iter().any(SyntaxNode::erroneous)
|| (self.erroneous
- && (self.children[.. range.start].iter().any(SyntaxNode::erroneous))
- || self.children[range.end ..].iter().any(SyntaxNode::erroneous));
+ && (self.children[..range.start].iter().any(SyntaxNode::erroneous))
+ || self.children[range.end..].iter().any(SyntaxNode::erroneous));
// Perform the replacement.
let replacement_count = replacement.len();
@@ -392,7 +392,7 @@ impl InnerNode {
let max_left = range.start;
let max_right = self.children.len() - range.end;
loop {
- let renumber = range.start - left .. range.end + right;
+ let renumber = range.start - left..range.end + right;
// The minimum assignable number is either
// - the upper bound of the node right before the to-be-renumbered
@@ -416,7 +416,7 @@ impl InnerNode {
.map_or(self.upper(), |next| next.span().number());
// Try to renumber.
- let within = start_number .. end_number;
+ let within = start_number..end_number;
let id = self.span().source();
if self.numberize(id, Some(renumber), within).is_ok() {
return Ok(());
@@ -529,7 +529,7 @@ impl NodeData {
/// If the span points into this node, convert it to a byte range.
fn range(&self, span: Span, offset: usize) -> Option<Range<usize>> {
- (self.span == span).then(|| offset .. offset + self.len())
+ (self.span == span).then(|| offset..offset + self.len())
}
}
diff --git a/src/syntax/parser.rs b/src/syntax/parser.rs
index 4c8e1013..8d51f7eb 100644
--- a/src/syntax/parser.rs
+++ b/src/syntax/parser.rs
@@ -97,7 +97,7 @@ impl<'s> Parser<'s> {
// Trailing trivia should not be wrapped into the new node.
let idx = self.children.len();
self.children.push(SyntaxNode::default());
- self.children.extend(children.drain(until.0 ..));
+ self.children.extend(children.drain(until.0..));
self.children[idx] = InnerNode::with_children(kind, children).into();
}
@@ -177,7 +177,11 @@ impl<'s> Parser<'s> {
/// Peek at the current token without consuming it.
pub fn peek(&self) -> Option<&NodeKind> {
- if self.eof { None } else { self.current.as_ref() }
+ if self.eof {
+ None
+ } else {
+ self.current.as_ref()
+ }
}
/// Peek at the current token, but only if it follows immediately after the
@@ -192,7 +196,7 @@ impl<'s> Parser<'s> {
/// Peek at the source of the current token.
pub fn peek_src(&self) -> &'s str {
- self.get(self.current_start() .. self.current_end())
+ self.get(self.current_start()..self.current_end())
}
/// Obtain a range of the source code.
@@ -303,7 +307,7 @@ impl<'s> Parser<'s> {
if group_mode != TokenMode::Markup {
let start = self.trivia_start().0;
target = self.current_start
- - self.children[start ..].iter().map(SyntaxNode::len).sum::<usize>();
+ - self.children[start..].iter().map(SyntaxNode::len).sum::<usize>();
self.children.truncate(start);
}
@@ -466,7 +470,7 @@ impl Marker {
/// with the given `kind`.
pub fn end(self, p: &mut Parser, kind: NodeKind) {
let until = p.trivia_start().0.max(self.0);
- let children = p.children.drain(self.0 .. until).collect();
+ let children = p.children.drain(self.0..until).collect();
p.children
.insert(self.0, InnerNode::with_children(kind, children).into());
}
@@ -476,7 +480,7 @@ impl Marker {
where
F: FnMut(&SyntaxNode) -> Result<(), &'static str>,
{
- for child in &mut p.children[self.0 ..] {
+ for child in &mut p.children[self.0..] {
// Don't expose errors.
if child.kind().is_error() {
continue;
diff --git a/src/syntax/parsing.rs b/src/syntax/parsing.rs
index 10b4c4c2..fecc527c 100644
--- a/src/syntax/parsing.rs
+++ b/src/syntax/parsing.rs
@@ -90,7 +90,7 @@ pub(crate) fn reparse_markup_elements(
let mut stopped = false;
'outer: while !p.eof() {
- if let Some(NodeKind::Space { newlines: (1 ..) }) = p.peek() {
+ if let Some(NodeKind::Space { newlines: (1..) }) = p.peek() {
if p.column(p.current_end()) < min_indent {
return None;
}
@@ -167,7 +167,7 @@ fn markup_indented(p: &mut Parser, min_indent: usize) {
while !p.eof() {
match p.peek() {
- Some(NodeKind::Space { newlines: (1 ..) })
+ Some(NodeKind::Space { newlines: (1..) })
if p.column(p.current_end()) < min_indent =>
{
break;
@@ -195,7 +195,7 @@ where
p.perform(NodeKind::Markup { min_indent: usize::MAX }, |p| {
let mut at_start = false;
while let Some(kind) = p.peek() {
- if let NodeKind::Space { newlines: (1 ..) } = kind {
+ if let NodeKind::Space { newlines: (1..) } = kind {
break;
}
@@ -210,11 +210,7 @@ where
/// Parse a markup node.
fn markup_node(p: &mut Parser, at_start: &mut bool) {
- let token = match p.peek() {
- Some(t) => t,
- None => return,
- };
-
+ let Some(token) = p.peek() else { return };
match token {
// Whitespace.
NodeKind::Space { newlines } => {
@@ -316,7 +312,7 @@ fn heading(p: &mut Parser, at_start: bool) {
markup_line(p, |kind| matches!(kind, NodeKind::Label(_)));
marker.end(p, NodeKind::Heading);
} else {
- let text = p.get(current_start .. p.prev_end()).into();
+ let text = p.get(current_start..p.prev_end()).into();
marker.convert(p, NodeKind::Text(text));
}
}
@@ -420,12 +416,9 @@ fn math_node_prec(p: &mut Parser, min_prec: usize, stop: Option<NodeKind>) {
Some(NodeKind::Underscore) => {
(NodeKind::Script, 2, Assoc::Right, Some(NodeKind::Hat))
}
- Some(NodeKind::Hat) => (
- NodeKind::Script,
- 2,
- Assoc::Right,
- Some(NodeKind::Underscore),
- ),
+ Some(NodeKind::Hat) => {
+ (NodeKind::Script, 2, Assoc::Right, Some(NodeKind::Underscore))
+ }
Some(NodeKind::Slash) => (NodeKind::Frac, 1, Assoc::Left, None),
_ => break,
};
@@ -454,11 +447,7 @@ fn math_node_prec(p: &mut Parser, min_prec: usize, stop: Option<NodeKind>) {
/// Parse a primary math node.
fn math_primary(p: &mut Parser) {
- let token = match p.peek() {
- Some(t) => t,
- None => return,
- };
-
+ let Some(token) = p.peek() else { return };
match token {
// Spaces, atoms and expressions.
NodeKind::Space { .. }
@@ -652,7 +641,6 @@ fn literal(p: &mut Parser) -> bool {
p.eat();
true
}
-
_ => false,
}
}
@@ -724,50 +712,51 @@ enum CollectionKind {
/// Returns the length of the collection and whether the literal contained any
/// commas.
fn collection(p: &mut Parser, keyed: bool) -> (CollectionKind, usize) {
- let mut kind = None;
+ let mut collection_kind = None;
let mut items = 0;
let mut can_group = true;
let mut missing_coma: Option<Marker> = None;
while !p.eof() {
- if let Ok(item_kind) = item(p, keyed) {
- match item_kind {
- NodeKind::Spread => can_group = false,
- NodeKind::Named if kind.is_none() => {
- kind = Some(CollectionKind::Named);
- can_group = false;
- }
- _ if kind.is_none() => {
- kind = Some(CollectionKind::Positional);
- }
- _ => {}
+ let Ok(item_kind) = item(p, keyed) else {
+ p.eat_if(NodeKind::Comma);
+ collection_kind = Some(CollectionKind::Group);
+ continue;
+ };
+
+ match item_kind {
+ NodeKind::Spread => can_group = false,
+ NodeKind::Named if collection_kind.is_none() => {
+ collection_kind = Some(CollectionKind::Named);
+ can_group = false;
+ }
+ _ if collection_kind.is_none() => {
+ collection_kind = Some(CollectionKind::Positional);
}
+ _ => {}
+ }
- items += 1;
+ items += 1;
- if let Some(marker) = missing_coma.take() {
- p.expected_at(marker, "comma");
- }
+ if let Some(marker) = missing_coma.take() {
+ p.expected_at(marker, "comma");
+ }
- if p.eof() {
- break;
- }
+ if p.eof() {
+ break;
+ }
- if p.eat_if(NodeKind::Comma) {
- can_group = false;
- } else {
- missing_coma = Some(p.trivia_start());
- }
+ if p.eat_if(NodeKind::Comma) {
+ can_group = false;
} else {
- p.eat_if(NodeKind::Comma);
- kind = Some(CollectionKind::Group);
+ missing_coma = Some(p.trivia_start());
}
}
let kind = if can_group && items == 1 {
CollectionKind::Group
} else {
- kind.unwrap_or(CollectionKind::Positional)
+ collection_kind.unwrap_or(CollectionKind::Positional)
};
(kind, items)
diff --git a/src/syntax/resolve.rs b/src/syntax/resolve.rs
index 2ad35cec..bbed3c5c 100644
--- a/src/syntax/resolve.rs
+++ b/src/syntax/resolve.rs
@@ -30,7 +30,6 @@ pub fn resolve_string(string: &str) -> EcoString {
None => out.push_str(s.from(start)),
}
}
-
_ => out.push_str(s.from(start)),
}
}
@@ -66,10 +65,7 @@ pub fn resolve_raw(column: usize, backticks: usize, text: &str) -> RawKind {
/// Parse the lang tag and return it alongside the remaining inner raw text.
fn split_at_lang_tag(raw: &str) -> (&str, &str) {
let mut s = Scanner::new(raw);
- (
- s.eat_until(|c: char| c == '`' || c.is_whitespace() || is_newline(c)),
- s.after(),
- )
+ (s.eat_until(|c: char| c == '`' || c.is_whitespace() || is_newline(c)), s.after())
}
/// Trim raw text and splits it into lines.
@@ -94,7 +90,7 @@ fn trim_and_split_raw(column: usize, mut raw: &str) -> (String, bool) {
.take_while(|c| c.is_whitespace())
.map(char::len_utf8)
.sum();
- *line = &line[offset ..];
+ *line = &line[offset..];
}
let had_newline = lines.len() > 1;
@@ -127,13 +123,13 @@ fn split_lines(text: &str) -> Vec<&str> {
s.eat_if('\n');
}
- lines.push(&text[start .. end]);
+ lines.push(&text[start..end]);
start = s.cursor();
}
end = s.cursor();
}
- lines.push(&text[start ..]);
+ lines.push(&text[start..]);
lines
}
diff --git a/src/syntax/source.rs b/src/syntax/source.rs
index 1b87b1c9..48b0ff0e 100644
--- a/src/syntax/source.rs
+++ b/src/syntax/source.rs
@@ -123,13 +123,13 @@ impl Source {
self.lines.truncate(line + 1);
// Handle adjoining of \r and \n.
- if self.text[.. start_byte].ends_with('\r') && with.starts_with('\n') {
+ if self.text[..start_byte].ends_with('\r') && with.starts_with('\n') {
self.lines.pop();
}
// Recalculate the line starts after the edit.
self.lines
- .extend(lines(start_byte, start_utf16, &self.text[start_byte ..]));
+ .extend(lines(start_byte, start_utf16, &self.text[start_byte..]));
// Incrementally reparse the replaced range.
let mut root = std::mem::take(&mut self.root).into_inner();
@@ -146,7 +146,7 @@ impl Source {
/// Get the length of the file in UTF-16 code units.
pub fn len_utf16(&self) -> usize {
let last = self.lines.last().unwrap();
- last.utf16_idx + self.text[last.byte_idx ..].len_utf16()
+ last.utf16_idx + self.text[last.byte_idx..].len_utf16()
}
/// Get the length of the file in lines.
@@ -167,7 +167,7 @@ impl Source {
pub fn byte_to_utf16(&self, byte_idx: usize) -> Option<usize> {
let line_idx = self.byte_to_line(byte_idx)?;
let line = self.lines.get(line_idx)?;
- let head = self.text.get(line.byte_idx .. byte_idx)?;
+ let head = self.text.get(line.byte_idx..byte_idx)?;
Some(line.utf16_idx + head.len_utf16())
}
@@ -188,7 +188,7 @@ impl Source {
pub fn byte_to_column(&self, byte_idx: usize) -> Option<usize> {
let line = self.byte_to_line(byte_idx)?;
let start = self.line_to_byte(line)?;
- let head = self.get(start .. byte_idx)?;
+ let head = self.get(start..byte_idx)?;
Some(head.chars().count())
}
@@ -202,7 +202,7 @@ impl Source {
)?;
let mut k = line.utf16_idx;
- for (i, c) in self.text[line.byte_idx ..].char_indices() {
+ for (i, c) in self.text[line.byte_idx..].char_indices() {
if k >= utf16_idx {
return Some(line.byte_idx + i);
}
@@ -212,7 +212,6 @@ impl Source {
(k == utf16_idx).then(|| self.text.len())
}
-
/// Return the byte position at which the given line starts.
pub fn line_to_byte(&self, line_idx: usize) -> Option<usize> {
self.lines.get(line_idx).map(|line| line.byte_idx)
@@ -222,7 +221,7 @@ impl Source {
pub fn line_to_range(&self, line_idx: usize) -> Option<Range<usize>> {
let start = self.line_to_byte(line_idx)?;
let end = self.line_to_byte(line_idx + 1).unwrap_or(self.text.len());
- Some(start .. end)
+ Some(start..end)
}
/// Return the byte index of the given (line, column) pair.
@@ -237,7 +236,7 @@ impl Source {
let range = self.line_to_range(line_idx)?;
let line = self.get(range.clone())?;
let mut chars = line.chars();
- for _ in 0 .. column_idx {
+ for _ in 0..column_idx {
chars.next();
}
Some(range.start + (line.len() - chars.as_str().len()))
@@ -312,10 +311,7 @@ fn lines(
utf16_idx += 1;
}
- Some(Line {
- byte_idx: byte_offset + s.cursor(),
- utf16_idx,
- })
+ Some(Line { byte_idx: byte_offset + s.cursor(), utf16_idx })
})
}
@@ -328,12 +324,15 @@ mod tests {
#[test]
fn test_source_file_new() {
let source = Source::detached(TEST);
- assert_eq!(source.lines, [
- Line { byte_idx: 0, utf16_idx: 0 },
- Line { byte_idx: 7, utf16_idx: 6 },
- Line { byte_idx: 15, utf16_idx: 12 },
- Line { byte_idx: 18, utf16_idx: 15 },
- ]);
+ assert_eq!(
+ source.lines,
+ [
+ Line { byte_idx: 0, utf16_idx: 0 },
+ Line { byte_idx: 7, utf16_idx: 6 },
+ Line { byte_idx: 15, utf16_idx: 12 },
+ Line { byte_idx: 18, utf16_idx: 15 },
+ ]
+ );
}
#[test]
@@ -411,20 +410,20 @@ mod tests {
}
// Test inserting at the begining.
- test("abc\n", 0 .. 0, "hi\n", "hi\nabc\n");
- test("\nabc", 0 .. 0, "hi\r", "hi\r\nabc");
+ test("abc\n", 0..0, "hi\n", "hi\nabc\n");
+ test("\nabc", 0..0, "hi\r", "hi\r\nabc");
// Test editing in the middle.
- test(TEST, 4 .. 16, "❌", "ä\tc❌i\rjkl");
+ test(TEST, 4..16, "❌", "ä\tc❌i\rjkl");
// Test appending.
- test("abc\ndef", 7 .. 7, "hi", "abc\ndefhi");
- test("abc\ndef\n", 8 .. 8, "hi", "abc\ndef\nhi");
+ test("abc\ndef", 7..7, "hi", "abc\ndefhi");
+ test("abc\ndef\n", 8..8, "hi", "abc\ndef\nhi");
// Test appending with adjoining \r and \n.
- test("abc\ndef\r", 8 .. 8, "\nghi", "abc\ndef\r\nghi");
+ test("abc\ndef\r", 8..8, "\nghi", "abc\ndef\r\nghi");
// Test removing everything.
- test(TEST, 0 .. 21, "", "");
+ test(TEST, 0..21, "", "");
}
}
diff --git a/src/syntax/span.rs b/src/syntax/span.rs
index e3ff67b8..08bce4d5 100644
--- a/src/syntax/span.rs
+++ b/src/syntax/span.rs
@@ -70,7 +70,7 @@ impl Span {
const DETACHED: u64 = 1;
/// The full range of numbers available to spans.
- pub const FULL: Range<u64> = 2 .. (1 << Self::BITS);
+ pub const FULL: Range<u64> = 2..(1 << Self::BITS);
/// Create a new span from a source id and a unique number.
///
diff --git a/src/syntax/tokens.rs b/src/syntax/tokens.rs
index c787fa69..f18bb780 100644
--- a/src/syntax/tokens.rs
+++ b/src/syntax/tokens.rs
@@ -373,7 +373,7 @@ impl<'s> Tokens<'s> {
NodeKind::Raw(Arc::new(resolve_raw(
column,
backticks,
- self.s.get(start .. end),
+ self.s.get(start..end),
)))
} else {
self.terminated = false;
@@ -548,7 +548,7 @@ impl<'s> Tokens<'s> {
self.s.eat_while(char::is_ascii_alphanumeric);
}
- let number = self.s.get(start .. suffix_start);
+ let number = self.s.get(start..suffix_start);
let suffix = self.s.from(suffix_start);
// Find out whether it is a simple number.
@@ -558,9 +558,8 @@ impl<'s> Tokens<'s> {
}
}
- let v = match number.parse::<f64>() {
- Ok(v) => v,
- Err(_) => return NodeKind::Error(ErrorPos::Full, "invalid number".into()),
+ let Ok(v) = number.parse::<f64>() else {
+ return NodeKind::Error(ErrorPos::Full, "invalid number".into());
};
match suffix {
@@ -636,7 +635,7 @@ fn keyword(ident: &str) -> Option<NodeKind> {
#[inline]
fn column(string: &str, index: usize, offset: usize) -> usize {
let mut apply_offset = false;
- let res = string[.. index]
+ let res = string[..index]
.char_indices()
.rev()
.take_while(|&(_, c)| !is_newline(c))
@@ -653,7 +652,11 @@ fn column(string: &str, index: usize, offset: usize) -> usize {
apply_offset = true;
}
- if apply_offset { res + offset } else { res }
+ if apply_offset {
+ res + offset
+ } else {
+ res
+ }
}
/// Whether this character denotes a newline.
@@ -767,8 +770,8 @@ mod tests {
// - mode in which the suffix is applicable
// - the suffix string
// - the resulting suffix NodeKind
- fn suffixes()
- -> impl Iterator<Item = (char, Option<TokenMode>, &'static str, NodeKind)> {
+ fn suffixes(
+ ) -> impl Iterator<Item = (char, Option<TokenMode>, &'static str, NodeKind)> {
[
// Whitespace suffixes.
(' ', None, " ", Space(0)),
diff --git a/src/util/eco.rs b/src/util/eco.rs
index 800760e2..5a4d7629 100644
--- a/src/util/eco.rs
+++ b/src/util/eco.rs
@@ -68,7 +68,7 @@ impl EcoString {
let len = slice.len();
Self(if len <= LIMIT {
let mut buf = [0; LIMIT];
- buf[.. len].copy_from_slice(slice.as_bytes());
+ buf[..len].copy_from_slice(slice.as_bytes());
Repr::Small { buf, len: len as u8 }
} else {
Repr::Large(Arc::new(s.into()))
@@ -116,7 +116,7 @@ impl EcoString {
let prev = usize::from(*len);
let new = prev + string.len();
if new <= LIMIT {
- buf[prev .. new].copy_from_slice(string.as_bytes());
+ buf[prev..new].copy_from_slice(string.as_bytes());
*len = new as u8;
} else {
let mut spilled = String::with_capacity(new);
@@ -161,7 +161,7 @@ impl EcoString {
pub fn to_lowercase(&self) -> Self {
if let Repr::Small { mut buf, len } = self.0 {
if self.is_ascii() {
- buf[.. usize::from(len)].make_ascii_lowercase();
+ buf[..usize::from(len)].make_ascii_lowercase();
return Self(Repr::Small { buf, len });
}
}
@@ -173,7 +173,7 @@ impl EcoString {
pub fn to_uppercase(&self) -> Self {
if let Repr::Small { mut buf, len } = self.0 {
if self.is_ascii() {
- buf[.. usize::from(len)].make_ascii_uppercase();
+ buf[..usize::from(len)].make_ascii_uppercase();
return Self(Repr::Small { buf, len });
}
}
@@ -191,10 +191,10 @@ impl EcoString {
let prev = usize::from(len);
let new = prev.saturating_mul(n);
if new <= LIMIT {
- let src = &buf[.. prev];
+ let src = &buf[..prev];
let mut buf = [0; LIMIT];
- for i in 0 .. n {
- buf[prev * i .. prev * (i + 1)].copy_from_slice(src);
+ for i in 0..n {
+ buf[prev * i..prev * (i + 1)].copy_from_slice(src);
}
return Self(Repr::Small { buf, len: new as u8 });
}
@@ -217,7 +217,7 @@ impl Deref for EcoString {
// Furthermore, we still do the bounds-check on the len in case
// it gets corrupted somehow.
Repr::Small { buf, len } => unsafe {
- std::str::from_utf8_unchecked(&buf[.. usize::from(*len)])
+ std::str::from_utf8_unchecked(&buf[..usize::from(*len)])
},
Repr::Large(string) => string.as_str(),
}
@@ -398,9 +398,9 @@ mod tests {
assert_eq!(EcoString::from("abc"), "abc");
// Test around the inline limit.
- assert_eq!(EcoString::from(&ALPH[.. LIMIT - 1]), ALPH[.. LIMIT - 1]);
- assert_eq!(EcoString::from(&ALPH[.. LIMIT]), ALPH[.. LIMIT]);
- assert_eq!(EcoString::from(&ALPH[.. LIMIT + 1]), ALPH[.. LIMIT + 1]);
+ assert_eq!(EcoString::from(&ALPH[..LIMIT - 1]), ALPH[..LIMIT - 1]);
+ assert_eq!(EcoString::from(&ALPH[..LIMIT]), ALPH[..LIMIT]);
+ assert_eq!(EcoString::from(&ALPH[..LIMIT + 1]), ALPH[..LIMIT + 1]);
// Test heap string.
assert_eq!(EcoString::from(ALPH), ALPH);
@@ -443,7 +443,7 @@ mod tests {
assert_eq!(v, "Hello World");
// Remove one-by-one.
- for _ in 0 .. 10 {
+ for _ in 0..10 {
v.pop();
}
@@ -462,7 +462,7 @@ mod tests {
fn test_str_index() {
// Test that we can use the index syntax.
let v = EcoString::from("abc");
- assert_eq!(&v[.. 2], "ab");
+ assert_eq!(&v[..2], "ab");
}
#[test]
diff --git a/src/util/fat.rs b/src/util/fat.rs
index bb557bc9..728f6ae8 100644
--- a/src/util/fat.rs
+++ b/src/util/fat.rs
@@ -5,7 +5,7 @@
//! pointer metadata APIs are stable, we should definitely move to them:
//! <https://github.com/rust-lang/rust/issues/81513>
-use std::alloc;
+use std::alloc::Layout;
use std::mem;
/// Create a fat pointer from a data address and a vtable address.
@@ -15,12 +15,8 @@ use std::mem;
/// to a value whose type implements the trait of `T` and the `vtable` must have
/// been extracted with [`vtable`].
pub unsafe fn from_raw_parts<T: ?Sized>(data: *const (), vtable: *const ()) -> *const T {
- debug_assert_eq!(
- alloc::Layout::new::<*const T>(),
- alloc::Layout::new::<FatPointer>(),
- );
-
let fat = FatPointer { data, vtable };
+ debug_assert_eq!(Layout::new::<*const T>(), Layout::new::<FatPointer>());
mem::transmute_copy::<FatPointer, *const T>(&fat)
}
@@ -31,12 +27,8 @@ pub unsafe fn from_raw_parts<T: ?Sized>(data: *const (), vtable: *const ()) -> *
/// to a value whose type implements the trait of `T` and the `vtable` must have
/// been extracted with [`vtable`].
pub unsafe fn from_raw_parts_mut<T: ?Sized>(data: *mut (), vtable: *const ()) -> *mut T {
- debug_assert_eq!(
- alloc::Layout::new::<*mut T>(),
- alloc::Layout::new::<FatPointer>(),
- );
-
let fat = FatPointer { data, vtable };
+ debug_assert_eq!(Layout::new::<*mut T>(), Layout::new::<FatPointer>());
mem::transmute_copy::<FatPointer, *mut T>(&fat)
}
@@ -45,11 +37,7 @@ pub unsafe fn from_raw_parts_mut<T: ?Sized>(data: *mut (), vtable: *const ()) ->
/// # Safety
/// Must only be called when `T` is a `dyn Trait`.
pub unsafe fn vtable<T: ?Sized>(ptr: *const T) -> *const () {
- debug_assert_eq!(
- alloc::Layout::new::<*const T>(),
- alloc::Layout::new::<FatPointer>(),
- );
-
+ debug_assert_eq!(Layout::new::<*const T>(), Layout::new::<FatPointer>());
mem::transmute_copy::<*const T, FatPointer>(&ptr).vtable
}
diff --git a/src/util/mod.rs b/src/util/mod.rs
index df3c446e..c6809d23 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -2,13 +2,13 @@
pub mod fat;
-pub use buffer::Buffer;
-pub use eco::{format_eco, EcoString};
-
#[macro_use]
mod eco;
mod buffer;
+pub use buffer::Buffer;
+pub use eco::{format_eco, EcoString};
+
use std::any::TypeId;
use std::fmt::{self, Debug, Formatter};
use std::hash::Hash;