parse-style 0.2.0

Parse & display rich-compatible style strings
Documentation
[package]
name = "parse-style"
version = "0.2.0"
edition = "2024"
rust-version = "1.86"
description = "Parse & display rich-compatible style strings"
authors = ["John Thorvald Wodder II <parse-style@varonathe.org>"]
repository = "https://github.com/jwodder/parse-style"
license = "MIT"
keywords = ["ansi", "styling", "terminal", "color"]
categories = ["command-line-interface", "parser-implementations"]
exclude = ["/.*", "/tools"]

[dependencies]
anstyle = { version = "1.0.11", optional = true }
# crossterm needs the "windows" feature just to compile on Windows:
crossterm = { version = "0.29.0", optional = true, default-features = false, features = ["windows"] }
phf = { version = "0.13.1", features = ["macros", "unicase"] }
ratatui-core = { version = "0.1.0", default-features = false, optional = true }
serde = { version = "1.0.219", optional = true }
strum = { version = "0.27.1", features = ["derive"] }
thiserror = "2.0.12"
unicase = "2.8.1"

[dev-dependencies]
rstest = { version = "0.26.0", default-features = false }
serde = { version = "1.0.219", features = ["derive"] }

[features]
anstyle = ["dep:anstyle"]
crossterm = ["dep:crossterm"]
ratatui = ["dep:ratatui-core"]
serde = ["dep:serde"]

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints.rust]
# Lint groups:
deprecated_safe = { level = "deny", priority = -1 }
future_incompatible = { level = "deny", priority = -1 }
refining_impl_trait = { level = "deny", priority = -1 }
rust_2018_idioms = { level = "deny", priority = -1 }
unused = { level = "deny", priority = -1 }

# Set some lints in "unused" back to "warn" (to be denied again under CI):
dead_code = "warn"
unused_variables = "warn"

# Deny various allow-by-default lints:
macro_use_extern_crate = "deny"
missing_debug_implementations = "deny"
redundant_lifetimes = "deny"
single_use_lifetimes = "deny"
trivial_casts = "deny"
unit_bindings = "deny"
unnameable_types = "deny"
unreachable_pub = "deny"
unsafe_code = "deny"
unsafe_op_in_unsafe_fn = "deny"
unused_import_braces = "deny"
unused_lifetimes = "deny"
unused_qualifications = "deny"

# Deny various warn-by-default lints:
ambiguous_glob_reexports = "deny"
break_with_label_and_loop = "deny"
confusable_idents = "deny"
const_item_mutation = "deny"
deprecated = "deny"
deprecated_where_clause_location = "deny"
drop_bounds = "deny"
dropping_copy_types = "deny"
dropping_references = "deny"
duplicate_macro_attributes = "deny"
dyn_drop = "deny"
exported_private_dependencies = "deny"
for_loops_over_fallibles = "deny"
forgetting_copy_types = "deny"
forgetting_references = "deny"
function_item_references = "deny"
hidden_glob_reexports = "deny"
inline_no_sanitize = "deny"
internal_features = "deny"
invalid_from_utf8 = "deny"
invalid_macro_export_arguments = "deny"
invalid_nan_comparisons = "deny"
invalid_value = "deny"
irrefutable_let_patterns = "deny"
mixed_script_confusables = "deny"
named_arguments_used_positionally = "deny"
non_contiguous_range_endpoints = "deny"
non_fmt_panics = "deny"
non_shorthand_field_patterns = "deny"
noop_method_call = "deny"
opaque_hidden_inferred_bound = "deny"
overlapping_range_endpoints = "deny"
private_bounds = "deny"
private_interfaces = "deny"
special_module_name = "deny"
stable_features = "deny"
static_mut_refs = "deny"
suspicious_double_ref_op = "deny"
trivial_bounds = "deny"
type_alias_bounds = "deny"
unconditional_recursion = "deny"
unexpected_cfgs = "deny"
ungated_async_fn_track_caller = "deny"
unused_associated_type_bounds = "deny"
unused_comparisons = "deny"
while_true = "deny"

[lints.rustdoc]
bare_urls = "deny"
broken_intra_doc_links = "deny"
invalid_codeblock_attributes = "deny"
invalid_html_tags = "deny"
invalid_rust_codeblocks = "deny"
private_intra_doc_links = "deny"
redundant_explicit_links = "deny"
unescaped_backticks = "deny"

[lints.clippy]
# Deny all warn-by-default lints:
all = { level = "deny", priority = -1 }

# Warn on various allow-by-default lints (denied under CI):
dbg_macro = "warn"
todo = "warn"
unimplemented = "warn"

