swiftlang / swift-package-manager

The Package Manager for the Swift Programming Language
Apache License 2.0
9.72k stars 1.34k forks source link

[Traits] Correctly diagnose unused dependency with traits #7702

Closed FranzBusch closed 3 months ago

FranzBusch commented 3 months ago

Motivation

We are currently diagnosing unused dependencies by looking at the list of products used by the final modules and check if for every root dependency we are using at least one product of that package. This incorrectly diagnosis unused dependencies if the usage of the dependency is either:

Modification

This PR adds two more checks to the diagnostic pass to find unused dependencies. We first create a set of dependency products that are guarded by a trait. When checking each dependency we then check if we enabled any trait on the dependency since this means it is used for setting a trait. We also check if any product of the dependency is guarded by a trait to identify if it was an optional dependency.

Result

No more incorrect unused dependency warnings.

FranzBusch commented 3 months ago

@swift-ci please test

FranzBusch commented 3 months ago

@swift-ci test windows

MaxDesiatov commented 3 months ago

@swift-ci test

MaxDesiatov commented 3 months ago

@swift-ci test windows