diff --git a/eslint/jsdoc-config.js b/eslint/jsdoc-config.js new file mode 100644 index 00000000000000..f097c23181e15e --- /dev/null +++ b/eslint/jsdoc-config.js @@ -0,0 +1,59 @@ +module.exports = { + parser: 'babel-eslint', + env: { + browser: false, + es6: true, + node: true, + }, + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + }, + globals: { + wp: true, + window: true, + document: true, + }, + plugins: [ + 'require-jsdoc-except', + ], + rules: { + 'valid-jsdoc': [ 'error', { + prefer: { + arg: 'param', + argument: 'param', + extends: 'augments', + returns: 'return', + }, + preferType: { + array: 'Array', + bool: 'boolean', + Boolean: 'boolean', + float: 'number', + Float: 'number', + int: 'number', + integer: 'number', + Integer: 'number', + Number: 'number', + object: 'Object', + String: 'string', + Void: 'void', + }, + requireParamDescription: false, + requireReturn: false, + } ], + 'require-jsdoc': 'off', + 'require-jsdoc-except/require-jsdoc': [ 'error', { + require: { + FunctionDeclaration: true, + MethodDefinition: false, + ClassDeclaration: true, + ArrowFunctionExpression: true, + FunctionExpression: true, + }, + ignore: [ 'constructor', 'render' ], + } ], + }, +}; diff --git a/package-lock.json b/package-lock.json index ea8382f40d9db1..d38b13a163e990 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2422,7 +2422,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000804", + "caniuse-db": "1.0.30000830", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -2433,16 +2433,16 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000804", + "caniuse-db": "1.0.30000830", "electron-to-chromium": "1.3.33" } } } }, "caniuse-db": { - "version": "1.0.30000804", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000804.tgz", - "integrity": "sha1-hP60IBj8ZM9q/2Nx5DEV8pLAAXk=", + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000830.tgz", + "integrity": "sha1-bkUlWzRWSf0V/1kHLaHhK7PeLxM=", "dev": true }, "caniuse-lite": { @@ -3865,7 +3865,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000804", + "caniuse-db": "1.0.30000830", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -3878,7 +3878,7 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000804", + "caniuse-db": "1.0.30000830", "electron-to-chromium": "1.3.33" } } @@ -4821,6 +4821,16 @@ } } }, + "eslint-plugin-require-jsdoc-except": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-require-jsdoc-except/-/eslint-plugin-require-jsdoc-except-1.1.0.tgz", + "integrity": "sha512-s2dT/DwtRA0+wbrhXBvghB5Q0pjThSo2j336RUJ7QhhiBmZPwiEcOUIe55N57ZuyOTorHsPQhr1uedmQeVBuPQ==", + "dev": true, + "requires": { + "lodash.assignin": "4.2.0", + "lodash.get": "4.4.2" + } + }, "eslint-plugin-wordpress": { "version": "git://github.com/WordPress-Coding-Standards/eslint-plugin-wordpress.git#1774343f6226052a46b081e01db3fca8793cc9f1", "requires": { @@ -9326,6 +9336,12 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -9343,6 +9359,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -11369,7 +11391,7 @@ "caniuse-api": "1.6.1", "postcss": "5.2.18", "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "vendors": "1.0.2" }, "dependencies": { "browserslist": { @@ -11378,7 +11400,7 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000804", + "caniuse-db": "1.0.30000830", "electron-to-chromium": "1.3.33" } } @@ -12562,53 +12584,48 @@ "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", "dev": true, "requires": { - "chalk": "2.3.0", + "chalk": "2.4.0", "findup": "0.1.5", "mkdirp": "0.5.1", - "postcss": "6.0.17", + "postcss": "6.0.21", "strip-json-comments": "2.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.4.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.0", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.1.0" - }, - "dependencies": { - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "supports-color": "5.4.0" } }, "source-map": { @@ -12618,12 +12635,12 @@ "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } @@ -14499,9 +14516,9 @@ } }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, "verror": { diff --git a/package.json b/package.json index e23656843c165f..67873e876f8d49 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "eslint-plugin-jest": "21.5.0", "eslint-plugin-jsx-a11y": "6.0.2", "eslint-plugin-react": "7.7.0", + "eslint-plugin-require-jsdoc-except": "1.1.0", "extract-text-webpack-plugin": "4.0.0-beta.0", "node-sass": "4.7.2", "pegjs": "0.10.0", @@ -120,6 +121,7 @@ "build": "cross-env NODE_ENV=production webpack", "lint": "eslint .", "lint:fix": "eslint . --fix", + "lint:jsdoc": "eslint . --config eslint/jsdoc-config.js", "lint-php": "docker-compose run --rm composer run-script lint", "predev": "check-node-version --package", "dev": "cross-env webpack --watch",