Tslint: странное поведение при установке через [email protected], например, пробел «чек-разделитель» в JSDoc

Созданный на 27 сент. 2017  ·  25Комментарии  ·  Источник: palantir/tslint

Сообщение об ошибке

  • __TSLint версия__: 5.7.0
  • __TypeScript version__: 2.3.4
  • __ Запуск TSLint через __: (выберите один) CLI / Node.js API / VSCode / grunt-tslint / Atom / Visual Studio / и т. Д.
    Использование ng lint

Линтинг кода TypeScript

class TsLintBug {

  /**
   * Adds x and y.
   */
  public add = (x: number, y: number): number => {
    return x + y;
  };

  /**
   * Subtracts y from x.
   * <strong i="13">@returns</strong> {number}
   */
  public subtract = (x: number, y: number): number => {
    return x + y;
  };

}

с конфигурацией tslint.json :

    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],

Фактическое поведение

ERROR: C:/src/.../TsLintBug.ts[10, 3]: missing whitespace

Линтер хочет, чтобы комментарий jsdoc был изменен с /** на /* * . Это устраняет проблему, но нарушает работу файла jsdoc.

Другой способ «исправить» эту ошибку tslint:

  1. Удаление завершающего ; в методе add .
  2. Удаление строки @returns во втором jsdoc.

Обратите внимание: если вы поместите строку @returns в первый jsdoc и удалите ее из второго jsdoc, ошибка исчезнет.

Удаление строки "check-separator" из tslint.json также устраняет ошибку (мне потребовалось время, чтобы понять ее).

Ожидаемое поведение

Ошибок tslint нет.

External

Самый полезный комментарий

Мне удалось воспроизвести эту проблему с немного другим файлом в моем проекте.
``. {машинописный текст}
class TsLintBug {
общественное вычитание (x: число, y: число): число;

/ **

  • Вычитает y из x.
  • @param foo bar
  • @returns {number}
    * /
    общественное вычитание (x: число, y: число): число {
    вернуть x + y;
    }
    }
    `` ''
    Одно из различий между yarn и npm - это установленная версия tsutils. yarn 1.1.0 в настоящее время устанавливает 2.8.2, тогда как npm устанавливает 2.11.1 (оба удовлетворяют требованию tslint "^ 2.8.1"). Когда я обновился до исчезло . К сожалению, я не могу воспроизвести из чистого репо, только в моем довольно большом проекте, но я надеюсь, что это кому-то поможет.

Все 25 Комментарий

Я пытался воспроизвести это с помощью [email protected] и 2.5.2
Я не видел ошибок

Можете ли вы воспроизвести это без каких-либо сторонних инструментов, например, запустив tslint -c tslint.json tslintbug.ts непосредственно из командной строки?

У меня такая же проблема после очистки моих node_modules и переустановки сегодня днем. Удаление check-separator позволяет ворсу пройти, хотя это не идеально.

tslint 5.6.0
машинописный текст 2.3.4

Редактировать:

Как упоминалось ниже, если я заставлю yarn быть v1.0.2 и переустановить мои node_modules, то линтинг завершится без ошибок.

https://github.com/palantir/tslint/issues/3244#issuecomment -332142831 указывает на то, что при использовании пряжи 1.1.0 может возникнуть проблема.
Вы можете подтвердить, что использовали пряжу для установки tslint?

Да, я использовал пряжу для установки tslint. Я попытаюсь воспроизвести, используя как npm, так и yarn, без сторонних инструментов.

У меня была такая же проблема с пряжей 1.1.0, но не с пряжей 1.0.2 ... Кажется, это проблема пряжи.

Учитывая следующие файлы:

tslint.json

{
  "rules": {
    "whitespace": [
      true,
      "check-separator"
    ]
  } 
}

bug.ts

class TsLintBug {

  /**
   * Adds x and y.
   */
  public add = (x: number, y: number): number => {
    return x + y;
  };

  /**
   * Subtracts y from x.
   * <strong i="10">@returns</strong> {number}
   */
  public subtract = (x: number, y: number): number => {
    return x + y;
  };

}

