Я пытаюсь создать правило tslint, которое помешает нашим тестировщикам представить тест / тест, который включает .only
.
Так что, если они пытаются зафиксировать файл, который включает fixture.only
или test.only
, то фиксация завершится неудачно (я использую ловушки Husky + git для выполнения команды tslint при фиксации).
Я выяснил, как создать правило (что означает, что фиксация не удалась), но было бы неплохо также автоматически удалить этот код (исправление фиксации).
Есть ли способ сделать это?
Я не могу найти, как удалить текст из середины узла, только с самого начала.
Вот код JS
import * as ts from 'typescript';
import * as Lint from 'tslint';
import { IOptions } from 'tslint';
export class Rule extends Lint.Rules.AbstractRule {
public static FAILURE_STRING = "Something bad happened - you're not
following the rules";
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(new TestcafeNoOnly(sourceFile,
this.getOptions()));
}
}
// This worker visits every source file
class TestcafeNoOnly extends Lint.RuleWalker {
private readonly FAILURE_STRING = 'Testcafe no only';
private readonly PROHIBITED = ['fixture.only', 'test.only'];
private readonly REGEX = new RegExp('^(' + this.PROHIBITED.join('|') + ')$');
constructor(sourceFile: ts.SourceFile, options: IOptions) {
super(sourceFile, options);
}
public visitCallExpression(node: ts.CallExpression) {
const match =
node.expression.getText().replace(/(\r\n\t|\n|\r\t|\s)/gm, '').trim().match(this.REGEX);
if (match) {
const fix = Lint.Replacement.deleteText(node.getStart(), 5);
this.addFailureAt(node.getStart(), match[0].length, this.FAILURE_STRING, fix);
}
super.visitCallExpression(node);
}
}