AdRoll / rebar3_hank

The Erlang Dead Code Cleaner
MIT License
68 stars 9 forks source link

Feature: Store hank output in json file #184

Open naman070 opened 2 years ago

naman070 commented 2 years ago

Provided an argument based option where if command is run like: rebar3 hank -o "output.json" then it stores the generated output of hank in the json file. This json file can further be used for better analysis of dead code.

Sample Json:

[
  {
    "hank_rule_broken": "unnecessary_function_arguments",
    "message": "hello_world/2 doesn't need its #2 argument",
    "path": "apps/library/src/library_app.erl",
    "start_line": 19,
    "title": "Unused function arguments"
  },
  {
    "hank_rule_broken": "unused_hrls",
    "message": "This file is unused",
    "path": "apps/library/src/demo_var.hrl",
    "start_line": 0,
    "title": "Unused hrl files"
  }
]
CLAassistant commented 2 years ago

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

:white_check_mark: elbrujohalcon
:x: Naman Gupta


Naman Gupta seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

elbrujohalcon commented 2 years ago

@naman070 You should run rebar3 test on your code :)

So, at this stage, what's still missing is:

  1. To make this option also available as a rebar.config option within the hank section.
  2. Some tests that ensure that we don't go down on code coverage.

Thanks again :)

naman070 commented 2 years ago

@elbrujohalcon What do you mean by your 1st point => "To make this option also available as a rebar.config option within the hank section.". Can you please elaborate more.

elbrujohalcon commented 2 years ago

@elbrujohalcon What do you mean by your 1st point => "To make this option also available as a rebar.config option within the hank section.". Can you please elaborate more.

Yeah, I want users to be able to include this in their rebar.config

{hank, [{output_json_file, "/the/file/to/put/the/output.json"}]}.

And have Hank pick it up every time they run rebar3 hank on the project. Just like they can do now with ignore or parsing_style.

naman070 commented 2 years ago

@elbrujohalcon

  1. Have added changes so that it can be added as an option in rebar.config.
  2. Testcases are still pending (Should I create a separate file for testcases or should I incorporate in some existing file)
naman070 commented 2 years ago

@elbrujohalcon Does the output of rebar3 test supposed to look like this?

===> Plugin jsx does not export init/1. It will not be used.
===> Verifying dependencies...
===> Analyzing applications...
===> Compiling rebar3_hank
===> Scissors cuts paper, paper covers rock, rock crushes lizard, lizard poisons Spock, Spock smashes scissors, scissors decapitates lizard, lizard eats paper, paper disproves Spock, Spock vaporizes rock, and as it always has, rock crushes scissors.
src/rebar3_hank_prv.erl:43: The word "JSON" in string is unknown. Maybe you wanted to use "jason" or "sion" or "slon" or "soln" or "son" or "sond" or "sone" or "song" or "sonk" or "sons" or "soon" or "sorn" or "sown" or "jeon" or "joan" or "john" or "join" or "Tjon"?
elbrujohalcon commented 2 years ago

@elbrujohalcon Does the output of rebar3 test supposed to look like this?


===> Plugin jsx does not export init/1. It will not be used.

===> Verifying dependencies...

===> Analyzing applications...

===> Compiling rebar3_hank

===> Scissors cuts paper, paper covers rock, rock crushes lizard, lizard poisons Spock, Spock smashes scissors, scissors decapitates lizard, lizard eats paper, paper disproves Spock, Spock vaporizes rock, and as it always has, rock crushes scissors.

src/rebar3_hank_prv.erl:43: The word "JSON" in string is unknown. Maybe you wanted to use "jason" or "sion" or "slon" or "soln" or "son" or "sond" or "sone" or "song" or "sonk" or "sons" or "soon" or "sorn" or "sown" or "jeon" or "joan" or "john" or "join" or "Tjon"?

It's telling you that Sheldon (the spell checker) doesn't know the word "JSON". Add it to nextroll.dict and you will be able to move on... ;)