Тогда я не могу воспроизвести ни npm 5.4.2, ни пряжу 1.1.0:

$ rm -rf package.json package-lock.json yarn.lock node_modules/ && npm --version && npm install typescript tslint && npm list && ./node_modules/.bin/tslint --config tslint.json bug.ts && echo "tslint success !"5.4.2
npm WARN saveError ENOENT: no such file or directory, open '/tmp/q/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/tmp/q/package.json'
npm WARN q No description
npm WARN q No repository field.
npm WARN q No README data
npm WARN q No license field.

+ [email protected]
+ [email protected]
added 31 packages in 1.87s
/tmp/q
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ └── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ └── [email protected] deduped
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected] deduped
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected] deduped
│ │ ├─┬ [email protected]
│ │ │ └── [email protected] deduped
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│   └── [email protected] deduped
└── [email protected]

tslint success !
$ rm -rf package.json package-lock.json yarn.lock node_modules/ && yarn add typescript tslint && ./node_modules/.bin/tslint --config tslint.json bug.ts && echo "tslint success !"
yarn add v1.1.0
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 31 new dependencies.
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
Done in 2.06s.
tslint success !

Мне удалось воспроизвести эту проблему с немного другим файлом в моем проекте.
``. {машинописный текст}
class TsLintBug {
общественное вычитание (x: число, y: число): число;

/ **

  • Вычитает y из x.
  • @param foo bar
  • @returns {number}
    * /
    общественное вычитание (x: число, y: число): число {
    вернуть x + y;
    }
    }
    `` ''
    Одно из различий между yarn и npm - это установленная версия tsutils. yarn 1.1.0 в настоящее время устанавливает 2.8.2, тогда как npm устанавливает 2.11.1 (оба удовлетворяют требованию tslint "^ 2.8.1"). Когда я обновился до исчезло . К сожалению, я не могу воспроизвести из чистого репо, только в моем довольно большом проекте, но я надеюсь, что это кому-то поможет.

В моем случае я также смог избавиться от ошибки, обновив свой deps. Я попытался определить, какой из них имел значение, но не смог. Если кто-то хочет разобраться в этом, я могу предоставить файлы до / после yarn.lock ...

Если это действительно связано с версией tsutils это должно быть исправлено после приземления # 3258.

Это все еще очень странно. Я не вносил никаких изменений в tsutils , связанных с этими сбоями.
Может еще есть разница в установленной версии машинописного текста?

Я попытался заставить версию своего проекта машинописного текста, tsutils и tslint в чистом проекте, но все еще не заметил ошибки. Когда в моем проекте возникла ошибка, utils.forEachTokenWithTrivia выдавал токен идентификатора для foo (в <strong i="6">@param</strong> foo ), но когда я обновил tsutils, он просто пропустил этот диапазон. Могу только догадываться, что это происходит с определенной конфигурацией пакетов. Я попытался изолировать их в файле блокировки своего проекта, но у меня есть несколько версий некоторых зависимостей, требуемых tslint, поэтому маловероятно, что я обнаружу волшебную комбинацию. Исходя из того, что решило мою проблему, было бы разумно закрыть эту проблему при обновлении tsutils .

utils.forEachTokenWithTrivia выдавал токен идентификатора для foo (в <strong i="7">@param</strong> foo )

Я уже думал, что примерно так и будет. Я не понимаю, почему это могло произойти. Функция исключает все, что связано с JSDoc.
Это возможно, только если что-то не так с перечислением ts.SyntaxKind ...

В любом случае, спасибо @nikklassen за то, что

В своем проекте я мог сделать следующие наблюдения:

  • tsutils не как прямая зависимость и машинописный текст 2.4.2
    -> ошибка
  • tsutils 2.11.2 как зависимость и машинописный текст 2.4.2
    -> нет ошибки
  • tsutils не как прямая зависимость и typescript> = 2.5.0
    -> нет ошибки

Во всех случаях пряжа получает цутилс 2.11.2.

НО ошибка, похоже, возникает только в том случае, если у меня есть зависимость, которая снова зависит от машинописного текста. В моем случае это был compodoc.

Установлено ли несколько разных версий машинописного текста? Мне нужно знать, какой пакет использует какую версию машинописного текста.

список пряжи v1.1.0
├─ @ compodoc / [email protected]
│ └─ [email protected]
├─ @ compodoc / [email protected]
│ └─ [email protected]
└─ [email protected]

Но tsutils также устанавливает свой собственный машинописный текст в версии 2.5.2, хотя это только devDependency.

Мне не удалось создать минимальное воспроизведение. Ошибочную установку я получил только с первой попытки. После этого в yarn были еще более странные ошибки.
Но кто-то уже воспроизвел проблему. См. Https://github.com/hexa00/repro-tslint-yarn
Вот проблема в трекере проблем с пряжей: https://github.com/yarnpkg/yarn/issues/4539

Может ли кто-нибудь в этой ветке проверить, что он работает с [email protected]?

Я могу подтвердить, что проблема, которую я видел, которая присутствовала с [email protected] , больше не возникает с

Большой. Давай закроем это.
Если у кого-то по-прежнему возникают похожие проблемы, оставьте комментарий или откройте новый вопрос.

Привет,

У меня сейчас эта проблема.

yarn -v       
1.3.2

а также

"devDependencies": {
    "tslint": "^5.9.1",
    "tslint-eslint-rules": "^4.1.1",
    "typescript": "^2.6.1"
},

код, в котором отображается ошибка:

/**
 * <strong i="13">@param</strong> {FilterOptions} options   "here i got issue"
 * <strong i="14">@return</strong> {PropertyDecorator}
 * <strong i="15">@constructor</strong>
 */
export function Filter(options: FilterOptions): PropertyDecorator;

Следует отметить, что это происходило только в экспортированных функциях. Другие частные функции в модуле (не экспортируемые) не имели его.

Есть ли здесь какие-нибудь депеши? Ошибка начала появляться после того, как я перешел на пряжу, с [email protected] не было проблемой.

заранее спасибо

Дэйвид

Это только начало происходить и с нами с yarn 1.3.2, в нашем случае я очень подозреваю, что это может быть связано с тем фактом, что мы начали импортировать частный пакет с правилами tslint в проект. Понижение до 1.0.1 исправляет это, но не до 1.2.1.

Сегодня я обновился до последней машинописной версии до 3.4, и это начало происходить и со мной. я на пряжи 1.15.2

хорошо, решил это. Я сделал yarn cache clean и переустановил, и теперь он работает.

Это случилось со мной.

Пытался изолировать мой проект от монорепозитория (с помощью lerna) и установить через npm. Ошибка по-прежнему сохраняется.
И npm, и yarn устанавливают tsutils 2.29.0.

import { FormGroup, ValidationErrors } from '@angular/forms';

/**
 * <strong i="9">@example</strong>
    ^... missing whitespace
 * const formGroup = this.formBuilder.group({
 *  field1: '',
 *  field2: '',
 * }, {
 *  validators: [testValue]
 * })
 */
export function testValue(formGroup: FormGroup): ValidationErrors | null {
 ...
 return null;
}

Как только я удаляю оператор импорта, ошибок не сообщается.

Ниже приведены мои текущие настройки.

yarn -v
1.16.0

package.json

{
  "devDependencies": {
    "tslint": "~5.16.0",
    "typescript": "~3.4.5"
  }
}

🤖 Бип-буп! 👉 TSLint устарел 👈 и вам следует перейти на typescript-eslint ! 🤖

🔒 Эта проблема заблокирована, чтобы предотвратить дальнейшие ненужные обсуждения. Спасибо! 👋

Была ли эта страница полезной?
0 / 5 - 0 рейтинги