ilib-lint 2.7.2 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -5
- package/package.json +6 -4
- package/src/FileType.js +172 -38
- package/src/LintableFile.js +105 -3
- package/src/ParserManager.js +47 -4
- package/src/PluginManager.js +51 -7
- package/src/Project.js +63 -17
- package/src/SerializerManager.js +155 -0
- package/src/TransformerManager.js +154 -0
- package/src/config/README.md +96 -4
- package/src/index.js +49 -8
- package/src/plugins/BuiltinPlugin.js +13 -1
- package/src/plugins/ErrorFilterTransformer.js +59 -0
- package/src/plugins/LineSerializer.js +6 -4
- package/src/plugins/XliffParser.js +0 -4
- package/src/plugins/XliffSerializer.js +4 -2
- package/src/plugins/string/StringFixCommand.js +2 -2
- package/src/plugins/string/StringParser.js +1 -1
- package/src/plugins/string/StringSerializer.js +7 -4
- package/src/rules/DeclarativeResourceRule.js +2 -2
- package/src/rules/LineRegexpChecker.js +1 -1
- package/src/rules/ResourceCamelCase.js +1 -3
- package/src/rules/ResourceDNTTerms.js +1 -1
- package/src/rules/ResourceEdgeWhitespace.js +1 -1
- package/src/rules/ResourceICUPluralTranslation.js +1 -1
- package/src/rules/ResourceRule.js +4 -4
- package/src/rules/ResourceSnakeCase.js +1 -3
- package/src/rules/ResourceSourceChecker.js +2 -2
- package/src/rules/ResourceTargetChecker.js +2 -2
- package/src/formatters/__tests__/ConfigBasedFormatter.test.js +0 -61
- package/src/rules/__tests__/ResourceCamelCase.test.js +0 -180
- package/src/rules/__tests__/ResourceSnakeCase.test.js +0 -187
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import {Result} from "ilib-lint-common";
|
|
2
|
-
import ResourceCamelCase from "../ResourceCamelCase.js";
|
|
3
|
-
import {ResourceString} from "ilib-tools-common";
|
|
4
|
-
|
|
5
|
-
describe("ResourceCamelCase", () => {
|
|
6
|
-
test("creates ResourceCamelCase rule instance", () => {
|
|
7
|
-
const rule = new ResourceCamelCase({})
|
|
8
|
-
|
|
9
|
-
expect(rule).toBeInstanceOf(ResourceCamelCase);
|
|
10
|
-
expect(rule.getName()).toBe("resource-camel-case");
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
test.each([
|
|
14
|
-
undefined,
|
|
15
|
-
null,
|
|
16
|
-
true,
|
|
17
|
-
100,
|
|
18
|
-
'string',
|
|
19
|
-
{},
|
|
20
|
-
() => {},
|
|
21
|
-
])("handles invalid `except` parameter gracefully (and does not break in runtime)", (invalidExcept) => {
|
|
22
|
-
const rule = new ResourceCamelCase({param: {except: invalidExcept}});
|
|
23
|
-
|
|
24
|
-
const resource = createTestResourceString({source: "camelCaseException", target: "someCamelCaseTarget"});
|
|
25
|
-
const result = rule.matchString({
|
|
26
|
-
source: resource.source,
|
|
27
|
-
target: resource.target,
|
|
28
|
-
file: resource.pathName,
|
|
29
|
-
resource
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
expect(result).toBeInstanceOf(Result);
|
|
33
|
-
expect(result.rule).toBeInstanceOf(ResourceCamelCase);
|
|
34
|
-
expect(result.severity).toEqual("error");
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test.each([
|
|
38
|
-
{source: ""},
|
|
39
|
-
{source: undefined},
|
|
40
|
-
{source: null},
|
|
41
|
-
])("returns `undefined` if source string is empty ($source)", ({source}) => {
|
|
42
|
-
const rule = new ResourceCamelCase({});
|
|
43
|
-
const resource = createTestResourceString({source, target: "some_target"});
|
|
44
|
-
|
|
45
|
-
const result = rule.matchString({
|
|
46
|
-
source: resource.source,
|
|
47
|
-
target: resource.target,
|
|
48
|
-
file: resource.pathName,
|
|
49
|
-
resource
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
expect(result).toBeUndefined();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test.each([
|
|
56
|
-
{target: ""},
|
|
57
|
-
{target: undefined},
|
|
58
|
-
{target: null},
|
|
59
|
-
])("returns `undefined` if target string is empty ($target)", ({target}) => {
|
|
60
|
-
const rule = new ResourceCamelCase({});
|
|
61
|
-
const resource = createTestResourceString({source: "some_source", target});
|
|
62
|
-
|
|
63
|
-
const result = rule.matchString({
|
|
64
|
-
source: resource.source,
|
|
65
|
-
target: resource.target,
|
|
66
|
-
file: resource.pathName,
|
|
67
|
-
resource
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
expect(result).toBeUndefined();
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
test("returns `undefined` if source string is an exception", () => {
|
|
74
|
-
const options = {param: {except: ["camelCaseException"]}}
|
|
75
|
-
const rule = new ResourceCamelCase(options);
|
|
76
|
-
const resource = createTestResourceString({source: "camelCaseException", target: "some_target"});
|
|
77
|
-
|
|
78
|
-
const result = rule.matchString({
|
|
79
|
-
source: resource.source,
|
|
80
|
-
target: resource.target,
|
|
81
|
-
file: resource.pathName,
|
|
82
|
-
resource
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
expect(result).toBeUndefined();
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test("returns `undefined` if source string is NOT in camel case", () => {
|
|
89
|
-
const rule = new ResourceCamelCase({});
|
|
90
|
-
const resource = createTestResourceString({source: "some source", target: "some target"});
|
|
91
|
-
|
|
92
|
-
const result = rule.matchString({
|
|
93
|
-
source: resource.source,
|
|
94
|
-
target: resource.target,
|
|
95
|
-
file: resource.pathName,
|
|
96
|
-
resource
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
expect(result).toBeUndefined();
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test("returns `undefined` if source is in camel case and target is the same", () => {
|
|
103
|
-
const rule = new ResourceCamelCase({});
|
|
104
|
-
const resource = createTestResourceString({source: "camelCase", target: "camelCase"});
|
|
105
|
-
|
|
106
|
-
const result = rule.matchString({
|
|
107
|
-
source: resource.source,
|
|
108
|
-
target: resource.target,
|
|
109
|
-
file: resource.pathName,
|
|
110
|
-
resource
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
expect(result).toBeUndefined();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
test("returns error if source is in camel case and target is different", () => {
|
|
117
|
-
const rule = new ResourceCamelCase({});
|
|
118
|
-
const resource = createTestResourceString({source: "camelCase", target: "differentTarget"});
|
|
119
|
-
|
|
120
|
-
const result = rule.matchString({
|
|
121
|
-
source: resource.source,
|
|
122
|
-
target: resource.target,
|
|
123
|
-
file: resource.pathName,
|
|
124
|
-
resource
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
expect(result).toBeInstanceOf(Result);
|
|
128
|
-
expect(result.rule).toBeInstanceOf(ResourceCamelCase);
|
|
129
|
-
expect(result.severity).toEqual("error");
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
describe('ResourceCamelCase.isCamelCase', () => {
|
|
134
|
-
test.each(
|
|
135
|
-
[
|
|
136
|
-
{name: "lower camel case", source: "camelCase"},
|
|
137
|
-
{name: "upper camel case a.k.a. pascal case", source: "PascalCase"},
|
|
138
|
-
{name: "randomly mixed camel case", source: "cAmelCaSe"},
|
|
139
|
-
|
|
140
|
-
{name: "any camel case with leading and trailing whitespace", source: " AnyCamelCase "},
|
|
141
|
-
{name: "any camel case with digits at any position", source: "C4m3lC4s3W1thD1g1ts"},
|
|
142
|
-
]
|
|
143
|
-
)("returns `true` if source string is $name", ({source}) => {
|
|
144
|
-
const rule = new ResourceCamelCase({});
|
|
145
|
-
|
|
146
|
-
const result = rule.isCamelCase(source);
|
|
147
|
-
|
|
148
|
-
expect(result).toBe(true);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test.each([
|
|
152
|
-
{name: "whitespace solely", source: " "},
|
|
153
|
-
{name: "digits solely", source: "123"},
|
|
154
|
-
{name: "lowercase letters word solely", source: "word"},
|
|
155
|
-
{name: "uppercase letters word solely", source: "WORD"},
|
|
156
|
-
{name: "uppercase letters word solely", source: "Word"},
|
|
157
|
-
|
|
158
|
-
{name: "text and whitespace", source: "camel Case"},
|
|
159
|
-
{name: "camel case and text", source: "camelCase and text"},
|
|
160
|
-
|
|
161
|
-
{name: "trailing capitalized letter", source: "CamelCasE"},
|
|
162
|
-
{name: "multiple consecutive uppercase letters", source: "CAmelCase"},
|
|
163
|
-
])("returns `false` if source string is $name", ({source}) => {
|
|
164
|
-
const rule = new ResourceCamelCase({});
|
|
165
|
-
|
|
166
|
-
const result = rule.isCamelCase(source);
|
|
167
|
-
|
|
168
|
-
expect(result).toBe(false);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
function createTestResourceString({source, target}) {
|
|
173
|
-
return new ResourceString({
|
|
174
|
-
source,
|
|
175
|
-
target,
|
|
176
|
-
key: "camel.case.test.string.id",
|
|
177
|
-
targetLocale: "xd-XD",
|
|
178
|
-
pathName: "tests/for/camelCase.xliff"
|
|
179
|
-
});
|
|
180
|
-
}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import {ResourceString} from 'ilib-tools-common';
|
|
2
|
-
import {Result} from 'ilib-lint-common';
|
|
3
|
-
import ResourceSnakeCase from "../ResourceSnakeCase.js";
|
|
4
|
-
|
|
5
|
-
describe("ResourceSnakeCase", () => {
|
|
6
|
-
test("creates ResourceSnakeCase rule instance", () => {
|
|
7
|
-
const rule = new ResourceSnakeCase({});
|
|
8
|
-
|
|
9
|
-
expect(rule).toBeInstanceOf(ResourceSnakeCase);
|
|
10
|
-
expect(rule.getName()).toEqual("resource-snake-case");
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
test.each([
|
|
14
|
-
undefined,
|
|
15
|
-
null,
|
|
16
|
-
true,
|
|
17
|
-
100,
|
|
18
|
-
'string',
|
|
19
|
-
{},
|
|
20
|
-
() => {},
|
|
21
|
-
])("handles invalid `except` parameter gracefully (and does not break in runtime)", (invalidExcept) => {
|
|
22
|
-
const rule = new ResourceSnakeCase({param: {except: invalidExcept}});
|
|
23
|
-
|
|
24
|
-
const resource = createTestResourceString({source: "snake_case_exception", target: "some_target"});
|
|
25
|
-
const result = rule.matchString({
|
|
26
|
-
source: resource.source,
|
|
27
|
-
target: resource.target,
|
|
28
|
-
file: resource.pathName,
|
|
29
|
-
resource
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
expect(result).toBeInstanceOf(Result);
|
|
33
|
-
expect(result.rule).toBeInstanceOf(ResourceSnakeCase);
|
|
34
|
-
expect(result.severity).toEqual("error");
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test.each([
|
|
38
|
-
{source: ""},
|
|
39
|
-
{source: undefined},
|
|
40
|
-
{source: null},
|
|
41
|
-
])("returns `undefined` if source string is empty ($source)", ({source}) => {
|
|
42
|
-
const rule = new ResourceSnakeCase({});
|
|
43
|
-
const resource = createTestResourceString({source, target: "some_target"});
|
|
44
|
-
|
|
45
|
-
const result = rule.matchString({
|
|
46
|
-
source: resource.source,
|
|
47
|
-
target: resource.target,
|
|
48
|
-
file: resource.pathName,
|
|
49
|
-
resource
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
expect(result).toBeUndefined();
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test.each([
|
|
57
|
-
{target: ""},
|
|
58
|
-
{target: undefined},
|
|
59
|
-
{target: null},
|
|
60
|
-
])("returns `undefined` if target string is empty ($target)", ({target}) => {
|
|
61
|
-
const rule = new ResourceSnakeCase({});
|
|
62
|
-
const resource = createTestResourceString({source: "some_source", target});
|
|
63
|
-
|
|
64
|
-
const result = rule.matchString({
|
|
65
|
-
source: resource.source,
|
|
66
|
-
target: resource.target,
|
|
67
|
-
file: resource.pathName,
|
|
68
|
-
resource
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
expect(result).toBeUndefined();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test("returns `undefined` if source string is an exception", () => {
|
|
75
|
-
const options = {param: {except: ["snake_case_exception"]}}
|
|
76
|
-
const rule = new ResourceSnakeCase(options);
|
|
77
|
-
const resource = createTestResourceString({source: "snake_case_exception", target: "some_target"});
|
|
78
|
-
|
|
79
|
-
const result = rule.matchString({
|
|
80
|
-
source: resource.source,
|
|
81
|
-
target: resource.target,
|
|
82
|
-
file: resource.pathName,
|
|
83
|
-
resource
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
expect(result).toBeUndefined();
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
test("returns `undefined` if source string is NOT in snake case", () => {
|
|
90
|
-
const rule = new ResourceSnakeCase({});
|
|
91
|
-
const resource = createTestResourceString({source: "some source", target: "some target"});
|
|
92
|
-
|
|
93
|
-
const result = rule.matchString({
|
|
94
|
-
source: resource.source,
|
|
95
|
-
target: resource.target,
|
|
96
|
-
file: resource.pathName,
|
|
97
|
-
resource
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
expect(result).toBeUndefined();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test("returns `undefined` if source is in snake case and target is the same", () => {
|
|
104
|
-
const rule = new ResourceSnakeCase({});
|
|
105
|
-
const resource = createTestResourceString({source: "snake_case", target: "snake_case"});
|
|
106
|
-
|
|
107
|
-
const result = rule.matchString({
|
|
108
|
-
source: resource.source,
|
|
109
|
-
target: resource.target,
|
|
110
|
-
file: resource.pathName,
|
|
111
|
-
resource
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
expect(result).toBeUndefined();
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test("returns error if source is in snake case and target is different", () => {
|
|
118
|
-
const rule = new ResourceSnakeCase({});
|
|
119
|
-
const resource = createTestResourceString({source: "snake_case", target: "different_target"});
|
|
120
|
-
|
|
121
|
-
const result = rule.matchString({
|
|
122
|
-
source: resource.source,
|
|
123
|
-
target: resource.target,
|
|
124
|
-
file: resource.pathName,
|
|
125
|
-
resource
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
expect(result).toBeInstanceOf(Result);
|
|
129
|
-
expect(result.rule).toBeInstanceOf(ResourceSnakeCase);
|
|
130
|
-
expect(result.severity).toEqual("error");
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('ResourceSnakeCase.isSnakeCase', () => {
|
|
135
|
-
test.each(
|
|
136
|
-
[
|
|
137
|
-
{name: "snake case", source: "snake_case"},
|
|
138
|
-
{name: "snake case with leading and trailing whitespace", source: " snake_case "},
|
|
139
|
-
{name: "snake case with numbers (123)", source: " snake_case123 "},
|
|
140
|
-
{name: "snake case with underscored numbers (_123)", source: " snake_case_123 "},
|
|
141
|
-
|
|
142
|
-
{name: "screaming snake case", source: "SOME_SCREAMING_SNAKE_CASE"},
|
|
143
|
-
{name: "screaming snake case with leading and trailing whitespace", source: " SOME_SCREAMING_SNAKE_CASE "},
|
|
144
|
-
{name: "screaming snake case with numbers", source: "SOME_SCREAMING_SNAKE_CASE123 "},
|
|
145
|
-
{name: "screaming snake case with underscored numbers", source: "SOME_SCREAMING_SNAKE_CASE_123 "},
|
|
146
|
-
|
|
147
|
-
{name: "camel snake case", source: "camel_Snake_Case"},
|
|
148
|
-
{name: "came snake case with leading and trailing whitespace", source: " camel_Snake_Case "},
|
|
149
|
-
{name: "camel snake case with numbers", source: "camel_Snake_Case123 "},
|
|
150
|
-
{name: "camel snake case with underscored numbers", source: "camel_Snake_Case_123 "},
|
|
151
|
-
]
|
|
152
|
-
)("returns `true` if source string is $name", ({source}) => {
|
|
153
|
-
const rule = new ResourceSnakeCase({});
|
|
154
|
-
|
|
155
|
-
const result = rule.isSnakeCase(source);
|
|
156
|
-
|
|
157
|
-
expect(result).toBe(true);
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
test.each(
|
|
161
|
-
[
|
|
162
|
-
{name: "whitespace (solely)", source: " "},
|
|
163
|
-
{name: "text and whitespace", source: "snake case"},
|
|
164
|
-
{name: "snake case and text", source: "snake_case and text"},
|
|
165
|
-
{name: "screaming snake case and text", source: "SCREAMING_SNAKE_CASE and text"},
|
|
166
|
-
{name: "mixed case", source: "mixed_CASE"},
|
|
167
|
-
]
|
|
168
|
-
)("returns `false` if string is $name", ({name, source}) => {
|
|
169
|
-
const rule = new ResourceSnakeCase({});
|
|
170
|
-
const resource = createTestResourceString({source, target: "does not matter"});
|
|
171
|
-
|
|
172
|
-
const result = rule.matchString({source: resource.source});
|
|
173
|
-
|
|
174
|
-
expect(result).toBeUndefined();
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
function createTestResourceString({source, target}) {
|
|
179
|
-
return new ResourceString({
|
|
180
|
-
source,
|
|
181
|
-
target,
|
|
182
|
-
key: "snake.case.test.string.id",
|
|
183
|
-
targetLocale: "xd-XD",
|
|
184
|
-
pathName: "tests/for/snake_case.xliff"
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
|