The way I write code is not the way I read code, especially when I read code on the web (such as my own personal site). Lines that are fine in my editor are often too long for the web to comfortably read without swiping back and forth. This is why I run my Rust code through a custom rustfmt config.
First we need to write out a rustfmt toml file. We can use the default one like this:
rustfmt --print-config default ./rustfmt.toml
The config looks like this, which I remove most of
max_width = 100hard_tabs = falsetab_spaces = 4newline_style = "Auto"use_small_heuristics = "Default"indent_style = "Block"wrap_comments = falseformat_code_in_doc_comments = falsecomment_width = 80normalize_comments = falsenormalize_doc_attributes = falselicense_template_path = ""format_strings = falseformat_macro_matchers = falseformat_macro_bodies = trueempty_item_single_line = truestruct_lit_single_line = truefn_single_line = falsewhere_single_line = falseimports_indent = "Block"imports_layout = "Mixed"merge_imports = falsereorder_imports = truereorder_modules = truereorder_impl_items = falsetype_punctuation_density = "Wide"space_before_colon = falsespace_after_colon = truespaces_around_ranges = falsebinop_separator = "Front"remove_nested_parens = truecombine_control_expr = trueoverflow_delimited_expr = falsestruct_field_align_threshold = 0enum_discrim_align_threshold = 0match_arm_blocks = trueforce_multiline_blocks = falsefn_args_layout = "Tall"brace_style = "SameLineWhere"control_brace_style = "AlwaysSameLine"trailing_semicolon = truetrailing_comma = "Vertical"match_block_trailing_comma = falseblank_lines_upper_bound = 1blank_lines_lower_bound = 0edition = "2015"version = "One"inline_attribute_width = 0merge_derives = trueuse_try_shorthand = falseuse_field_init_shorthand = falseforce_explicit_abi = truecondense_wildcard_suffixes = falsecolor = "Auto"required_version = "1.4.17"unstable_features = falsedisable_all_formatting = falseskip_children = falsehide_parse_errors = falseerror_on_line_overflow = falseerror_on_unformatted = falsereport_todo = "Never"report_fixme = "Never"ignore = []emit_mode = "Files"make_backup = false
The line I care most about is max_width = 100
which I set to something like 60 for the web.
To use this configuration, on mac os I copy code into my clipboard and then use pbpaste to pipe it to rustfmt and back to my clipboard.
pbpaste | rustfmt --config-path ~/github/christopherbiscardi/dotfiles/rustfmt.toml | pbcopy
code before formatting:
pub fn atx_heading(input: &[u8]) -> IResult<&[u8], ATXHeading, MDXError<&[u8]>> {let (input, hashes) = hashtags(input).map_err(Err::convert)?;if hashes.len() > 6 {return Err(Error(MDXError::TooManyHashes));}let (input, _) = spaces(input).map_err(Err::convert)?;let (input, val) = rest_of_line(std::str::from_utf8(input).unwrap()).map_err(Err::convert)?;Ok((input.as_bytes(),ATXHeading {level: hashes.len(),value: val.as_bytes(),},))}
code after formatting. Note that comments don't change, so if you have a particularly long comment you may need a nightly rustfmt feature to deal with that pertaining to comment wrapping.
pub fn atx_heading(input: &[u8],) -> IResult<&[u8], ATXHeading, MDXError<&[u8]>> {let (input, hashes) =hashtags(input).map_err(Err::convert)?;if hashes.len() > 6 {return Err(Error(MDXError::TooManyHashes));}let (input, _) = spaces(input).map_err(Err::convert)?;let (input, val) =rest_of_line(std::str::from_utf8(input).unwrap()).map_err(Err::convert)?;Ok((input.as_bytes(),ATXHeading {level: hashes.len(),value: val.as_bytes(),},))}