8000 Feature request: To see a progress in fixing issues so it could be fun. · Issue #477 · uber-go/nilaway · GitHub
[go: up one dir, main page]

Skip to content

Feature request: To see a progress in fixing issues so it could be fun. #477

Open

Description

@dd84ai

Purpose

To give Big motivation boosts to devs in fixing nilaway stuff, during first adoption and later

Explanation

At minimum would be nice to see output how many lines of report is left to handle. This alone makes things seeing a progress

/home/naa/repos/pet_projects/fl-darkstat/darkmap/export_map/system_connections.go:265:20: error: Potential nil panic detected. Observed nil flow from source to dereference point: 
        - export_map/system_connections.go:265:20: deep read from field `Systems` lacking guarding; accessed field `LeadsTo`

(Same nil source could also cause potential nil panic(s) at 2 other place(s): export_map/system_connections.go:287:16, and export_map/system_connections.go:288:20.)

393 # lines of report left

Ideally should be present gamefication similar to pylint output
Image

Where each new report shows you progress much stuff you fixed in comparison to previous run. (for example how much less lines of error report u received in comparison to previous run)
It does not have to be making sense, it is just nice to see a progress in how things are fixed.

This feature would make nilaway handling very Fun instead of Chore of mopping floors.
it will give BIG MOTIVATION in trying to fix all nilaway reported on a big project where it started being applied 😄
it is very nice to see a progress that your code became better

Example

/home/naa/repos/pet_projects/fl-darkstat/darkstat/configs_export/mines.go:95:21: error: Potential nil panic detected. Observed nil flow from source to dereference point: 
        - configs_export/mines.go:95:21: deep read from field `ExplosionMap` lacking guarding; accessed field `HullDamage` via the assignment(s):
                - `e.Mapped.Equip().ExplosionMap[...]` to `explosion` at configs_export/mines.go:93:3

(Same nil source could also cause potential
A5B6
 nil panic(s) at 2 other place(s): configs_export/mines.go:96:23, and configs_export/mines.go:99:25.)

251 lines of nilaway issues left.
You improved your code by 26 lines in comparison to previous run. Nice work! 💪
Your code has been rated at 7.49/10 (previous run: 7.23/10, +0.26)
New best score! 🎉

Activity

  1. changed the title [-]Feature: To see a progress in fixing issues[/-] [+]Feature request: To see a progress in fixing issues so it could be fun.[/+] on Aug 2, 2026
  2. yuxincs commented on Aug 7, 2026

    @yuxincs
    Collaborator

    This is a fun idea! but I feel that this can be easily wrapped around NilAway (-json flag that outputs all diagnostics as JSON) such that you can show whatever you want to show to the end user. Then NilAway can stay as a boring core :)

  3. dd84ai commented on Aug 7, 2026

    @dd84ai
    Author

    @yuxincs Technically yes. I was not able to "wait" and actually intercepted output of Nilaway and already used with my "gamificator" to make its usage in an easy way. (and fixed the target app i wished with nilaway, thanks)
    So for me itself, this is not an issue. I already used it with gameficiation.

    nilaway ./... 2>&1 | go run docker/nilaway_report/nilaway_report.go
    Where nilaway_report.go is https://github.com/darklab8/fl-darkstat/blob/master/docker/nilaway_report/nilaway_report.go

    ===
    Practically though making such feature (in a better way integrated) permanent part of a tool has next advantages

    • Makes sure people use it enthusiastically always. Increases its adoptation pretty much by order of magnitude (could be disabled with a flag if not needed).
    • They do not need inspiration for this idea and to write this script on their own, it is already there by default
    • Script that does it fairly small amount of effort, like 200 code lines which are fairly simple... so it does not look like there is big cost to feature

    It is kind of nice making tool more liked 😄 i think this stuff increases happiness to use a linter by more than 10 times.
    (it was very difficult in motivation to go through "raw output" and fixing stuff. Gamefication helped doing it like slide in a butter smoothly. I was struggling to take care of even 5% of report without gamefication. I took care in a single ride of 95% issues with gamefication)

    And considering how much diresome issue can be nil panics in Go, it would be really nice having things for their fixing really easy to adopt

    I could probably even open PR for that. It is very simple thing to add. ^_^

    This code part looks injectable for it 👀

    func run(p *analysis.Pass) (interface{}, error) {
    	pass := analysishelper.NewEnhancedPass(p)
    	conf := pass.ResultOf[config.Analyzer].(*config.Config)
    	deferredErrors := pass.ResultOf[accumulation.Analyzer].([]analysis.Diagnostic)
    	for _, e := range deferredErrors {
    		if conf.PrettyPrint {
    			e.Message = PrettyPrintErrorMessage(e.Message)
    		}
    		pass.Report(e)
    	}
    
    	return nil, nil
    }

    👀 with just intercepting msgs over there looks like possible to add "single function" of injected gamefication, logic of which we can hide in some folder/file away.

    • Except will be needed also added flag to turn it off optionally.
    • and outputing it only in "text" mode not in json mode

    Then may be it could be permament part making tool more fun to use ^_^

    P.S. So again not really needed for me itself, more of a question to benefit other people in adopting this tool easier and having more comfort to use it.

  4. dd84ai commented on Aug 7, 2026

    @dd84ai
    Author

    I liked results of bulletproofing my app with Nilaway 🛡️
    My app explicitely had issue with user input being very variative ini configs that users were breaking all the time in a new way. Nilaway looks like helped me finally getting app stability regarding "whatever" user input in terms of gigaton of ini configs malforming data and breaking code logic with yet another nil panic

    Initial report was having 800 text lines of Nilaway report.
    I excluded not very important libs and made it down to 500 text lines.
    I struggled to find motivation to process even like 50 text lines.
    After turned on gamefication i am already down to only like 30 lines left out of the whole original 500 text lines. processed almost all issues in a single evening.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0