diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 8f97143..0000000 --- a/.eslintrc +++ /dev/null @@ -1,136 +0,0 @@ -{ - "extends": [ - "airbnb", - "prettier", - "prettier/react" - ], - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 2018, - "ecmaFeatures": { - "impliedStrict": true, - "classes": true - } - }, - "env": { - "browser": true, - "node": true, - "jquery": true, - "jest": true - }, - "rules": { - "no-debugger": 0, - "no-alert": 0, - "no-await-in-loop": 0, - "no-return-assign": [ - "error", - "except-parens" - ], - "no-restricted-syntax": [ - 2, - "ForInStatement", - "LabeledStatement", - "WithStatement" - ], - "no-unused-vars": [ - 1, - { - "ignoreSiblings": true, - "argsIgnorePattern": "res|next|^err" - } - ], - "prefer-const": [ - "error", - { - "destructuring": "all", - } - ], - "arrow-body-style": [ - 2, - "as-needed" - ], - "no-unused-expressions": [ - 2, - { - "allowTaggedTemplates": true - } - ], - "no-param-reassign": [ - 2, - { - "props": false - } - ], - "no-console": 0, - "import/prefer-default-export": 0, - "import": 0, - "func-names": 0, - "space-before-function-paren": 0, - "comma-dangle": 0, - "max-len": 0, - "import/extensions": 0, - "no-underscore-dangle": 0, - "consistent-return": 0, - "react/display-name": 1, - "react/no-array-index-key": 0, - "react/react-in-jsx-scope": 0, - "react/prefer-stateless-function": 0, - "react/forbid-prop-types": 0, - "react/no-unescaped-entities": 0, - "jsx-a11y/accessible-emoji": 0, - "react/require-default-props": 0, - "react/jsx-filename-extension": [ - 1, - { - "extensions": [ - ".js", - ".jsx" - ] - } - ], - "radix": 0, - "no-shadow": [ - 2, - { - "hoist": "all", - "allow": [ - "resolve", - "reject", - "done", - "next", - "err", - "error" - ] - } - ], - "quotes": [ - 2, - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "prettier/prettier": [ - "error", - { - "trailingComma": "es5", - "singleQuote": true, - "printWidth": 80, - } - ], - "jsx-a11y/href-no-hash": "off", - "jsx-a11y/anchor-is-valid": [ - "warn", - { - "aspects": [ - "invalidHref" - ] - } - ] - }, - "plugins": [ - // "html", - "prettier" - ] -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..9933936 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,115 @@ + +module.exports = { + extends: ['airbnb', 'prettier', 'prettier/react'], + parser: 'babel-eslint', + parserOptions: { + ecmaVersion: 2020, + // Can I remove these now? + ecmaFeatures: { + impliedStrict: true, + classes: true, + }, + }, + env: { + browser: true, + node: true, + jquery: true, + jest: true, + }, + rules: { + 'no-debugger': 0, + 'no-alert': 0, + 'no-await-in-loop': 0, + 'no-return-assign': ['error', 'except-parens'], + 'no-restricted-syntax': [ + 2, + 'ForInStatement', + 'LabeledStatement', + 'WithStatement', + ], + 'no-unused-vars': [ + 1, + { + ignoreRestSiblings: true, + argsIgnorePattern: 'res|next|^err', + }, + ], + 'prefer-const': [ + 'error', + { + destructuring: 'all', + }, + ], + 'arrow-body-style': [2, 'as-needed'], + 'no-unused-expressions': [ + 2, + { + allowTaggedTemplates: true, + }, + ], + 'no-param-reassign': [ + 2, + { + props: false, + }, + ], + 'no-console': 0, + 'import/prefer-default-export': 0, + import: 0, + 'func-names': 0, + 'space-before-function-paren': 0, + 'comma-dangle': 0, + 'max-len': 0, + 'import/extensions': 0, + 'no-underscore-dangle': 0, + 'consistent-return': 0, + 'react/display-name': 1, + 'react/no-array-index-key': 0, + 'react/react-in-jsx-scope': 0, + 'react/prefer-stateless-function': 0, + 'react/forbid-prop-types': 0, + 'react/no-unescaped-entities': 0, + 'jsx-a11y/accessible-emoji': 0, + 'react/require-default-props': 0, + 'react/jsx-filename-extension': [ + 1, + { + extensions: ['.js', '.jsx'], + }, + ], + radix: 0, + 'no-shadow': [ + 2, + { + hoist: 'all', + allow: ['resolve', 'reject', 'done', 'next', 'err', 'error'], + }, + ], + quotes: [ + 2, + 'single', + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + 'prettier/prettier': [ + 'error', + { + trailingComma: 'es5', + singleQuote: true, + printWidth: 80, + }, + ], + 'jsx-a11y/href-no-hash': 'off', + 'jsx-a11y/anchor-is-valid': [ + 'warn', + { + aspects: ['invalidHref'], + }, + ], + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + }, + plugins: ['html', 'prettier', 'react-hooks'], +}; \ No newline at end of file diff --git a/vscode.js b/vscode.json similarity index 50% rename from vscode.js rename to vscode.json index 233af12..3545347 100644 --- a/vscode.js +++ b/vscode.json @@ -3,7 +3,23 @@ "editor.wordWrap": "off", "javascript.updateImportsOnFileMove.enabled": "always", "editor.renderWhitespace": "all", - "editor.formatOnSave": false, + // These are all my auto-save configs + "editor.formatOnSave": true, + // turn it off for JS and JSX, we will do this via eslint + "[javascript]": { + "editor.formatOnSave": false + }, + "[javascriptreact]": { + "editor.formatOnSave": false + }, + // show eslint icon at bottom toolbar + "eslint.alwaysShowStatus": true, + // tell the ESLint plugin to run on save + "editor.codeActionsOnSave": { + "source.fixAll": true + }, + // Optional BUT IMPORTANT: If you have the prettier extension enabled for other languages like CSS and HTML, turn it off for JS since we are doing it through Eslint already + "prettier.disableLanguages": ["javascript", "javascriptreact"], "editor.tabSize": 2, "workbench.colorTheme": "Cobalt2", "editor.fontFamily": "Menlo, Monaco, 'Courier New', monospace, Fira Code Retina",