Summary: Provides some really nice helpers and generators for multi command CLIs, including test helpers and all sorts of output niceties. This should make it quite easy for us to add additional sub-commands for bundling, publishing and keeping docs for all of it. Heroku maintains this and provides some excellent docs, too: https://oclif.io/ My only complaint is that it's class-based but that's effectively only the way to declare new commands and enforces a set of required/static properties on it. Reviewed By: nikoant Differential Revision: D19970293 fbshipit-source-id: 4228e502198c6fd376854a90ed2f01da29e96bc2
76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
const fbjs = require('eslint-config-fbjs');
|
|
|
|
// enforces copyright header and @format directive to be present in every file
|
|
const pattern = /^\*\r?\n[\S\s]*Facebook[\S\s]* \* @format\r?\n/;
|
|
|
|
const prettierConfig = {
|
|
requirePragma: true,
|
|
singleQuote: true,
|
|
trailingComma: 'all',
|
|
bracketSpacing: false,
|
|
jsxBracketSameLine: true,
|
|
parser: 'flow',
|
|
};
|
|
|
|
module.exports = {
|
|
parser: 'babel-eslint',
|
|
root: true,
|
|
extends: 'fbjs',
|
|
plugins: [...fbjs.plugins, 'header', 'prettier', '@typescript-eslint'],
|
|
rules: {
|
|
// disable rules from eslint-config-fbjs
|
|
'react/react-in-jsx-scope': 0, // not needed with our metro implementation
|
|
'no-new': 0, // new keyword needed e.g. new Notification
|
|
'no-catch-shadow': 0, // only relevant for IE8 and below
|
|
'no-bitwise': 0, // bitwise operations needed in some places
|
|
'consistent-return': 0,
|
|
'no-var': 2,
|
|
'prefer-const': [2, {destructuring: 'all'}],
|
|
'prefer-spread': 1,
|
|
'prefer-rest-params': 1,
|
|
'max-len': 0, // lets prettier take care of this
|
|
indent: 0, // lets prettier take care of this
|
|
'no-console': 0, // we're setting window.console in App.js
|
|
'no-multi-spaces': 2,
|
|
'prefer-promise-reject-errors': 1,
|
|
'no-throw-literal': 'error',
|
|
'no-extra-boolean-cast': 2,
|
|
'no-extra-semi': 2,
|
|
'no-unsafe-negation': 2,
|
|
'no-useless-computed-key': 2,
|
|
'no-useless-rename': 2,
|
|
|
|
// additional rules for this project
|
|
'header/header': [2, 'block', {pattern}],
|
|
'prettier/prettier': [2, prettierConfig],
|
|
'flowtype/object-type-delimiter': [0],
|
|
},
|
|
overrides: [
|
|
{
|
|
files: ['*.tsx', '*.ts'],
|
|
parser: '@typescript-eslint/parser',
|
|
rules: {
|
|
'prettier/prettier': [2, {...prettierConfig, parser: 'typescript'}],
|
|
'@typescript-eslint/no-unused-vars': [
|
|
1,
|
|
{
|
|
ignoreRestSiblings: true,
|
|
varsIgnorePattern: '^_',
|
|
argsIgnorePattern: '^_',
|
|
caughtErrorsIgnorePattern: '^_',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
};
|