Tslint: seltsames Verhalten bei der Installation über [email protected], zB Whitespace "check-separator" in JSDoc

Erstellt am 27. Sept. 2017  ·  25Kommentare  ·  Quelle: palantir/tslint

Fehlerbericht

  • __TSLint-Version__: 5.7.0
  • __TypeScript-Version__: 2.3.4
  • __Ausführen von TSLint über__: (wählen Sie eine aus) CLI / Node.js-API / VSCode / grunt-tslint / Atom / Visual Studio / etc
    Verwenden von ng lint

TypeScript-Code wird linted

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;
  };

}

mit tslint.json Konfiguration:

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

Tatsächliches Verhalten

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

Der Linter möchte, dass der jsdoc-Kommentar von /** auf /* * geändert wird. Was das Problem behebt, aber das jsdoc bricht.

Andere Problemumgehung, die diesen Tslint-Fehler "behebt":

  1. Entfernen des nachgestellten ; bei der Methode add .
  2. Entfernen der Zeile @returns im zweiten jsdoc.

Beachten Sie, dass der Fehler verschwindet, wenn Sie eine @returns Zeile in das erste jsdoc einfügen und sie aus dem zweiten jsdoc entfernen.

Das Entfernen der Zeile "check-separator" aus tslint.json lässt den Fehler auch verschwinden (ich habe eine Weile gebraucht, um das herauszufinden).

Erwartetes Verhalten

Keine Tslint-Fehler.

External

Hilfreichster Kommentar

Ich konnte dieses Problem mit einer etwas anderen Datei in meinem Projekt reproduzieren.
```.{Typoskript}
Klasse TsLintBug {
öffentlich subtrahieren(x: Zahl, y: Zahl): Zahl;

/**

  • Subtrahiert y von x.
  • @param foo bar
  • @returns {Zahl}
    */
    öffentlich subtrahieren(x: Zahl, y: Zahl): Zahl {
    x + y zurückgeben;
    }
    }
    ```
    Einer der Unterschiede zwischen Garn und npm ist die installierte Version von tsutils. Garn 1.1.0 installiert derzeit 2.8.2, während npm 2.11.1 installiert (beide erfüllen die Anforderung von tslint von "^2.8.1"). Als ich auf [email protected] aktualisiert habe, Ergebnis verschwunden ist . Leider kann ich nicht aus einem sauberen Repo reproduzieren, nur in meinem ziemlich großen Projekt, aber ich hoffe, das hilft jemandem.

Alle 25 Kommentare

Ich habe versucht , dies mit zu reproduzieren [email protected] und 2.5.2
Ich habe keinen Fehler gesehen

Können Sie dies ohne ein Drittanbieter-Tool reproduzieren, dh tslint -c tslint.json tslintbug.ts direkt von der Befehlszeile aus ausführen?

Ich habe das gleiche Problem, nachdem ich meine node_modules gelöscht und heute Nachmittag neu installiert habe. Das Entfernen von check-separator lässt die Fussel passieren, aber nicht ideal.

tslint 5.6.0
Typoskript 2.3.4

Bearbeiten:

Wenn ich, wie unten erwähnt, für Garn v1.0.2 erzwinge und meine node_modules neu installiere, wird das Linting ohne Fehler abgeschlossen.

https://github.com/palantir/tslint/issues/3244#issuecomment -332142831 zeigt an, dass bei der Verwendung von Garn 1.1.0 möglicherweise ein Problem vorliegt
Können Sie bestätigen, dass Sie Garn verwendet haben, um Tslint zu installieren?

Ja - ich habe Garn verwendet, um Tslint zu installieren. Ich werde versuchen, sowohl mit npm als auch mit Garn zu reproduzieren, ohne Tools von Drittanbietern.

Ich hatte das gleiche Problem mit Garn 1.1.0, aber nicht mit Garn 1.0.2 ... Dies scheint ein Garnproblem zu sein.

Dazu folgende Dateien:

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;
  };

}

Dann kann ich weder mit npm 5.4.2 noch mit Garn 1.1.0 reproduzieren:

$ 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 !

Ich konnte dieses Problem mit einer etwas anderen Datei in meinem Projekt reproduzieren.
```.{Typoskript}
Klasse TsLintBug {
öffentlich subtrahieren(x: Zahl, y: Zahl): Zahl;

/**

  • Subtrahiert y von x.
  • @param foo bar
  • @returns {Zahl}
    */
    öffentlich subtrahieren(x: Zahl, y: Zahl): Zahl {
    x + y zurückgeben;
    }
    }
    ```
    Einer der Unterschiede zwischen Garn und npm ist die installierte Version von tsutils. Garn 1.1.0 installiert derzeit 2.8.2, während npm 2.11.1 installiert (beide erfüllen die Anforderung von tslint von "^2.8.1"). Als ich auf [email protected] aktualisiert habe, Ergebnis verschwunden ist . Leider kann ich nicht aus einem sauberen Repo reproduzieren, nur in meinem ziemlich großen Projekt, aber ich hoffe, das hilft jemandem.

In meinem Fall konnte ich den Fehler auch durch ein Upgrade meiner Deps beheben. Ich versuchte zu isolieren, was einen Unterschied machte, konnte es aber nicht. Wenn jemand dem auf den Grund gehen möchte, könnte ich vorher/nachher-Garn.lock-Dateien bereitstellen ...

Wenn dies wirklich mit der Version von tsutils , sollte es behoben werden, sobald #3258 landet.

Das ist immer noch sehr seltsam. Ich habe in tsutils keine Änderungen vorgenommen, die mit diesen Fehlern zusammenhängen.
Vielleicht gibt es auch einen Unterschied in der installierten Typoskriptversion?

Ich habe versucht, die Version von Typoskript, tsutils und tslint meines Projekts in einem sauberen Projekt zu erzwingen, habe den Fehler jedoch immer noch nicht beobachtet. Als der Fehler in meinem Projekt auftrat, lieferte utils.forEachTokenWithTrivia ein Bezeichnertoken für foo (in <strong i="6">@param</strong> foo ), aber als ich tsutils aktualisierte, wurde dieser Bereich einfach übersprungen. Ich kann nur vermuten, dass dies bei einer bestimmten Konfiguration von Paketen auftritt. Ich habe versucht, sie in der Lockfile meines Projekts zu isolieren, aber ich habe mehrere Versionen einiger der Abhängigkeiten, die tslint erfordert, daher scheint es unwahrscheinlich, dass ich die magische Kombination entdecke. Basierend auf dem, was mein Problem behoben hat, wäre es vernünftig, dieses Problem zu schließen, wenn tsutils aktualisiert wird.

utils.forEachTokenWithTrivia ein Identifikator-Token für foo zurückgegeben (in <strong i="7">@param</strong> foo )

Ich dachte schon, dass so etwas der Fall sein würde. Ich bin verwirrt, warum das passieren konnte. Die Funktion schließt alles aus, was mit JSDoc zu tun hat.
Es ist nur möglich, wenn etwas mit der Aufzählung ts.SyntaxKind durcheinander...

Wie auch immer, danke @nikklassen , dass hast . Hoffen wir, dass dies mit der nächsten Version von tslint behoben wird.

In meinem Projekt konnte ich folgende Beobachtungen machen:

  • tsutils nicht als direkte Abhängigkeit & Typoskript 2.4.2
    -> Fehler
  • tsutils 2.11.2 als Abhängigkeit & Typoskript 2.4.2
    -> kein Fehler
  • tsutils nicht als direkte Abhängigkeit & Typoskript >= 2.5.0
    -> kein Fehler

In allen Fällen bekommt Garn tsutils 2.11.2.

ABER der Fehler scheint nur aufzutreten, wenn ich eine Abhängigkeit habe, die wieder eine Abhängigkeit von Typoskript hat. In meinem Fall war das Compodoc.

Sind mehrere verschiedene Versionen von Typoskript installiert? Ich müsste wissen, welches Paket welche Typoskriptversion verwendet.

Garnliste v1.1.0
@compodoc/ compodoc @
[email protected]
@compodoc/ [email protected]
[email protected]
└─ [email protected]

Aber tsutils installiert in Version 2.5.2 auch ein eigenes Typoskript, obwohl es nur eine devDependency ist.

Ich war nicht in der Lage, eine minimale Repro zu erstellen. Ich habe nur beim ersten Versuch die fehlerhafte Installation bekommen. Danach hatte yarn einige noch seltsamere Fehler.
Aber jemand anderes hat das Problem schon reproduziert. Siehe https://github.com/hexa00/repro-tslint-yarn
Hier ist das Problem im Garnproblem-Tracker: https://github.com/yarnpkg/yarn/issues/4539

Kann jemand in diesem Thread überprüfen, ob es mit [email protected] funktioniert?

Ich kann bestätigen, dass das Problem, das ich bei [email protected] festgestellt habe, bei auftritt

Groß. Schließen wir das.
Wenn noch jemand ähnliche Probleme hat, hinterlasse bitte einen Kommentar oder eröffne ein neues Problem.

Hi,

Ich bekomme dieses Problem jetzt.

yarn -v       
1.3.2

und

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

Code, bei dem der Fehler angezeigt wird:

/**
 * <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;

Zu beachten ist, dass dies nur in den exportierten Funktionen geschah. Andere private Funktionen im Modul (nicht exportiert) hatten es nicht.

Gibt es irgendwelche Deps, die ich hier erzwingen könnte. Fehler traten auf, nachdem ich zu Garn gewechselt war, mit [email protected] war kein Problem.

vielen Dank im Voraus

David

Bei Garn 1.3.2 ist dies auch gerade bei uns passiert, in unserem Fall bin ich sehr misstrauisch, dass es möglicherweise damit zusammenhängt, dass wir begonnen haben, ein privates Paket mit Tslint-Regeln in das Projekt zu importieren. Ein Downgrade auf 1.0.1 behebt das Problem, aber nicht auf 1.2.1.

Ich habe heute auf das neueste Typoskript auf 3.4 aktualisiert, und das passierte auch mir. Ich bin auf Garn 1.15.2

ok, gelöst. Ich habe yarn cache clean und neu installiert und es funktioniert jetzt.

Das passiert mir.

Ich habe versucht, mein Projekt von einem Monorepo zu isolieren (mit lerna) und über npm zu installieren. Fehler weiterhin bestehen.
Sowohl npm als auch Garn installieren 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;
}

Sobald ich die Importanweisung entferne, wird kein Fehler gemeldet.

Nachfolgend mein aktuelles Setup.

yarn -v
1.16.0

Paket.json

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

🤖 Beep boop! 👉 TSLint ist veraltet 👈 und Sie sollten zu typescript-eslint wechseln ! 🤖

🔒 Dieses Problem wird gesperrt, um weitere unnötige Diskussionen zu vermeiden. Dankeschön! 👋

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen