Kevin Lacker 857bae4ea3 Replace the deprecated esprima-fb parser with flow-parser, on the RN website
Summary:
(I changed a ton from when I previously submitted this PR so please take another look if you already did.)

PROBLEM: the no-longer-maintained `esprima-fb` parser does not support class properties, leading our website docgen to die if we use class properties, which we're gonna do real soon now
SOLUTION: use `flow-parser` instead, which the flow team is maintaining including all the fancy-pants ES? stuff that FB uses internally.

This removes the `esprima-fb` parser from jsdocs and replaces it with `flow-parser`. It's almost the same, I checked by diffing all the parser json output and it only had a few irrelevant differences. I had to add a file of constants so that we could remove esprima-fb altogether, too.

This also adds a couple unit tests, so that we can test that jsDocs works programmatically. They don't run if you run the regular RN tests, you have to run `npm test` from the `/website/` subdirectory.
Closes https://github.com/facebook/react-native/pull/9890

Differential Revision: D3865629

Pulled By: bestander

fbshipit-source-id: 8f561b78ca4a02f3f7b45e55904ec2fa911e3bb6
2016-09-14 14:28:44 -07:00

40 lines
1.0 KiB
JavaScript

/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
'use strict';
const fs = require('fs');
const jsDocs = require('../jsdocs');
const libs = __dirname + '/../../../Libraries/';
function checkWeCanParse(library) {
let path = libs + library;
let code = fs.readFileSync(path).toString();
let json = jsDocs(code);
expect(json).toBeTruthy();
}
describe('parseSource', () => {
it('should parse Vibration.js', () => {
checkWeCanParse('Vibration/Vibration.js');
});
it('should parse AsyncStorage.js', () => {
checkWeCanParse('Storage/AsyncStorage.js');
});
it('should not parse invalid code', () => {
let code = `
for x in range(10):
print 'oops this isnt python'
`;
expect(jsDocs('fakepath', code)).toBeFalsy();
});
});