Skip to content

Commit

Permalink
docs(linker): Use breadcrumbs in peer dependency warnings (#4720)
Browse files Browse the repository at this point in the history
**Summary**

@gaearon called Yarn out for better peer dependency error messages so this is the first step to make
them more useful and informative.

**Test plan**

Use a repo like `https://github.com/edmorley/yarn-unmet-peerdependency-testcase` to have peer dependency
warnings and observe they now show the path for the package missing the peer dependency. This should
allow people to investigate these errors in an easier fashion.

```
warning "neutrino-preset-airbnb-base > eslint-config-airbnb-base@12.0.2" has unmet peer dependency "eslint@^4.8.0".
warning "neutrino-preset-airbnb-base > eslint-plugin-import@2.7.0" has unmet peer dependency "eslint@2.x - 4.x".
```
  • Loading branch information
BYK authored and arcanis committed Oct 19, 2017
1 parent b97c797 commit 519b818
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions src/package-linker.js
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ export default class PackageLinker {

let peerError = 'unmetPeer';
let resolvedLevelDistance = Infinity;
let resolvedPeerPkgPattern;
let resolvedPeerPkg;
for (const peerPkg of peerPkgs) {
const peerPkgRef = peerPkg._reference;
if (!(peerPkgRef && peerPkgRef.patterns)) {
Expand All @@ -478,25 +478,31 @@ export default class PackageLinker {
if (isFinite(levelDistance) && levelDistance < resolvedLevelDistance) {
if (this._satisfiesPeerDependency(range, peerPkgRef.version)) {
resolvedLevelDistance = levelDistance;
resolvedPeerPkgPattern = peerPkgRef.patterns;
this.reporter.verbose(
this.reporter.lang(
'selectedPeer',
`${pkg.name}@${pkg.version}`,
`${peerDepName}@${peerPkgRef.version}`,
peerPkgRef.level,
),
);
resolvedPeerPkg = peerPkgRef;
} else {
peerError = 'incorrectPeer';
}
}
}

if (resolvedPeerPkgPattern) {
ref.addDependencies(resolvedPeerPkgPattern);
if (resolvedPeerPkg) {
ref.addDependencies(resolvedPeerPkg.patterns);
this.reporter.verbose(
this.reporter.lang(
'selectedPeer',
`${pkg.name}@${pkg.version}`,
`${peerDepName}@${resolvedPeerPkg.version}`,
resolvedPeerPkg.level,
),
);
} else {
this.reporter.warn(this.reporter.lang(peerError, `${pkg.name}@${pkg.version}`, `${peerDepName}@${range}`));
this.reporter.warn(
this.reporter.lang(
peerError,
`${refTree.join(' > ')} > ${pkg.name}@${pkg.version}`,
`${peerDepName}@${range}`,
),
);
}
}
}
Expand Down

0 comments on commit 519b818

Please sign in to comment.