Expand description
§Application Customization
§Overview
This module contains traits that library consumers can use for extending modalkit to better fit their own needs.
§Example
use std::fmt;
use std::path::PathBuf;
use editor_types::{
application::{
ApplicationAction,
ApplicationError,
ApplicationWindowId,
ApplicationContentId,
ApplicationInfo,
ApplicationStore,
},
context::EditContext,
prelude::*,
};
use keybindings::SequenceStatus;
// Unique identifier for a review.
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
struct ReviewId(usize);
// Unique identifier for a user.
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
struct UserId(usize);
#[derive(Clone, Debug, Eq, PartialEq)]
enum CodeReviewAction {
// Approve a review for merging.
Approve(ReviewId),
// Leave a comment on a line in a file in a review.
Comment(ReviewId, PathBuf, usize, String),
// Show more lines around the hunk.
ExpandHunk(Count),
// Merge changes after review and approval.
Merge(ReviewId),
}
impl ApplicationAction for CodeReviewAction {
fn is_edit_sequence(&self, _: &EditContext) -> SequenceStatus {
match self {
CodeReviewAction::Approve(..) => SequenceStatus::Break,
CodeReviewAction::Comment(..) => SequenceStatus::Break,
CodeReviewAction::ExpandHunk(..) => SequenceStatus::Atom,
CodeReviewAction::Merge(..) => SequenceStatus::Break,
}
}
fn is_last_action(&self, _: &EditContext) -> SequenceStatus {
match self {
CodeReviewAction::Approve(..) => SequenceStatus::Atom,
CodeReviewAction::Comment(..) => SequenceStatus::Atom,
CodeReviewAction::ExpandHunk(..) => SequenceStatus::Atom,
CodeReviewAction::Merge(..) => SequenceStatus::Atom,
}
}
fn is_last_selection(&self, _: &EditContext) -> SequenceStatus {
match self {
CodeReviewAction::Approve(..) => SequenceStatus::Ignore,
CodeReviewAction::Comment(..) => SequenceStatus::Ignore,
CodeReviewAction::ExpandHunk(..) => SequenceStatus::Ignore,
CodeReviewAction::Merge(..) => SequenceStatus::Ignore,
}
}
fn is_switchable(&self, _: &EditContext) -> bool {
match self {
CodeReviewAction::Approve(..) => false,
CodeReviewAction::Comment(..) => false,
CodeReviewAction::ExpandHunk(..) => false,
CodeReviewAction::Merge(..) => false,
}
}
}
struct CodeReviewStore {
user: UserId,
}
impl ApplicationStore for CodeReviewStore {}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
enum CodeReviewWindowId {
// A window that shows a code review.
Review(ReviewId),
// A window that shows a user's open reviews.
User(UserId),
}
impl ApplicationWindowId for CodeReviewWindowId {}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
enum CodeReviewContentId {
// Different buffer used by the command bar.
Command(CommandType),
// Buffer for a comment left on a line.
Review(ReviewId, usize),
}
impl ApplicationContentId for CodeReviewContentId {}
#[derive(Debug)]
enum CodeReviewError {
NoReview(ReviewId),
}
impl fmt::Display for CodeReviewError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
CodeReviewError::NoReview(id) => write!(f, "No review with ID {:?}", id),
}
}
}
impl ApplicationError for CodeReviewError {}
#[derive(Clone, Debug, Eq, PartialEq)]
enum CodeReviewInfo {}
impl ApplicationInfo for CodeReviewInfo {
type Error = CodeReviewError;
type Action = CodeReviewAction;
type Store = CodeReviewStore;
type WindowId = CodeReviewWindowId;
type ContentId = CodeReviewContentId;
fn content_of_command(ct: CommandType) -> CodeReviewContentId {
CodeReviewContentId::Command(ct)
}
}Enums§
- Empty
Info - A default implementor of ApplicationInfo for consumers that don’t require any customization.
Traits§
- Application
Action - Trait for objects that describe application-specific actions.
- Application
Content Id - Trait for identifiers of specific content within a window in an application.
- Application
Error - Trait for application-specific errors.
- Application
Info - Trait for objects that describe application-specific behaviour and types.
- Application
Store - Trait for objects that hold application-specific information.
- Application
Window Id - Trait for window identifiers in an application.