8000 Added no-unused-expression converter by asponda · Pull Request #205 · typescript-eslint/tslint-to-eslint-config · GitHub
[go: up one dir, main page]

Skip to content
8000

Added no-unused-expression converter #205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3 changes: 2 additions & 1 deletion src/rules/converters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ import { convertNoUnnecessaryQualifier } from "./converters/no-unnecessary-quali
import { convertNoUnnecessarySemicolons } from "./converters/no-unnecessary-semicolons";
import { convertNoUnnecessaryTypeAssertion } from "./converters/no-unnecessary-type-assertion";
import { convertNoUnsafeFinally } from "./converters/no-unsafe-finally";
import { convertNoUnusedExpression } from "./converters/no-unused-expression";
import { convertNoUseBeforeDeclare } from "./converters/no-use-before-declare";
import { convertNoVarKeyword } from "./converters/no-var-keyword";
import { convertNoVarRequires } from "./converters/no-var-requires";
Expand Down Expand Up @@ -215,6 +216,7 @@ export const converters = new Map([
["no-unnecessary-semicolons", convertNoUnnecessarySemicolons],
["no-unnecessary-type-assertion", convertNoUnnecessaryTypeAssertion],
["no-unsafe-finally", convertNoUnsafeFinally],
["no-unused-expression", convertNoUnusedExpression],
["no-use-before-declare", convertNoUseBeforeDeclare],
["no-var-keyword", convertNoVarKeyword],
["no-var-requires", convertNoVarRequires],
Expand Down Expand Up @@ -257,7 +259,6 @@ export const converters = new Map([
// ["ban", convertBan], // no-restricted-properties
// ["import-blacklist", convertImportBlacklist], // no-restricted-imports
// ["no-duplicate-variable", convertNoDuplicateVariable], // no-redeclare
// ["no-unused-expression", convertNoUnusedExpression], // no-unused-expressions
// ["no-void-expression", convertNoVoidExpression], // (no exact equivalent)
// ["quotemark", convertQuotemark], // quotes
// ["triple-equals", convertTripleEquals], // eqeqeq
Expand Down
46 changes: 46 additions & 0 deletions src/rules/converters/no-unused-expression.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { RuleConverter } from "../converter";

export const convertNoUnusedExpression: RuleConverter = tslintRule => {
return {
rules: [
{
ruleName: "no-unused-expressions",
...collectNoticesAndArguments(tslintRule.ruleArguments),
},
],
};
};

const collectNoticesAndArguments = (tsLintRuleArguments: any[]) => {
const noAllowNewNotice = `The TSLint optional config "allow-new" is the default ESLint behavior and will no longer be ignored.`;

if (tsLintRuleArguments.length === 0) {
return {
notices: [noAllowNewNotice],
};
}

const notices = [];
const ruleArguments: any[] = [];

if (tsLintRuleArguments.includes("allow-tagged-template")) {
ruleArguments.push({ allowTaggedTemplates: true });
}

if (tsLintRuleArguments.includes("allow-fast-null-checks")) {
ruleArguments.push({ allowShortCircuit: true });
}

if (!tsLintRuleArguments.includes("allow-new")) {
notices.push(noAllowNewNotice);
}

return {
...(notices.length > 0 && { notices }),
...(ruleArguments.length > 0 && {
ruleArguments: [
ruleArguments.reduce((value, current) => Object.assign(value, current), {}),
],
}),
};
};
83 changes: 83 additions & 0 deletions src/rules/converters/tests/no-unused-expression.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { convertNoUnusedExpression } from "../no-unused-expression";

describe(convertNoUnusedExpression, () => {
test("conversion without arguments", () => {
const result = convertNoUnusedExpression({
ruleArguments: [],
});

expect(result).toEqual({
rules: [
{
ruleName: "no-unused-expressions",
notices: [
`The TSLint optional config "allow-new" is the default ESLint behavior and will no longer be ignored.`,
],
},
],
});
});

test("conversion without allow-new argument", () => {
const result = convertNoUnusedExpression({
ruleArguments: ["allow-fast-null-checks"],
});

expect(result).toEqual({
rules: [
{
ruleName: "no-unused-expressions",
ruleArguments: [{ allowShortCircuit: true }],
notices: [
`The TSLint optional config "allow-new" is the default ESLint behavior and will no longer be ignored.`,
],
},
],
});
});

test("conversion with allow-tagged-template argument", () => {
const result = convertNoUnusedExpression({
ruleArguments: ["allow-new", "allow-tagged-template"],
});

expect(result).toEqual({
rules: [
{
ruleArguments: [{ allowTaggedTemplates: true }],
ruleName: "no-unused-expressions",
},
],
});
});

test("conversion with allow-fast-null-checks argument", () => {
const result = convertNoUnusedExpression({
ruleArguments: ["allow-new", "allow-fast-null-checks"],
});

expect(result).toEqual({
rules: [
{
ruleName: "no-unused-expressions",
ruleArguments: [{ allowShortCircuit: true }],
},
],
});
});

test("conversion with multiple arguments", () => {
const result = convertNoUnusedExpression({
ruleArguments: ["allow-new", "allow-tagged-template", "allow-fast-null-checks"],
});

expect(result).toEqual({
rules: [
{
ruleName: "no-unused-expressions",
ruleArguments: [{ allowTaggedTemplates: true, allowShortCircuit: true }],
},
],
});
});
});
0