From 66ce99f310ec593245e3937daea5ed813e1630e6 Mon Sep 17 00:00:00 2001 From: Emerson Laurentino Date: Fri, 17 Jun 2022 14:52:35 -0300 Subject: [PATCH] feat: lint (#1368) * fix: remove eslint and prettier from root * feat: init eslint-config-faststore * chore: remove eslint and prettier config from root * chore: remove tsconfig from root * feat: config prettier * feat: eslint rules * chore: remove eslint-config-faststore * feat: lint script on ui package * fix: ui eslint errors * feat: eslint on sdk package * fix: remove eslint package from ui package * feat: eslint on lighthouse package * feat: rule to ignore params with _ * feat: eslint on graphql utils package * feat: eslint on api package * feat: eslint on docs app * fix: docs eslint errors * fix: docs eslint errors --- .editorconfig | 13 - .eslintignore | 18 - .eslintrc | 39 + .eslintrc.js | 53 - .prettierignore | 9 - .prettierrc | 15 +- apps/docs/package.json | 1 + .../CodeBlockWrapper/CodeBlockWrapper.tsx | 4 +- .../components/DocStructure/DocStructure.js | 4 +- .../src/components/DocUpdate/DocUpdate.js | 10 +- .../GraphQLExplorer/GraphQLExplorer.tsx | 2 +- .../components/PropsSection/PropsSection.jsx | 1 + apps/docs/src/components/hooks/useInterval.ts | 3 +- .../src/components/hooks/useWindowSize.ts | 7 +- .../src/pages/sections/FaqPage/FaqPage.js | 2 +- .../StarterComponentPage.js | 2 +- .../StarterSubmissionForm.jsx | 6 +- apps/docs/src/pages/starters/submissions.js | 2 +- package.json | 43 +- packages/api/package.json | 1 + packages/api/src/__generated__/schema.ts | 82 +- packages/graphql-utils/package.json | 3 +- packages/lighthouse/package.json | 1 + packages/sdk/package.json | 1 + packages/ui/package.json | 1 + .../molecules/Accordion/Accordion.test.tsx | 6 +- .../ui/src/molecules/Bullets/Bullets.test.tsx | 12 +- .../ui/src/molecules/Modal/ModalContent.tsx | 1 - tsconfig.json | 15 - yarn.lock | 955 +++++++++--------- 30 files changed, 612 insertions(+), 700 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintignore create mode 100644 .eslintrc delete mode 100644 .eslintrc.js delete mode 100644 .prettierignore delete mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index e717f5eb63..0000000000 --- a/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9c16f2a949..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,18 +0,0 @@ -package.json -node_modules/ -public/ -dist/ -coverage/ -.vscode/ -.cache/ -.turbo/ - -# generated js files -packages/gatsby-*/**/*.js -packages/gatsby-*/**/*.jsx -__generated__/ - -# declaration files -packages/gatsby-*/**/*.d.ts - -apps/docs/* diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000000..59715d471d --- /dev/null +++ b/.eslintrc @@ -0,0 +1,39 @@ +{ + "root": true, + "env": { + "browser": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["react", "react-hooks", "@typescript-eslint"], + "rules": { + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "ignoreRestSiblings": true, + "argsIgnorePattern": "_+" + } + ], + "@typescript-eslint/no-non-null-assertion": "warn", + "react/prop-types": ["error", { "skipUndeclared": true }] + }, + "settings": { + "react": { + "version": "detect" + } + } +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 7ed0aac369..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,53 +0,0 @@ -module.exports = { - extends: ['vtex'], - plugins: ['react-hooks', 'jest-dom', 'testing-library'], - overrides: [ - { - files: [ - // all tsx files - '*.tsx', - // gatsby config files (gatsby preset takes care of each variant) - 'gatsby-*.*', - // generic components/hooks path - 'components/**/*', - 'hooks/**/*', - // hooks - 'use*.ts', - 'hooks.ts', - // themes - 'theme.ts', - // ui is browser-only - 'packages/ui/**/*', - ], - extends: ['vtex-react/gatsby'], - }, - // General overrides - { - files: '*', - rules: { - 'no-console': [ - 'error', - { - allow: ['warn', 'error', 'info', 'time', 'timeEnd', 'assert'], - }, - ], - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - 'no-await-in-loop': 'off', - }, - env: { - node: true, - commonjs: true, - browser: true, - jest: true, - }, - }, - // stories overrides - { - files: '*.stories.tsx', - rules: { - 'no-console': 'off', - }, - }, - ], -} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index f5bcd77b55..0000000000 --- a/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -package.json -node_modules/ -public/ -coverage/ -.vscode/ -.cache/ -.turbo/ -__generated__/ -apps/docs/ diff --git a/.prettierrc b/.prettierrc index 320bc0c120..54a23a94f3 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1 +1,14 @@ -"@vtex/prettier-config" \ No newline at end of file +{ + "$schema": "http://json.schemastore.org/prettierrc", + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "jsxSingleQuote": false, + "quoteProps": "as-needed", + "trailingComma": "es5", + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "always" +} diff --git a/apps/docs/package.json b/apps/docs/package.json index 4c18bbf2e0..cf4f66f524 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -6,6 +6,7 @@ "docusaurus": "docusaurus", "start": "docusaurus start", "build": "docusaurus build", + "lint": "eslint src/**/*.{js,jsx,ts,tsx}", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", diff --git a/apps/docs/src/components/CodeBlockWrapper/CodeBlockWrapper.tsx b/apps/docs/src/components/CodeBlockWrapper/CodeBlockWrapper.tsx index ea1273adff..6f4ae934b9 100644 --- a/apps/docs/src/components/CodeBlockWrapper/CodeBlockWrapper.tsx +++ b/apps/docs/src/components/CodeBlockWrapper/CodeBlockWrapper.tsx @@ -3,8 +3,8 @@ import type { MouseEventHandler } from 'react' interface CodeBlockWrapperState { - isCodeBlockCollapsed: Boolean - isCollapsibleModeOn: Boolean + isCodeBlockCollapsed: boolean + isCollapsibleModeOn: boolean } interface CodeBlockWrapperProps { diff --git a/apps/docs/src/components/DocStructure/DocStructure.js b/apps/docs/src/components/DocStructure/DocStructure.js index 4cca9b4dd7..4ac3a6d307 100644 --- a/apps/docs/src/components/DocStructure/DocStructure.js +++ b/apps/docs/src/components/DocStructure/DocStructure.js @@ -1,6 +1,6 @@ import React from 'react' import Link from '@docusaurus/Link' -import useBaseUrl from '@docusaurus/useBaseUrl' +import baseUrl from '@docusaurus/useBaseUrl' let docs = [ { @@ -39,7 +39,7 @@ const DocStructure = () => { {docs.map((item, i) => (

{item.title}

{item.description}

diff --git a/apps/docs/src/components/DocUpdate/DocUpdate.js b/apps/docs/src/components/DocUpdate/DocUpdate.js index 34fc25833e..4ab0a2f0a7 100644 --- a/apps/docs/src/components/DocUpdate/DocUpdate.js +++ b/apps/docs/src/components/DocUpdate/DocUpdate.js @@ -56,8 +56,8 @@ const DocUpdate = () => {
{item.type === 'Fixed' && ( - - + + )} {item.type === 'Removed' && ( @@ -68,8 +68,8 @@ const DocUpdate = () => { )} {item.type === 'Improved' && ( - - + + )} {item.type === 'Added' && ( @@ -100,7 +100,7 @@ const DocUpdate = () => { comp = (

Documentation Updates

-

There weren't any documentation updates in the last month.

+

There {"weren't"} any documentation updates in the last month.

) } diff --git a/apps/docs/src/components/GraphQLExplorer/GraphQLExplorer.tsx b/apps/docs/src/components/GraphQLExplorer/GraphQLExplorer.tsx index 9d6a610916..3965e668aa 100644 --- a/apps/docs/src/components/GraphQLExplorer/GraphQLExplorer.tsx +++ b/apps/docs/src/components/GraphQLExplorer/GraphQLExplorer.tsx @@ -2,7 +2,7 @@ import React from 'react' import { ApolloExplorerReact } from '@apollo/explorer' import { useColorMode } from '@docusaurus/theme-common' -var GraphQLExplorer = function ({ query, vars }) { +const GraphQLExplorer = function ({ query, vars }) { const { isDarkTheme } = useColorMode() return (
diff --git a/apps/docs/src/components/PropsSection/PropsSection.jsx b/apps/docs/src/components/PropsSection/PropsSection.jsx index 530f8ce20d..f65568d79f 100644 --- a/apps/docs/src/components/PropsSection/PropsSection.jsx +++ b/apps/docs/src/components/PropsSection/PropsSection.jsx @@ -12,6 +12,7 @@ const PropsSection = ({ name }) => { return Object.keys(props).map(key => ( (); // Remember the latest function. useEffect(() => { @@ -12,7 +12,6 @@ export function useInterval(callback, delay) { // Set up the interval. useEffect(() => { - // @ts-ignore const tick = () => savedCallback.current(); if (delay !== null) { diff --git a/apps/docs/src/components/hooks/useWindowSize.ts b/apps/docs/src/components/hooks/useWindowSize.ts index 4cbd65eb59..d28f594471 100644 --- a/apps/docs/src/components/hooks/useWindowSize.ts +++ b/apps/docs/src/components/hooks/useWindowSize.ts @@ -11,9 +11,9 @@ export function useWindowSize(): WindowSizeInterface { // Initialize state with undefined width/height so server and client renders match // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/ const [windowSize, setWindowSize] = useState({ - windowWidth: undefined, - windowHeight: undefined, - scrollHeight: undefined, + windowWidth: 0, + windowHeight: 0, + scrollHeight: 0, }); // Return if running on server @@ -21,6 +21,7 @@ export function useWindowSize(): WindowSizeInterface { return { windowWidth: 0, windowHeight: 0, scrollHeight: 0 }; } + // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { function handleResize() { setWindowSize({ diff --git a/apps/docs/src/pages/sections/FaqPage/FaqPage.js b/apps/docs/src/pages/sections/FaqPage/FaqPage.js index 490ff23276..fcf01b4825 100644 --- a/apps/docs/src/pages/sections/FaqPage/FaqPage.js +++ b/apps/docs/src/pages/sections/FaqPage/FaqPage.js @@ -43,7 +43,7 @@ const FaqPage = () => { return (
{data.map(({ question, answer }) => ( - + ))}
) diff --git a/apps/docs/src/pages/sections/StarterComponentPage/StarterComponentPage.js b/apps/docs/src/pages/sections/StarterComponentPage/StarterComponentPage.js index 63953dcdea..6f84043909 100644 --- a/apps/docs/src/pages/sections/StarterComponentPage/StarterComponentPage.js +++ b/apps/docs/src/pages/sections/StarterComponentPage/StarterComponentPage.js @@ -29,7 +29,7 @@ const StarterComponentPage = ({ data = {} }) => {

    {data.features?.map((feature) => ( -
  • {feature}
  • +
  • {feature}
  • ))}
diff --git a/apps/docs/src/pages/sections/StarterSubmissionForm/StarterSubmissionForm.jsx b/apps/docs/src/pages/sections/StarterSubmissionForm/StarterSubmissionForm.jsx index 966893003a..04281db6d6 100644 --- a/apps/docs/src/pages/sections/StarterSubmissionForm/StarterSubmissionForm.jsx +++ b/apps/docs/src/pages/sections/StarterSubmissionForm/StarterSubmissionForm.jsx @@ -30,7 +30,7 @@ function StarterSubmissionForm() { ).then(() => setIsSent(true)) .catch(() => alert("There was an error, please try again")) } - const thankYouMessage =

Thank you for submitting your Starter! We'll get in touch with you as soon as possible!

+ const thankYouMessage =

Thank you for submitting your Starter! {"We'll"} get in touch with you as soon as possible!

const form =
Description of Starter ({textAreaCount}/200)