optional chaining

Summary: Adds support for optional chaining to the codebase, enables flow and eslint support for it.

Reviewed By: passy

Differential Revision: D9940732

fbshipit-source-id: 730aa76653bd22a8fa17a73e72b3a7329de0226c
This commit is contained in:
Daniel Büchele
2018-09-20 04:13:05 -07:00
committed by Facebook Github Bot
parent 5a492951f5
commit 7825d9247c
6 changed files with 76 additions and 74 deletions

View File

@@ -11,6 +11,7 @@ const fbjs = require('eslint-config-fbjs');
const pattern = /^\*\n \* Copyright 20\d{2}-present Facebook\.\n \* This source code is licensed under the MIT license found in the\n \* LICENSE file in the root directory of this source tree\.\n \* @format\n./; const pattern = /^\*\n \* Copyright 20\d{2}-present Facebook\.\n \* This source code is licensed under the MIT license found in the\n \* LICENSE file in the root directory of this source tree\.\n \* @format\n./;
module.exports = { module.exports = {
parser: 'babel-eslint',
extends: 'fbjs', extends: 'fbjs',
plugins: [...fbjs.plugins, 'header', 'prettier'], plugins: [...fbjs.plugins, 'header', 'prettier'],
rules: { rules: {

View File

@@ -13,6 +13,7 @@ flow-typed
[options] [options]
esproposal.export_star_as=enable esproposal.export_star_as=enable
esproposal.optional_chaining=enable
module.use_strict=true module.use_strict=true
emoji=true emoji=true
all=true all=true

View File

@@ -22,7 +22,7 @@
} }
}, },
"devDependencies": { "devDependencies": {
"babel-eslint": "^8.2.1", "babel-eslint": "8.2.1",
"electron": "^3.0.0-beta.4", "electron": "^3.0.0-beta.4",
"electron-builder": "^19.49.0", "electron-builder": "^19.49.0",
"eslint": "^4.15.0", "eslint": "^4.15.0",

View File

@@ -9,6 +9,7 @@
"@babel/parser": "^7.1.0", "@babel/parser": "^7.1.0",
"@babel/plugin-proposal-class-properties": "^7.1.0", "@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
"@babel/plugin-proposal-optional-chaining": "^7.0.0",
"@babel/plugin-transform-flow-strip-types": "^7.0.0", "@babel/plugin-transform-flow-strip-types": "^7.0.0",
"@babel/plugin-transform-modules-commonjs": "^7.1.0", "@babel/plugin-transform-modules-commonjs": "^7.1.0",
"@babel/preset-react": "^7.0.0", "@babel/preset-react": "^7.0.0",

View File

@@ -16,7 +16,13 @@ exports.transform = function({filename, options, src}) {
let ast = babylon.parse(src, { let ast = babylon.parse(src, {
filename, filename,
plugins: ['jsx', 'flow', 'classProperties', 'objectRestSpread'], plugins: [
'jsx',
'flow',
'classProperties',
'objectRestSpread',
'optionalChaining',
],
sourceType: 'module', sourceType: 'module',
}); });
@@ -26,6 +32,7 @@ exports.transform = function({filename, options, src}) {
require('../node_modules/@babel/plugin-proposal-object-rest-spread'), require('../node_modules/@babel/plugin-proposal-object-rest-spread'),
require('../node_modules/@babel/plugin-proposal-class-properties'), require('../node_modules/@babel/plugin-proposal-class-properties'),
require('../node_modules/@babel/plugin-transform-flow-strip-types'), require('../node_modules/@babel/plugin-transform-flow-strip-types'),
require('../node_modules/@babel/plugin-proposal-optional-chaining'),
require('./electron-requires.js'), require('./electron-requires.js'),
require('./fb-stubs.js'), require('./fb-stubs.js'),
require('./dynamic-requires.js'), require('./dynamic-requires.js'),

136
yarn.lock
View File

@@ -14,11 +14,14 @@
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30"
"@babel/code-frame@7.0.0-beta.44": "@babel/code-frame@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
integrity sha512-sW77BFwJ48YvQp3Gzz5xtAUiXuYOL2aMJKDwiaY3OcvdqBFurtYfOpSa4QrNyDxmOGRFSYzUpabU2m9QrlWE7w==
dependencies: dependencies:
"@babel/highlight" "7.0.0-beta.44" chalk "^2.0.0"
esutils "^2.0.2"
js-tokens "^3.0.0"
"@babel/code-frame@^7.0.0-beta.35": "@babel/code-frame@^7.0.0-beta.35":
version "7.0.0-beta.49" version "7.0.0-beta.49"
@@ -26,29 +29,21 @@
dependencies: dependencies:
"@babel/highlight" "7.0.0-beta.49" "@babel/highlight" "7.0.0-beta.49"
"@babel/generator@7.0.0-beta.44": "@babel/helper-function-name@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
integrity sha512-/SGPOyifPf20iTrMN+WdlY2MbKa7/o4j7B/4IAsdOusASp2icT+Wcdjf4tjJHaXNX8Pe9bpgVxLNxhRvcf8E5w==
dependencies: dependencies:
"@babel/types" "7.0.0-beta.44" "@babel/helper-get-function-arity" "7.0.0-beta.36"
jsesc "^2.5.1" "@babel/template" "7.0.0-beta.36"
lodash "^4.2.0" "@babel/types" "7.0.0-beta.36"
source-map "^0.5.0"
trim-right "^1.0.1"
"@babel/helper-function-name@7.0.0-beta.44": "@babel/helper-get-function-arity@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
integrity sha512-vPPcx2vsSoDbcyWr9S3nd0FM3B4hEXnt0p1oKpwa08GwK0fSRxa98MyaRGf8suk8frdQlG1P3mDrz5p/Rr3pbA==
dependencies: dependencies:
"@babel/helper-get-function-arity" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.36"
"@babel/template" "7.0.0-beta.44"
"@babel/types" "7.0.0-beta.44"
"@babel/helper-get-function-arity@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15"
dependencies:
"@babel/types" "7.0.0-beta.44"
"@babel/helper-module-imports@7.0.0-beta.51": "@babel/helper-module-imports@7.0.0-beta.51":
version "7.0.0-beta.51" version "7.0.0-beta.51"
@@ -57,20 +52,6 @@
"@babel/types" "7.0.0-beta.51" "@babel/types" "7.0.0-beta.51"
lodash "^4.17.5" lodash "^4.17.5"
"@babel/helper-split-export-declaration@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc"
dependencies:
"@babel/types" "7.0.0-beta.44"
"@babel/highlight@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5"
dependencies:
chalk "^2.0.0"
esutils "^2.0.2"
js-tokens "^3.0.0"
"@babel/highlight@7.0.0-beta.49": "@babel/highlight@7.0.0-beta.49":
version "7.0.0-beta.49" version "7.0.0-beta.49"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.49.tgz#96bdc6b43e13482012ba6691b1018492d39622cc" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.49.tgz#96bdc6b43e13482012ba6691b1018492d39622cc"
@@ -79,33 +60,34 @@
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^3.0.0" js-tokens "^3.0.0"
"@babel/template@7.0.0-beta.44": "@babel/template@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
integrity sha512-mUBi90WRyZ9iVvlWLEdeo8gn/tROyJdjKNC4W5xJTSZL+9MS89rTJSqiaJKXIkxk/YRDL/g/8snrG/O0xl33uA==
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.44" "@babel/code-frame" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.44" babylon "7.0.0-beta.36"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/traverse@7.0.0-beta.44": "@babel/traverse@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
integrity sha512-OTUb6iSKVR/98dGThRJ1BiyfwbuX10BVnkz89IpaerjTPRhDfMBfLsqmzxz5MiywUOW4M0Clta0o7rSxkfcuzw==
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.44" "@babel/code-frame" "7.0.0-beta.36"
"@babel/generator" "7.0.0-beta.44" "@babel/helper-function-name" "7.0.0-beta.36"
"@babel/helper-function-name" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.36"
"@babel/helper-split-export-declaration" "7.0.0-beta.44" babylon "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.44" debug "^3.0.1"
babylon "7.0.0-beta.44"
debug "^3.1.0"
globals "^11.1.0" globals "^11.1.0"
invariant "^2.2.0" invariant "^2.2.0"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/types@7.0.0-beta.44": "@babel/types@7.0.0-beta.36":
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
integrity sha512-PyAORDO9um9tfnrddXgmWN9e6Sq9qxraQIt5ynqBOSXKA5qvK1kUr+Q3nSzKFdzorsiK+oqcUnAFvEoKxv9D+Q==
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
lodash "^4.2.0" lodash "^4.2.0"
@@ -519,14 +501,15 @@ babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3:
slash "^1.0.0" slash "^1.0.0"
source-map "^0.5.7" source-map "^0.5.7"
babel-eslint@^8.2.1: babel-eslint@8.2.1:
version "8.2.3" version "8.2.1"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
integrity sha512-RzdVOyWKQRUnLXhwLk+eKb4oyW+BykZSkpYwFhM4tnfzAG5OWfvG0w/uyzMp5XKEU0jN82+JefHr39bG2+KhRQ==
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.44" "@babel/code-frame" "7.0.0-beta.36"
"@babel/traverse" "7.0.0-beta.44" "@babel/traverse" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.44" babylon "7.0.0-beta.36"
eslint-scope "~3.7.1" eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0" eslint-visitor-keys "^1.0.0"
@@ -667,9 +650,10 @@ babel-types@^6.18.0, babel-types@^6.26.0:
lodash "^4.17.4" lodash "^4.17.4"
to-fast-properties "^1.0.3" to-fast-properties "^1.0.3"
babylon@7.0.0-beta.44: babylon@7.0.0-beta.36:
version "7.0.0-beta.44" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
integrity sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==
babylon@^6.18.0: babylon@^6.18.0:
version "6.18.0" version "6.18.0"
@@ -1286,6 +1270,13 @@ debug@^3.0.0, debug@^3.1.0, debug@~3.1.0:
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@^3.0.1:
version "3.2.5"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407"
integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==
dependencies:
ms "^2.1.1"
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -3216,10 +3207,6 @@ jsesc@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
jsesc@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
json-parse-better-errors@^1.0.1: json-parse-better-errors@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -3617,6 +3604,11 @@ ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
ms@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
mute-stream@0.0.7: mute-stream@0.0.7:
version "0.0.7" version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@@ -4841,7 +4833,7 @@ source-map@^0.4.4:
dependencies: dependencies:
amdefine ">=0.0.4" amdefine ">=0.0.4"
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
version "0.5.7" version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"