# Deny various allow-by-default lints:
as_underscore = "deny"
bool_to_int_with_if = "deny"
cast_possible_truncation = "deny"
cast_possible_wrap = "deny"
cast_precision_loss = "deny"
cast_sign_loss = "deny"
cfg_not_test = "deny"
checked_conversions = "deny"
clear_with_drain = "deny"
cloned_instead_of_copied = "deny"
collection_is_never_read = "deny"
comparison_chain = "deny"
copy_iterator = "deny"
debug_assert_with_mut_call = "deny"
default_trait_access = "deny"
derive_partial_eq_without_eq = "deny"
doc_link_with_quotes = "deny"
doc_markdown = "deny"
empty_enum_variants_with_brackets = "deny"
empty_structs_with_brackets = "deny"
equatable_if_let = "deny"
exit = "deny"
explicit_into_iter_loop = "deny"
explicit_iter_loop = "deny"
filter_map_next = "deny"
flat_map_option = "deny"
float_cmp = "deny"
float_cmp_const = "deny"
fn_to_numeric_cast_any = "deny"
format_collect = "deny"
format_push_string = "deny"
future_not_send = "deny"
get_unwrap = "deny"
if_then_some_else_none = "deny"
ignored_unit_patterns = "deny"
impl_trait_in_params = "deny"
implicit_clone = "deny"
imprecise_flops = "deny"
index_refutable_slice = "deny"
infinite_loop = "deny"
into_iter_without_iter = "deny"
invalid_upcast_comparisons = "deny"
ip_constant = "deny"
items_after_statements = "deny"
iter_filter_is_ok = "deny"
iter_filter_is_some = "deny"
iter_not_returning_iterator = "deny"
iter_with_drain = "deny"
large_futures = "deny"
large_types_passed_by_value = "deny"
linkedlist = "deny"
lossy_float_literal = "deny"
manual_assert = "deny"
manual_instant_elapsed = "deny"
manual_is_power_of_two = "deny"
manual_is_variant_and = "deny"
manual_let_else = "deny"
manual_midpoint = "deny"
manual_string_new = "deny"
map_unwrap_or = "deny"
map_with_unused_argument_over_ranges = "deny"
match_bool = "deny"
match_wild_err_arm = "deny"
mem_forget = "deny"
mismatching_type_param_order = "deny"
missing_assert_message = "deny"
missing_asserts_for_indexing = "deny"
missing_panics_doc = "deny"
missing_safety_doc = "deny"
mixed_read_write_in_expression = "deny"
mut_mut = "deny"
needless_bitwise_bool = "deny"
needless_collect = "deny"
needless_for_each = "deny"
needless_pass_by_ref_mut = "deny"
needless_raw_string_hashes = "deny"
needless_raw_strings = "deny"
negative_feature_names = "deny"
non_zero_suggestions = "deny"
option_as_ref_cloned = "deny"
or_fun_call = "deny"
path_buf_push_overwrite = "deny"
pathbuf_init_then_push = "deny"
precedence_bits = "deny"
pub_underscore_fields = "deny"
pub_without_shorthand = "deny"
range_minus_one = "deny"
range_plus_one = "deny"
rc_buffer = "deny"
rc_mutex = "deny"
read_zero_byte_vec = "deny"
redundant_clone = "deny"
redundant_closure_for_method_calls = "deny"
redundant_feature_names = "deny"
ref_binding_to_reference = "deny"
rest_pat_in_fully_bound_structs = "deny"
return_and_then = "deny"
same_functions_in_if_condition = "deny"
semicolon_if_nothing_returned = "deny"
set_contains_or_insert = "deny"
should_panic_without_expect = "deny"
single_char_pattern = "deny"
single_match_else = "deny"
stable_sort_primitive = "deny"
str_split_at_newline = "deny"
string_add_assign = "deny"
string_lit_as_bytes = "deny"
string_lit_chars_any = "deny"
struct_field_names = "deny"
suboptimal_flops = "deny"
trailing_empty_array = "deny"
trait_duplication_in_bounds = "deny"
trivial_regex = "deny"
try_err = "deny"
type_repetition_in_bounds = "deny"
unchecked_time_subtraction = "deny"
undocumented_unsafe_blocks = "deny"
unicode_not_nfc = "deny"
uninhabited_references = "deny"
uninlined_format_args = "deny"
unnecessary_join = "deny"
unnecessary_literal_bound = "deny"
unnecessary_safety_comment = "deny"
unnecessary_safety_doc = "deny"
unnecessary_self_imports = "deny"
unnecessary_struct_initialization = "deny"
unnecessary_wraps = "deny"
unneeded_field_pattern = "deny"
unnested_or_patterns = "deny"
unused_async = "deny"
unused_peekable = "deny"
unused_result_ok = "deny"
unused_rounding = "deny"
unwrap_used = "deny"
used_underscore_binding = "deny"
used_underscore_items = "deny"
while_float = "deny"
wildcard_dependencies = "deny"
zero_sized_map_values = "deny"