parser: "babel-eslint"
env:
  browser: true
  amd: true
  jasmine: true
  node: true
  react: false
  import: false
globals:
  baidu: true
  bds: true
  T: true
  $: true
  jQuery: true
  goog: true
  fis: true
  F: true
  __inline: true
  __uri: true
  angular: true
  setImmediate: true
  ActiveXObject: true
  unescape: true
  escape: true
  Promise: true
plugins:
  - html
  - babel
  - react
  - import
settings:
  "html/html-extensions":
    - ".san"
    - ".vue"
    - ".atom"
rules:
  fecs-indent:
    - 2
    - "space"
    - 4
    - 0
    - true
  fecs-valid-jsdoc:
    - 2
    -
      prefer:
        arg: "param"
        argument: "param"
        returns: "return"
        fileoverview: "file"
      preferType:
        String: "string"
        Boolean: "boolean"
        Number: "number"
        int: "number"
        Int: "number"
        array: "Array"
        function: "Function"
        date: "Date"
        object: "Object"
        regexp: "RegExp"
        promise: "Promise"
      preferLineComment: true
      requireReturn: false
      requireAuthor: true
      requireDescription: true
      requireFileDescription: true
      requireParamDescription: true
      requireReturnType: true
      requireReturnDescription: false
      requireBlankLineAfterDescription: true
      requireEmptyLineBeforeComment: true
      requireObjectPatternParamBranchName: false
  fecs-max-statements:
    - 1
    - 50
    -
      ignore:
          AMD: true
          IIFE: true
  fecs-eol-last:
    - 2
    - true
  fecs-camelcase: 2
  fecs-properties-quote:
    - 1
    -
      esVersion: 5
  fecs-no-forin-array: 2
  fecs-valid-amd-id: 2
  fecs-no-eval: 2
  fecs-no-global-require: 2
  fecs-jsx-var: 2
  fecs-esnext-ext:
    - 2
    -
      - "js"
      - "jsx"
      - "es"
  fecs-no-extra-semi: 2
  fecs-use-method-definition: 1
  fecs-use-property-shorthand:
    - 1
    -
      spread: true
      get: false
      set: false
      method: false
      computed: false
  fecs-prefer-class: 2
  fecs-prefer-super: 2
  fecs-export-on-declare: 2
  fecs-imports-on-top: 2
  fecs-valid-super: 2
  fecs-arrow-body-style:
    - 1
    - "as-needed"
    -
      ObjectExpression: true
  fecs-max-destructure-depth:
    - 2
    - 2
  fecs-min-vars-per-destructure:
    - 2
    - 2
  fecs-one-var-per-line: 2
  fecs-no-anonymous-before-rest: 2
  fecs-max-calls-in-template: 2
  fecs-no-extra-destructure: 2
  fecs-use-standard-promise: 2
  fecs-use-for-of: 1
  fecs-prefer-spread-element: 1
  fecs-prefer-async-await: 2
  fecs-shim-promise: 2
  fecs-no-this-arrow: 2
  fecs-valid-map-set: 1
  fecs-prefer-destructure: 1
  fecs-prefer-assign-pattern: 1
  fecs-use-computed-property: 1

  fecs-valid-var-jsdoc: 1
  fecs-valid-class-jsdoc:
    - 1
    -
      classNode: false
      privilege: false
  fecs-valid-constructor: 1
  fecs-valid-dom-style: 1
  fecs-use-async-require: 0
  fecs-no-require: 1

  generator-star-spacing:
    - 2
    -
      before: false
      after: true
  babel/new-cap:
    - 2
    -
      capIsNewExceptions:
        - "T"
        - "AddToFavoritesBar"
  array-bracket-spacing:
    - 2
    - "never"
  babel/object-curly-spacing:
    - 2
    - "never"
  arrow-parens:
    - 2
    - "as-needed"


  no-console: 1
  no-constant-condition: 1
  comma-dangle: 2
  no-debugger: 2
  no-dupe-keys: 1
  no-empty-character-class: 2
  no-ex-assign: 2
  no-extra-boolean-cast: 1
  no-func-assign: 1
  no-inner-declarations: 1
  no-invalid-regexp: 2
  no-negated-in-lhs: 2
  no-obj-calls: 2
  no-sparse-arrays: 2
  no-unreachable: 2
  use-isnan: 2
  valid-typeof: 2
  curly:
    - 2
    - "all"
  eqeqeq:
    - 2
    - "allow-null"
  guard-for-in: 1
  no-else-return: 1
  no-labels:
    - 1
    -
      allowLoop: true
  no-eval: 1
  no-extend-native: 2
  no-extra-bind: 1
  no-implied-eval: 1
  no-iterator: 2
  no-irregular-whitespace: 1
  no-lone-blocks: 1
  no-loop-func: 1
  no-multi-str: 1
  no-native-reassign: 2
  no-new-wrappers: 2
  no-octal: 1
  no-octal-escape: 1
  no-proto: 2
  no-redeclare: 1
  no-self-compare: 2
  no-unneeded-ternary: 2
  no-with: 1
  radix: 2
  wrap-iife:
    - 2
    - "any"
  no-delete-var: 1
  no-dupe-args: 2
  no-duplicate-case: 2
  no-label-var: 1
  no-shadow-restricted-names: 2
  no-undef: 2
  no-undef-init: 1
  no-unused-vars:
    - 1
    -
      vars: "local"
      args: "none"
  no-use-before-define:
    - 2
    - "nofunc"
  brace-style:
    - 1
    - "stroustrup"
    - {}
  comma-spacing:
    - 2
    -
      before: false
      after: true
  comma-style:
    - 2
    - "last"
  new-parens: 1
  no-array-constructor: 2
  no-multi-spaces:
    - 2
    -
      exceptions:
        Property: true
        BinaryExpression: true
        VariableDeclarator: true
  no-new-object: 2
  no-spaced-func: 2
  no-trailing-spaces: 2
  no-extra-parens:
    - 2
    - "functions"
  no-mixed-spaces-and-tabs: 2
  one-var:
    - 2
    - "never"
  operator-linebreak:
    - 2
    - "before"
  quotes:
    - 2
    - "single"
  semi:
    - 2
    - "always"
  semi-spacing: 2
  keyword-spacing: 2
  key-spacing:
    - 2
    -
      beforeColon: false
      afterColon: true
  space-before-function-paren:
    - 2
    -
      anonymous: "always"
      named: "never"
  space-before-blocks:
    - 2
    - "always"
  computed-property-spacing:
    - 2
    - "never"
  space-in-parens:
    - 2
    - "never"
  space-unary-ops: 1
  spaced-comment:
    - 2
    - "always"
    -
      exceptions:
        - "-"
        - "+"
        - '"'
      block:
        balanced: true

  max-nested-callbacks:
    - 1
    - 3
  max-depth:
    - 1
    - 6
  max-len:
    - 2
    - 120
    - 4
    -
      ignoreUrls: true
      ignoreComments: true
  max-params:
    - 1
    - 6

  space-infix-ops: 2
  dot-notation:
    - 2
    -
      allowKeywords: true
      allowPattern: "^catch$"

  arrow-spacing: 2
  constructor-super: 2
  no-confusing-arrow:
    - 2
    -
      allowParens: true
  no-class-assign: 1
  no-const-assign: 2
  no-dupe-class-members: 1
  no-this-before-super: 1
  no-var: 1
  no-duplicate-imports: 1
  prefer-rest-params: 2
  unicode-bom: 1
  max-statements-per-line: 2

  react/display-name: 0
  react/forbid-component-props: 1
  react/forbid-elements: 0
  react/forbid-foreign-prop-types: 1
  react/forbid-prop-types: 1
  react/jsx-boolean-value:
    - 2
    - "never"
  react/jsx-closing-bracket-location:
    - 2
    - "line-aligned"
  react/jsx-curly-spacing:
    - 2
    - "never"
  react/jsx-equals-spacing:
    - 2
    - "never"
  react/jsx-filename-extension:
    - 2
    -
      extensions:
        - ".js"
        - ".jsx"
        - ".es"
  react/jsx-first-prop-new-line:
    - 2
    - "multiline-multiprop"
  react/jsx-handler-names:
    - 2
    -
      eventHandlerPrefix: ".*"
      eventHandlerPropPrefix: "on"
  react/jsx-indent-props:
    - 2
    - 4
  react/jsx-indent:
    - 2
    - 4
  react/jsx-key: 2
  react/jsx-max-props-per-line:
    - 2
    -
      when: "multiline"
  react/jsx-no-bind:
    - 2
    -
      ignoreRefs: true
      allowArrowFunctions: false
      allowBind: false
  react/jsx-no-comment-textnodes: 1
  react/jsx-no-duplicate-props:
    - 2
    -
      ignoreCase: true
  react/jsx-no-literals: 0
  react/jsx-no-target-blank: 2
  react/jsx-no-undef: 2
  react/jsx-pascal-case:
    - 2
    -
      allowAllCaps: true
  react/jsx-sort-props: 0
  react/jsx-tag-spacing:
    - 2
    -
      closingSlash: "never"
      beforeSelfClosing: "always"
      afterOpening: "never"
  react/jsx-uses-react: 0
  react/jsx-uses-vars: 2
  react/jsx-wrap-multilines:
    - 2
    -
      declaration: true
      assignment: true
      return: true
      arrow: true
  react/no-array-index-key: 2
  react/no-children-prop: 2
  react/no-danger-with-children: 2
  react/no-danger: 1
  react/no-deprecated: 2
  react/no-did-mount-set-state: 2
  react/no-did-update-set-state: 2
  react/no-will-update-set-state: 2
  react/no-direct-mutation-state: 2
  react/no-find-dom-node: 2
  react/no-is-mounted: 2
  react/no-multi-comp:
    - 2
    -
      ignoreStateless: true
  react/no-render-return-value: 2
  react/no-set-state: 0
  react/no-string-refs: 2
  react/no-unescaped-entities: 2
  react/no-unknown-property: 2
  react/no-unused-prop-types: 2
  react/prefer-es6-class:
    - 2
    - "always"
  react/prefer-stateless-function: 2
  react/prop-types: 2
  react/react-in-jsx-scope: 0
  react/require-default-props: 2
  react/require-optimization: 0
  react/require-render-return: 2
  react/self-closing-comp:
    - 2
    -
      component: true
      html: false
  react/sort-comp:
    - 2
    -
        order:
          - "static-properties"
          - "static-methods"
          - "lifecycle"
          - "everything-else"
          - "render"
        groups:
          static-properties:
            - "displayName"
            - "propTypes"
            - "contextTypes"
            - "childContextTypes"
            - "mixins"
            - "statics"
          lifecycle:
            - "defaultProps"
            - "constructor"
            - "getDefaultProps"
            - "getInitialState"
            - "state"
            - "getChildContext"
            - "componentWillMount"
            - "componentDidMount"
            - "componentWillReceiveProps"
            - "shouldComponentUpdate"
            - "componentWillUpdate"
            - "componentDidUpdate"
            - "componentWillUnmount"

  react/sort-prop-types: 0
  react/style-prop-object: 2
  react/void-dom-elements-no-children: 2

  import/no-unresolved: 2
  import/named: 2
  import/default: 2
  import/namespace: 2
  import/no-restricted-paths: 0
  import/no-absolute-path: 2
  import/no-dynamic-require: 1
  import/no-internal-modules: 0
  import/no-webpack-loader-syntax: 1
  import/export: 2
  import/no-named-as-default: 0
  import/no-named-as-default-member: 2
  import/no-deprecated: 2
  import/no-extraneous-dependencies: 0
  import/no-mutable-exports: 0
  import/unambiguous: 2
  import/no-commonjs: 1
  import/no-amd: 1
  import/no-nodejs-modules: 0
  import/first: 2
  import/no-duplicates: 2
  import/no-namespace: 0
  import/extensions:
    - 2
    -
      .js: never,
      .jsx: never,
      .es: never
  import/order: 1
  import/newline-after-import: 2
  import/prefer-default-export: 0
  import/max-dependencies: 0
  import/no-unassigned-import: 0
  import/no-named-default: 2

  no-useless-constructor: 1
