danmayer / coverband

Ruby production code coverage collection and reporting (line of code usage)
https://github.com/danmayer/coverband
MIT License
2.52k stars 161 forks source link

I18n tracking : manually mark an item as being used #549

Open Systho opened 1 month ago

Systho commented 1 month ago

Is your feature request related to a problem? Please describe.

I am using i18n-js for expsing a subset of my i18n keys to my javascript code. Those keys are never used by any ruby code but I would like to report from javascript when a key (or a set of keys) are used.

I can easily make an API controller or a Channel for this and send a message from javascript but then I do not know how to tell Coverband to mark it.

According to this file I would be inclined to use Coverband.configuration.translations_tracker.track_key(flat_key) but this does not really feel like a public API

How can I do this ?

Describe the solution you'd like In the best ever world, I wish the railtie would register a (safe) way to notify Coverband that a key has been used. But in a more realistic world, I would love to a have public API available for marking a key as used (and possibly other entrypoint into Coverband )

Describe alternatives you've considered

Additional context

I could easily tune something for my use case, but I thought that I might not be the only one with this need

danmayer commented 1 month ago

I believe you can use the ignore config to match your translation keys...

https://github.com/danmayer/coverband/blob/main/lib/coverband/collectors/abstract_tracker.rb#L130

try adding a string that would be a regex to some keys you want to ignore and let me know if that works @Systho

Systho commented 4 weeks ago

Oh but I do not want to ignore anything, more like the opposite.

I actually want to track usage of keys in javascript, but since I'm not going through I18n.t(....) I need another mechanism to warn Coverband that a keys is actively used.

My point is to detect dead keys among the ones used in JS.

danmayer commented 3 weeks ago

hmm so if you are doing this manually ignore just means we won't try to report it as dead...but I get that isn't what you are looking for.

I guess if you are looking for a programmatic way to do this you mean you want to dynamically call something that will mark the translation key? So from your controller take a param then call track on it...

This is an example for the view tracker, but as you mentioned in the considered alternatives, i think calling track_key is the best.

> Coverband.configuration.view_tracker.track_key(identifier: "/home/danmayer/projects/coverband_rails_example/app/views/books/_form.html.erb") 

Coverband.configuration.view_tracker.save_report                                                                              => #<Set: {}>

not sure what else you would be looking for other than the track_key method, if you have something else in mind for the interface let me know.

Systho commented 3 weeks ago

Would you consider making Coverband.track_key() a public facade method which would encapsulate the technical implementation ?

Calling Coverband.configuration.view_tracker.track_key really feels like my code know too much about Coverband and would break if you ever decide to refactor any internal aspect of your code.

danmayer commented 3 weeks ago

I could do something like that but it would likely have to at least specify the view_tracker vs i18n or others trackers. that could be by method name or something like a type: