Как я могу синхронизировать eslint или настроить аналогичный tslint и более симпатичный с машинописью? - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть проект React / Redux, и я начал использовать машинопись в своем проекте. Я уже настроил мою конфигурацию eslint для проекта, которая расширяет конфигурации airbnb eslint. Мой eslint выглядит следующим образом:

module.exports = {
  "parser": "babel-eslint",
  "extends": [
    "airbnb",
    "plugin:flowtype/recommended"
  ],
  "plugins": [
    "react",
    "jsx-a11y",
    "flowtype"
  ],
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "globals": {
    "__DEV__": true,
    "__SERVER__": true,
    "__": true,
    "define": true,
    "describe": true,
    "expect": true,
    "require": true,
    "test": true,
  },
  "ecmaFeatures": {
    "arrowFunctions": true,
    "binaryLiterals": true,
    "blockBindings": true,
    "classes": true,
    "defaultParams": true,
    "destructuring": true,
    "forOf": true,
    "generators": true,
    "modules": true,
    "objectLiteralComputedProperties": true,
    "objectLiteralDuplicateProperties": true,
    "objectLiteralShorthandMethods": true,
    "objectLiteralShorthandProperties": true,
    "octalLiterals": true,
    "regexUFlag": true,
    "regexYFlag": true,
    "spread": true,
    "superInFunctions": true,
    "templateStrings": true,
    "unicodeCodePointEscapes": true,
    "globalReturn": true,
    "jsx": true
  },
  "rules": {
    // Strict mode
    "strict": [
      2,
      "never"
    ],
    // Code style
    "quotes": [
      2,
      "single"
    ],
    "arrow-parens": [
      2,
      "as-needed"
    ],
    // Key Spacing
    "key-spacing": 0,
    // Best practices
    "block-scoped-var": 1,
    "dot-notation": 1,
    "no-confusing-arrow": 1,
    "no-else-return": 1,
    "no-eval": 1,
    "no-extend-native": 1,
    "no-extra-bind": 1,
    "no-lone-blocks": 1,
    "no-loop-func": 1,
    "no-multi-spaces": 0,
    "no-param-reassign": [
      "error",
      {
        "props": false
      }
    ],
    "vars-on-top": 1,
    "max-statements": [
      1,
      20
    ],
    "no-underscore-dangle": 0,
    "no-undef": 1,
    "no-unused-vars": 1,
    "indent": [
      1,
      2,
      {
        "SwitchCase": 1
      }
    ],
    //React specific rules
    "react/jsx-filename-extension": [
      1,
      {
        "extensions": [
          ".js",
          ".jsx"
        ]
      }
    ],
    "react/forbid-prop-types": 0,
    "react/no-unused-prop-types": 1,
    //Overwriting airbnb stylings
    "array-bracket-spacing": 0,
    "comma-dangle": [
      2,
      "always-multiline"
    ],
    "func-names": 0,
    "jsx-quotes": [
      2,
      "prefer-double"
    ],
    "max-len": [
      2,
      200,
      2,
      {
        "ignoreUrls": true,
        "ignoreComments": false
      }
    ],
    "no-console": 0,
    "one-var": 0,
    "prefer-const": 1,
    "react/jsx-no-bind": 1,
    "react/require-default-props": 0,
    "space-in-parens": 0,
    "spaced-comment": 0,
    "no-multi-assign": 0,
    //Import rules
    "import/extensions": [
      2,
      {
        "js": "never"
      }
    ],
    "import/no-unresolved": 0,
    "import/no-extraneous-dependencies": 0,
    "import/no-named-as-default-member": 0,
    "import/first": 0,
    //Keeping below till idea supports these codestyles
    "object-curly-spacing": 0
  },
  "parserOptions": {
    "sourceType": "module",
    "allowImportExportEverywhere": true
  },
  "settings": {
    "flowtype": {
      "onlyFilesWithFlowAnnotation": true
    },
    "import/resolver": "webpack"
  }
};

Теперь, когда я использую машинопись, я хочу, чтобы эта конфигурация eslint работала и с моими файлами машинописи (или схожим с tslint), но я не хочу создавать любой другой файл tslint, потому что тогда, если я буду нужно обновить потом придется обновлять в 2 местах. Кроме того, я хотел бы добавить prettier в VSCode. Итак, мои вопросы:

  1. Как настроить / синхронизировать eslint для файлов машинописи?
  2. Как я могу настроить эту конфигурацию eslint на vscode? (Я использовал webstorm до этого, но я хочу использовать vscode)
  3. Как я могу настроить красивее с eslint с Typescript в VSCode?

1 Ответ

0 голосов
/ 11 ноября 2018

Отвечая на три пули в порядке ...

1. ESLint против TSLint

Теперь, когда вы работаете с TypeScript, было бы неплохо переключиться на TSLint поверх ESLint. TSLint выигрывает от доступа к более богатой информации о типах с помощью API-интерфейсов TypeScript, поэтому его правила могут быть более мощными, чем у ESLint. Например, у него есть правила, которые могут предотвратить случайное неправильное обращение с обещаниями, неправильное сравнение неправильных типов переменных или неправильную итерацию по массивам.

См. http://palantir.github.io/tslint для документации и http://palantir.github.io/tslint/rules для списка правил, которые вы можете включить. Есть несколько проектов, которые могут восполнить пробел в TSLint, поскольку в ESLint есть еще несколько правил, в основном:

2. Конфигурация кода VS

Код

VS имеет расширение для ESLint и расширение для TSLint . Какой бы вариант вы ни выбрали, вы можете установить это расширение, и оно будет зависеть от конфигурации вашего проекта.

Также неплохо добавить файл .vscode/settings.json для точной настройки поведения вашего проекта в VS Code. Специально для TSLint, по крайней мере, этот параметр помогает:

{
    "tslint.alwaysShowRuleFailuresAsWarnings": true
}

Это заставит VS Code всегда показывать правила TSLint с зелеными волнистыми буквами вместо красного, чтобы вы могли понять, что такое жалоба TypeScript (красная) стих жалобы TSLint (зеленая) .

3. Красивее

Отличный выбор! И ESLint, и TSLint имеют наборы правил по умолчанию, которые можно расширить, чтобы отключить все правила lint, которые могут конфликтовать или иным образом быть избыточными с помощью Prettier.

Для ESLint см. Эту страницу: https://prettier.io/docs/en/eslint.html. В итоге вы можете либо использовать eslint-plugin-prettier, чтобы ESLint запускал сам Prettier, либо использовать пакет eslint-config-prettier для отключения правил форматирования ESLint.

В вашем .eslintrc.json:

{
  "extends": ["prettier"]
}

Для TSLint доступно только tslint-config-prettier, которое можно использовать для отключения правил форматирования TSLint. https://www.npmjs.com/package/tslint-config-prettier.

В вашем tslint.json вы можете расширить пакет tslint-config-prettier:

{
  "extends": [
    "tslint-config-prettier"
  ]
}
...