Add sonarjs eslint plugin

This commit is contained in:
Bill Thornton 2022-09-30 17:57:47 -04:00
parent 0425271b43
commit 52e92d44af
4 changed files with 43 additions and 6 deletions

View File

@ -7,7 +7,8 @@ module.exports = {
'react', 'react',
'promise', 'promise',
'import', 'import',
'eslint-comments' 'eslint-comments',
'sonarjs'
], ],
env: { env: {
node: true, node: true,
@ -29,7 +30,8 @@ module.exports = {
// 'plugin:promise/recommended', // 'plugin:promise/recommended',
'plugin:import/errors', 'plugin:import/errors',
'plugin:eslint-comments/recommended', 'plugin:eslint-comments/recommended',
'plugin:compat/recommended' 'plugin:compat/recommended',
'plugin:sonarjs/recommended'
], ],
rules: { rules: {
'array-callback-return': ['error'], 'array-callback-return': ['error'],
@ -51,6 +53,7 @@ module.exports = {
'no-multiple-empty-lines': ['error', { 'max': 1 }], 'no-multiple-empty-lines': ['error', { 'max': 1 }],
'no-restricted-globals': ['error'].concat(restrictedGlobals), 'no-restricted-globals': ['error'].concat(restrictedGlobals),
'no-return-await': ['error'], 'no-return-await': ['error'],
'no-sequences': ['error', { 'allowInParentheses': false }],
'no-trailing-spaces': ['error'], 'no-trailing-spaces': ['error'],
'@babel/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], '@babel/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
'no-void': ['error', { 'allowAsStatement': true }], 'no-void': ['error', { 'allowAsStatement': true }],
@ -64,9 +67,23 @@ module.exports = {
'space-before-blocks': ['error'], 'space-before-blocks': ['error'],
'space-infix-ops': 'error', 'space-infix-ops': 'error',
'yoda': 'error', 'yoda': 'error',
'no-sequences': ['error', { 'allowInParentheses': false }],
'react/jsx-filename-extension': ['error', { 'extensions': ['.jsx', '.tsx'] }] 'react/jsx-filename-extension': ['error', { 'extensions': ['.jsx', '.tsx'] }],
'sonarjs/cognitive-complexity': ['warn'],
// TODO: Enable the following rules and fix issues
'sonarjs/max-switch-cases': ['off'],
'sonarjs/no-collapsible-if': ['off'],
'sonarjs/no-duplicate-string': ['off'],
'sonarjs/no-duplicated-branches': ['off'],
'sonarjs/no-gratuitous-expressions': ['off'],
'sonarjs/no-identical-functions': ['off'],
'sonarjs/no-nested-switch': ['off'],
'sonarjs/no-redundant-jump': ['off'],
'sonarjs/no-small-switch': ['off'],
'sonarjs/no-unused-collection': ['off'],
'sonarjs/prefer-object-literal': ['off'],
'sonarjs/prefer-single-boolean-return': ['off']
}, },
settings: { settings: {
react: { react: {

20
package-lock.json generated
View File

@ -85,6 +85,7 @@
"eslint-plugin-promise": "6.0.1", "eslint-plugin-promise": "6.0.1",
"eslint-plugin-react": "7.31.8", "eslint-plugin-react": "7.31.8",
"eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-hooks": "4.6.0",
"eslint-plugin-sonarjs": "0.15.0",
"expose-loader": "4.0.0", "expose-loader": "4.0.0",
"html-loader": "4.2.0", "html-loader": "4.2.0",
"html-webpack-plugin": "5.5.0", "html-webpack-plugin": "5.5.0",
@ -6416,6 +6417,18 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/eslint-plugin-sonarjs": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.15.0.tgz",
"integrity": "sha512-LuxHdAe6VqSbi1phsUvNjbmXLuvlobmryQJJNyQYbdubCfz6K8tmgoqNiJPnz0pP2AbYDbtuPm0ajOMgMrC+dQ==",
"dev": true,
"engines": {
"node": ">=12"
},
"peerDependencies": {
"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/eslint-rule-composer": { "node_modules/eslint-rule-composer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
@ -23343,6 +23356,13 @@
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },
"eslint-plugin-sonarjs": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.15.0.tgz",
"integrity": "sha512-LuxHdAe6VqSbi1phsUvNjbmXLuvlobmryQJJNyQYbdubCfz6K8tmgoqNiJPnz0pP2AbYDbtuPm0ajOMgMrC+dQ==",
"dev": true,
"requires": {}
},
"eslint-rule-composer": { "eslint-rule-composer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",

View File

@ -37,6 +37,7 @@
"eslint-plugin-promise": "6.0.1", "eslint-plugin-promise": "6.0.1",
"eslint-plugin-react": "7.31.8", "eslint-plugin-react": "7.31.8",
"eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-hooks": "4.6.0",
"eslint-plugin-sonarjs": "0.15.0",
"expose-loader": "4.0.0", "expose-loader": "4.0.0",
"html-loader": "4.2.0", "html-loader": "4.2.0",
"html-webpack-plugin": "5.5.0", "html-webpack-plugin": "5.5.0",

View File

@ -79,8 +79,7 @@ function generateDeviceId() {
keys.push(navigator.userAgent); keys.push(navigator.userAgent);
keys.push(new Date().getTime()); keys.push(new Date().getTime());
if (window.btoa) { if (window.btoa) {
const result = replaceAll(btoa(keys.join('|')), '=', '1'); return replaceAll(btoa(keys.join('|')), '=', '1');
return result;
} }
return new Date().getTime(); return new Date().getTime();