Просмотр исходного кода

upgrade eslint config and remove workaround for implicit globals

we seem to have used eslint through codeclimate in the past, but that service seems no longer integrated, possibly due to no longer being free
El RIDO 9 месяцев назад
Родитель
Сommit
7f93242279
6 измененных файлов с 216 добавлено и 244 удалено
  1. 0 2
      .eslintignore
  2. 0 236
      .eslintrc
  3. 1 2
      .gitattributes
  4. 213 0
      eslint.config.mjs
  5. 0 2
      js/privatebin.js
  6. 2 2
      lib/Configuration.php

+ 0 - 2
.eslintignore

@@ -1,2 +0,0 @@
-js/*.js
-!js/privatebin.js

+ 0 - 236
.eslintrc

@@ -1,236 +0,0 @@
----
-parserOptions:
-  ecmaVersion: 2017
-
-ecmaFeatures:
-  modules: true
-  jsx: true
-
-env:
-  amd: true
-  browser: true
-  es6: true
-  jquery: true
-  node: true
-  mocha: true
-
-globals:
-  DOMPurify: readonly
-  cleanup: writable
-  describe: readonly
-  jsc: readonly
-  jsdom: writable
-  kjua: writable
-  WebCrypto: writable
-
-# http://eslint.org/docs/rules/
-rules:
-  # Possible Errors
-  comma-dangle:
-    - error
-    - never
-  no-cond-assign: 2
-  no-console: 0
-  no-constant-condition: 2
-  no-control-regex: 2
-  no-debugger: 2
-  no-dupe-args: 2
-  no-dupe-keys: 2
-  no-duplicate-case: 2
-  no-empty: 2
-  no-empty-character-class: 2
-  no-ex-assign: 2
-  no-extra-boolean-cast: 2
-  no-extra-parens: 0
-  no-extra-semi: 2
-  no-func-assign: 2
-  no-inner-declarations:
-    - error
-    - functions
-  no-invalid-regexp: 2
-  no-irregular-whitespace: 2
-  no-negated-in-lhs: 2
-  no-obj-calls: 2
-  no-regex-spaces: 2
-  no-sparse-arrays: 2
-  no-unexpected-multiline: 2
-  no-unreachable: 2
-  use-isnan: 2
-  valid-jsdoc: 0
-  valid-typeof: 2
-
-  # Best Practices
-  accessor-pairs: 2
-  block-scoped-var: 0
-  complexity:
-    - error
-    - 20
-  consistent-return: 0
-  curly: 0
-  default-case: 0
-  dot-location: 0
-  dot-notation: 0
-  eqeqeq: 2
-  guard-for-in: 2
-  no-alert: 0
-  no-caller: 2
-  no-case-declarations: 2
-  no-div-regex: 2
-  no-else-return: 0
-  no-empty-pattern: 2
-  no-eq-null: 2
-  no-eval: 2
-  no-extend-native: 2
-  no-extra-bind: 2
-  no-fallthrough: 2
-  no-floating-decimal: 0
-  no-implicit-coercion: 0
-  no-implied-eval: 2
-  no-invalid-this: 0
-  no-iterator: 2
-  no-labels: 0
-  no-lone-blocks: 2
-  no-loop-func: 2
-  no-magic-number: 0
-  no-multi-spaces: 0
-  no-multi-str: 0
-  no-native-reassign: 2
-  no-new-func: 2
-  no-new-wrappers: 2
-  no-new: 2
-  no-octal-escape: 2
-  no-octal: 2
-  no-proto: 2
-  no-redeclare: 0
-  no-return-assign: 2
-  no-script-url: 2
-  no-self-compare: 2
-  no-sequences: 0
-  no-throw-literal: 0
-  no-unused-expressions: 2
-  no-useless-call: 2
-  no-useless-concat: 2
-  no-void: 2
-  no-warning-comments: 0
-  no-with: 2
-  radix: 2
-  vars-on-top: 0
-  wrap-iife: 0
-  yoda: 0
-
-  # Strict
-  strict: 0
-
-  # Variables
-  init-declarations: 0
-  no-catch-shadow: 2
-  no-delete-var: 2
-  no-label-var: 2
-  no-shadow-restricted-names: 2
-  no-shadow: 0
-  no-undef-init: 2
-  no-undef: 0
-  no-undefined: 0
-  no-unused-vars: 0
-  no-use-before-define: 0
-
-  # Node.js and CommonJS
-  callback-return: 2
-  global-require: 2
-  handle-callback-err: 2
-  no-mixed-requires: 0
-  no-new-require: 0
-  no-path-concat: 2
-  no-process-exit: 2
-  no-restricted-modules: 0
-  no-sync: 0
-
-  # Stylistic Issues
-  array-bracket-spacing: 0
-  block-spacing: 0
-  brace-style: 0
-  camelcase: 0
-  comma-spacing: 0
-  comma-style: 0
-  computed-property-spacing: 0
-  consistent-this: 0
-  eol-last: 0
-  func-names: 0
-  func-style: 0
-  id-length: 0
-  id-match: 0
-  indent: 0
-  jsx-quotes: 0
-  key-spacing: 0
-  linebreak-style: 0
-  lines-around-comment: 0
-  max-depth: 0
-  max-len: 0
-  max-nested-callbacks: 0
-  max-params: 0
-  max-statements:
-    - error
-    - 60
-  new-cap: 0
-  new-parens: 0
-  newline-after-var: 0
-  no-array-constructor: 0
-  no-bitwise: 0
-  no-continue: 0
-  no-inline-comments: 0
-  no-lonely-if: 0
-  no-mixed-spaces-and-tabs: 0
-  no-multiple-empty-lines: 0
-  no-negated-condition: 0
-  no-nested-ternary: 0
-  no-new-object: 0
-  no-plusplus: 0
-  no-restricted-syntax: 0
-  no-spaced-func: 0
-  no-ternary: 0
-  no-trailing-spaces: 0
-  no-underscore-dangle: 0
-  no-unneeded-ternary: 0
-  object-curly-spacing: 0
-  one-var: 0
-  operator-assignment: 0
-  operator-linebreak: 0
-  padded-blocks: 0
-  quote-props: 0
-  quotes:
-    - error
-    - single
-  require-jsdoc: 0
-  semi-spacing: 0
-  semi: 0
-  sort-vars: 0
-  space-after-keywords: 0
-  space-before-blocks: 0
-  space-before-function-paren: 0
-  space-before-keywords: 0
-  space-in-parens: 0
-  space-infix-ops: 0
-  space-return-throw-case: 0
-  space-unary-ops: 0
-  spaced-comment: 0
-  wrap-regex: 0
-
-  # ECMAScript 6
-  arrow-body-style: 0
-  arrow-parens: 0
-  arrow-spacing: 0
-  constructor-super: 0
-  generator-star-spacing: 0
-  no-arrow-condition: 0
-  no-class-assign: 0
-  no-const-assign: 0
-  no-dupe-class-members: 0
-  no-this-before-super: 0
-  no-var: 0
-  object-shorthand: 0
-  prefer-arrow-callback: 0
-  prefer-const: 0
-  prefer-reflect: 0
-  prefer-spread: 0
-  prefer-template: 0
-  require-yield: 0

+ 1 - 2
.gitattributes

@@ -12,8 +12,6 @@ js/test/ export-ignore
 .csslintrc export-ignore
 .devcontainer export-ignore
 .editorconfig export-ignore
-.eslintignore export-ignore
-.eslintrc export-ignore
 .gitattributes export-ignore
 .github export-ignore
 .gitignore export-ignore
@@ -26,6 +24,7 @@ js/test/ export-ignore
 .vscode export-ignore
 codacy-analysis.yml export-ignore
 crowdin.yml export-ignore
+eslint.config.mjs export-ignore
 BADGES.md export-ignore
 CODE_OF_CONDUCT.md export-ignore
 Makefile export-ignore

+ 213 - 0
eslint.config.mjs

@@ -0,0 +1,213 @@
+import { defineConfig, globalIgnores } from "eslint/config";
+import globals from "globals";
+
+export default defineConfig([globalIgnores(["js/*.js", "!js/privatebin.js"]), {
+    languageOptions: {
+        globals: {
+            ...globals.amd,
+            ...globals.browser,
+            ...globals.jquery,
+            ...globals.node,
+            ...globals.mocha,
+            DOMPurify: "readonly",
+            cleanup: "writable",
+            describe: "readonly",
+            jsc: "readonly",
+            jsdom: "writable",
+            kjua: "writable",
+            WebCrypto: "writable",
+        },
+
+        ecmaVersion: 2017,
+        sourceType: "commonjs",
+    },
+
+    rules: {
+        "comma-dangle": ["error", "never"],
+        "no-cond-assign": 2,
+        "no-console": 0,
+        "no-constant-condition": 2,
+        "no-control-regex": 2,
+        "no-debugger": 2,
+        "no-dupe-args": 2,
+        "no-dupe-keys": 2,
+        "no-duplicate-case": 2,
+        "no-empty": 2,
+        "no-empty-character-class": 2,
+        "no-ex-assign": 2,
+        "no-extra-boolean-cast": 2,
+        "no-extra-parens": 0,
+        "no-extra-semi": 2,
+        "no-func-assign": 2,
+        "no-inner-declarations": ["error", "functions"],
+        "no-invalid-regexp": 2,
+        "no-irregular-whitespace": 2,
+        "no-negated-in-lhs": 2,
+        "no-obj-calls": 2,
+        "no-regex-spaces": 2,
+        "no-sparse-arrays": 2,
+        "no-unexpected-multiline": 2,
+        "no-unreachable": 2,
+        "use-isnan": 2,
+        "valid-jsdoc": 0,
+        "valid-typeof": 2,
+        "accessor-pairs": 2,
+        "block-scoped-var": 0,
+        complexity: ["error", 20],
+        "consistent-return": 0,
+        curly: 0,
+        "default-case": 0,
+        "dot-location": 0,
+        "dot-notation": 0,
+        eqeqeq: 2,
+        "guard-for-in": 2,
+        "no-alert": 0,
+        "no-caller": 2,
+        "no-case-declarations": 2,
+        "no-div-regex": 2,
+        "no-else-return": 0,
+        "no-empty-pattern": 2,
+        "no-eq-null": 2,
+        "no-eval": 2,
+        "no-extend-native": 2,
+        "no-extra-bind": 2,
+        "no-fallthrough": 2,
+        "no-floating-decimal": 0,
+        "no-implicit-coercion": 0,
+        "no-implied-eval": 2,
+        "no-invalid-this": 0,
+        "no-iterator": 2,
+        "no-labels": 0,
+        "no-lone-blocks": 2,
+        "no-loop-func": 2,
+        "no-magic-number": 0,
+        "no-multi-spaces": 0,
+        "no-multi-str": 0,
+        "no-native-reassign": 2,
+        "no-new-func": 2,
+        "no-new-wrappers": 2,
+        "no-new": 2,
+        "no-octal-escape": 2,
+        "no-octal": 2,
+        "no-proto": 2,
+        "no-redeclare": 0,
+        "no-return-assign": 2,
+        "no-script-url": 2,
+        "no-self-compare": 2,
+        "no-sequences": 0,
+        "no-throw-literal": 0,
+        "no-unused-expressions": 2,
+        "no-useless-call": 2,
+        "no-useless-concat": 2,
+        "no-void": 2,
+        "no-warning-comments": 0,
+        "no-with": 2,
+        radix: 2,
+        "vars-on-top": 0,
+        "wrap-iife": 0,
+        yoda: 0,
+        strict: 0,
+        "init-declarations": 0,
+        "no-catch-shadow": 2,
+        "no-delete-var": 2,
+        "no-label-var": 2,
+        "no-shadow-restricted-names": 2,
+        "no-shadow": 0,
+        "no-undef-init": 2,
+        "no-undef": 0,
+        "no-undefined": 0,
+        "no-unused-vars": 0,
+        "no-use-before-define": 0,
+        "callback-return": 2,
+        "global-require": 2,
+        "handle-callback-err": 2,
+        "no-mixed-requires": 0,
+        "no-new-require": 0,
+        "no-path-concat": 2,
+        "no-process-exit": 2,
+        "no-restricted-modules": 0,
+        "no-sync": 0,
+        "array-bracket-spacing": 0,
+        "block-spacing": 0,
+        "brace-style": 0,
+        camelcase: 0,
+        "comma-spacing": 0,
+        "comma-style": 0,
+        "computed-property-spacing": 0,
+        "consistent-this": 0,
+        "eol-last": 0,
+        "func-names": 0,
+        "func-style": 0,
+        "id-length": 0,
+        "id-match": 0,
+        indent: 0,
+        "jsx-quotes": 0,
+        "key-spacing": 0,
+        "linebreak-style": 0,
+        "lines-around-comment": 0,
+        "max-depth": 0,
+        "max-len": 0,
+        "max-nested-callbacks": 0,
+        "max-params": 0,
+        "max-statements": ["error", 60],
+        "new-cap": 0,
+        "new-parens": 0,
+        "newline-after-var": 0,
+        "no-array-constructor": 0,
+        "no-bitwise": 0,
+        "no-continue": 0,
+        "no-inline-comments": 0,
+        "no-lonely-if": 0,
+        "no-mixed-spaces-and-tabs": 0,
+        "no-multiple-empty-lines": 0,
+        "no-negated-condition": 0,
+        "no-nested-ternary": 0,
+        "no-new-object": 0,
+        "no-plusplus": 0,
+        "no-restricted-syntax": 0,
+        "no-spaced-func": 0,
+        "no-ternary": 0,
+        "no-trailing-spaces": 0,
+        "no-underscore-dangle": 0,
+        "no-unneeded-ternary": 0,
+        "object-curly-spacing": 0,
+        "one-var": 0,
+        "operator-assignment": 0,
+        "operator-linebreak": 0,
+        "padded-blocks": 0,
+        "quote-props": 0,
+        quotes: ["error", "single"],
+        "require-jsdoc": 0,
+        "semi-spacing": 0,
+        semi: 0,
+        "sort-vars": 0,
+        "space-after-keywords": 0,
+        "space-before-blocks": 0,
+        "space-before-function-paren": 0,
+        "space-before-keywords": 0,
+        "space-in-parens": 0,
+        "space-infix-ops": 0,
+        "space-return-throw-case": 0,
+        "space-unary-ops": 0,
+        "spaced-comment": 0,
+        "wrap-regex": 0,
+        "arrow-body-style": 0,
+        "arrow-parens": 0,
+        "arrow-spacing": 0,
+        "constructor-super": 0,
+        "generator-star-spacing": 0,
+        "no-arrow-condition": 0,
+        "no-class-assign": 0,
+        "no-const-assign": 0,
+        "no-dupe-class-members": 0,
+        "no-this-before-super": 0,
+        "no-var": 0,
+        "object-shorthand": 0,
+        "prefer-arrow-callback": 0,
+        "prefer-const": 0,
+        "prefer-reflect": 0,
+        "prefer-spread": 0,
+        "prefer-template": 0,
+        "require-yield": 0,
+    },
+}]);

+ 0 - 2
js/privatebin.js

@@ -10,8 +10,6 @@
  * @namespace
  */
 
