Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: consolidate eslint config #627

Merged
merged 4 commits into from
Aug 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 177 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
module.exports = {
root: true,
// this is the same as an .eslintignore file
ignorePatterns: [
'.yarn/**/*',
'**/*.umd.js',
'**/node_modules/**/*',
'docs/**/*',
'packages/*/examples/**/*',
'packages/*/test/**/fixtures/**/*',
'packages/*/test/projects/**/*',
'packages/lavapack/bundle.js',
'packages/lavapack/src/runtime-cjs.js',
'packages/lavapack/src/runtime.js',
'packages/perf/trials/**/*',
'packages/survey/mitm/**/*',
'packages/viz/dist/**/*',
'packages/viz/src/example-policies/**/*',
],
parserOptions: {
// this should be whatever the latest env version provides. some plugin is
// messing with this, so we need to set it manually.
// https://eslint.org/docs/latest/use/configure/language-options#specifying-environments
ecmaVersion: 12,
},
env: { es2020: true, node: true }, // this should be synced with the version of V8 used by the min supported node version
extends: ['eslint:recommended', 'plugin:n/recommended'],
rules: {
// base rules; none of these are in eslint/recommended
'arrow-spacing': ['error', { before: true, after: true }],
'brace-style': ['error', '1tbs'],
'comma-dangle': ['error', 'always-multiline'],
curly: ['error', 'all'],
'eol-last': ['error', 'always'],
indent: ['error', 2, { SwitchCase: 1, ObjectExpression: 'first' }],
'no-empty': ['error', { allowEmptyCatch: true }],
quotes: ['error', 'single'],
semi: ['error', 'never'],
'space-before-blocks': ['error', 'always'],
'space-before-function-paren': [
'error',
{
anonymous: 'ignore',
named: 'ignore',
asyncArrow: 'always',
},
],

// additional errors not in n/recommended
'n/callback-return': 'error',
'n/handle-callback-err': 'error',
'n/no-callback-literal': 'error',
'n/no-mixed-requires': 'error',
'n/no-new-require': 'error',
'n/no-restricted-import': 'error',
'n/no-restricted-require': 'error',
'n/prefer-global/buffer': 'error',
'n/prefer-global/console': 'error',
'n/prefer-global/process': 'error',
'n/prefer-global/text-decoder': 'error',
'n/prefer-global/text-encoder': 'error',
'n/prefer-global/url-search-params': 'error',
'n/prefer-global/url': 'error',
'n/prefer-promises/dns': 'error',
'n/prefer-promises/fs': 'error',

// these rules seem broken in a monorepo
'n/no-extraneous-require': 'off',
'n/no-unpublished-require': 'off',

// we should probably actually fix these three and turn these back on
'n/no-sync': 'off', // very few reasons to actually use this; "CLI tool" is not one of them
'n/no-process-exit': 'off', // should not be used with async code
},
// these are plugin-specific settings.
settings: {
// note that this name is "node" while the plugin is named "n".
// probably for historical reasons, but this may eventually break.
node: {
version: '14.17.0', // should be set to minimum node version supported
allowModules: ['deep-equal'], // something weird about this dependency
},
react: {
version: 'detect',
},
},
overrides: [
{
files: ['packages/*/test/**/*.js', 'packages/*/src/**/*.test.js'],
extends: ['plugin:ava/recommended'],
rules: {
'ava/no-import-test-files': 'off',
},
},
{
files: ['packages/core/src/**/*.js'],
globals: {
Compartment: 'readonly',
templateRequire: 'readonly',
lockdown: 'readonly',
},
},
{
files: ['packages/*/test/**/*.js'],
env: {
browser: true,
},
rules: {
'no-unused-vars': 'off',
'no-undef': 'off',
'n/no-path-concat': 'off', // this should be removed and the issues fixed
'n/no-missing-require': 'off',
},
},
{
files: ['packages/core/lib/**/*.js'],
rules: {
'no-unused-vars': 'off',
},
},
{
files: ['packages/lavapack/src/*-template.js'],
globals: {
templateRequire: 'readonly',
self: 'readonly',
__reportStatsHook__: 'readonly',
__createKernel__: 'readonly',
},
},
{
files: ['packages/core/src/*Template.js'],
globals: {
__lavamoatDebugOptions__: 'readonly',
__lavamoatSecurityOptions__: 'readonly',
self: 'readonly',
__createKernelCore__: 'readonly',
},
},
{
files: ['packages/perf/**/*.js'],
globals: {
lockdown: 'readonly',
Compartment: 'readonly',
},
},
{
// for viz package. most of this copied out of its own eslint config
files: ['packages/viz/**/*.js'],
env: {
browser: true,
es2020: true,
},
parserOptions: {
ecmaFeatures: {
jsx: true,
},
sourceType: 'module',
},
extends: ['plugin:react/recommended'],
plugins: ['react', 'import'],
rules: {
'no-negated-condition': 'off',
'import/extensions': ['error', 'always', { ignorePackages: true }],
'import/no-unassigned-import': 'off',
'import/unambiguous': 'off',
'react/prop-types': 'off',
'n/no-missing-import': 'off',
},
},
{
files: ['packages/viz/src/App.test.js'],
env: {
mocha: true,
},
},
],
}
54 changes: 0 additions & 54 deletions .eslintrc.json

This file was deleted.

2 changes: 1 addition & 1 deletion commitlint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ module.exports = {
'subject-case': [0],
'subject-full-stop': [0],
},
};
}
Loading
Loading