Skip to content

Commit eeb9273

Browse files
James Crosettoljharb
authored andcommitted
[Fix] version detection: Add tests that verify versioning works for sibling and child projects
Fixes #2218
1 parent acf7d62 commit eeb9273

File tree

12 files changed

+64
-13
lines changed

12 files changed

+64
-13
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
2020
* [`destructuring-assignment`]: fix a false positive for local prop named `context` in SFC ([#2929][] @SyMind)
2121
* [`jsx-no-target-blank`]: Allow rel="noreferrer" when `allowReferrer` is true ([#2925][] @edemaine)
2222
* [`boolean-prop-naming`]: add check for typescript "boolean" type ([#2930][] @vedadeepta)
23+
* version detection: Add tests that verify versioning works for sibling and child projects ([#2943][] @jcrosetto)
2324

2425
### Changed
2526
* [Docs] [`jsx-no-constructed-context-values`][]: fix invalid example syntax ([#2910][] @kud)
2627
* [readme] Replace lists of rules with tables in readme ([#2908][] @motato1)
2728
* [Docs] added missing curly braces ([#2923][] @Muditxofficial)
2829

30+
[#2943]: https://github.com/yannickcr/eslint-plugin-react/pull/2943
2931
[#2930]: https://github.com/yannickcr/eslint-plugin-react/pull/2930
3032
[#2929]: https://github.com/yannickcr/eslint-plugin-react/pull/2929
3133
[#2925]: https://github.com/yannickcr/eslint-plugin-react/pull/2925

lib/util/version.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'use strict';
77

88
const resolve = require('resolve');
9+
const path = require('path');
910
const error = require('./error');
1011

1112
let warnedForMissingVersion = false;
@@ -20,13 +21,14 @@ function resetDetectedVersion() {
2021
cachedDetectedReactVersion = undefined;
2122
}
2223

23-
function detectReactVersion() {
24+
// TODO, semver-major: remove context fallback
25+
function detectReactVersion(context) {
2426
if (cachedDetectedReactVersion) {
2527
return cachedDetectedReactVersion;
2628
}
2729

2830
try {
29-
const reactPath = resolve.sync('react', {basedir: process.cwd()});
31+
const reactPath = resolve.sync('react', {basedir: context ? path.dirname(context.getFilename()) : process.cwd()});
3032
const react = require(reactPath); // eslint-disable-line global-require, import/no-dynamic-require
3133
cachedDetectedReactVersion = react.version;
3234
return cachedDetectedReactVersion;
@@ -50,7 +52,7 @@ function getReactVersionFromContext(context) {
5052
if (context.settings && context.settings.react && context.settings.react.version) {
5153
let settingsVersion = context.settings.react.version;
5254
if (settingsVersion === 'detect') {
53-
settingsVersion = detectReactVersion();
55+
settingsVersion = detectReactVersion(context);
5456
}
5557
if (typeof settingsVersion !== 'string') {
5658
error('Warning: React version specified in eslint-plugin-react-settings must be a string; '
@@ -66,9 +68,10 @@ function getReactVersionFromContext(context) {
6668
return confVer.split('.').map((part) => Number(part));
6769
}
6870

69-
function detectFlowVersion() {
71+
// TODO, semver-major: remove context fallback
72+
function detectFlowVersion(context) {
7073
try {
71-
const flowPackageJsonPath = resolve.sync('flow-bin/package.json', {basedir: process.cwd()});
74+
const flowPackageJsonPath = resolve.sync('flow-bin/package.json', {basedir: context ? path.dirname(context.getFilename()) : process.cwd()});
7275
const flowPackageJson = require(flowPackageJsonPath); // eslint-disable-line global-require, import/no-dynamic-require
7376
return flowPackageJson.version;
7477
} catch (e) {
@@ -87,7 +90,7 @@ function getFlowVersionFromContext(context) {
8790
if (context.settings.react && context.settings.react.flowVersion) {
8891
let flowVersion = context.settings.react.flowVersion;
8992
if (flowVersion === 'detect') {
90-
flowVersion = detectFlowVersion();
93+
flowVersion = detectFlowVersion(context);
9194
}
9295
if (typeof flowVersion !== 'string') {
9396
error('Warning: Flow version specified in eslint-plugin-react-settings must be a string; '

tests/fixtures/version/detect-version-sibling/node_modules/flow-bin/package.json

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version-sibling/node_modules/react/index.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version-sibling/node_modules/react/package.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version-sibling/test.js

Whitespace-only changes.

tests/fixtures/version/detect-version/detect-version-child/node_modules/flow-bin/package.json

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version/detect-version-child/node_modules/react/index.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version/detect-version-child/node_modules/react/package.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/version/detect-version/detect-version-child/test.js

Whitespace-only changes.

0 commit comments

Comments
 (0)