Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/rules/converters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { convertBanTypes } from "./converters/ban-types";
import { convertBinaryExpressionOperandOrder } from "./converters/binary-expression-operand-order";
import { convertCallableTypes } from "./converters/callable-types";
import { convertClassName } from "./converters/class-name";
import { convertCommentFormat } from "./converters/comment-format";
import { convertCurly } from "./converters/curly";
import { convertCyclomaticComplexity } from "./converters/cyclomatic-complexity";
import { convertEofline } from "./converters/eofline";
Expand Down Expand Up @@ -139,6 +140,7 @@ export const converters = new Map([
["binary-expression-operand-order", convertBinaryExpressionOperandOrder],
["callable-types", convertCallableTypes],
["class-name", convertClassName],
["comment-format", convertCommentFormat],
["curly", convertCurly],
["cyclomatic-complexity", convertCyclomaticComplexity],
["eofline", convertEofline],
Expand Down
53 changes: 53 additions & 0 deletions src/rules/converters/comment-format.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { RuleConverter } from "../converter";

type CommentFormatOptions = {
"ignore-words": string[];
"ignore-pattern": string;
};

export const CapitalizedIgnoreMessage = "Only accepts a single string pattern to be ignored.";

export const convertCommentFormat: RuleConverter = tslintRule => {
const capitalizedRuleArguments: string[] = [];
const spaceCommentRuleArguments: string[] = [];
const capitalizedNotices: string[] = [];

const hasCheckSpace = tslintRule.ruleArguments.includes("check-space");
const hasCheckLowercase = tslintRule.ruleArguments.includes("check-lowercase");
const hasCheckUppercase = tslintRule.ruleArguments.includes("check-uppercase");

if (!hasCheckSpace) {
spaceCommentRuleArguments.push("never");
}

if (hasCheckUppercase) {
capitalizedRuleArguments.push("always");
} else if (hasCheckLowercase) {
capitalizedRuleArguments.push("never");
}

if (typeof tslintRule.ruleArguments[tslintRule.ruleArguments.length - 1] === "object") {
const objectArgument: CommentFormatOptions =
tslintRule.ruleArguments[tslintRule.ruleArguments.length - 1];
if (
(objectArgument["ignore-words"] && objectArgument["ignore-words"].length) ||
objectArgument["ignore-pattern"]
) {
capitalizedNotices.push(CapitalizedIgnoreMessage);
}
}

return {
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: capitalizedRuleArguments,
notices: capitalizedNotices,
},
{
ruleName: "spaced-comment",
ruleArguments: spaceCommentRuleArguments,
},
],
};
};
129 changes: 129 additions & 0 deletions src/rules/converters/tests/comment-format.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import { convertCommentFormat, CapitalizedIgnoreMessage } from "../comment-format";

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

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: [],
notices: [],
},
{
ruleName: "spaced-comment",
ruleArguments: ["never"],
},
],
});
});

test("conversion with check-space argument", () => {
const result = convertCommentFormat({
ruleArguments: ["check-space"],
});

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: [],
notices: [],
},
{
ruleName: "spaced-comment",
ruleArguments: [],
},
],
});
});

test("conversion with check-lowercase arguments", () => {
const result = convertCommentFormat({
ruleArguments: ["check-lowercase"],
});

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: ["never"],
notices: [],
},
{
ruleName: "spaced-comment",
ruleArguments: ["never"],
},
],
});
});

test("conversion with ignore-pattern argument", () => {
const result = convertCommentFormat({
ruleArguments: [{ "ignore-pattern": "STD\\w{2,3}\\b" }],
});

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: [],
notices: [CapitalizedIgnoreMessage],
},
{
ruleName: "spaced-comment",
ruleArguments: ["never"],
},
],
});
});

test("conversion with ignore-words argument", () => {
const result = convertCommentFormat({
ruleArguments: [{ "ignore-words": ["TODO", "HACK"] }],
});

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: [],
notices: [CapitalizedIgnoreMessage],
},
{
ruleName: "spaced-comment",
ruleArguments: ["never"],
},
],
});
});

test("conversion with all arguments", () => {
const result = convertCommentFormat({
ruleArguments: [
"check-space",
"check-lowercase",
"check-uppercase",
"allow-trailing-lowercase",
{ "ignore-words": ["TODO", "HACK"], "ignore-pattern": "STD\\w{2,3}\\b" },
],
});

expect(result).toEqual({
rules: [
{
ruleName: "capitalized-comments",
ruleArguments: ["always"],
notices: [CapitalizedIgnoreMessage],
},
{
ruleName: "spaced-comment",
ruleArguments: [],
},
],
});
});
});