More exact language usage stats from Github profile.
Features:
- No limits like only "top 10 languages"
- Both public & private repos via access token
- Aliasing similar languages to same stats. For example, combine C & C++ to C/C++
- Ignoring languages. For example, drop markup like SCSS, HTML, Twig etc.
- Ignoring repositories. For example, drop a repository that contains megabytes of generated code, skewing statistics.
go get github.com/stscoundrel/polylinguist
Polylinguist exposes a functions for getting Github language stats by username & access token.
With default settings:
package main
import (
"fmt"
"github.com/stscoundrel/polylinguist"
)
accessToken := "YOUR_ACCESS_TOKEN"
// Fetches all languages from all repos.
stats, err := polylinguist.GetTopLanguages("YOUR_USERNAME", accessToken)
if err != nil {
// However you want to deal with your errors.
// Most likely cause: failed network, failed auth.
}
for index, language := range stats {
fmt.Printf("%d. %s - %f - %s \n", index+1, language.Name, language.Percentage, language.Color)
}
With custom settings:
package main
import (
"fmt"
"github.com/stscoundrel/polylinguist"
"github.com/stscoundrel/polylinguist/stats"
)
accessToken := "YOUR_ACCESS_TOKEN"
// Setup custom settings to skip certain languages & repos
// Also set custom aliases to combine some languages into single statistic.
settings := stats.Settings{
IgnoredLanguages: []string{"SCSS", "CSS", "ASL", "HTML"},
IgnoredRepos: []string{
"old-norwegian-dictionary",
"old-norwegian-dictionary-rs",
"old-norwegian-dictionary-go",
},
AliasedLanguages: []stats.LanguageAlias{
{
Language: "C",
Alias: "C/C++",
},
{
Language: "C++",
Alias: "C/C++",
},
},
}
stats, err := polylinguist.GetTopLanguagesWithSettings("YOUR_USERNAME", accessToken, settings)
if err != nil {
// However you want to deal with your errors.
}
for index, language := range stats {
fmt.Printf("%d. %s - %f - %s \n", index+1, language.Name, language.Percentage, language.Color)
}
Output will be something to the effect of:
1. TypeScript - 37.237267 - #3178c6
2. JavaScript - 28.081825 - #f1e05a
3. Go - 9.608068 - #00ADD8
4. Rust - 5.951985 - #dea584
5. C# - 5.426030 - #178600
6. PHP - 4.735421 - #4F5D95
7. Python - 3.653692 - #3572A5
8. Java - 2.354974 - #b07219
9. Nim - 1.370613 - #ffc200
10. Scala - 0.892341 - #c22d40
11. C/C++ - 0.359692 - #555555
12. Kotlin - 0.223640 - #A97BFF
13. F# - 0.076285 - #b845fc
14. Dockerfile - 0.027167 - #384d54
15. Shell - 0.001000 - #89e051
Up to you what kind of graphic or chart you want to produce with the data. The data includes Github language colors for visual portions.
For a template on usage as a cloud function on Vercel, see this repo