Jonathan002
Jonathan002

Reputation: 10358

`Tslint --fix` does not autofix but instead generates lint problems as console errors

I'm using the Angular starter kit

and I'm trying to get tslint to autofix all my lint problems with the --fix flag.

I'm running the script: npm run tslint --fix src/**/*.ts

It just generates the same error that I'm already being told about in tslint and not autofixing it:

console output:

ERROR: src/app/app-routing.module.ts[10, 5]: comment must start with a space
ERROR: src/app/app-routing.module.ts[2, 20]: Too many spaces before 'from'

Am I missing something that allows it to implement the changes?

My versions are:

"tslint": "^5.6.0"  
"codelyzer": "^3.1.2"

Question: How can I get tslint to implement autofix to my lint errors?

Upvotes: 5

Views: 11939

Answers (2)

Ebraheem Alrabeea
Ebraheem Alrabeea

Reputation: 2250

Update library tslint and codelyzer to latest.

and then use this command:

tslint --fix src/**/*.ts -t verbose without using npm run

after complete, it will show to you the unfixable problems so you have to fix it manually.

You can also add it to scripts in package.json like this:

"lint-fix": "tslint --fix src/**/*.ts -t verbose"

Upvotes: 0

Mike Patrick
Mike Patrick

Reputation: 11006

Unfortunately, not all linting violations are auto-fixable. You can see which rules are auto-fixable here by looking for the Has Fixer tag.

My guess is that "comment must start with a space" is governed by the comment-format rule, which is not auto-fixable.

I'm not sure which rule is causing your second error, but it is most likely also not auto-fixable.

Here's a snippet you can run tslint --fix against to verify that some violations are fixed, and others are not.

//no var keyword (comment does not start with space)
var x: string = 'x';
console.log(x);

// array-type
let y: String[] = [];
console.log(y);

// ban-single-arg-parens
['1', '2'].filter((arg) => {
    console.log(arg);
});

// semicolon
let z: string = ''
console.log(z);

// no unused variable
let a: string = '';

// trailing comma
let list = ['1', '2', ];

// missing trailing comma
let obj = [
    1,
    2
];

Rules to include when linting the above file:

"semicolon": [true, "always"],
"trailing-comma": [true, {"multiline": "always", "singleline": "never"}],
"array-type": [true, "array-generic"],
"arrow-parens": [true, "ban-single-arg-parens"],

It's tempting to think that all whitespace errors would be auto-fixable, and perhaps they should be. Sadly, they're not.

Upvotes: 6

Related Questions