Monorepo for dprint—a pluggable and configurable code formatting platform

Overview

dprint

CI Homebrew

Monorepo for dprint—a pluggable and configurable code formatting platform.

This project is under active early development. I recommend you check its output to ensure it's doing its job correctly and only run this on code that has been checked into source control.

Links

Plugins

Notes

This repo is under active early development.

  1. The interface between the CLI and plugins might change often. You may need to keep updating to the latest version of both the CLI and plugins (the CLI will let you know what to do).
    • An upgrade path will be outlined in the release notes when this occurs.
  2. I do a lot of this development in my spare time. Please consider sponsoring if you are a commercial company using this.
Comments
  • Globbing broken (`excludes`) in 0.16.1

    Globbing broken (`excludes`) in 0.16.1

    Version: 0.16.1

    We have an excludes rule in the config in 0.15.0:

      "excludes": [
        "report.*.*.*.*.*.json"
      ]
    

    that excludes some JSON that is created by IntelliJ:

    .ijwb/report.20201030.234629.86995.0.001.json
    .ijwb/report.20210827.130047.13633.0.001.json
    .ijwb/report.20201030.235004.87316.0.001.json
    .ijwb/report.20210827.132614.16001.0.001.json
    # more here
    

    Before, these files were ignored, with 0.16.1 they are now a match, being part of output-file-paths or check:

    dprint output-file-paths --plugins https://plugins.dprint.dev/json-0.12.0.wasm https://plugins.dprint.dev/markdown-0.8.0.wasm
    

    I thought it was maybe introduced in a825704706bb94a6b60a88dbd951f41f4d092552 and fixed again in bde47767604f71c6e129242191a6040226b5e730 but it seems to persist on HEAD (d78651ba4bf0cfc29e86d522da48b422186c3002). Will try and create a unit test for it.

    bug priority: high 
    opened by joscha 14
  • Use plugin by pattern matching

    Use plugin by pattern matching

    I use this config file: .clangd, .clang-format, .clang-tidy. These files are actually YAML. I want to use dprint-plugin-prettier to format this file. Is there any way to deal with it? Not to modify dprint-plugin-prettier.

    enhancement discussion 
    opened by TiceCosmos 13
  • Better rust interface for wasm plugins

    Better rust interface for wasm plugins

    The current generate_plugin_code macro is not ideal:

    • it leaks linting errors / warnings (unused_must_use, clippy::mut_from_ref),
    • it requires a type named Configuration to be in-scope,
    • format_with_host should return a Result<Option<String>, _> where:
      • Ok(None) indicate no changes were made,
      • Ok(Some(_)) indicate that the text was correctly formatted,
      • Err(_) indicate an error.

    PluginHandler:

    • get_license_text could be a const LICENSE: &'static str = "..";
    • having to manually resolve config from a ConfigKeyMap seems superfluous, should be able to use any struct that implements serde::DeserializeOwned.

    I also have some ideas for PluginInfo.

    @dsherret I'd like to work on a better macro / interface for rust wasm plugins, are you open to such a PR ?

    enhancement domain: core 
    opened by malobre 11
  • Switch to using ignore crate

    Switch to using ignore crate

    Closes #417.

    cc @joscha - You may wish to try out this PR. I'll do a release tomorrow.

    On building, you may have to run:

    cargo build --manifest-path=crates/test-plugin/Cargo.toml --release --target=wasm32-unknown-unknown
    cargo build --manifest-path=crates/test-process-plugin/Cargo.toml --release
    
    # this should produce the binary at ./target/release/dprint
    cargo build --locked --all-features ---release
    
    opened by dsherret 11
  • fish shell dprint execution error

    fish shell dprint execution error

    Hi @dsherret

    I'm still not used dprint, but last time my vscode gives error /usr/local/dprint is not executable and/or permission error.

    Then recently i tried execute it directly, but i got error

    ❯ dprint
    Failed to execute process '/usr/local/bin/dprint'. Reason:
    exec: Exec format error
    The file '/usr/local/bin/dprint' is marked as an executable but could not be run by the operating system.
    
    ~ 
    ❯ 
    

    OS: macOS 10.15.6 dprint: 0.6.3

    Brew info

    ❯ brew info dprint
    dprint/dprint/dprint: stable 0.6.3
    Pluggable and configurable code formatting platform.
    https://github.com/dprint/dprint
    /usr/local/Cellar/dprint/0.6.3 (3 files, 8.8MB) *
      Built from source on 2020-07-19 at 01:24:22
    From: https://github.com/dprint/homebrew-dprint/blob/HEAD/Formula/dprint.rb
    
    ~ 
    ❯ 
    

    Before on some executables sometimes helped chmod +x /usr/local/bin/dprint, but for dprint it did not help. I hope you can look and fix.

    Thanks

    bug 
    opened by dalisoft 11
  • Add dprint-plugin-exec for formatting files based on a shell command

    Add dprint-plugin-exec for formatting files based on a shell command

    This would be a plugin that allows you to specify any CLI tool for formatting with dprint's CLI and editor extensions. The CLI tool would need to exist on the system for it to work. For example, a configuration file might look like the following and require #365 to be implemented:

    {
      "incremental": true,
      "exec": {
        "associations": "**/*.{rs,js}", // special property introduced in #365
        "cacheKey": 1, // bump to force the incremental cache to be re-evaluated. Useful when underlying tool is upgraded
        "rustfmt": "rustfmt", // command that accepts a file text via stdin
        "rustfmt.associations": "**/*.rs",
        "prettier": "prettier --stdin-filepath $file_path" // all other files would go here
      },
      "includes": [
        "**/*.{rs,js}"
      ],
      "plugins": {
        "https://plugins.dprint.dev/exec-0.1.0.exe-plugin@checksum-goes-here"
      }
    }
    

    Helper variables: $file_path and $file_text. Providing $file_text makes it not pipe in the file text via stdin.

    Anyway, the details of this could be worked on entirely in that plugin and be completely separate from the CLI. I'm storing this idea in here for now though. I think it would be very useful because people could then make many other formatting tools work easily with dprint.

    suggestion 
    opened by dsherret 10
  • fix: restore searching all directories when glob pattern does not contain a slash at the beginning or middle

    fix: restore searching all directories when glob pattern does not contain a slash at the beginning or middle

    This restores the behaviour back to the intended .gitignore behaviour.

    If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself. Otherwise the pattern may also match at any level below the .gitignore level.

    Closes #401.

    cc @joscha

    opened by dsherret 10
  • segmenting format/check runs

    segmenting format/check runs

    Hi,

    we have a large repository with many folders. We want to enforce formatting on CI but keep some folders logically grouped together in disjoint formatting runs. Think of:

    folderA
    folderB
    folderC
    ...
    

    where we want to:

    • enforce formatting on folderC
    • enforce formatting on folderA and folderB
    • enforce formatting on anything but folderX, folderY and folderZ

    in separate CI runs, which basically needs disjoint formatting/check runs for each folder (combination).

    Ideally I'd be able to dynamically decide the composition of these groups that I format/check together. But even statically defined groups would be good, however the issue currently is that:

    • there is no easy way to create multiple config files that extend each other as includes and excludes are not inherited
    • there is no way to pass a glob to the checker/formatter, e.g.: dprint output-file-paths -- 'folderC/**' yields an empty list
    • there is no way to pass --excludes without overriding the excludes coming from the config file
    • there is option to pass --includes at all, but if there were it would probably also overwrite the includes from the config, and we have negative globs in the includes array.

    Ideas:

    • Allow inheritance of includes and excludes across config files or via CLI (I read somewhere in the docs there is a security issue of some sort why this is not done, is there more info?)
    • Allow passing globs to the file list
    • Allow passing a stream of files via stdin to dprint (then I can run the globs myself or run output-file-paths and filter the list down based on my groups); this is not my favorite solution is it is much slower and requires maintaining extra code to make this happen, but I take it if that is the only acceptable option
    • Allow passing a config via stdin that I can generate in memory (then I can dynamically extend includes/excludes); I can do this with a temporary file and then pass it via --config. This feels clunky, but I will do this if none of the other options are acceptable.
    • formatting everything, git checkouting the parts that are not in the folders I am interested in and use git diff --exit-code ^HEAD to assert up-to-date formatting. Not my favorite option either as it formats too many things which wastes a lot of time of the segment I want to format is much smaller than the whole.
    • Your idea here :)

    Thoughts? Thanks so much!

    opened by joscha 10
  • `output-resolved-config` does not return valid JSON

    `output-resolved-config` does not return valid JSON

    I am trying to parse the output of output-resolved-config, however the output is something like:

    json: {
      "array.preferSingleLine": false,
      "commentLine.forceSpaceAfterSlashes": true,
      "ignoreNodeCommentText": "dprint-ignore",
      "indentWidth": 2,
      "lineWidth": 120,
      "newLineKind": "lf",
      "object.preferSingleLine": false,
      "useTabs": false
    }
    markdown: {
      "emphasisKind": "underscores",
      "ignoreDirective": "dprint-ignore",
      "ignoreEndDirective": "dprint-ignore-end",
      "ignoreFileDirective": "dprint-ignore-file",
      "ignoreStartDirective": "dprint-ignore-start",
      "lineWidth": 80,
      "newLineKind": "lf",
      "strongKind": "asterisks",
      "textWrap": "maintain"
    }
    

    is there any chance we could evolve this into valid JSON? E.g. add wrapping {}, quotes of the keys and commas between the sections. I can add the wrapping manually in my parser for now, but I think this is quite unexpected.

    enhancement domain: cli 
    opened by joscha 9
  • Globbing is slow for large monorepo

    Globbing is slow for large monorepo

    Version: 0.15.1

    We have a large monorepo and are trying to run some fast formatting commands on single files. Globbing is causing issues as it takes 4-6 seconds as part of the format for a single file.

    dprint fmt --verbose --config ~/work/some-org/dprint.json ~/work/some-org/web/src/blah.json
    [VERBOSE]: Creating directory: /Users/ryanrushton/Library/Caches/dprint/cache
    [VERBOSE]: Reading file: /Users/ryanrushton/Library/Caches/dprint/cache/cache-manifest.json
    [VERBOSE]: Reading file: /Users/ryanrushton/Library/Caches/dprint/cache/plugin-cache-manifest.json
    [VERBOSE]: Reading file: /Users/ryanrushton/work/some-org/dprint.json
    [VERBOSE]: Reading file: /Users/ryanrushton/Library/Caches/dprint/cache/plugins/dprint-plugin-json/dprint-plugin-json-0.12.3.cached
    [VERBOSE]: Reading file: /Users/ryanrushton/Library/Caches/dprint/cache/plugins/dprint-plugin-markdown/dprint-plugin-markdown-0.9.4.cached
    [VERBOSE]: Globbing: ["!**/node_modules", "!**/*-lock.json"]
    [VERBOSE]: File(s) matched: []
    [VERBOSE]: Finished globbing in 4331ms
    [VERBOSE]: Writing file: /Users/ryanrushton/Library/Caches/dprint/cache/cache-manifest.json
    [VERBOSE]: Reading file: /Users/ryanrushton/Library/Caches/dprint/cache/some-org.incremental
    [VERBOSE]: Checking path exists: /Users/ryanrushton/Library/Caches/dprint/cache/some-org.incremental
    [VERBOSE]: Creating instance of dprint-plugin-json
    [VERBOSE]: Created instance of dprint-plugin-json in 1ms
    [VERBOSE]: Reading file: /Users/ryanrushton/work/some-org/web/src/ui/home/search/search_bar/blah.json
    [VERBOSE]: Formatted file: /Users/ryanrushton/work/some-org/web/src/ui/home/search/search_bar/blah.json in 0ms
    [VERBOSE]: Writing file: /Users/ryanrushton/work/some-org/web/src/ui/home/search/search_bar/blah.json
    Formatted 1 file.
    [VERBOSE]: Writing file: /Users/ryanrushton/Library/Caches/dprint/cache/some-org.incremental
    

    Note the [VERBOSE]: Finished globbing in 4331ms

    Is there some way we can work around this? We are trying to build tooling for our IDE's to run dprint on save for a single file.

    When running in smaller test repo's this is a non issue but the length that this takes causes issues with the IDE and is not great for developer productivity.

    Happy to help diagnose the issue we are just not sure where to start.

    bug domain: cli performance 
    opened by ryan-rushton 9
  • Support using dprint on a readonly file system

    Support using dprint on a readonly file system

    As title. From #374. I assume for using dprint check.

    Error creating cache directory: Error("Error creating directory /homeless-shelter/Library/Caches/dprint/cache: Read-only file system (os error 30)")
    

    cc @joscha

    enhancement wontdo domain: cli 
    opened by dsherret 9
  • should_handle_wasm_plugin_panicking seems flaky

    should_handle_wasm_plugin_panicking seems flaky

    Not sure what occurred here:

    https://github.com/dprint/dprint/actions/runs/3745156690/jobs/6359283456

    failures:
    
    ---- commands::formatting::test::should_handle_wasm_plugin_panicking stdout ----
    thread 'commands::formatting::test::should_handle_wasm_plugin_panicking' panicked at 'assertion failed: `(left == right)`
    
    Diff < left / right > :
    <2
    >1
    
    ', crates\dprint\src\commands\formatting.rs:371:5
    stack backtrace:
       0:     0x7ff69ec2dfa2 - std::backtrace_rs::backtrace::dbghelp::trace
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
       1:     0x7ff69ec2dfa2 - std::backtrace_rs::backtrace::trace_unsynchronized
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
       2:     0x7ff69ec2dfa2 - std::sys_common::backtrace::_print_fmt
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:66
       3:     0x7ff69ec2dfa2 - std::sys_common::backtrace::_print::impl$0::fmt
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:45
       4:     0x7ff69ec50aab - core::fmt::write
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\fmt\mod.rs:1202
       5:     0x7ff69ec27aaa - std::io::Write::write_fmt<alloc::vec::Vec<u8,alloc::alloc::Global> >
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\io\mod.rs:1679
       6:     0x7ff69ec30b74 - std::sys_common::backtrace::_print
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:48
       7:     0x7ff69ec30b74 - std::sys_common::backtrace::print
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:35
       8:     0x7ff69ec30b74 - std::panicking::default_hook::closure$1
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:[295](https://github.com/dprint/dprint/actions/runs/3745156690/jobs/6359283456#step:13:296)
       9:     0x7ff69ec[307](https://github.com/dprint/dprint/actions/runs/3745156690/jobs/6359283456#step:13:308)32 - std::panicking::default_hook
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:[311](https://github.com/dprint/dprint/actions/runs/3745156690/jobs/6359283456#step:13:312)
      10:     0x7ff69ec31361 - std::panicking::rust_panic_with_hook
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:698
      11:     0x7ff69ec[312](https://github.com/dprint/dprint/actions/runs/3745156690/jobs/6359283456#step:13:313)6d - std::panicking::begin_panic_handler::closure$0
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:588
      12:     0x7ff69ec2ecaf - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure_env$0,never$>
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:138
      13:     0x7ff69ec30f30 - std::panicking::begin_panic_handler
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:584
      14:     0x7ff69ed14ee5 - core::panicking::panic_fmt
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\panicking.rs:142
      15:     0x7ff69e573af0 - dprint::commands::formatting::test::should_handle_wasm_plugin_panicking::ha2a34df07ea2d26f
      16:     0x7ff69e6db636 - core::ops::function::FnOnce::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\ops\function.rs:248
      17:     0x7ff69e6db636 - test::__rust_begin_short_backtrace<void (*)()>
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\test\src\lib.rs:572
      18:     0x7ff69e6d9f48 - alloc::boxed::impl$44::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\alloc\src\boxed.rs:1940
      19:     0x7ff69e6d9f48 - core::panic::unwind_safe::impl$23::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\panic\unwind_safe.rs:271
      20:     0x7ff69e6d9f48 - std::panicking::try::do_call
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:492
      21:     0x7ff69e6d9f48 - std::panicking::try
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:456
      22:     0x7ff69e6d9f48 - std::panic::catch_unwind
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panic.rs:137
      23:     0x7ff69e6d9f48 - test::run_test_in_process
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\test\src\lib.rs:595
      24:     0x7ff69e6d9f48 - test::run_test::run_test_inner::closure$0
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\test\src\lib.rs:489
      25:     0x7ff69e69bfcb - test::run_test::run_test_inner::closure$1
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\test\src\lib.rs:516
      26:     0x7ff69e69bfcb - std::sys_common::backtrace::__rust_begin_short_backtrace<test::run_test::run_test_inner::closure_env$1,tuple$<> >
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys_common\backtrace.rs:122
      27:     0x7ff69e6a29b3 - std::thread::impl$0::spawn_unchecked_::closure$1::closure$0
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\thread\mod.rs:514
      28:     0x7ff69e6a29b3 - core::panic::unwind_safe::impl$23::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\panic\unwind_safe.rs:271
      29:     0x7ff69e6a29b3 - std::panicking::try::do_call
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:492
      30:     0x7ff69e6a29b3 - std::panicking::try
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panicking.rs:456
      31:     0x7ff69e6a29b3 - std::panic::catch_unwind
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\panic.rs:137
      32:     0x7ff69e6a29b3 - std::thread::impl$0::spawn_unchecked_::closure$1
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\thread\mod.rs:513
      33:     0x7ff69e6a29b3 - core::ops::function::FnOnce::call_once<std::thread::impl$0::spawn_unchecked_::closure_env$1<test::run_test::run_test_inner::closure_env$1,tuple$<> >,tuple$<> >
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\core\src\ops\function.rs:248
      34:     0x7ff69ec3c48c - alloc::boxed::impl$44::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\alloc\src\boxed.rs:1940
      35:     0x7ff69ec3c48c - alloc::boxed::impl$44::call_once
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\alloc\src\boxed.rs:1940
      36:     0x7ff69ec3c48c - std::sys::windows::thread::impl$0::new::thread_start
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library\std\src\sys\windows\thread.rs:56
      37:     0x7ff8c19a4de0 - BaseThreadInitThunk
      38:     0x7ff8c28de40b - RtlUserThreadStart
    
    
    failures:
        commands::formatting::test::should_handle_wasm_plugin_panicking
    
    opened by dsherret 0
  • plugin: alejandra for nix

    plugin: alejandra for nix

    Found three formatters:

    • nixfmt - looks solid, has a few issues that seem significant but i think its commonly used. Haskell
    • nixpkg-fmt - beta, no github releases. Rust, complies to WASM.
    • alejandra - appears more active, using releases, better docs than the others. Rust also with a WASM demo.

    Nix RFC is still deciding the official style, but Alejandra or nixfmt seem like the going recommendations... alejandra already compiles to WASM, nixfmt may take take lots of work to sort out.

    opened by tomdavidson 0
  • [windows] Command failed with exit code 3221225781 / VCRUNTIME140.dll was not found

    [windows] Command failed with exit code 3221225781 / VCRUNTIME140.dll was not found

    Version: 0.33.0

    I recently reinstalled Windows. And when I tried running dprint via NPM nothing would happen. Tried the same thing with PNPM and it gave me this error Command failed with exit code 3221225781. Lastly I tried running the .exe and I got the VCRUNTIME140.dll was not found popup.

    image

    Shouldn't all the dependencies be installed automatically when installing dprint?

    bug 
    opened by drunkwinter 3
  • shfmt plugin

    shfmt plugin

    Hello, Im lovin dprint. One of the plugins I used with pretterjs is sh. Right now my config runs shfmt via the exec plugin.

    I would not mind trying to contribute a wasm plugin, but Im a fish out of water. A "creating plugins for dummies/newbies" would be quite helpful, especially if it had a section on converting a golang program.

    Thanks for the awesome tool.

    enhancement 
    opened by tomdavidson 2
  • support config override

    support config override

    I have a project that using different line width in some files (these files contain many object expression with long key and string value, so I perfer very lone line width in these files so no new line after :), and currently I can only use 2 seprated config files, and call dprint with different config files for this case.

    Any interest in supporint config override like prettier and eslint?

    opened by trim21 0
Releases(0.34.1)
Owner
Pluggable and configurable code formatting platform.
null
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Lukas Kalbertodt 75 Jul 28, 2022
Sleek is a CLI tool for formatting SQL. It helps you maintain a consistent style across your SQL code, enhancing readability and productivity.

Sleek: SQL Formatter ✨ Sleek is a CLI tool for formatting SQL. It helps you maintain a consistent style across your SQL code, enhancing readability an

Nick Rempel 40 Apr 20, 2023
create and test the style and formatting of text in your terminal applications

description: create and test the style and formatting of text in your terminal applications docs: https://docs.rs/termstyle termstyle is a library tha

Rett Berg 18 Jul 3, 2021
🍅 A command-line tool to get and set values in toml files while preserving comments and formatting

tomato Get, set, and delete values in TOML files while preserving comments and formatting. That's it. That's the feature set. I wrote tomato to satisf

C J Silverio 15 Dec 23, 2022
Fmt-rfcs - RFCs for Rust formatting guidelines and changes to Rustfmt

Rust code formatting RFCs This repository exists to decide on a code style for Rust code, to be enforced by the Rustfmt tool. Accepted RFCs live in th

null 397 Jan 9, 2023
Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal.

Vari Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal. Like Rich library for Python. Väri means "co

azur 13 Nov 2, 2022
⚡️Highly efficient data and string formatting library for Rust.

⚡️Highly efficient data and string formatting library for Rust. ?? Overview Pad and format string slices and generic vectors efficiently with minimal

Firelink Data 3 Dec 21, 2023
Fast, minimal, feature-rich, extended formatting syntax for Rust!

Formatting Tools Fast, minimal, feature-rich, extended formatting syntax for Rust! Features include: Arbitrary expressions inside the formatting brace

Casper 58 Dec 26, 2022
Social media style compact number formatting for rust.

prettty-num Format integers into a compact social media style format, similar to using Intl.NumberFormat("en", { notation: "compact" }); as a number f

null 5 Aug 17, 2024
Uses the cardano mini-protocols to receive every block and transaction, and save them to a configurable destination

cardano-slurp Connects to one or more cardano-node's, streams all available transactions, and saves them to disk (or to S3) in raw cbor format. Usage

Pi Lanningham 16 Jan 31, 2023
Simple OpenAI CLI wrapper written in Rust, feat. configurable prompts and models

Quick Start git clone https://github.com/ryantinder/ask-rs cd ask cargo install --path . Example ask tell me about the Lockheed Martin SR71 >> The Loc

Ryan Tinder 3 Aug 9, 2023
Create, reorder, group, and focus workspaces easily in i3. Fully configurable with enhanced polybar modules.

Create, reorder, group, and focus workspaces fast and easily in i3. Features Focus Mode: Eliminate Distractions Enable Focus Mode: Use groups and focu

i3-wsman 15 Sep 2, 2023
Configurable, smart and fast CSS/SCSS/Sass/Less formatter.

?? Malva Malva is a configurable, smart and fast CSS/SCSS/Sass/Less formatter. Why? Configurable Malva is configurable. It provides several configurat

Pig Fang 20 Oct 27, 2023
Configurable, extensible, interactive line reader

linefeed linefeed is a configurable, concurrent, extensible, interactive input reader for Unix terminals and Windows console. API Documentation linefe

Murarth 176 Jan 3, 2023
Easy configurable tmux display-menu

tmux-easy-menu Easy configurable tmux display-menu Setup cargo build And run with ./target/debug/tmux-menu show --menu {path-to-your-config} Configu

null 18 Jan 23, 2023
⚡️(cd with env) Is a configurable cd wrapper that lets you define your environment per directory.

⚡️cdwe (cd with env) A simple configurable cd wrapper that provides powerful utilities for customizing your envionment per directory. (For ZSH / BASH

teo 20 Aug 6, 2023
Calc: A fully-featured minimalistic configurable calculator written in Rust

Calc Calc: A fully-featured minimalistic configurable rust calculator Install You can install the latest version from source git clone https://github.

Charlotte Thomas 4 Nov 15, 2023
languagetool-code-comments integrates the LanguageTool API to parse, spell check, and correct the grammar of your code comments!

languagetool-code-comments integrates the LanguageTool API to parse, spell check, and correct the grammar of your code comments! Overview Install MacO

Dustin Blackman 17 Dec 25, 2022
ChatGPT-Code-Review is a Rust application that uses the OpenAI GPT-3.5 language model to review code

ChatGPT-Code-Review is a Rust application that uses the OpenAI GPT-3.5 language model to review code. It accepts a local path to a folder containing code, and generates a review for each file in the folder and its subdirectories.

Greg P. 15 Apr 22, 2023