Skip to content

Commit bc37220

Browse files
JounQinljharb
authored andcommitted
[Fix] version detection: support processor virtual filename
Fixes #2948
1 parent 3d7fd57 commit bc37220

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
55

66
## Unreleased
77

8+
### Fixed
9+
* version detection: support processor virtual filename ([#2949][] @JounQin)
10+
811
## [7.23.0] - 2021.03.22
912

1013
### Added
@@ -33,6 +36,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
3336
* [readme] Replace lists of rules with tables in readme ([#2908][] @motato1)
3437
* [Docs] added missing curly braces ([#2923][] @Muditxofficial)
3538

39+
[#2949]: https://github.com/yannickcr/eslint-plugin-react/pull/2949
3640
[#2943]: https://github.com/yannickcr/eslint-plugin-react/pull/2943
3741
[#2935]: https://github.com/yannickcr/eslint-plugin-react/pull/2935
3842
[#2933]: https://github.com/yannickcr/eslint-plugin-react/pull/2933

lib/util/version.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
'use strict';
77

8+
const fs = require('fs');
89
const resolve = require('resolve');
910
const path = require('path');
1011
const error = require('./error');
@@ -21,14 +22,37 @@ function resetDetectedVersion() {
2122
cachedDetectedReactVersion = undefined;
2223
}
2324

25+
function resolveBasedir(context) {
26+
let basedir = process.cwd();
27+
if (context) {
28+
const filename = context.getFilename();
29+
const dirname = path.dirname(filename);
30+
try {
31+
if (fs.statSync(filename).isFile()) {
32+
// dirname must be dir here
33+
basedir = dirname;
34+
}
35+
} catch (err) {
36+
// https://github.com/eslint/eslint/issues/11989
37+
if (err.code === 'ENOTDIR') {
38+
// the error code alreay indicates that dirname is a file
39+
basedir = path.dirname(dirname);
40+
}
41+
}
42+
}
43+
return basedir;
44+
}
45+
2446
// TODO, semver-major: remove context fallback
2547
function detectReactVersion(context) {
2648
if (cachedDetectedReactVersion) {
2749
return cachedDetectedReactVersion;
2850
}
2951

52+
const basedir = resolveBasedir(context);
53+
3054
try {
31-
const reactPath = resolve.sync('react', {basedir: context ? path.dirname(context.getFilename()) : process.cwd()});
55+
const reactPath = resolve.sync('react', {basedir});
3256
const react = require(reactPath); // eslint-disable-line global-require, import/no-dynamic-require
3357
cachedDetectedReactVersion = react.version;
3458
return cachedDetectedReactVersion;
@@ -70,8 +94,10 @@ function getReactVersionFromContext(context) {
7094

7195
// TODO, semver-major: remove context fallback
7296
function detectFlowVersion(context) {
97+
const basedir = resolveBasedir(context);
98+
7399
try {
74-
const flowPackageJsonPath = resolve.sync('flow-bin/package.json', {basedir: context ? path.dirname(context.getFilename()) : process.cwd()});
100+
const flowPackageJsonPath = resolve.sync('flow-bin/package.json', {basedir});
75101
const flowPackageJson = require(flowPackageJsonPath); // eslint-disable-line global-require, import/no-dynamic-require
76102
return flowPackageJson.version;
77103
} catch (e) {

tests/util/version.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@ describe('Version', () => {
7979
['Warning: Flow version was set to "detect" in eslint-plugin-react settings, but the "flow-bin" package is not installed. Assuming latest Flow version for linting.']
8080
];
8181
});
82+
83+
it('works with virtual filename', () => {
84+
sinon.stub(context, 'getFilename').callsFake(() => path.resolve(base, 'detect-version-sibling', 'test.js/0_fake.js'));
85+
86+
assert.equal(versionUtil.testReactVersion(context, '2.3.4'), true);
87+
assert.equal(versionUtil.testReactVersion(context, '2.3.5'), false);
88+
assert.equal(versionUtil.testFlowVersion(context, '2.92.0'), true);
89+
});
8290
});
8391

8492
describe('string version', () => {

0 commit comments

Comments
 (0)