Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Codegen] Extract the parseFile function in the typescript and flow parsers #35318

Closed
wants to merge 11 commits into from
Closed
10 changes: 7 additions & 3 deletions packages/eslint-plugin-specs/react-native-modules.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ const ERRORS = {

let RNModuleParser;
let RNParserUtils;
let RNFlowParser;

function requireModuleParser() {
if (RNModuleParser == null || RNParserUtils == null) {
if (RNModuleParser == null || RNParserUtils == null || RNFlowParser == null) {
// If using this externally, we leverage @react-native/codegen as published form
if (!PACKAGE_USAGE) {
const config = {
Expand All @@ -36,6 +37,7 @@ function requireModuleParser() {
withBabelRegister(config, () => {
RNModuleParser = require('@react-native/codegen/src/parsers/flow/modules');
RNParserUtils = require('@react-native/codegen/src/parsers/utils');
RNFlowParser = require('@react-native/codegen/src/parsers/flow/parser');
});
} else {
const config = {
Expand All @@ -46,13 +48,15 @@ function requireModuleParser() {
withBabelRegister(config, () => {
RNModuleParser = require('@react-native/codegen/lib/parsers/flow/modules');
RNParserUtils = require('@react-native/codegen/lib/parsers/flow/utils');
RNFlowParser = require('@react-native/codegen/lib/parsers/flow/parser');
});
}
}

return {
buildModuleSchema: RNModuleParser.buildModuleSchema,
createParserErrorCapturer: RNParserUtils.createParserErrorCapturer,
parser: new RNFlowParser.FlowParser(),
};
}

Expand Down Expand Up @@ -127,7 +131,7 @@ function rule(context) {
});
}

const {buildModuleSchema, createParserErrorCapturer} =
const {buildModuleSchema, createParserErrorCapturer, parser} =
requireModuleParser();
const flowParser = require('flow-parser');

Expand All @@ -137,7 +141,7 @@ function rule(context) {
const ast = flowParser.parse(sourceCode, {enums: true});

tryParse(() => {
buildModuleSchema(hasteModuleName, ast, tryParse);
buildModuleSchema(hasteModuleName, ast, tryParse, parser);
});

parsingErrors.forEach(error => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateComponentDescriptorH');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateComponentDescriptorH can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateComponentHObjCpp');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateComponentHObjCpp can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateEventEmitterCpp');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateEventEmitterCpp can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateEventEmitterH');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateEventEmitterH can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GeneratePropsCpp');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GeneratePropsCpp can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GeneratePropsH');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GeneratePropsH can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GeneratePropsJavaDelegate');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GeneratePropsJavaDelegate can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,19 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GeneratePropsJavaInterface');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;
const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GeneratePropsJavaInterface can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema, undefined, false);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,19 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateShadowNodeCpp');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;
const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateShadowNodeCpp can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema, undefined, false);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,19 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateShadowNodeH');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;
const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateShadowNodeH can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema, undefined, false);
expect(Object.fromEntries(output)).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,20 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/components/GenerateViewConfigJs');
const fs = require('fs');

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/components`;

const fixtures = fs.readdirSync(FIXTURE_DIR);

const parser = new FlowParser();

fixtures.forEach(fixture => {
it(`GenerateViewConfigJs can generate for '${fixture}'`, () => {
const libName = 'RNCodegenModuleFixtures';
const schema = parseFile(
`${FIXTURE_DIR}/${fixture}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`);
const output = generator.generate(libName, schema);
expect(output).toMatchSnapshot();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,21 @@

'use strict';

const {parseFile} = require('../../../src/parsers/utils');
const FlowParser = require('../../../src/parsers/flow');
const {FlowParser} = require('../../../src/parsers/flow/parser');
const generator = require('../../../src/generators/modules/GenerateModuleObjCpp');
const fs = require('fs');

import type {SchemaType} from '../../../src/CodegenSchema';

const FIXTURE_DIR = `${__dirname}/../../__test_fixtures__/modules`;

const parser = new FlowParser();

function getModules(): SchemaType {
const filenames: Array<string> = fs.readdirSync(FIXTURE_DIR);
return filenames.reduce<SchemaType>(
(accumulator, file) => {
const schema = parseFile(
`${FIXTURE_DIR}/${file}`,
FlowParser.buildSchema,
);
const schema = parser.parseFile(`${FIXTURE_DIR}/${file}`);
return {
modules: {
...accumulator.modules,
Expand Down
Loading