Skip to content

Commit

Permalink
Extract the parseFile function in the typescript and flow parsers (#3…
Browse files Browse the repository at this point in the history
…5318)

Summary:
This PR aims to extract  the parseFile function in the typescript and flow parsers.  This is to solve the problem described [here](#35158 (comment)) and help with the work done in #34872.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[Internal] [Changed] - Extract the parseFile function in the typescript and flow parsers

Pull Request resolved: #35318

Test Plan:
yarn flow:
<img width="496" alt="image" src="https://user-images.githubusercontent.com/40902940/206518024-83084c3d-ab0d-4a04-810a-d40270add4b0.png">

yarn lint:
<img width="495" alt="image" src="https://user-images.githubusercontent.com/40902940/206518076-9e07eafe-db61-4c6e-8aaa-f92f190cf4f3.png">

yarn test:
<img width="389" alt="image" src="https://user-images.githubusercontent.com/40902940/206518118-5633b28c-b79b-4421-80f7-de1e03fb8ff2.png">

Reviewed By: cortinico

Differential Revision: D41248581

Pulled By: cipolleschi

fbshipit-source-id: f5b878a28a7de612fcdd1528f064b44f668503af
  • Loading branch information
MaeIg authored and facebook-github-bot committed Dec 13, 2022
1 parent 2344860 commit 3f2691c
Show file tree
Hide file tree
Showing 46 changed files with 382 additions and 289 deletions.
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

0 comments on commit 3f2691c

Please sign in to comment.