aboutsummaryrefslogtreecommitdiffstats
path: root/eslint.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'eslint.config.js')
-rw-r--r--eslint.config.js305
1 files changed, 305 insertions, 0 deletions
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 000000000..4c8d86bbd
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,305 @@
+import jqueryConfig from "eslint-config-jquery";
+import importPlugin from "eslint-plugin-import";
+import globals from "globals";
+
+export default [
+ {
+
+ // Only global ignores will bypass the parser
+ // and avoid JS parsing errors
+ // See https://github.com/eslint/eslint/discussions/17412
+ ignores: [
+ "external",
+ "test/data/json_obj.js"
+ ]
+ },
+
+ {
+ files: [
+ "eslint.config.js",
+ "Gruntfile.cjs",
+ "test/node_smoke_tests/commonjs/**",
+ "test/node_smoke_tests/module/**",
+ "test/promises_aplus_adapters/**",
+ "test/middleware-mockserver.cjs"
+ ],
+ languageOptions: {
+ globals: {
+ ...globals.node
+ }
+ },
+ rules: {
+ ...jqueryConfig.rules,
+ strict: [ "error", "global" ]
+ }
+ },
+
+ // Source
+ {
+ files: [ "src/**" ],
+ plugins: {
+ import: importPlugin
+ },
+ languageOptions: {
+
+ // The browser env is not enabled on purpose so that code takes
+ // all browser-only globals from window instead of assuming
+ // they're available as globals. This makes it possible to use
+ // jQuery with tools like jsdom which provide a custom window
+ // implementation.
+ globals: {
+ window: false
+ }
+ },
+ rules: {
+ ...jqueryConfig.rules,
+ "import/extensions": [ "error", "always" ],
+ "import/no-cycle": "error",
+
+ // TODO: Enable this rule when eslint-plugin-import supports
+ // it when using flat config.
+ // See https://github.com/import-js/eslint-plugin-import/issues/2556
+
+ // "import/no-unused-modules": [
+ // "error",
+ // {
+ // unusedExports: true,
+
+ // // When run via WebStorm, the root path against which these paths
+ // // are resolved is the path where this ESLint config file lies,
+ // // i.e. `src`. When run via the command line, it's usually the root
+ // // folder of the jQuery repository. This pattern intends to catch both.
+ // // Note that we cannot specify two patterns here:
+ // // [ "src/*.js", "*.js" ]
+ // // as they're analyzed individually and the rule crashes if a pattern
+ // // cannot be matched.
+ // ignoreExports: [ "{src/,}*.js" ]
+ // }
+ // ],
+ indent: [
+ "error",
+ "tab",
+ {
+ outerIIFEBody: 0
+ }
+ ],
+ "one-var": [ "error", { var: "always" } ],
+ strict: [ "error", "function" ]
+ }
+ },
+
+ {
+ files: [ "src/wrapper.js" ],
+ languageOptions: {
+ sourceType: "script",
+ globals: {
+ jQuery: false,
+ module: true
+ }
+ },
+ rules: {
+ "no-unused-vars": "off",
+ indent: [
+ "error",
+ "tab",
+ {
+
+ // This makes it so code within the wrapper is not indented.
+ ignoredNodes: [
+ "Program > ExpressionStatement > CallExpression > :last-child > *"
+ ]
+ }
+ ]
+ }
+ },
+
+ {
+ files: [ "src/wrapper-esm.js" ],
+ languageOptions: {
+ globals: {
+ jQuery: false
+ }
+ },
+ rules: {
+ "no-unused-vars": "off",
+ indent: [
+ "error",
+ "tab",
+ {
+
+ // This makes it so code within the wrapper is not indented.
+ ignoredNodes: [
+ "Program > FunctionDeclaration > *"
+ ]
+ }
+ ]
+ }
+ },
+
+ {
+ files: [ "src/exports/amd.js" ],
+ languageOptions: {
+ globals: {
+ define: false
+ }
+ }
+ },
+
+ // Tests
+ {
+ files: [
+ "test/**"
+ ],
+ ignores: [
+ "test/data/jquery-1.9.1.js",
+ "test/data/badcall.js",
+ "test/data/badjson.js",
+ "test/data/support/csp.js",
+ "test/data/support/getComputedSupport.js",
+ "test/data/core/jquery-iterability-transpiled.js"
+ ],
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ require: false,
+ Promise: false,
+ Symbol: false,
+ trustedTypes: false,
+ QUnit: false,
+ ajaxTest: false,
+ testIframe: false,
+ createDashboardXML: false,
+ createWithFriesXML: false,
+ createXMLFragment: false,
+ includesModule: false,
+ moduleTeardown: false,
+ url: false,
+ q: false,
+ jQuery: true,
+ sinon: true,
+ amdDefined: true,
+ fireNative: true,
+ Globals: true,
+ hasPHP: true,
+ isLocal: true,
+ supportjQuery: true,
+ originaljQuery: true,
+ $: true,
+ original$: true,
+ baseURL: true,
+ externalHost: true
+ }
+ },
+ rules: {
+ ...jqueryConfig.rules,
+ strict: [ "error", "function" ],
+
+ // See https://github.com/eslint/eslint/issues/2342
+ "no-unused-vars": "off",
+
+ // Too many errors
+ "max-len": "off",
+ camelcase: "off",
+ "one-var": "off"
+ }
+ },
+
+ {
+ files: [
+ "test/data/testrunner.js",
+ "test/data/core/jquery-iterability-transpiled-es6.js"
+ ],
+ languageOptions: {
+ sourceType: "script"
+ }
+ },
+
+ {
+ files: [
+ "test/unit/deferred.js"
+ ],
+ rules: {
+
+ // Deferred tests set strict mode for certain tests
+ strict: "off"
+ }
+ },
+
+ {
+ files: [
+ "test/node_smoke_tests/commonjs/**",
+ "test/node_smoke_tests/module/**",
+ "test/promises_aplus_adapters/**",
+ "test/middleware-mockserver.cjs"
+ ],
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ ...globals.es2021
+ }
+ },
+ rules: {
+ strict: [ "error", "global" ]
+ }
+ },
+
+ {
+ files: [
+ "build/**",
+ "test/data/testinit.js",
+ "test/data/testinit-jsdom.js"
+ ],
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ ...globals.es2021
+ }
+ },
+ rules: {
+ ...jqueryConfig.rules,
+ strict: [ "error", "global" ]
+ }
+ },
+
+ {
+ files: [
+ "build/**/*.js",
+ "test/data/testinit.js",
+ "test/data/testinit-jsdom.js"
+ ],
+ languageOptions: {
+ sourceType: "commonjs"
+ }
+ },
+
+ {
+ files: [
+ "dist/jquery.js",
+ "dist/jquery.slim.js",
+ "dist-module/jquery.module.js",
+ "dist-module/jquery.slim.module.js"
+ ],
+
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...globals.es2021,
+ define: false,
+ module: false,
+ Symbol: false
+ }
+ },
+
+ rules: {
+ ...jqueryConfig.rules,
+
+ // That is okay for the built version
+ "no-multiple-empty-lines": "off",
+
+ // When custom compilation is used, the version string
+ // can get large. Accept that in the built version.
+ "max-len": "off",
+ "one-var": "off"
+ }
+ }
+];