Move num(NativeModule flow interface) > 1 error into `buildModuleSchema`
Summary: **Motivation:** After this change, we can show this ParserError using the React Native Module ESLint rule. Previously when we declared more than one NativeModule spec in a file, we incorrectly reported that there were *no* NativeModule specs in the file. Changelog: [Internal] Reviewed By: hramos Differential Revision: D25163299 fbshipit-source-id: 92bc09d09cdbc323e0ac1f317c40a767880f5bc2
This commit is contained in:
Родитель
1de76d2842
Коммит
3e5779ce93
|
@ -77,14 +77,6 @@ function isModule(
|
|||
return false;
|
||||
}
|
||||
|
||||
if (moduleInterfaces.length > 1) {
|
||||
throw new Error(
|
||||
'File contains declarations of more than one module: ' +
|
||||
moduleInterfaces.join(', ') +
|
||||
'. Please declare exactly one module in this file.',
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_REA
|
|||
|
||||
exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_UNNAMED_PARAMS 1`] = `"Module NativeSampleTurboModule: All function parameters must be named."`;
|
||||
|
||||
exports[`RN Codegen Flow Parser Fails with error message TWO_NATIVE_EXTENDING_TURBO_MODULE 1`] = `"File contains declarations of more than one module: Spec, Spec2. Please declare exactly one module in this file."`;
|
||||
exports[`RN Codegen Flow Parser Fails with error message TWO_NATIVE_EXTENDING_TURBO_MODULE 1`] = `"Module NativeSampleTurboModule: Every NativeModule spec file must declare exactly one NativeModule Flow interface. This file declares 2: 'Spec', and 'Spec2'. Please remove the extraneous Flow interface declarations."`;
|
||||
|
||||
exports[`RN Codegen Flow Parser Fails with error message TWO_NATIVE_MODULES_EXPORTED_WITH_DEFAULT 1`] = `"File neither contains a module declaration, nor a component declaration. For module declarations, please make sure your file has an InterfaceDeclaration extending TurboModule. For component declarations, please make sure your file has a default export calling the codegenNativeComponent<Props>(...) macro."`;
|
||||
|
||||
|
|
|
@ -23,12 +23,33 @@ class MisnamedModuleFlowInterfaceParserError extends ParserError {
|
|||
}
|
||||
}
|
||||
|
||||
class ModuleFlowInterfaceNotParserError extends ParserError {
|
||||
class ModuleFlowInterfaceNotFoundParserError extends ParserError {
|
||||
constructor(hasteModuleName: string, ast: $FlowFixMe) {
|
||||
super(
|
||||
hasteModuleName,
|
||||
ast,
|
||||
`Module ${hasteModuleName}: No Flow interfaces extending TurboModule were detected in this NativeNativeModule spec.`,
|
||||
'No Flow interfaces extending TurboModule were detected in this NativeModule spec.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MoreThanOneModuleFlowInterfaceParserError extends ParserError {
|
||||
constructor(
|
||||
hasteModuleName: string,
|
||||
flowModuleInterfaces: $ReadOnlyArray<$FlowFixMe>,
|
||||
names: $ReadOnlyArray<string>,
|
||||
) {
|
||||
const finalName = names[names.length - 1];
|
||||
const allButLastName = names.slice(0, -1);
|
||||
const quote = x => `'${x}'`;
|
||||
|
||||
const nameStr =
|
||||
allButLastName.map(quote).join(', ') + ', and ' + quote(finalName);
|
||||
|
||||
super(
|
||||
hasteModuleName,
|
||||
flowModuleInterfaces,
|
||||
`Every NativeModule spec file must declare exactly one NativeModule Flow interface. This file declares ${names.length}: ${nameStr}. Please remove the extraneous Flow interface declarations.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -294,7 +315,8 @@ class IncorrectModuleRegistryCallArgumentTypeParserError extends ParserError {
|
|||
module.exports = {
|
||||
IncorrectlyParameterizedFlowGenericParserError,
|
||||
MisnamedModuleFlowInterfaceParserError,
|
||||
ModuleFlowInterfaceNotParserError,
|
||||
ModuleFlowInterfaceNotFoundParserError,
|
||||
MoreThanOneModuleFlowInterfaceParserError,
|
||||
UnnamedFunctionParamParserError,
|
||||
UnsupportedArrayElementTypeAnnotationParserError,
|
||||
UnsupportedFlowGenericParserError,
|
||||
|
|
|
@ -31,7 +31,8 @@ const {unwrapNullable, wrapNullable} = require('./utils');
|
|||
const {
|
||||
IncorrectlyParameterizedFlowGenericParserError,
|
||||
MisnamedModuleFlowInterfaceParserError,
|
||||
ModuleFlowInterfaceNotParserError,
|
||||
ModuleFlowInterfaceNotFoundParserError,
|
||||
MoreThanOneModuleFlowInterfaceParserError,
|
||||
UnnamedFunctionParamParserError,
|
||||
UnsupportedArrayElementTypeAnnotationParserError,
|
||||
UnsupportedFlowGenericParserError,
|
||||
|
@ -580,8 +581,16 @@ function buildModuleSchema(
|
|||
);
|
||||
});
|
||||
|
||||
if (moduleInterfaceNames.length !== 1) {
|
||||
throw new ModuleFlowInterfaceNotParserError(hasteModuleName, ast);
|
||||
if (moduleInterfaceNames.length === 0) {
|
||||
throw new ModuleFlowInterfaceNotFoundParserError(hasteModuleName, ast);
|
||||
}
|
||||
|
||||
if (moduleInterfaceNames.length > 1) {
|
||||
throw new MoreThanOneModuleFlowInterfaceParserError(
|
||||
hasteModuleName,
|
||||
moduleInterfaceNames.map(name => types[name]),
|
||||
moduleInterfaceNames,
|
||||
);
|
||||
}
|
||||
|
||||
const [moduleInterfaceName] = moduleInterfaceNames;
|
||||
|
|
Загрузка…
Ссылка в новой задаче