mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 17:15:54 +00:00
857bae4ea3
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
62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-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.
|
|
*/
|
|
|
|
/*global exports:true*/
|
|
/*jslint node:true*/
|
|
'use strict';
|
|
|
|
var util = require('util');
|
|
|
|
var Syntax = require('./syntax');
|
|
var utils = require('jstransform/src/utils');
|
|
|
|
// Top level file pragmas that must not exist for the meta transform to
|
|
// be applied.
|
|
var mustNotHave = [
|
|
'nosourcemeta',
|
|
];
|
|
|
|
function shouldTraverseFile(state, pragmas) {
|
|
if (state.g.sourcemeta === undefined) {
|
|
var notHaves = true;
|
|
mustNotHave.forEach(function (value) {
|
|
notHaves = notHaves && !(value in pragmas);
|
|
});
|
|
state.g.sourcemeta = notHaves;
|
|
}
|
|
return state.g.sourcemeta;
|
|
}
|
|
|
|
var shouldTransformFile = shouldTraverseFile;
|
|
|
|
function shouldTransformFunction(node, state, pragmas, params) /*bool*/ {
|
|
if (!shouldTransformFile(state, pragmas)) {
|
|
throw new Error(
|
|
'shouldTransformFunction should not be called if shouldTransformFile ' +
|
|
'fails'
|
|
);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function wrapsBody() {
|
|
return false;
|
|
}
|
|
|
|
function annotates() {
|
|
return true;
|
|
}
|
|
|
|
exports.shouldTransformFile = shouldTransformFile;
|
|
exports.shouldTraverseFile = shouldTraverseFile;
|
|
exports.shouldTransformFunction = shouldTransformFunction;
|
|
exports.wrapsBody = wrapsBody;
|
|
exports.annotates = annotates;
|
|
exports.name = 'sourcemeta';
|