122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| const path = require('path');
 | |
| 
 | |
| // get the path of the js-sdk so we can extend the config
 | |
| // eslint supports loading extended configs by module,
 | |
| // but only if they come from a module that starts with eslint-config-
 | |
| // So we load the filename directly (and it could be in node_modules/
 | |
| // or or ../node_modules/ etc)
 | |
| //
 | |
| // We add a `..` to the end because the js-sdk lives out of lib/, but the eslint
 | |
| // config is at the project root.
 | |
| const matrixJsSdkPath = path.join(path.dirname(require.resolve('matrix-js-sdk')), '..');
 | |
| 
 | |
| module.exports = {
 | |
|     parser: "babel-eslint",
 | |
|     extends: [matrixJsSdkPath + "/.eslintrc.js"],
 | |
|     plugins: [
 | |
|       "react",
 | |
|       "react-hooks",
 | |
|       "flowtype",
 | |
|       "babel"
 | |
|     ],
 | |
|     globals: {
 | |
|         LANGUAGES_FILE: "readonly",
 | |
|     },
 | |
|     env: {
 | |
|         es6: true,
 | |
|     },
 | |
|     parserOptions: {
 | |
|         ecmaFeatures: {
 | |
|             jsx: true,
 | |
|             legacyDecorators: true,
 | |
|         }
 | |
|     },
 | |
|     rules: {
 | |
|         // eslint's built in no-invalid-this rule breaks with class properties
 | |
|         "no-invalid-this": "off",
 | |
|         // so we replace it with a version that is class property aware
 | |
|         "babel/no-invalid-this": "error",
 | |
| 
 | |
|         // We appear to follow this most of the time, so let's enforce it instead
 | |
|         // of occasionally following it (or catching it in review)
 | |
|         "keyword-spacing": "error",
 | |
| 
 | |
|         /** react **/
 | |
|         // This just uses the react plugin to help eslint known when
 | |
|         // variables have been used in JSX
 | |
|         "react/jsx-uses-vars": "error",
 | |
|         // Don't mark React as unused if we're using JSX
 | |
|         "react/jsx-uses-react": "error",
 | |
| 
 | |
|         // bind or arrow function in props causes performance issues
 | |
|         // (but we currently use them in some places)
 | |
|         // It's disabled here, but we should using it sparingly.
 | |
|         "react/jsx-no-bind": "off",
 | |
|         "react/jsx-key": ["error"],
 | |
| 
 | |
|         // Components in JSX should always be defined.
 | |
|         "react/jsx-no-undef": "error",
 | |
| 
 | |
|         // Assert no spacing in JSX curly brackets
 | |
|         // <Element prop={ consideredError} prop={notConsideredError} />
 | |
|         //
 | |
|         // https://github.com/yannickcr/eslint-plugin-react/blob/HEAD/docs/rules/jsx-curly-spacing.md
 | |
|         //
 | |
|         // Disabled for now - if anything we'd like to *enforce* spacing in JSX
 | |
|         // curly brackets for legibility, but in practice it's not clear that the
 | |
|         // consistency particularly improves legibility here. --Matthew
 | |
|         //
 | |
|         // "react/jsx-curly-spacing": ["error", {"when": "never", "children": {"when": "always"}}],
 | |
| 
 | |
|         // Assert spacing before self-closing JSX tags, and no spacing before or
 | |
|         // after the closing slash, and no spacing after the opening bracket of
 | |
|         // the opening tag or closing tag.
 | |
|         //
 | |
|         // https://github.com/yannickcr/eslint-plugin-react/blob/HEAD/docs/rules/jsx-tag-spacing.md
 | |
|         "react/jsx-tag-spacing": ["error"],
 | |
| 
 | |
|         /** flowtype **/
 | |
|         "flowtype/require-parameter-type": ["warn", {
 | |
|             "excludeArrowFunctions": true,
 | |
|         }],
 | |
|         "flowtype/define-flow-type": "warn",
 | |
|         "flowtype/require-return-type": ["warn",
 | |
|             "always",
 | |
|             {
 | |
|               "annotateUndefined": "never",
 | |
|               "excludeArrowFunctions": true,
 | |
|             }
 | |
|         ],
 | |
|         "flowtype/space-after-type-colon": ["warn", "always"],
 | |
|         "flowtype/space-before-type-colon": ["warn", "never"],
 | |
| 
 | |
|         /*
 | |
|          * things that are errors in the js-sdk config that the current
 | |
|          * code does not adhere to, turned down to warn
 | |
|          */
 | |
|         "max-len": ["warn", {
 | |
|             // apparently people believe the length limit shouldn't apply
 | |
|             // to JSX.
 | |
|             ignorePattern: '^\\s*<',
 | |
|             ignoreComments: true,
 | |
|             ignoreRegExpLiterals: true,
 | |
|             code: 120,
 | |
|         }],
 | |
|         "valid-jsdoc": ["warn"],
 | |
|         "new-cap": ["warn"],
 | |
|         "key-spacing": ["warn"],
 | |
|         "prefer-const": ["warn"],
 | |
| 
 | |
|         // crashes currently: https://github.com/eslint/eslint/issues/6274
 | |
|         "generator-star-spacing": "off",
 | |
| 
 | |
|         "react-hooks/rules-of-hooks": "error",
 | |
|         "react-hooks/exhaustive-deps": "warn",
 | |
|     },
 | |
|     settings: {
 | |
|         flowtype: {
 | |
|             onlyFilesWithFlowAnnotation: true
 | |
|         },
 | |
|     },
 | |
| };
 |