--- Hanging Libraries ---
()
| 840 | // --- Hanging Libraries --- |
| 841 | |
| 842 | func (a *App) updateHangingLibraries() { |
| 843 | a.mu.Lock() |
| 844 | modsDir := a.ProjectData.ModsDir |
| 845 | snapshot := a.ProjectData.LatestSnapshot |
| 846 | deps := a.ProjectData.Dependencies |
| 847 | dismissed := make(map[string]bool) |
| 848 | for _, d := range a.ProjectData.DismissedHangingLibs { |
| 849 | dismissed[d] = true |
| 850 | } |
| 851 | a.mu.Unlock() |
| 852 | |
| 853 | if modsDir == "" || snapshot == nil { |
| 854 | return |
| 855 | } |
| 856 | |
| 857 | entries, err := os.ReadDir(modsDir) |
| 858 | if err != nil { |
| 859 | return |
| 860 | } |
| 861 | |
| 862 | currentMods := make(map[string]bool) |
| 863 | for _, e := range entries { |
| 864 | if !e.IsDir() && filepath.Ext(e.Name()) == ".jar" { |
| 865 | currentMods[e.Name()] = true |
| 866 | } |
| 867 | } |
| 868 | |
| 869 | allNeededDeps := make(map[string]bool) |
| 870 | for mod, depList := range deps { |
| 871 | if currentMods[mod] { |
| 872 | for _, dep := range depList { |
| 873 | allNeededDeps[dep] = true |
| 874 | } |
| 875 | } |
| 876 | } |
| 877 | |
| 878 | var hanging []string |
| 879 | for mod, depList := range deps { |
| 880 | if !currentMods[mod] { |
| 881 | for _, dep := range depList { |
| 882 | if !allNeededDeps[dep] && currentMods[dep] && !dismissed[dep] { |
| 883 | hanging = append(hanging, dep) |
| 884 | } |
| 885 | } |
| 886 | } |
| 887 | } |
| 888 | |
| 889 | hangingSet := make(map[string]bool) |
| 890 | for _, h := range hanging { |
| 891 | hangingSet[h] = true |
| 892 | } |
| 893 | var hangingList []string |
| 894 | for h := range hangingSet { |
| 895 | hangingList = append(hangingList, h) |
| 896 | } |
| 897 | |
| 898 | a.mu.Lock() |
| 899 | a.HangingLibraries = hangingList |
no test coverage detected