Git Product home page Git Product logo

snitch's Introduction

Tsoding Build Status Build Status

Snitch

A simple tool that collects TODOs in the source code and reports them as GitHub issues.

How it works

  1. Snitch finds an unreported TODO,
  2. Reports it to the GitHub as an issue,
  3. Assigns the Issue number to the TODO marking it a reported,
  4. Commits the reported TODO to the git repo,
  5. Repeats the process until all of the unreported TODOs are reported.

After that you are supposed to push the new reported TODOs yourself.

TODO Format

Unreported TODO

Example

// TODO: rewrite this in Rust

Parsing

Regular expression: ^(.*)TODO(O*): (.*)$ Play

Capture Groups:

  • Group 1: Prefix. Used only to precisly recover the text of the line where the TODO is originally located.
  • Group 2: Urgency Suffix. Used to indicate the urgency of the TODO. The higher the amount of O-s, the more urgent the TODO is. (See Urgency for more info)
  • Group 3: Suffix. Used as the title of the issue.

Reported TODO

Example

// TODO(#42): rewrite this in Rust

Parsing

Regular expression: ^(.*)TODO(O*)\((.*)\): (.*)$ Play

Capture Groups:

  • Group 1: Prefix. Used only to precisly recover the text of the line where the TODO is originally located.
  • Group 2: Urgency Suffix. Used to indicate the urgency of the TODO. The higher the amount of O-s, the more urgent the TODO is. (See Urgency for more info)
  • Group 3: ID. The number of the Issue.
  • Group 4: Suffix. Used as the title of the issue.

TODO Body

Example

// TODO: rewrite this in Rust
//   I honestly think Rust is going to be around forever,
//   I really do. I think this is like, this is the formation
//   of Ancient Greek.
//   © https://www.reddit.com/r/programmingcirclejerk/comments/ahmnwa/i_honestly_think_rust_is_going_to_be_around/

Parsing

  • Snitch remembers the TODO's prefix.
  • Snitch parses all of the consecutive lines with the same prefix as the body.
  • The body is reported as the Issue Description.

Urgency

The urgency system was stolen from fixmee Emacs extension. The urgency of TODOs is indicated by repetitions of the final character of the keyword. For example, one might write TODOOOOOOOOO for an important issue. The list subcommand will sort the TODOs in the descending order by their urgency.

Remote specification

By default Snitch will automatically reference the origin remote as the defacto standard for most projects.

However, you can specify which remote Snitch uses on a per repo basis.

.snitch.yaml

Remotes are defined in .snitch.yaml under remote.

Example

title:
  transforms:
    - match: (.*) \*/
      replace: $1
    - match: (.*) \*\}
      replace: $1
keywords:
  - FIXME
remote: <remote>

Commandline

Remotes can be dynamically specified when Snitch is called.

This will overide a previously defined remote in .snitch.yaml

Example

$ ./snitch report --remote <remote>

Installation

$ go get github.com/tsoding/snitch

Credentials

GitHub Credentials

Snitch obtains GitHub credentials from two places: (default) environment variable or file.

Environment Variable

export GITHUB_PERSONAL_TOKEN = <personal-token> which can be added to .bashrc

File

Config file can be stored in one of the following directories:

  • $HOME/.config/snitch/github.ini
  • $HOME/.snitch/github.ini

Format:

[github]
personal_token = <personal-token>

Checkout GitHub Help on how to get the Personal Access Token.

Make sure to enable full access to private repos. For some reason it's required to post issues.

GitLab Credentials

GitLab credentials configuration is similar to GitHub with an exception that you also have to provide the host of the GitLab instance.

Environment Variable

export GITLAB_PERSONAL_TOKEN = <personal-token> which can be added to .bashrc.

Each of the credentials are to be separated by , and in format: <host>:<personal-token>. Credentials without host part, e.g. <personal-token> are interpreted as gitlab.com tokens to maintain backward compatibility and invalid tokens are ignored (prints an error message).

File

Config file can be stored in one of the following directories:

  • $HOME/.config/snitch/gitlab.ini
  • $HOME/.snitch/gitlab.ini

Format:

[gitlab.com]
personal_token = <personal-token>

[gitlab.local]
personal_token = <personal-token>

Checkout GitLab Help on how to get the Personal Access Token. Make sure to enable api scope for the token.

Usage

For usage help just run snitch without any arguments:

$ ./snitch

.snitch.yaml

Custom keywords

You don't have to use TODO as the keyword of a todo you want to "snitch up". The keyword is customizable through .snitch.yaml config:

keywords:
  - TODO
  - FIXME
  - XXX
  - "@todo"

Issue Title Transformation

You can apply project local issue title transformations. Create .snitch.yaml file in the root of the project with the following content:

title:
  transforms:
    - match: (.*) \*/
      replace: $1

This feature is very useful for removing garbage from the Issue Titles. Like */ at the end of C comments.

Development

$ export GOPATH=$PWD
$ go get .
$ go build .

Run tests

$ go test ./...

For a more detailed output:

$ go test -v -cover ./...

Support

You can support my work via

snitch's People

Contributors

6543 avatar ankokovin avatar aodhneine avatar dmalshin avatar fabulousduck avatar jspaulsen avatar kjoedicker avatar mateossh avatar mfocko avatar nwtnsqrd avatar nykseli avatar rexim avatar roman1900 avatar ym1234 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.