mirror of
https://github.com/desktop/desktop
synced 2024-11-05 20:49:32 +00:00
223 lines
6.4 KiB
YAML
223 lines
6.4 KiB
YAML
root: true
|
|
parser: '@typescript-eslint/parser'
|
|
plugins:
|
|
- '@typescript-eslint'
|
|
- react
|
|
- json
|
|
- jsdoc
|
|
|
|
settings:
|
|
react:
|
|
version: '16.3'
|
|
|
|
extends:
|
|
- prettier
|
|
- prettier/react
|
|
- plugin:@typescript-eslint/recommended
|
|
- prettier/@typescript-eslint
|
|
- plugin:github/react
|
|
|
|
rules:
|
|
##########
|
|
# CUSTOM #
|
|
##########
|
|
insecure-random: error
|
|
react-no-unbound-dispatcher-props: error
|
|
react-readonly-props-and-state: error
|
|
react-proper-lifecycle-methods: error
|
|
no-loosely-typed-webcontents-ipc: error
|
|
|
|
###########
|
|
# PLUGINS #
|
|
###########
|
|
|
|
# TYPESCRIPT
|
|
'@typescript-eslint/naming-convention':
|
|
- error
|
|
- selector: interface
|
|
format:
|
|
- PascalCase
|
|
custom:
|
|
regex: '^I[A-Z]'
|
|
match: true
|
|
- selector: class
|
|
format:
|
|
- PascalCase
|
|
- selector: variableLike
|
|
format: null
|
|
custom:
|
|
# Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar we
|
|
# should probably be using the following expression here (newlines added for readability)
|
|
#
|
|
# ^(break|case|catch|class|const|continue|debugger|default|delete|do|else|export|
|
|
# extends|finally|for|function|if|import|in|instanceof|new|return|super|switch|this|
|
|
# throw|try|typeof|var|void|while|with|yield|enum|implements|interface|let|package|
|
|
# private|protected|public|static|await|abstract|boolean|byte|char|double|final|float|
|
|
# goto|int|long|native|short|synchronized|throws|transient|volatile|null|true|false)$
|
|
#
|
|
# But that'll cause a bunch of errors, for now we'll stick with replicating what the
|
|
# variable-name ban-keywords rule did for us in tslint
|
|
# see https://palantir.github.io/tslint/rules/variable-name/
|
|
regex: '^(any|Number|number|String|string|Boolean|boolean|Undefined|undefined)$'
|
|
match: false
|
|
'@typescript-eslint/consistent-type-assertions':
|
|
- error
|
|
- assertionStyle: 'as'
|
|
'@typescript-eslint/no-unused-expressions': error
|
|
'@typescript-eslint/explicit-member-accessibility': error
|
|
'@typescript-eslint/no-unused-vars':
|
|
- error
|
|
- args: 'none'
|
|
'@typescript-eslint/no-use-before-define':
|
|
- error
|
|
- functions: false
|
|
variables: false
|
|
typedefs: false
|
|
'@typescript-eslint/member-ordering':
|
|
- error
|
|
- default:
|
|
- static-field
|
|
- static-method
|
|
- field
|
|
- abstract-method
|
|
- constructor
|
|
- method
|
|
'@typescript-eslint/no-extraneous-class': error
|
|
'@typescript-eslint/no-empty-interface': error
|
|
# Would love to be able to turn this on eventually
|
|
'@typescript-eslint/no-non-null-assertion': off
|
|
|
|
# This rule does a lot of good but right now it catches way
|
|
# too many cases, we're gonna want to pay down this debt
|
|
# incrementally if we want to enable it.
|
|
'@typescript-eslint/ban-types': off
|
|
|
|
# It'd be nice to be able to turn this on eventually
|
|
'@typescript-eslint/no-var-requires': off
|
|
|
|
# Don't particularly care about these
|
|
'@typescript-eslint/triple-slash-reference': off
|
|
'@typescript-eslint/explicit-module-boundary-types': off
|
|
'@typescript-eslint/no-explicit-any': off
|
|
'@typescript-eslint/no-inferrable-types': off
|
|
'@typescript-eslint/no-empty-function': off
|
|
'@typescript-eslint/no-redeclare': error
|
|
|
|
# React
|
|
react/jsx-boolean-value:
|
|
- error
|
|
- always
|
|
react/jsx-key: error
|
|
react/jsx-no-bind: error
|
|
react/no-string-refs: error
|
|
react/jsx-uses-vars: error
|
|
react/jsx-uses-react: error
|
|
react/no-unused-state: error
|
|
react/no-unused-prop-types: error
|
|
react/prop-types:
|
|
- error
|
|
- ignore: ['children']
|
|
|
|
# JSDoc
|
|
jsdoc/check-alignment: error
|
|
jsdoc/check-tag-names: error
|
|
jsdoc/check-types: error
|
|
jsdoc/implements-on-classes: error
|
|
jsdoc/tag-lines:
|
|
- error
|
|
- any
|
|
- startLines: 1
|
|
jsdoc/no-undefined-types: error
|
|
jsdoc/valid-types: error
|
|
|
|
# Would love to enable these at some point but
|
|
# they cause way to many issues now.
|
|
#jsdoc/check-param-names: error
|
|
#jsdoc/require-jsdoc:
|
|
# - error
|
|
# - publicOnly: true
|
|
|
|
###########
|
|
# BUILTIN #
|
|
###########
|
|
curly: error
|
|
no-new-wrappers: error
|
|
# We'll use no-redeclare from @typescript/eslint-plugin instead as that
|
|
# supports overloads
|
|
no-redeclare: off
|
|
no-eval: error
|
|
no-sync: error
|
|
no-var: error
|
|
prefer-const: error
|
|
eqeqeq:
|
|
- error
|
|
- smart
|
|
strict:
|
|
- error
|
|
- global
|
|
no-buffer-constructor: error
|
|
no-restricted-imports:
|
|
- error
|
|
- paths:
|
|
- name: electron
|
|
importNames: ['ipcRenderer']
|
|
message:
|
|
"Please use 'import * as ipcRenderer' from 'ipc-renderer' instead to
|
|
get strongly typed IPC methods."
|
|
- name: electron/renderer
|
|
importNames: ['ipcRenderer']
|
|
message:
|
|
"Please use 'import * as ipcRenderer' from 'ipc-renderer' instead to
|
|
get strongly typed IPC methods."
|
|
- name: electron
|
|
importNames: ['ipcMain']
|
|
message:
|
|
"Please use 'import * as ipcMain' from 'ipc-main' instead to get
|
|
strongly typed IPC methods."
|
|
- name: electron/main
|
|
importNames: ['ipcMain']
|
|
message:
|
|
"Please use 'import * as ipcMain' from 'ipc-main' instead to get
|
|
strongly typed IPC methods."
|
|
|
|
###########
|
|
# SPECIAL #
|
|
###########
|
|
no-restricted-syntax:
|
|
- error
|
|
# no-default-export
|
|
- selector: ExportDefaultDeclaration
|
|
message: Use of default exports is forbidden
|
|
|
|
###########
|
|
# jsx-a11y #
|
|
###########
|
|
|
|
# autofocus is fine when it is being used to set focus to something in a way
|
|
# that doesn't skip any context or inputs. For example, in a named dialog, if you had
|
|
# a close button, a heading reflecting the name, and a labelled text input,
|
|
# focusing the text input wouldn't disadvantage a user because they're not
|
|
# missing anything of importance before it. The problem is when it is used on
|
|
# larger web pages, e.g. to focus a form field in the main content, entirely
|
|
# skipping the header and often much else besides.
|
|
jsx-a11y/no-autofocus:
|
|
- warn
|
|
- ignoreNonDOM: true
|
|
|
|
overrides:
|
|
- files: '*.d.ts'
|
|
rules:
|
|
strict:
|
|
- error
|
|
- never
|
|
- files: 'app/test/**/*'
|
|
rules:
|
|
'@typescript-eslint/no-non-null-assertion': off
|
|
- files: 'script/**/*'
|
|
rules:
|
|
'@typescript-eslint/no-non-null-assertion': off
|
|
|
|
parserOptions:
|
|
sourceType: module
|
|
ecmaFeatures:
|
|
jsx: true
|