paper 0.4.0

A terminal-based editor with goals to maximize simplicity and efficiency.
Documentation
alias b := build
alias d := doc
alias f := fix
alias l := lint
alias t := test
alias v := validate

# Ideally `build` would allow warnings - see https://github.com/rust-lang/cargo/issues/3591.
#
# Builds the project
build:
    cargo build

# This ideally would use some conditional functionality built into just.
#
# Installs everything needed for dependencies
_install_deps:
    cargo deny --version || cargo install cargo-deny

# Installs everything needed for formatting
_install_format:
    rustup component add rustfmt

# Installs everything needed for linting
_install_lint:
    rustup component add clippy

# Generates documentation for public items
doc:
    cargo doc

# Generates documentation for public and private items
doc_all:
    cargo doc --document-private-items

# Fixes issues that can be addressed automatically
fix: _install_format fix_format

# Formats rust code
fix_format: _install_format
    cargo fmt

# Any lint that is allowed is explained below:
# - box_pointers: box pointers are okay and useful
# - variant_size_differences: handled by clippy::large_enum_variant
# - clippy::empty_enum: recommended `!` type is not stable
# - clippy::multiple_crate_versions: not fixable when caused by dependencies
# - clippy::implicit_return: rust convention calls for implicit return
# - clippy::redundant_pub_crate: conflicts with unreachable_pub
#
# unused_crate_dependencies is only checked for lib target.
#
# Lints the project source code
lint: _install_lint
    cargo clippy -- \
     -D warnings \
     -D absolute_paths_not_starting_with_crate \
     -D anonymous_parameters \
     -A box_pointers \
     -D deprecated_in_future \
     -D elided_lifetimes_in_paths \
     -D explicit_outlives_requirements \
     -D keyword_idents \
     -D macro_use_extern_crate \
     -D meta_variable_misuse \
     -D missing_copy_implementations \
     -D missing_crate_level_docs \
     -D missing_debug_implementations \
     -D missing_docs \
     -D missing_doc_code_examples \
     -D non_ascii_idents \
     -D pointer_structural_match \
     -D private_doc_tests \
     -D single_use_lifetimes \
     -D trivial_casts \
     -D trivial_numeric_casts \
     -D unaligned_references \
     -D unreachable_pub \
     -D unsafe_code \
     -D unstable_features \
     -D unused_extern_crates \
     -D unused_import_braces \
     -D unused_lifetimes \
     -D unused_qualifications \
     -D unused_results \
     -A variant_size_differences \
     -D clippy::correctness \
     -D clippy::restriction \
     -D clippy::style \
     -D clippy::pedantic \
     -D clippy::complexity \
     -D clippy::perf \
     -D clippy::cargo \
     -D clippy::nursery \
     -A clippy::empty_enum \
     -A clippy::multiple_crate_versions \
     -A clippy::implicit_return \
     -A clippy::redundant_pub_crate
    cargo clippy --lib -- -D unused_crate_dependencies

# Create pull request for resolving <issue_num>
pr issue_num:
    hub pull-request --push -m "`hub issue show -f "%t" {{issue_num}}`" -m "Closes #{{issue_num}}"

# Configures the version of rust
set_rust version:
    rustup override set {{version}}

# Runs tests
test:
    cargo test --verbose --all-features

# Validates the project
validate: (set_rust "1.48.0") validate_format validate_deps lint build test validate_doc

# Validates dependencies of the project
validate_deps: _install_deps
    cargo deny check

# Validates the documentation of the project
validate_doc:
    cargo rustdoc -- -D rustdoc

# Validates the formatting of the project
validate_format: _install_format
    cargo fmt -- --check