Почему Visual Studio 2017 не использует ESLint для файлов TypeScript? - PullRequest
1 голос
/ 30 апреля 2019

Я создал веб-приложение в Visual Studio 2017 и установил зависимости.

package.json

{
    "version": "1.0.0",
    "name": "asp.net",
    "private": true,
    "devDependencies": {
        "@typescript-eslint/parser": "1.7.0",
        "eslint": "5.16.0",
        "typescript": "3.4.5"
    }
}

Я настроил ESLint для TypeScript, используя последние передовые практики, т.е. @typescript-eslint/parser.

.eslintrc

{
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": 6,
        "sourceType": "module",
        "extends": [ "eslint:recommended" ]
    },
    "rules": {
        "quotes": [ "error", "double" ]
    }
}

(Обратите внимание на правило, требующее двойных кавычек.)

Я создал два файла, test_js.js и test_ts.ts, с одинаковым содержанием:

var x = 'Hello, world';

Но только файл JS показывает ошибку кавычки:

Visual Studio screenshot showing red squiggles under the signle-quoted strings, but only in the JS file - there are no squiggles in the TS file.

Почему Visual Studio не связывает мой файл TypeScript?

(Перекрестная публикация в сообществе разработчиков Visual Studio: https://developercommunity.visualstudio.com/content/problem/552855/why-doesnt-visual-studio-2017-use-eslint-on-typesc.html)

1 Ответ

0 голосов
/ 06 мая 2019

Я построил временный обходной путь.

Visual Studio 2017, похоже, соответствует настройкам TSLint, предоставленным в tsconfig.json. К сожалению, он пока не принимает правила TypeScript ESLint. Поэтому, если я хочу, чтобы TypeScript работал в редакторе VS, я должен использовать старую конфигурацию стиля tslint.json.

tsconfig.json

{
    "compilerOptions": {
        "plugins": [
            {"name": "typescript-tslint-plugin"}
        ],
        "target": "es5"
    },
    "exclude": [
        "node_modules"
    ]
}

tslint.json :

{
    "rules": {
        "quotemark": [true, "double"]
    }
}

Для будущего (когда ESLint в конечном итоге поглощает TSLint), я хочу, чтобы мой процесс сборки использовал ESLint.

.michael-eslintrc (я назвал его так, чтобы VS не использовал эту конфигурацию для линкования файлов JS):

{
    "plugins": [
        "@typescript-eslint/tslint"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": 6,
        "extends": [ "eslint:recommended" ],
        "project": "tsconfig.json",
        "sourceType": "module"
    },
    "rules": {
        "@typescript-eslint/tslint/config": [
            "warn",
            {
                "lintFile": "tslint.json"
            }
        ]
    }
}

Это устанавливает все необходимые мне зависимости.

package.json

{
    "version": "1.0.0",
    "name": "asp.net",
    "private": true,
    "devDependencies": {
        "@typescript-eslint/parser": "1.7.0",
        "@typescript-eslint/eslint-plugin-tslint": "1.7.0",
        "eslint": "5.16.0",
        "tslint": "5.16.0",
        "typescript": "3.4.5",
        "typescript-tslint-plugin": "0.3.1"
    }
}

Я настроил Webpack для использования этой конфигурации ESLint для линтинга. Таким образом, Visual Studio и Webpack в конечном итоге используют один и тот же конфигурационный файл tslint.json, но они ведут себя одинаково по разным путям.

У этого метода есть несколько недостатков:

  1. Я не могу использовать новые собственные для ESLint правила для связывания TypeScript
  2. Мне придется обновить конфиг, как только VS наконец-то поддержит TS linting с ESLint
  3. Это только устанавливает правило lint для TS, а не JS - у меня были проблемы с получением VS для обработки .eslintrc, даже без правил TS (меня это не сильно беспокоит, потому что я конвертирую старый проект в TS - много файлов потерпит неудачу, если JS будут помечены)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...