The non-opinionated Rust-based commit message linter.

Overview

git-sumi logo: a lantern held on a bamboo stick over the sea

Clean commits PRs welcome Latest release Crates.io Codecov
CI Deployment Documentation MIT or Apache 2.0 License

git-sumi

The non-opinionated Rust-based commit message linter

Transform your commit practices with flexible linting for consistently high-quality Git commit messages that adhere to your project's standards.

sumi (墨, /sɯmi/): ink, especially the type used in traditional ink wash painting.

🎥 Demo

See how git-sumi can help you write better commit messages:

git-sumi_demo.mp4

✨ Main features

📝 Documentation

Learn how to use git-sumi from the documentation.

👥 Contributing

Please do! Contributions are always welcome. We appreciate improvements to the documentation, development of new rules, code cleanup, resolving issues, requesting or developing new functionality…

Take a look at our Contributing Guidelines for more information on how to get started.

📄 License

This project is licensed under the terms of both the MIT license and the Apache License (Version 2.0), at your option.

Comments
  • 🐛 fix: ignore comment lines in commit messages

    🐛 fix: ignore comment lines in commit messages

    Summary

    This PR introduces a fix to skip linting comment lines in commit messages, aligning git-sumi's behaviour to Git's standards.


    How has this been tested?

    • [ ] Manual tests
    • [ ] Unit tests
    • [X] Integration tests

    Type of change

    • [X] Bug fix (fixes an issue without altering functionality)
    • [ ] New feature (adds non-breaking functionality)
    • [ ] Breaking change (alters existing functionality)
    • [ ] UI/UX improvement (enhances user interface without altering functionality)
    • [ ] Refactor (improves code quality without altering functionality)
    • [ ] Documentation update
    • [ ] Other (please describe below)

    Checklist

    • [X] I have read the contributing guidelines.
    • [X] I have added tests to cover my changes.
    • [X] All new and existing tests passed.
    • [X] My code follows the code style of this project.
    • [X] I have formatted the code with cargo fmt.
    • [ ] My change requires updating the documentation.
    • [ ] I have updated the documentation accordingly.
    bug 
    opened by welpo 1
  • ✨ feat(init)!: add prepare-commit-msg hook

    ✨ feat(init)!: add prepare-commit-msg hook

    Summary

    • Add --init prepare-commit-msg to create a prepare-commit-msg hook. This hook uses the hidden --prepare-commit-message flag to prepend the description of enabled rules to the commit message template.
    • Renames --init hook to --init commit-msg
    • Adds --init hooks option to initialize both hooks.

    BREAKING CHANGE: --init hook has been replaced by --init commit-msg.


    How has this been tested?

    • [X] Manual tests
    • [ ] Unit tests
    • [X] Integration tests

    Type of change

    • [ ] Bug fix (fixes an issue without altering functionality)
    • [X] New feature (adds non-breaking functionality)
    • [X] Breaking change (alters existing functionality)
    • [ ] UI/UX improvement (enhances user interface without altering functionality)
    • [ ] Refactor (improves code quality without altering functionality)
    • [ ] Documentation update
    • [ ] Other (please describe below)

    Checklist

    • [X] I have read the contributing guidelines.
    • [X] I have added tests to cover my changes.
    • [X] All new and existing tests passed.
    • [X] My code follows the code style of this project.
    • [X] I have formatted the code with cargo fmt.
    • [X] My change requires updating the documentation.
    • [X] I have updated the documentation accordingly.
    enhancement 
    opened by welpo 1
  • ♻️ refactor: unify and rephrase options descriptions

    ♻️ refactor: unify and rephrase options descriptions

    Summary

    Unifies --help and default config strings.

    Now there's one source of truth for these strings, which will become handy for the next PR ✌️


    How has this been tested?

    • [X] Manual tests
    • [ ] Unit tests
    • [X] Integration tests

    Type of change

    • [ ] Bug fix (fixes an issue without altering functionality)
    • [ ] New feature (adds non-breaking functionality)
    • [ ] Breaking change (alters existing functionality)
    • [ ] UI/UX improvement (enhances user interface without altering functionality)
    • [X] Refactor (improves code quality without altering functionality)
    • [ ] Documentation update
    • [ ] Other (please describe below)

    Checklist

    • [X] I have read the contributing guidelines.
    • [ ] I have added tests to cover my changes.
    • [X] All new and existing tests passed.
    • [X] My code follows the code style of this project.
    • [X] I have formatted the code with cargo fmt.
    • [X] My change requires updating the documentation.
    • [X] I have updated the documentation accordingly.
    opened by welpo 1
  • ⬆️ chore(deps): update dependency ubuntu to v22

    ⬆️ chore(deps): update dependency ubuntu to v22

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | ubuntu | github-runner | major | 20.04 -> 22.04 |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • ✨ feat(display)!: add markdown table format

    ✨ feat(display)!: add markdown table format

    Summary

    Adds display option for parsed commit messages as Markdown tables.

    💥 BREAKING CHANGE: The old 'table' format is now 'cli'. 'table' now refers to the markdown table.

    Example output:

    | Key                  | Value                     |
    |----------------------|---------------------------|
    | Gitmoji              | ✨                        |
    | Commit type          | feat                      |
    | Scope                | display                   |
    | Description          | add markdown table format |
    | Is breaking          | true                      |
    | Breaking description | add markdown table format |
    

    Or, rendered as a table:

    | Key | Value | |----------------------|---------------------------| | Gitmoji | ✨ | | Commit type | feat | | Scope | display | | Description | add markdown table format | | Is breaking | true | | Breaking description | add markdown table format |


    How has this been tested?

    • [X] Manual tests
    • [ ] Unit tests
    • [X] Integration tests

    Type of change

    • [ ] Bug fix (fixes an issue without altering functionality)
    • [X] New feature (adds non-breaking functionality)
    • [X] Breaking change (alters existing functionality)
    • [ ] UI/UX improvement (enhances user interface without altering functionality)
    • [ ] Refactor (improves code quality without altering functionality)
    • [ ] Documentation update
    • [ ] Other (please describe below)

    Checklist

    • [X] I have read the contributing guidelines.
    • [X] I have added tests to cover my changes.
    • [X] All new and existing tests passed.
    • [X] My code follows the code style of this project.
    • [X] I have formatted the code with cargo fmt.
    • [X] My change requires updating the documentation.
    • [X] I have updated the documentation accordingly.
    enhancement 💥 breaking change 
    opened by welpo 1
  • ⬆️ chore(deps): update Rust crate env_logger to 0.11

    ⬆️ chore(deps): update Rust crate env_logger to 0.11

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | env_logger | dependencies | minor | 0.10 -> 0.11 |


    Release Notes

    rust-cli/env_logger (env_logger)

    v0.11.1

    Compare Source

    Fixes
    • Allow styling with Target::Pipe

    v0.11.0

    Compare Source

    Breaking Change
    • Removed bespoke styling API
      • env_logger::fmt::Formatter::style
      • env_logger::fmt::Formatter::default_styled_level
      • env_logger::fmt::Style
      • env_logger::fmt::Color
      • env_logger::fmt::StyledValue
    • Removed env_logger::filter in favor of env_filter
    Compatibility

    MSRV changed to 1.71

    Features
    • Automatically adapt ANSI escape codes in logged messages to the current terminal's capabilities
    • Add support for NO_COLOR and CLICOLOR_FORCE, see https://bixense.com/clicolors/
    Fixes
    • Print colors when is_test(true)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • ⬆️ chore(deps): update dependency maturin to v1.5.0

    ⬆️ chore(deps): update dependency maturin to v1.5.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | maturin (changelog) | ==1.4.0 -> ==1.5.0 | age | adoption | passing | confidence |


    Release Notes

    pyo3/maturin (maturin)

    v1.5.0

    Compare Source

    • Bump metadata version from 2.1 to 2.3 in #​1960. Source distributions created by maturin now have reliable metadata, meaning tool such as pip, uv and poetry could skip building them for version resolution.
    • Allow identical VIRTUAL_ENV and CONDA_PREFIX env vars in #​1879
    • Reject -i python when cross compiling in #​1891
    • Support uniffi-bindgen in cargo workspaces in #​1909
    • Add support for configuring xwin using env vars in #​1961
    • Add validation for crate/package name in new/init in #​1943
    • Add 32-bit RISC-V support in #​1969
    • Improve import hook changes in #​1958
    • Adjust cbindgen Overrides for CFFI in #​1957

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • ⬆️ chore(deps): update dependency @mdx-js/react to v3.0.1

    ⬆️ chore(deps): update dependency @mdx-js/react to v3.0.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @mdx-js/react (source) | 3.0.0 -> 3.0.1 | age | adoption | passing | confidence |


    Release Notes

    mdx-js/mdx (@​mdx-js/react)

    v3.0.1

    Compare Source

    Fix
    Types
    Site

    Full Changelog: https://github.com/mdx-js/mdx/compare/3.0.0...3.0.1


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • ⬆️ chore(deps): update Rust crate tempfile to 3.10

    ⬆️ chore(deps): update Rust crate tempfile to 3.10

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | tempfile (source) | dev-dependencies | minor | 3.9 -> 3.10 |


    Release Notes

    Stebalien/tempfile (tempfile)

    v3.10.0

    Compare Source

    • Drop redox_syscall dependency, we now use rustix for Redox.
    • Add Builder::permissions for setting the permissions on temporary files and directories (thanks to @​Byron).
    • Update rustix to 0.38.31.
    • Update fastrand to 2.0.1.

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • ✨ feat(config): override config bools with env vars

    ✨ feat(config): override config bools with env vars

    Summary

    This PR introduces the ability to override boolean configuration flags through environment variables. Example, with sumi.toml containing quiet = true, you can do:

    GIT_SUMI_QUIET=false git sumi '👷 misc(CI): rename git-sumi job'
    

    And quiet will be correctly set to false:

    💬 Input: "👷 misc(CI): rename git-sumi job"
    ✅ All 10 checks passed.
    

    How has this been tested?

    • [X] Manual tests
    • [ ] Unit tests
    • [X] Integration tests

    Type of change

    • [ ] Bug fix (fixes an issue without altering functionality)
    • [X] New feature (adds non-breaking functionality)
    • [ ] Breaking change (alters existing functionality)
    • [ ] UI/UX improvement (enhances user interface without altering functionality)
    • [ ] Refactor (improves code quality without altering functionality)
    • [ ] Documentation update
    • [ ] Other (please describe below)

    Checklist

    • [X] I have read the contributing guidelines.
    • [X] I have added tests to cover my changes.
    • [X] All new and existing tests passed.
    • [X] My code follows the code style of this project.
    • [X] I have formatted the code with cargo fmt.
    • [ ] My change requires updating the documentation.
    • [ ] I have updated the documentation accordingly.
    enhancement 
    opened by welpo 0
  • ⬆️ chore(deps): update Rust crate predicates to v3

    ⬆️ chore(deps): update Rust crate predicates to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | predicates | dev-dependencies | major | 1.0 -> 3.1 |


    Release Notes

    assert-rs/predicates-rs (predicates)

    v3.1.0

    Compare Source

    Compatibility
    • Update MSRV to 1.70.0
    Internals
    • Remove itertools

    v3.0.4

    Compare Source

    Compatibility
    • Update MSRV to 1.69.0
    Internal
    • Update itertools to 0.11

    v3.0.3

    Compare Source

    Internal
    • Update anstyle to 1.0

    v3.0.2

    Compare Source

    Fixes
    • Respect follow_links when checking whether a path is backed by a file

    v3.0.1

    Compare Source

    Fixes
    • Show colors for diff header

    v3.0.0

    Compare Source

    Compatibility
    • color feature no longer conditionally applies color. Instead color will be applied when formatting as {:#}
    • color-auto feature was removed
    • Update MSRV to 1.64.0

    v2.1.5

    Compare Source

    Gixes
    • Further generalized borrowing of predicates with Borrow trait

    v2.1.4

    Compare Source

    v2.1.3

    Compare Source

    v2.1.2

    Compare Source

    Compatibility

    Update MSRV to 1.60

    Fixes
    • Hide internal-only optional dependencies

    v2.1.1

    Compare Source

    v2.1.0

    Compare Source

    Fixed
    • Report user's value (the actual)
      • Having the caller own this means you won't get intermediates like file paths
      • We already show it for the diff predicate
      • Now we show it in each leaf predicate (like Eq) and when adapting it (like taking a path and loading its file)
    • Remove redundant result with eq_file assertions
    • Clarify that the constant in Eq and Ord predicates is the expected value

    v2.0.3

    Compare Source

    v2.0.2

    Compare Source

    Added
    • All predicates now implement Send and Sync when it's appropriate

    v2.0.1

    Compare Source

    Changed
    • Upgraded float-cmp

    v2.0.0

    Compare Source

    Breaking Changes
    • predicates::str::diff was removed
    • predicates::str::similar was renamed to diff
    • The difference feature flag was renamed to diff
    • diff().split and diff().distance were removed
    Fixes
    • Shrink the output of Diffs because its redundant
    • Moved off of an unmaintained Diff library

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
Releases(v0.0.8)
Owner
Óscar
Data scientist and clincal psychologist.
Óscar
Message Signaled Interrupts for RISC-V

RISC-V MSI Test in Rust Testing the new MSIs added by the draft Advanced Interrupt Architecture (AIA) specification. Blog Posts First blog post: 30-Ju

Stephen Marz 5 Jul 5, 2022
ARM TrustZone-M example application in Rust, both secure world side and non-secure world side

ARM TrustZone-M example application in Rust, both secure world side and non-secure world side; projects are modified from generated result of cortex-m-quickstart.

null 44 Dec 4, 2022
High-order Virtual Machine (HVM) is a pure functional compile target that is lazy, non-garbage-collected and massively parallel

High-order Virtual Machine (HVM) High-order Virtual Machine (HVM) is a pure functional compile target that is lazy, non-garbage-collected and massivel

null 5.5k Jan 2, 2023
A collection (eventually) of examples that use some non-beginner things.

nannou examples A collection (eventually) of examples that use some non-beginner things. Right now the only example combines nannou's standard draw AP

Alexis Andre 22 Oct 21, 2022
An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets.

Promise x Tokio = Prokio An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets. Rationale When designing components and libr

Yew Stack 29 Feb 6, 2023
A Rust no-std (de)compressor based on PAQ

MASHI まし A 100% no-std compatible Rust implementation of a PAQ style arithmetic coding, context mixing compressor. Its intended use case is compressin

null 7 Dec 14, 2022
A stack based, virtual machine language written in Rust

Stackyy A stack based, virtual machine language written in Rust Description: Stackyy is a stack based, virtual machine language inspired by Forth and

FlawlessCode 2 May 2, 2022
Tools to feature more lenient Polonius-based borrow-checker patterns in stable Rust

Though this be madness, yet there is method in 't. More context Hamlet: For yourself, sir, shall grow old as I am – if, like a crab, you could go back

Daniel Henry-Mantilla 52 Dec 26, 2022
Rust crate implementing short & stable ids based on timestamps

Lexicoid Short & stable IDs based on timestamps. Heavily inspired by Short, friendly base32 slugs from timestamps by @brandur. Install Install with ca

Luciano Mammino 6 Jan 29, 2023
A rust-based benchmark for BlueField SmartNICs.

Smartbench Smart-bench is a rust-based benchmarking tool for BlueField-series SmartNICs. The purpose is to enable easy testing of BlueField-series Sma

null 4 Jun 15, 2023
Rust based magic-string with source map chains support

enhanced-magic-string Rust implementation of https://www.npmjs.com/package/magic-string with original sourcemap chain support. license. This project i

Farm 3 Nov 5, 2023
Rust-based toolset and library for Halo: Combat Evolved

Ringhopper Ringhopper is a pure-Rust library used for creating and manipulating tag data for Halo: Combat Evolved. It also contains the Invader toolse

Snowy 4 Nov 19, 2023
Rust implementations of finite-field arithmetic based on big integers with configurable limb sizes

multiprecision TODO: rewrite readme implement CIOS for 16-bit limbs All operations are in little-endian form (where the digit in memory at the smalles

Geometry 4 Mar 30, 2024
TodoX is a sophisticated Rust-based application designed to facilitate seamless todo management.

Rust Todo List App is a command-line tool written in Rust that allows users to manage their tasks efficiently. Whether you need to add, mark as done, edit, or clear tasks from your todo list, this app provides essential functionalities to streamline your task management process. Additionally, I have integrated sqlite3 using the rusqlite crate. The database stores the data and will persist indefinitely until you manually delete it.

Harikesh Ranjan Sinha 3 Apr 4, 2024
An MVP stack based bytecode VM

TinyVM An MVP stack-based bytecode VM This VM runs a simplistic, Turing complete instruction set. In ~250 LOC with extensive comments, it's meant to b

Mikail Khan 77 Dec 27, 2022
An expression based data notation, aimed at transpiling itself to any cascaded data notation.

Lala An expression oriented data notation, aimed at transpiling itself to any cascaded data notation. Lala is separated into three components: Nana, L

null 37 Mar 9, 2022
A stack based interpreted programming language.

Nightmare Nightmare is a dynamically-typed, procedural programming language that aims to be fast & simple. let user = input() as Int; print("You were

&potato 4 Nov 12, 2021
a frontier based evm compatible chain template

Substrate Frontier Node Template A FRAME-based Substrate node with the Ethereum RPC support, ready for hacking ?? Generation & Upstream This template

zero network 2 Oct 6, 2021
An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree.

Nouzdb An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree. Plan Implement a memtable. Implement the

Nouzan 1 Dec 5, 2021