Skip to content

Commit 325789d

Browse files
KingDarBojaJosh Goldberg
authored and
Josh Goldberg
committed
Add comment-format converter (#240)
* Add comment-format converter * Fix lint error and provide type to comment format options * Remove unnecessary check at comment-format converter * Provide extra test to ignore-words on comment-format
1 parent b7945eb commit 325789d

File tree

3 files changed

+204
-0
lines changed

3 files changed

+204
-0
lines changed

src/rules/converters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { convertBanTypes } from "./converters/ban-types";
99
import { convertBinaryExpressionOperandOrder } from "./converters/binary-expression-operand-order";
1010
import { convertCallableTypes } from "./converters/callable-types";
1111
import { convertClassName } from "./converters/class-name";
12+
import { convertCommentFormat } from "./converters/comment-format";
1213
import { convertCurly } from "./converters/curly";
1314
import { convertCyclomaticComplexity } from "./converters/cyclomatic-complexity";
1415
import { convertEofline } from "./converters/eofline";
@@ -140,6 +141,7 @@ export const converters = new Map([
140141
["binary-expression-operand-order", convertBinaryExpressionOperandOrder],
141142
["callable-types", convertCallableTypes],
142143
["class-name", convertClassName],
144+
["comment-format", convertCommentFormat],
143145
["curly", convertCurly],
144146
["cyclomatic-complexity", convertCyclomaticComplexity],
145147
["eofline", convertEofline],
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { RuleConverter } from "../converter";
2+
3+
type CommentFormatOptions = {
4+
"ignore-words": string[];
5+
"ignore-pattern": string;
6+
};
7+
8+
export const CapitalizedIgnoreMessage = "Only accepts a single string pattern to be ignored.";
9+
10+
export const convertCommentFormat: RuleConverter = tslintRule => {
11+
const capitalizedRuleArguments: string[] = [];
12+
const spaceCommentRuleArguments: string[] = [];
13+
const capitalizedNotices: string[] = [];
14+
15+
const hasCheckSpace = tslintRule.ruleArguments.includes("check-space");
16+
const hasCheckLowercase = tslintRule.ruleArguments.includes("check-lowercase");
17+
const hasCheckUppercase = tslintRule.ruleArguments.includes("check-uppercase");
18+
19+
if (!hasCheckSpace) {
20+
spaceCommentRuleArguments.push("never");
21+
}
22+
23+
if (hasCheckUppercase) {
24+
capitalizedRuleArguments.push("always");
25+
} else if (hasCheckLowercase) {
26+
capitalizedRuleArguments.push("never");
27+
}
28+
29+
if (typeof tslintRule.ruleArguments[tslintRule.ruleArguments.length - 1] === "object") {
30+
const objectArgument: CommentFormatOptions =
31+
tslintRule.ruleArguments[tslintRule.ruleArguments.length - 1];
32+
if (
33+
(objectArgument["ignore-words"] && objectArgument["ignore-words"].length) ||
34+
objectArgument["ignore-pattern"]
35+
) {
36+
capitalizedNotices.push(CapitalizedIgnoreMessage);
37+
}
38+
}
39+
40+
return {
41+
rules: [
42+
{
43+
ruleName: "capitalized-comments",
44+
ruleArguments: capitalizedRuleArguments,
45+
notices: capitalizedNotices,
46+
},
47+
{
48+
ruleName: "spaced-comment",
49+
ruleArguments: spaceCommentRuleArguments,
50+
},
51+
],
52+
};
53+
};
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import { convertCommentFormat, CapitalizedIgnoreMessage } from "../comment-format";
2+
3+
describe(convertCommentFormat, () => {
4+
test("conversion without arguments", () => {
5+
const result = convertCommentFormat({
6+
ruleArguments: [],
7+
});
8+
9+
expect(result).toEqual({
10+
rules: [
11+
{
12+
ruleName: "capitalized-comments",
13+
ruleArguments: [],
14+
notices: [],
15+
},
16+
{
17+
ruleName: "spaced-comment",
18+
ruleArguments: ["never"],
19+
},
20+
],
21+
});
22+
});
23+
24+
test("conversion with check-space argument", () => {
25+
const result = convertCommentFormat({
26+
ruleArguments: ["check-space"],
27+
});
28+
29+
expect(result).toEqual({
30+
rules: [
31+
{
32+
ruleName: "capitalized-comments",
33+
ruleArguments: [],
34+
notices: [],
35+
},
36+
{
37+
ruleName: "spaced-comment",
38+
ruleArguments: [],
39+
},
40+
],
41+
});
42+
});
43+
44+
test("conversion with check-lowercase arguments", () => {
45+
const result = convertCommentFormat({
46+
ruleArguments: ["check-lowercase"],
47+
});
48+
49+
expect(result).toEqual({
50+
rules: [
51+
{
52+
ruleName: "capitalized-comments",
53+
ruleArguments: ["never"],
54+
notices: [],
55+
},
56+
{
57+
ruleName: "spaced-comment",
58+
ruleArguments: ["never"],
59+
},
60+
],
61+
});
62+
});
63+
64+
test("conversion with ignore-pattern argument", () => {
65+
const result = convertCommentFormat({
66+
ruleArguments: [{ "ignore-pattern": "STD\\w{2,3}\\b" }],
67+
});
68+
69+
expect(result).toEqual({
70+
rules: [
71+
{
72+
ruleName: "capitalized-comments",
73+
ruleArguments: [],
74+
notices: [CapitalizedIgnoreMessage],
75+
},
76+
{
77+
ruleName: "spaced-comment",
78+
ruleArguments: ["never"],
79+
},
80+
],
81+
});
82+
});
83+
84+
test("conversion with empty ignore-words argument", () => {
85+
const result = convertCommentFormat({
86+
ruleArguments: [{ "ignore-words": [] }],
87+
});
88+
89+
expect(result).toEqual({
90+
rules: [
91+
{
92+
ruleName: "capitalized-comments",
93+
ruleArguments: [],
94+
notices: [],
95+
},
96+
{
97+
ruleName: "spaced-comment",
98+
ruleArguments: ["never"],
99+
},
100+
],
101+
});
102+
});
103+
104+
test("conversion with ignore-words argument", () => {
105+
const result = convertCommentFormat({
106+
ruleArguments: [{ "ignore-words": ["TODO", "HACK"] }],
107+
});
108+
109+
expect(result).toEqual({
110+
rules: [
111+
{
112+
ruleName: "capitalized-comments",
113+
ruleArguments: [],
114+
notices: [CapitalizedIgnoreMessage],
115+
},
116+
{
117+
ruleName: "spaced-comment",
118+
ruleArguments: ["never"],
119+
},
120+
],
121+
});
122+
});
123+
124+
test("conversion with all arguments", () => {
125+
const result = convertCommentFormat({
126+
ruleArguments: [
127+
"check-space",
128+
"check-lowercase",
129+
"check-uppercase",
130+
"allow-trailing-lowercase",
131+
{ "ignore-words": ["TODO", "HACK"], "ignore-pattern": "STD\\w{2,3}\\b" },
132+
],
133+
});
134+
135+
expect(result).toEqual({
136+
rules: [
137+
{
138+
ruleName: "capitalized-comments",
139+
ruleArguments: ["always"],
140+
notices: [CapitalizedIgnoreMessage],
141+
},
142+
{
143+
ruleName: "spaced-comment",
144+
ruleArguments: [],
145+
},
146+
],
147+
});
148+
});
149+
});

0 commit comments

Comments
 (0)