pub enum FileAnchor {
End,
Start,
Line(u32),
}Expand description
Where in a target file an Effect::WriteToFile lands.
§Examples
use lattice_grammar::effect::FileAnchor;
// A 3-line file: append inserts before line 3 (one past the last).
assert_eq!(FileAnchor::End.resolve_line(3), 3);
assert_eq!(FileAnchor::Start.resolve_line(3), 0);
assert_eq!(FileAnchor::Line(1).resolve_line(3), 1);
// Past the end clamps to append instead of failing.
assert_eq!(FileAnchor::Line(9).resolve_line(3), 3);A position, not a range, and the asymmetry with Effect::ApplyEdit
is the answer rather than an inconsistency to tidy away
(cross-file-writes.md §4).
For its own buffer a producer holds a document handle: it can read lines, count them, and compute a range that means something. For another file it holds nothing — it has never seen the bytes, so a range it invented would be a guess. These are the three positions namable without reading, and they are exactly the three archive, refile and capture need.
Insert-only also bounds the blast radius: it cannot silently destroy content in a file the user was not looking at, where a range-carrying primitive could on an off-by-one and the user would find out later.
Variants§
End
After the last line — the common case. Archive, refile and capture all append by default.
Start
Before the first line.
Line(u32)
Before this 0-based line. Past the end clamps to FileAnchor::End
rather than erroring: a producer computing a line from a file it has
not read can legitimately be off, and refusing to file the text at all
is worse than filing it at the end.
Implementations§
Source§impl FileAnchor
impl FileAnchor
Sourcepub fn resolve_line(self, line_count: u32) -> u32
pub fn resolve_line(self, line_count: u32) -> u32
The 0-based line an insert should happen before, given the target’s line count.
line_count is the number of content lines. End yields
line_count, i.e. one past the last — which is what “append” means to
the caller building a Position.
Trait Implementations§
Source§impl Clone for FileAnchor
impl Clone for FileAnchor
Source§fn clone(&self) -> FileAnchor
fn clone(&self) -> FileAnchor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for FileAnchor
Source§impl Debug for FileAnchor
impl Debug for FileAnchor
impl Eq for FileAnchor
Source§impl PartialEq for FileAnchor
impl PartialEq for FileAnchor
impl StructuralPartialEq for FileAnchor
Auto Trait Implementations§
impl Freeze for FileAnchor
impl RefUnwindSafe for FileAnchor
impl Send for FileAnchor
impl Sync for FileAnchor
impl Unpin for FileAnchor
impl UnsafeUnpin for FileAnchor
impl UnwindSafe for FileAnchor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.