-// global Base64, DOMPurify, FileReader, baseX, bootstrap, history, navigator, prettyPrint, prettyPrintOne, showdown, kjua
-
 jQuery.fn.draghover = function() {
     'use strict';
     return this.each(function() {

+ 2 - 2
lib/Configuration.php

@@ -119,9 +119,9 @@ class Configuration
             'js/dark-mode-switch.js' => 'sha512-BhY7dNU14aDN5L+muoUmA66x0CkYUWkQT0nxhKBLP/o2d7jE025+dvWJa4OiYffBGEFgmhrD/Sp+QMkxGMTz2g==',
             'js/jquery-3.7.1.js'     => 'sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==',
             'js/kjua-0.10.0.js'      => 'sha512-BYj4xggowR7QD150VLSTRlzH62YPfhpIM+b/1EUEr7RQpdWAGKulxWnOvjFx1FUlba4m6ihpNYuQab51H6XlYg==',
-            'js/legacy.js'           => 'sha512-mXAgFn/DonfPANvPO6Kf08zRKCeQ75jXK69gcUUOpPLFkp3KHnDhnvij8nEJxlutD/670Bfi4RNMG6uEjA4nNQ==',
+            'js/legacy.js'           => 'sha512-rGXYUpIqbFoHAgBXZ0UlJBdNAIMOC9EQ67MG0X46D5uRB8LvwzgKirbSQRGdYfk8I2jsUcm+tvHXYboUnC6DUg==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
-            'js/privatebin.js'       => 'sha512-Id47n8ZPz6j93KoR7DkaS48MxtwKftVq3RyZw9WRGpRT+6bYKP/ZkU84RscbcW3icxBTS9fQKQpdnmZ3rr00dQ==',
+            'js/privatebin.js'       => 'sha512-11h/j/h3QEv2Qt2zJLbmbbThQDuBisAwY/3dygHKx3h/Or1UZFhw+Q7COpCC7erndNtevTvYRqEEIsKw3tOJLQ==',
             'js/purify-3.2.6.js'     => 'sha512-zqwL4OoBLFx89QPewkz4Lz5CSA2ktU+f31fuECkF0iK3Id5qd3Zpq5dMby8KwHjIEpsUgOqwF58cnmcaNem0EA==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
             'js/zlib-1.3.1-1.js'     => 'sha512-5bU9IIP4PgBrOKLZvGWJD4kgfQrkTz8Z3Iqeu058mbQzW3mCumOU6M3UVbVZU9rrVoVwaW4cZK8U8h5xjF88eQ==',