Add rule for warning against electron.remote

Summary:
I don't think there's an easy way to do this based on types
which would be ideal ...

So instead I'm checking for

- Importing `remote` from `electron`.
- Accessing `electron.remote`.

You can still hack this by importing `electron`, saving
it to a differently named variable and accessing `remote` on it,
but this should cover all reasonable cases we see in real code.

Reviewed By: mweststrate

Differential Revision: D26453006

fbshipit-source-id: 4b3d223bed43ca3f0d1a4f592ea8f8060a823479
This commit is contained in:
Pascal Hartig
2021-02-16 04:14:04 -08:00
committed by Facebook GitHub Bot
parent fe3a6bd55e
commit d42932c111
4 changed files with 118 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
/**
* 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
*/
import {TSESTree} from '@typescript-eslint/experimental-utils';
import {createESLintRule} from '../utils/createEslintRule';
type Options = [];
export type MessageIds = 'noElectronRemoteImports';
export const RULE_NAME = 'no-electron-remote-imports';
export default createESLintRule<Options, MessageIds>({
name: RULE_NAME,
meta: {
type: 'suggestion',
docs: {
description: '`remote` is slow. Please be careful when using it.',
category: 'Possible Errors',
recommended: 'warn',
},
schema: [],
messages: {
noElectronRemoteImports:
'Accessing properties on the `remote` object is blocking and 10,000x slower than a local one. Please consider alternatives or cache your access.',
},
},
defaultOptions: [],
create(context) {
return {
ImportDeclaration(node: TSESTree.ImportDeclaration) {
if (node.source.value === 'electron') {
const hasImport =
node.specifiers.filter(
(v) =>
v.type === 'ImportSpecifier' && v.imported.name === 'remote',
).length > 0;
if (hasImport) {
context.report({
node,
messageId: 'noElectronRemoteImports',
});
}
}
},
};
},
});