Cross-fork lint: Support named export declaration (#20784)

Noticed this didn't work when I ran `replace-fork` and a named export
declaration in ReactFiberReconciler was not properly fixed.
This commit is contained in:
Andrew Clark
2021-02-10 13:01:52 -06:00
committed by GitHub
parent 3b870b1e09
commit eee874ce6e
3 changed files with 72 additions and 37 deletions

View File

@@ -104,7 +104,7 @@ export {
IdleLanePriority as IdleEventPriority,
} from './ReactFiberLane.old';
export {registerMutableSourceForHydration} from './ReactMutableSource.new';
export {registerMutableSourceForHydration} from './ReactMutableSource.old';
export {createPortal} from './ReactPortal';
export {
createComponentSelector,

View File

@@ -94,5 +94,29 @@ ruleTester.run('eslint-rules/no-cross-fork-imports', rule, {
],
output: "import {scheduleUpdateOnFiber} from './ReactFiberWorkLoop.new';",
},
{
code: "export {DiscreteEventPriority} from './ReactFiberLane.old.js';",
filename: 'ReactFiberReconciler.new.js',
errors: [
{
message:
'A module that belongs to the new fork cannot import a module ' +
'from the old fork.',
},
],
output: "export {DiscreteEventPriority} from './ReactFiberLane.new';",
},
{
code: "export {DiscreteEventPriority} from './ReactFiberLane.new.js';",
filename: 'ReactFiberReconciler.old.js',
errors: [
{
message:
'A module that belongs to the old fork cannot import a module ' +
'from the new fork.',
},
],
output: "export {DiscreteEventPriority} from './ReactFiberLane.old';",
},
],
});

View File

@@ -26,48 +26,59 @@ module.exports = {
const sourceFilename = context.getFilename();
if (isOldFork(sourceFilename)) {
const visitor = node => {
const sourceNode = node.source;
if (sourceNode === null) {
return;
}
const filename = sourceNode.value;
if (isNewFork(filename)) {
context.report({
node: sourceNode,
message:
'A module that belongs to the old fork cannot import a module ' +
'from the new fork.',
fix(fixer) {
return fixer.replaceText(
sourceNode,
`'${filename.replace(/\.new(\.js)?$/, '.old')}'`
);
},
});
}
};
return {
ImportDeclaration(node) {
const importSourceNode = node.source;
const filename = importSourceNode.value;
if (isNewFork(filename)) {
context.report({
node: importSourceNode,
message:
'A module that belongs to the old fork cannot import a module ' +
'from the new fork.',
fix(fixer) {
return fixer.replaceText(
importSourceNode,
`'${filename.replace(/\.new(\.js)?$/, '.old')}'`
);
},
});
}
},
ImportDeclaration: visitor,
ExportNamedDeclaration: visitor,
};
}
if (isNewFork(sourceFilename)) {
const visitor = node => {
const sourceNode = node.source;
if (sourceNode === null) {
return;
}
const filename = sourceNode.value;
if (isOldFork(filename)) {
context.report({
node: sourceNode,
message:
'A module that belongs to the new fork cannot import a module ' +
'from the old fork.',
fix(fixer) {
return fixer.replaceText(
sourceNode,
`'${filename.replace(/\.old(\.js)?$/, '.new')}'`
);
},
});
}
};
return {
ImportDeclaration(node) {
const importSourceNode = node.source;
const filename = importSourceNode.value;
if (isOldFork(filename)) {
context.report({
node: importSourceNode,
message:
'A module that belongs to the new fork cannot import a module ' +
'from the old fork.',
fix(fixer) {
return fixer.replaceText(
importSourceNode,
`'${filename.replace(/\.old(\.js)?$/, '.new')}'`
);
},
});
}
},
ImportDeclaration: visitor,
ExportNamedDeclaration: visitor,
};
}