{"contents":"package git\n\nimport (\n\t\"github.com/go-enry/go-enry/v2\"\n\t\"github.com/go-git/go-git/v5/plumbing/object\"\n)\n\n// LanguageBreakdown returns a map of language → total bytes for files in the repo.\nfunc (repo *Repo) LanguageBreakdown() (map[string]int64, error) {\n\tcommit, err := repo.HeadCommit()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttree, err := commit.Tree()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlangs := make(map[string]int64)\n\n\terr = tree.Files().ForEach(func(f *object.File) error {\n\t\tif f.Size == 0 {\n\t\t\treturn nil\n\t\t}\n\t\tlang := enry.GetLanguage(f.Name, nil)\n\t\tif lang == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tlangs[lang] += f.Size\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn langs, nil\n}\n","path":"git/language.go","ref":"main"}