5 releases

0.0.8 May 1, 2023
0.0.7 May 1, 2023
0.0.6 May 1, 2023
0.0.5 Apr 30, 2023
0.0.4 Apr 30, 2023

#2496 in Development tools


Used in 2 crates

MIT license

6KB

Git Hotspots

GitHub Workflow Status Crates.io License

This tool helps with identifying functions that have had a lot of changes in the git history. It does this by parsing the files that are supported by the program and then using the git history to count how many times each function has been changed.

Please note that this tool is still in its early stages, and there are a lot of things to improve. If you have any suggestions, please open an issue.

  1. Why is this helpful
  2. Installation
  3. Usage
  4. Supported Languages
  5. License

Why is this helpful

As you work on your project, the more you change a function, the more likely it is that you will work on it again. If this particular function is changed too often, it might be a sign that the function requires more attention and can contribute to technical debt.

With this tool you can identify functions that are too big or complex and are being refactored a lot, or are refactored a lot in relation to another part of the program.

Additionally when you want to make a decision on how to refactor your code, you can use this to find out which functions are the most changed and start with those. This can help you to make a more informed decision on how to refactor your code.

Installation

To install:

cargo install git-hotspots

Assuming the binary path is in the your PATH, git automatically picks this up as a subcommand.

Usage

To view top 50 functions with the most changes in git history:

git hotspots

You can control how the tool operates by passing the following flags:

  • --total, -t: Total number of results. Default: 50
  • --skip, -s: Skip first n results. Default: 0
  • --log-level, -V: Log level. Try -VV for more logs!
  • --prefix, -p: Show results beginning with the given string.
  • --invert-match, -v: Exclude partially matched path.
  • --exclude-func, -F: Exclude function by partial match.
  • --root, -r: Root of the project to inspect. Default: .

Supported Languages

Currently the following languages are supported:

  • Rust
  • Go
  • Lua

However, it is easy to add support for other languages. Just create an issue for the language you want to be supported, and I'll add it to the list.

License

Licensed under the MIT License. Check the LICENSE file for details.

Dependencies

~11–21MB
~359K SLoC