From 700c09262222a3a80cb14ea6c9d709ee50437ef9 Mon Sep 17 00:00:00 2001 From: Manuel Martins Date: Sun, 2 Jun 2024 17:18:09 +0200 Subject: [PATCH] updated eslint configs --- js/.eslintignore | 12 --- js/.eslintrc.json | 93 ------------------- js/eslint.config.mjs | 93 +++++++++++++++++++ js/package-lock.json | 36 +++++-- js/package.json | 7 +- .../francy-core/src/render/graph/base.js | 9 +- .../src/graph/generic.js | 4 + js/yarn.lock | 7 +- 8 files changed, 145 insertions(+), 116 deletions(-) delete mode 100644 js/.eslintignore delete mode 100644 js/.eslintrc.json create mode 100644 js/eslint.config.mjs diff --git a/js/.eslintignore b/js/.eslintignore deleted file mode 100644 index b5b50d7b..00000000 --- a/js/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -**.json -**/*.test.js -**/__test__/*.js -**/*.config.js -**.html -karma*.js -**/node_modules/** -**/dist/** -**/lib/** -**/jupyterlab_francy/** -**/webpack.js -**/static/** \ No newline at end of file diff --git a/js/.eslintrc.json b/js/.eslintrc.json deleted file mode 100644 index bf75f809..00000000 --- a/js/.eslintrc.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "env": { - "browser": true, - "commonjs": true, - "es2020": true, - "es2021": true, - "es2022": true, - "node": true - }, - "extends": "eslint:recommended", - "parser": "@babel/eslint-parser", - "parserOptions": { - "requireConfigFile": false, - "sourceType": "module", - "ecmaVersion": "latest", - "babelOptions": { - "babelrc": false, - "configFile": false, - "plugins": [ - [ - "@babel/plugin-proposal-decorators", - { - "legacy": true - } - ] - ] - } - }, - "plugins": [ - "@babel" - ], - "globals": { - "d3": true, - "VERSION": true, - "DESCRIPTION": true, - "FRANCY_DESC": true, - "MathJax": true - }, - "rules": { - "indent": [ - "error", - 2 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "single" - ], - "semi": [ - "error", - "always" - ], - "no-else-return": 1, - "space-unary-ops": 2, - "brace-style": [ - "error", - "1tbs" - ], - "no-unused-vars": [ - 2, - { - "vars": "all", - "varsIgnorePattern": ".*ignore" - } - ], - "no-global-assign": [ - "error", - { - "exceptions": [ - "__webpack_public_path__", - "__dirname" - ] - } - ], - "sort-imports": [ - "error", - { - "ignoreCase": false, - "ignoreDeclarationSort": false, - "ignoreMemberSort": false, - "memberSyntaxSortOrder": [ - "none", - "all", - "multiple", - "single" - ] - } - ] - } -} diff --git a/js/eslint.config.mjs b/js/eslint.config.mjs new file mode 100644 index 00000000..fb418fec --- /dev/null +++ b/js/eslint.config.mjs @@ -0,0 +1,93 @@ +import babel from "@babel/eslint-plugin"; +import globals from "globals"; +import babelParser from "@babel/eslint-parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: [ + "**/**.json", + "**/*.test.js", + "**/__test__/*.js", + "**/*.config.js", + "**/**.html", + "**/karma*.js", + "**/node_modules/**/*", + "**/dist/**/*", + "**/lib/**/*", + "**/jupyterlab_francy/**/*", + "**/webpack.js", + "**/static/**/*", + ], +}, ...compat.extends("eslint:recommended"), { + plugins: { + "@babel": babel, + }, + + languageOptions: { + globals: { + ...globals.browser, + ...globals.commonjs, + ...globals.node, + d3: true, + VERSION: true, + DESCRIPTION: true, + FRANCY_DESC: true, + MathJax: true, + }, + + parser: babelParser, + ecmaVersion: "latest", + sourceType: "module", + + parserOptions: { + requireConfigFile: false, + + babelOptions: { + babelrc: false, + configFile: false, + + plugins: [["@babel/plugin-proposal-decorators", { + legacy: true, + }]], + }, + }, + }, + + rules: { + indent: ["error", 2], + "linebreak-style": ["error", "unix"], + quotes: ["error", "single"], + semi: ["error", "always"], + "no-else-return": 1, + "space-unary-ops": 2, + "brace-style": ["error", "1tbs"], + + "no-unused-vars": [2, { + vars: "all", + varsIgnorePattern: ".*ignore", + }], + + "no-global-assign": ["error", { + exceptions: ["__webpack_public_path__", "__dirname"], + }], + + "sort-imports": ["error", { + ignoreCase: false, + ignoreDeclarationSort: false, + ignoreMemberSort: false, + memberSyntaxSortOrder: ["none", "all", "multiple", "single"], + }], + }, +}]; \ No newline at end of file diff --git a/js/package-lock.json b/js/package-lock.json index a1abec72..54979079 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -17,6 +17,8 @@ "@babel/plugin-transform-classes": "^7.24.6", "@babel/plugin-transform-runtime": "^7.24.6", "@babel/preset-env": "^7.24.6", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.4.0", "@hpcc-js/wasm": "^2.16.2", "@jupyterlab/builder": "^4.2.1", "@jupyterlab/notebook": "^4.2.1", @@ -44,6 +46,7 @@ "d3-zoom": "^3.0.0", "eslint": "^9.4.0", "file-loader": "^6.2.0", + "globals": "^15.3.0", "jsdoc": "^4.0.3", "json-loader": "^0.5.7", "karma": "^6.4.3", @@ -1057,6 +1060,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", @@ -1875,6 +1887,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", @@ -10256,12 +10277,15 @@ "dev": true }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz", + "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -20684,8 +20708,8 @@ "francy-renderer-vis": "*" }, "devDependencies": { - "@jupyterlab/builder": "^4.1.8", - "rimraf": "^5.0.5" + "@jupyterlab/builder": "^4.2.1", + "rimraf": "^5.0.7" } }, "packages/francy-renderer-d3": { diff --git a/js/package.json b/js/package.json index d62d9f40..2dbf7952 100644 --- a/js/package.json +++ b/js/package.json @@ -16,11 +16,12 @@ "clean": "lerna run clean --stream", "version": "lerna version --no-git-tag-version --no-push --no-private", "docs": "jsdoc --verbose --recurse --configure .jsdoc.json", - "lint": "eslint --config .eslintrc.json packages/francy*", - "lint:fix": "eslint --fix --config .eslintrc.json packages/francy*", + "lint": "eslint --config eslint.config.mjs packages/francy*", + "lint:fix": "eslint --fix --config eslint.config.mjs packages/francy*", "coverage": "yarn run test" }, "devDependencies": { + "globals": "^15.3.0", "@babel/cli": "^7.24.6", "@babel/core": "^7.24.6", "@babel/eslint-parser": "^7.24.6", @@ -55,6 +56,8 @@ "d3-transition": "^3.0.1", "d3-zoom": "^3.0.0", "eslint": "^9.4.0", + "@eslint/js": "^9.4.0", + "@eslint/eslintrc": "^3.1.0", "file-loader": "^6.2.0", "jsdoc": "^4.0.3", "json-loader": "^0.5.7", diff --git a/js/packages/francy-core/src/render/graph/base.js b/js/packages/francy-core/src/render/graph/base.js index f6b783d4..a814ba28 100644 --- a/js/packages/francy-core/src/render/graph/base.js +++ b/js/packages/francy-core/src/render/graph/base.js @@ -172,23 +172,28 @@ export default class Graph extends Renderer { } setLabelXPosition(element, width) { + /* eslint-disable no-unused-vars */ try { element.attr('x', -Math.ceil(width / 2)); - } catch (Error) { + } catch (err) { + // don't care, this might fail for multiple reasons, // the user might have switch renderer for instance, // no worries if something is not properly aligned :P } + /* eslint-enable no-unused-vars */ } setLabelYPosition(element, height) { + /* eslint-disable no-unused-vars */ try { element.attr('y', -Math.ceil(height / 2)); - } catch (Error) { + } catch (err) { // don't care, this might fail for multiple reasons, // the user might have switch renderer for instance, // no worries if something is not properly aligned :P } + /* eslint-enable no-unused-vars */ } handleTypesetting(text) { diff --git a/js/packages/francy-renderer-graphviz/src/graph/generic.js b/js/packages/francy-renderer-graphviz/src/graph/generic.js index add07734..2a616dc6 100644 --- a/js/packages/francy-renderer-graphviz/src/graph/generic.js +++ b/js/packages/francy-renderer-graphviz/src/graph/generic.js @@ -97,6 +97,7 @@ export default class GraphGeneric extends Graph { } setLabelXPosition(element, x) { + /* eslint-disable no-unused-vars */ try { element.attr('x', Math.ceil(x * 2)); } catch (Error) { @@ -104,9 +105,11 @@ export default class GraphGeneric extends Graph { // the user might have switch renderer for instance, // no worries if something is not properly aligned :P } + /* eslint-enable no-unused-vars */ } setLabelYPosition(element, y) { + /* eslint-disable no-unused-vars */ try { element.attr('y', -Math.ceil(y * 2)); } catch (Error) { @@ -114,6 +117,7 @@ export default class GraphGeneric extends Graph { // the user might have switch renderer for instance, // no worries if something is not properly aligned :P } + /* eslint-enable no-unused-vars */ } _connectedNodes(node, canvasNodes, link, canvasLinks) { diff --git a/js/yarn.lock b/js/yarn.lock index 31dfb3d9..9566400f 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -1272,7 +1272,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.4.0": +"@eslint/js@9.4.0", "@eslint/js@^9.4.0": version "9.4.0" resolved "https://registry.npmjs.org/@eslint/js/-/js-9.4.0.tgz" integrity sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg== @@ -5653,6 +5653,11 @@ globals@^14.0.0: resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +globals@^15.3.0: + version "15.3.0" + resolved "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz" + integrity sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA== + globalthis@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz"