1
1
/**
2
2
* @author kazuya kawaguchi (a.k.a. kazupon)
3
3
*/
4
- import { CLIEngine , RuleTester } from 'eslint'
5
- import { resolve , join } from 'path'
6
- import assert from 'assert'
7
- import plugin = require( '../../../lib/index' )
8
-
9
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
- // @ts -ignore
11
- import linter = require( 'eslint/lib/linter' )
4
+ import { RuleTester } from 'eslint'
5
+ import { join } from 'path'
12
6
import rule = require( '../../../lib/rules/no-unused-keys' )
13
- import { baseConfigPath } from '../test-utils'
14
- const { SourceCodeFixer } = linter
7
+ import { testOnFixtures } from '../test-utils'
15
8
16
9
new RuleTester ( {
17
10
parser : require . resolve ( 'vue-eslint-parser' ) ,
@@ -922,166 +915,90 @@ ${' '.repeat(6)}
922
915
} )
923
916
924
917
describe ( 'no-unused-keys with fixtures' , ( ) => {
925
- const cwd = join ( __dirname , '../../fixtures/no-unused-keys' )
926
- let originalCwd : string
927
-
928
- before ( ( ) => {
929
- originalCwd = process . cwd ( )
930
- process . chdir ( cwd )
931
- } )
932
-
933
- after ( ( ) => {
934
- process . chdir ( originalCwd )
935
- } )
918
+ const cwdRoot = join ( __dirname , '../../fixtures/no-unused-keys' )
936
919
937
920
describe ( 'errors' , ( ) => {
938
921
it ( 'settings.vue-i18n.localeDir' , ( ) => {
939
- const linter = new CLIEngine ( {
940
- cwd : join ( cwd , './valid' ) ,
941
- baseConfig : {
942
- extends : [ baseConfigPath ]
943
- } ,
944
- useEslintrc : false ,
945
- parserOptions : {
946
- ecmaVersion : 2015 ,
947
- sourceType : 'module'
948
- } ,
949
- rules : {
950
- '@intlify/vue-i18n/no-unused-keys' : 'error'
922
+ testOnFixtures (
923
+ {
924
+ cwd : join ( cwdRoot , './valid' ) ,
925
+ ruleName : '@intlify/vue-i18n/no-unused-keys'
951
926
} ,
952
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' ]
953
- } )
954
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
955
-
956
- const messages = linter . executeOnFiles ( [ '.' ] )
957
- assert . equal ( messages . errorCount , 3 )
958
- messages . results
959
- . map ( result => {
960
- return result . messages . filter (
961
- message => message . ruleId === '@intlify/vue-i18n/no-unused-keys'
962
- )
963
- } )
964
- . reduce ( ( values , current ) => values . concat ( current ) , [ ] )
965
- . forEach ( message => {
966
- assert . equal (
967
- message . message ,
968
- `You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation`
969
- )
970
- } )
927
+ {
928
+ 'constructor-option-format/locales/index.json' : {
929
+ output : null ,
930
+ errors : [
931
+ {
932
+ line : 1 ,
933
+ message :
934
+ "You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
935
+ }
936
+ ]
937
+ } ,
938
+ 'vue-cli-format/locales/en.json' : {
939
+ output : null ,
940
+ errors : [
941
+ {
942
+ line : 1 ,
943
+ message :
944
+ "You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
945
+ }
946
+ ]
947
+ } ,
948
+ 'vue-cli-format/locales/ja.yaml' : {
949
+ output : null ,
950
+ errors : [
951
+ {
952
+ line : 1 ,
953
+ message :
954
+ "You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
955
+ }
956
+ ]
957
+ }
958
+ }
959
+ )
971
960
} )
972
961
} )
973
962
974
963
describe ( 'valid' , ( ) => {
975
964
it ( 'should be not detected unsued keys' , ( ) => {
976
- const linter = new CLIEngine ( {
977
- cwd : join ( cwd , './valid/vue-cli-format' ) ,
978
- baseConfig : {
979
- extends : [ baseConfigPath ] ,
980
- settings : {
981
- 'vue-i18n' : {
982
- localeDir : `./valid/vue-cli-format/locales/*.{json,yaml,yml}`
983
- }
984
- }
985
- } ,
986
- useEslintrc : false ,
987
- parserOptions : {
988
- ecmaVersion : 2015 ,
989
- sourceType : 'module'
990
- } ,
991
- rules : {
992
- '@intlify/vue-i18n/no-unused-keys' : [
993
- 'error' ,
965
+ testOnFixtures (
966
+ {
967
+ cwd : join ( cwdRoot , './valid/vue-cli-format' ) ,
968
+ localeDir : `./locales/*.{json,yaml,yml}` ,
969
+ ruleName : '@intlify/vue-i18n/no-unused-keys' ,
970
+ options : [
994
971
{
995
- src : resolve (
996
- __dirname ,
997
- '../../fixtures/no-unused-keys/valid/vue-cli-format'
998
- )
972
+ src : '.'
999
973
}
1000
974
]
1001
975
} ,
1002
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' ]
1003
- } )
1004
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
1005
-
1006
- const messages = linter . executeOnFiles ( [ '.' ] )
1007
- assert . equal ( messages . errorCount , 0 )
976
+ { }
977
+ )
1008
978
} )
1009
979
1010
980
it ( 'should be not detected unsued keys for constructor-option-format' , ( ) => {
1011
- const linter = new CLIEngine ( {
1012
- cwd : join ( cwd , './valid/constructor-option-format' ) ,
1013
- baseConfig : {
1014
- extends : [ baseConfigPath ] ,
1015
- settings : {
1016
- 'vue-i18n' : {
1017
- localeDir : {
1018
- pattern : `./valid/constructor-option-format/locales/*.{json,yaml,yml}` ,
1019
- localeKey : 'key'
1020
- }
1021
- }
1022
- }
1023
- } ,
1024
- useEslintrc : false ,
1025
- parserOptions : {
1026
- ecmaVersion : 2015 ,
1027
- sourceType : 'module'
1028
- } ,
1029
- rules : {
1030
- '@intlify/vue-i18n/no-unused-keys' : [
1031
- 'error' ,
981
+ testOnFixtures (
982
+ {
983
+ cwd : join ( cwdRoot , './valid/constructor-option-format' ) ,
984
+ localeDir : {
985
+ pattern : `./locales/*.{json,yaml,yml}` ,
986
+ localeKey : 'key'
987
+ } ,
988
+ ruleName : '@intlify/vue-i18n/no-unused-keys' ,
989
+ options : [
1032
990
{
1033
- src : resolve (
1034
- __dirname ,
1035
- '../../fixtures/no-unused-keys/valid/constructor-option-format'
1036
- )
991
+ src : '.'
1037
992
}
1038
993
]
1039
994
} ,
1040
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' ]
1041
- } )
1042
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
1043
-
1044
- const messages = linter . executeOnFiles ( [ '.' ] )
1045
- assert . equal ( messages . errorCount , 0 )
995
+ { }
996
+ )
1046
997
} )
1047
998
} )
1048
999
1049
1000
describe ( 'invalid' , ( ) => {
1050
1001
it ( 'should be detected unsued keys' , ( ) => {
1051
- const linter = new CLIEngine ( {
1052
- cwd : join ( cwd , './invalid/vue-cli-format' ) ,
1053
- baseConfig : {
1054
- extends : [ baseConfigPath ] ,
1055
- settings : {
1056
- 'vue-i18n' : {
1057
- localeDir : `./invalid/vue-cli-format/locales/*.{json,yaml,yml}`
1058
- }
1059
- }
1060
- } ,
1061
- useEslintrc : false ,
1062
- parserOptions : {
1063
- ecmaVersion : 2015 ,
1064
- sourceType : 'module'
1065
- } ,
1066
- rules : {
1067
- '@intlify/vue-i18n/no-unused-keys' : [
1068
- 'error' ,
1069
- {
1070
- src : resolve (
1071
- __dirname ,
1072
- '../../fixtures/no-unused-keys/invalid/vue-cli-format'
1073
- ) ,
1074
- enableFix : true
1075
- }
1076
- ]
1077
- } ,
1078
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' ]
1079
- } )
1080
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
1081
-
1082
- const messages = linter . executeOnFiles ( [ '.' ] )
1083
- assert . equal ( messages . errorCount , 6 )
1084
-
1085
1002
const fixallEn = `{
1086
1003
"hello": "hello world",
1087
1004
"messages": {
@@ -1093,21 +1010,31 @@ describe('no-unused-keys with fixtures', () => {
1093
1010
"hello {name}": "hello {name}!"
1094
1011
}
1095
1012
`
1096
- assert . deepStrictEqual (
1097
- getResult (
1098
- messages ,
1099
- '../../fixtures/no-unused-keys/invalid/vue-cli-format/locales/en.json'
1100
- ) ,
1013
+ const fixallJa = `hello: "ハローワールド"
1014
+ messages:
1015
+ hello: "こんにちは、DIO!"
1016
+ nested: {}
1017
+ hello_dio: "こんにちは、アンダースコア DIO!"
1018
+ "hello {name}": "こんにちは、{name}!"
1019
+ `
1020
+ testOnFixtures (
1101
1021
{
1102
- output : fixallEn ,
1103
- errors : [
1104
- {
1105
- message : "unused 'messages.link' key" ,
1106
- line : 5 ,
1107
- suggestions : [
1108
- {
1109
- desc : "Remove the 'messages.link' key." ,
1110
- output : `{
1022
+ cwd : join ( cwdRoot , './invalid/vue-cli-format' ) ,
1023
+ localeDir : `./locales/*.{json,yaml,yml}` ,
1024
+ ruleName : '@intlify/vue-i18n/no-unused-keys' ,
1025
+ options : [ { src : '.' , enableFix : true } ]
1026
+ } ,
1027
+ {
1028
+ 'locales/en.json' : {
1029
+ output : fixallEn ,
1030
+ errors : [
1031
+ {
1032
+ message : "unused 'messages.link' key" ,
1033
+ line : 5 ,
1034
+ suggestions : [
1035
+ {
1036
+ desc : "Remove the 'messages.link' key." ,
1037
+ output : `{
1111
1038
"hello": "hello world",
1112
1039
"messages": {
1113
1040
"hello": "hi DIO!",
@@ -1120,20 +1047,20 @@ describe('no-unused-keys with fixtures', () => {
1120
1047
"hello-dio": "hello hyphen DIO!"
1121
1048
}
1122
1049
`
1123
- } ,
1124
- {
1125
- desc : 'Remove all unused keys.' ,
1126
- output : fixallEn
1127
- }
1128
- ]
1129
- } ,
1130
- {
1131
- message : "unused 'messages.nested.hello' key" ,
1132
- line : 7 ,
1133
- suggestions : [
1134
- {
1135
- desc : "Remove the 'messages.nested.hello' key." ,
1136
- output : `{
1050
+ } ,
1051
+ {
1052
+ desc : 'Remove all unused keys.' ,
1053
+ output : fixallEn
1054
+ }
1055
+ ]
1056
+ } ,
1057
+ {
1058
+ message : "unused 'messages.nested.hello' key" ,
1059
+ line : 7 ,
1060
+ suggestions : [
1061
+ {
1062
+ desc : "Remove the 'messages.nested.hello' key." ,
1063
+ output : `{
1137
1064
"hello": "hello world",
1138
1065
"messages": {
1139
1066
"hello": "hi DIO!",
@@ -1146,20 +1073,20 @@ describe('no-unused-keys with fixtures', () => {
1146
1073
"hello-dio": "hello hyphen DIO!"
1147
1074
}
1148
1075
`
1149
- } ,
1150
- {
1151
- desc : 'Remove all unused keys.' ,
1152
- output : fixallEn
1153
- }
1154
- ]
1155
- } ,
1156
- {
1157
- message : "unused 'hello-dio' key" ,
1158
- line : 12 ,
1159
- suggestions : [
1160
- {
1161
- desc : "Remove the 'hello-dio' key." ,
1162
- output : `{
1076
+ } ,
1077
+ {
1078
+ desc : 'Remove all unused keys.' ,
1079
+ output : fixallEn
1080
+ }
1081
+ ]
1082
+ } ,
1083
+ {
1084
+ message : "unused 'hello-dio' key" ,
1085
+ line : 12 ,
1086
+ suggestions : [
1087
+ {
1088
+ desc : "Remove the 'hello-dio' key." ,
1089
+ output : `{
1163
1090
"hello": "hello world",
1164
1091
"messages": {
1165
1092
"hello": "hi DIO!",
@@ -1172,38 +1099,25 @@ describe('no-unused-keys with fixtures', () => {
1172
1099
"hello {name}": "hello {name}!"
1173
1100
}
1174
1101
`
1175
- } ,
1176
- {
1177
- desc : 'Remove all unused keys.' ,
1178
- output : fixallEn
1179
- }
1180
- ]
1181
- }
1182
- ]
1183
- }
1184
- )
1185
- const fixallJa = `hello: "ハローワールド"
1186
- messages:
1187
- hello: "こんにちは、DIO!"
1188
- nested: {}
1189
- hello_dio: "こんにちは、アンダースコア DIO!"
1190
- "hello {name}": "こんにちは、{name}!"
1191
- `
1192
- assert . deepStrictEqual (
1193
- getResult (
1194
- messages ,
1195
- '../../fixtures/no-unused-keys/invalid/vue-cli-format/locales/ja.yaml'
1196
- ) ,
1197
- {
1198
- output : fixallJa ,
1199
- errors : [
1200
- {
1201
- message : "unused 'messages.link' key" ,
1202
- line : 4 ,
1203
- suggestions : [
1204
- {
1205
- desc : "Remove the 'messages.link' key." ,
1206
- output : `hello: "ハローワールド"
1102
+ } ,
1103
+ {
1104
+ desc : 'Remove all unused keys.' ,
1105
+ output : fixallEn
1106
+ }
1107
+ ]
1108
+ }
1109
+ ]
1110
+ } ,
1111
+ 'locales/ja.yaml' : {
1112
+ output : fixallJa ,
1113
+ errors : [
1114
+ {
1115
+ message : "unused 'messages.link' key" ,
1116
+ line : 4 ,
1117
+ suggestions : [
1118
+ {
1119
+ desc : "Remove the 'messages.link' key." ,
1120
+ output : `hello: "ハローワールド"
1207
1121
messages:
1208
1122
hello: "こんにちは、DIO!"
1209
1123
nested:
@@ -1212,20 +1126,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1212
1126
"hello {name}": "こんにちは、{name}!"
1213
1127
hello-dio: "こんにちは、ハイフン DIO!"
1214
1128
`
1215
- } ,
1216
- {
1217
- desc : 'Remove all unused keys.' ,
1218
- output : fixallJa
1219
- }
1220
- ]
1221
- } ,
1222
- {
1223
- message : "unused 'messages.nested.hello' key" ,
1224
- line : 6 ,
1225
- suggestions : [
1226
- {
1227
- desc : "Remove the 'messages.nested.hello' key." ,
1228
- output : `hello: "ハローワールド"
1129
+ } ,
1130
+ {
1131
+ desc : 'Remove all unused keys.' ,
1132
+ output : fixallJa
1133
+ }
1134
+ ]
1135
+ } ,
1136
+ {
1137
+ message : "unused 'messages.nested.hello' key" ,
1138
+ line : 6 ,
1139
+ suggestions : [
1140
+ {
1141
+ desc : "Remove the 'messages.nested.hello' key." ,
1142
+ output : `hello: "ハローワールド"
1229
1143
messages:
1230
1144
hello: "こんにちは、DIO!"
1231
1145
link: "@:message.hello"
@@ -1234,20 +1148,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1234
1148
"hello {name}": "こんにちは、{name}!"
1235
1149
hello-dio: "こんにちは、ハイフン DIO!"
1236
1150
`
1237
- } ,
1238
- {
1239
- desc : 'Remove all unused keys.' ,
1240
- output : fixallJa
1241
- }
1242
- ]
1243
- } ,
1244
- {
1245
- message : "unused 'hello-dio' key" ,
1246
- line : 9 ,
1247
- suggestions : [
1248
- {
1249
- desc : "Remove the 'hello-dio' key." ,
1250
- output : `hello: "ハローワールド"
1151
+ } ,
1152
+ {
1153
+ desc : 'Remove all unused keys.' ,
1154
+ output : fixallJa
1155
+ }
1156
+ ]
1157
+ } ,
1158
+ {
1159
+ message : "unused 'hello-dio' key" ,
1160
+ line : 9 ,
1161
+ suggestions : [
1162
+ {
1163
+ desc : "Remove the 'hello-dio' key." ,
1164
+ output : `hello: "ハローワールド"
1251
1165
messages:
1252
1166
hello: "こんにちは、DIO!"
1253
1167
link: "@:message.hello"
@@ -1256,56 +1170,20 @@ messages:
1256
1170
hello_dio: "こんにちは、アンダースコア DIO!"
1257
1171
"hello {name}": "こんにちは、{name}!"
1258
1172
`
1259
- } ,
1260
- {
1261
- desc : 'Remove all unused keys.' ,
1262
- output : fixallJa
1263
- }
1264
- ]
1265
- }
1266
- ]
1173
+ } ,
1174
+ {
1175
+ desc : 'Remove all unused keys.' ,
1176
+ output : fixallJa
1177
+ }
1178
+ ]
1179
+ }
1180
+ ]
1181
+ }
1267
1182
}
1268
1183
)
1269
1184
} )
1270
1185
1271
1186
it ( 'should be detected unsued keys for constructor-option-format' , ( ) => {
1272
- const linter = new CLIEngine ( {
1273
- cwd : join ( cwd , './invalid/constructor-option-format' ) ,
1274
- baseConfig : {
1275
- extends : [ baseConfigPath ] ,
1276
- settings : {
1277
- 'vue-i18n' : {
1278
- localeDir : {
1279
- pattern : `./invalid/constructor-option-format/locales/*.{json,yaml,yml}` ,
1280
- localeKey : 'key'
1281
- }
1282
- }
1283
- }
1284
- } ,
1285
- useEslintrc : false ,
1286
- parserOptions : {
1287
- ecmaVersion : 2015 ,
1288
- sourceType : 'module'
1289
- } ,
1290
- rules : {
1291
- '@intlify/vue-i18n/no-unused-keys' : [
1292
- 'error' ,
1293
- {
1294
- src : resolve (
1295
- __dirname ,
1296
- '../../fixtures/no-unused-keys/invalid/constructor-option-format'
1297
- ) ,
1298
- enableFix : true
1299
- }
1300
- ]
1301
- } ,
1302
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' ]
1303
- } )
1304
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
1305
-
1306
- const messages = linter . executeOnFiles ( [ '.' ] )
1307
- assert . equal ( messages . errorCount , 6 )
1308
-
1309
1187
const fixall = `{
1310
1188
"en": {
1311
1189
"hello": "hello world",
@@ -1329,21 +1207,27 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1329
1207
}
1330
1208
}
1331
1209
`
1332
- assert . deepStrictEqual (
1333
- getResult (
1334
- messages ,
1335
- '../../fixtures/no-unused-keys/invalid/constructor-option-format/locales/index.json'
1336
- ) ,
1210
+ testOnFixtures (
1337
1211
{
1338
- output : fixall ,
1339
- errors : [
1340
- {
1341
- message : "unused 'en.messages.link' key" ,
1342
- line : 6 ,
1343
- suggestions : [
1344
- {
1345
- desc : "Remove the 'en.messages.link' key." ,
1346
- output : `{
1212
+ cwd : join ( cwdRoot , './invalid/constructor-option-format' ) ,
1213
+ localeDir : {
1214
+ pattern : `./locales/*.{json,yaml,yml}` ,
1215
+ localeKey : 'key'
1216
+ } ,
1217
+ ruleName : '@intlify/vue-i18n/no-unused-keys' ,
1218
+ options : [ { src : '.' , enableFix : true } ]
1219
+ } ,
1220
+ {
1221
+ 'locales/index.json' : {
1222
+ output : fixall ,
1223
+ errors : [
1224
+ {
1225
+ message : "unused 'en.messages.link' key" ,
1226
+ line : 6 ,
1227
+ suggestions : [
1228
+ {
1229
+ desc : "Remove the 'en.messages.link' key." ,
1230
+ output : `{
1347
1231
"en": {
1348
1232
"hello": "hello world",
1349
1233
"messages": {
@@ -1371,20 +1255,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1371
1255
}
1372
1256
}
1373
1257
`
1374
- } ,
1375
- {
1376
- desc : 'Remove all unused keys.' ,
1377
- output : fixall
1378
- }
1379
- ]
1380
- } ,
1381
- {
1382
- message : "unused 'en.messages.nested.hello' key" ,
1383
- line : 8 ,
1384
- suggestions : [
1385
- {
1386
- desc : "Remove the 'en.messages.nested.hello' key." ,
1387
- output : `{
1258
+ } ,
1259
+ {
1260
+ desc : 'Remove all unused keys.' ,
1261
+ output : fixall
1262
+ }
1263
+ ]
1264
+ } ,
1265
+ {
1266
+ message : "unused 'en.messages.nested.hello' key" ,
1267
+ line : 8 ,
1268
+ suggestions : [
1269
+ {
1270
+ desc : "Remove the 'en.messages.nested.hello' key." ,
1271
+ output : `{
1388
1272
"en": {
1389
1273
"hello": "hello world",
1390
1274
"messages": {
@@ -1412,20 +1296,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1412
1296
}
1413
1297
}
1414
1298
`
1415
- } ,
1416
- {
1417
- desc : 'Remove all unused keys.' ,
1418
- output : fixall
1419
- }
1420
- ]
1421
- } ,
1422
- {
1423
- message : "unused 'en.hello-dio' key" ,
1424
- line : 13 ,
1425
- suggestions : [
1426
- {
1427
- desc : "Remove the 'en.hello-dio' key." ,
1428
- output : `{
1299
+ } ,
1300
+ {
1301
+ desc : 'Remove all unused keys.' ,
1302
+ output : fixall
1303
+ }
1304
+ ]
1305
+ } ,
1306
+ {
1307
+ message : "unused 'en.hello-dio' key" ,
1308
+ line : 13 ,
1309
+ suggestions : [
1310
+ {
1311
+ desc : "Remove the 'en.hello-dio' key." ,
1312
+ output : `{
1429
1313
"en": {
1430
1314
"hello": "hello world",
1431
1315
"messages": {
@@ -1453,20 +1337,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1453
1337
}
1454
1338
}
1455
1339
`
1456
- } ,
1457
- {
1458
- desc : 'Remove all unused keys.' ,
1459
- output : fixall
1460
- }
1461
- ]
1462
- } ,
1463
- {
1464
- message : "unused 'ja.messages.link' key" ,
1465
- line : 19 ,
1466
- suggestions : [
1467
- {
1468
- desc : "Remove the 'ja.messages.link' key." ,
1469
- output : `{
1340
+ } ,
1341
+ {
1342
+ desc : 'Remove all unused keys.' ,
1343
+ output : fixall
1344
+ }
1345
+ ]
1346
+ } ,
1347
+ {
1348
+ message : "unused 'ja.messages.link' key" ,
1349
+ line : 19 ,
1350
+ suggestions : [
1351
+ {
1352
+ desc : "Remove the 'ja.messages.link' key." ,
1353
+ output : `{
1470
1354
"en": {
1471
1355
"hello": "hello world",
1472
1356
"messages": {
@@ -1494,20 +1378,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1494
1378
}
1495
1379
}
1496
1380
`
1497
- } ,
1498
- {
1499
- desc : 'Remove all unused keys.' ,
1500
- output : fixall
1501
- }
1502
- ]
1503
- } ,
1504
- {
1505
- message : "unused 'ja.messages.nested.hello' key" ,
1506
- line : 21 ,
1507
- suggestions : [
1508
- {
1509
- desc : "Remove the 'ja.messages.nested.hello' key." ,
1510
- output : `{
1381
+ } ,
1382
+ {
1383
+ desc : 'Remove all unused keys.' ,
1384
+ output : fixall
1385
+ }
1386
+ ]
1387
+ } ,
1388
+ {
1389
+ message : "unused 'ja.messages.nested.hello' key" ,
1390
+ line : 21 ,
1391
+ suggestions : [
1392
+ {
1393
+ desc : "Remove the 'ja.messages.nested.hello' key." ,
1394
+ output : `{
1511
1395
"en": {
1512
1396
"hello": "hello world",
1513
1397
"messages": {
@@ -1535,20 +1419,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1535
1419
}
1536
1420
}
1537
1421
`
1538
- } ,
1539
- {
1540
- desc : 'Remove all unused keys.' ,
1541
- output : fixall
1542
- }
1543
- ]
1544
- } ,
1545
- {
1546
- message : "unused 'ja.hello-dio' key" ,
1547
- line : 26 ,
1548
- suggestions : [
1549
- {
1550
- desc : "Remove the 'ja.hello-dio' key." ,
1551
- output : `{
1422
+ } ,
1423
+ {
1424
+ desc : 'Remove all unused keys.' ,
1425
+ output : fixall
1426
+ }
1427
+ ]
1428
+ } ,
1429
+ {
1430
+ message : "unused 'ja.hello-dio' key" ,
1431
+ line : 26 ,
1432
+ suggestions : [
1433
+ {
1434
+ desc : "Remove the 'ja.hello-dio' key." ,
1435
+ output : `{
1552
1436
"en": {
1553
1437
"hello": "hello world",
1554
1438
"messages": {
@@ -1576,97 +1460,44 @@ hello_dio: "こんにちは、アンダースコア DIO!"
1576
1460
}
1577
1461
}
1578
1462
`
1579
- } ,
1580
- {
1581
- desc : 'Remove all unused keys.' ,
1582
- output : fixall
1583
- }
1584
- ]
1585
- }
1586
- ]
1463
+ } ,
1464
+ {
1465
+ desc : 'Remove all unused keys.' ,
1466
+ output : fixall
1467
+ }
1468
+ ]
1469
+ }
1470
+ ]
1471
+ }
1587
1472
}
1588
1473
)
1589
1474
} )
1590
1475
1591
1476
it ( 'should be detected unsued keys with typescript' , ( ) => {
1592
- process . chdir ( join ( cwd , './invalid/typescript' ) )
1593
- const linter = new CLIEngine ( {
1594
- cwd : join ( cwd , './invalid/typescript' ) ,
1595
- extensions : [ '.js' , '.vue' , '.json' , '.yaml' , '.yml' , '.ts' ]
1596
- } )
1597
- linter . addPlugin ( '@intlify/vue-i18n' , plugin )
1598
-
1599
- const messages = linter . executeOnFiles ( [ '.' ] )
1600
- assert . equal ( messages . errorCount , 6 )
1601
-
1602
- assert . deepStrictEqual (
1603
- getResult (
1604
- messages ,
1605
- '../../fixtures/no-unused-keys/invalid/typescript/locales/en.json' ,
1606
- { messageOnly : true }
1607
- ) ,
1477
+ testOnFixtures (
1608
1478
{
1609
- errors : [
1610
- "unused 'messages.link' key" ,
1611
- "unused 'messages.nested.hello' key" ,
1612
- "unused 'hello-dio' key"
1613
- ]
1614
- }
1615
- )
1616
-
1617
- assert . deepStrictEqual (
1618
- getResult (
1619
- messages ,
1620
- '../../fixtures/no-unused-keys/invalid/typescript/locales/ja.yaml' ,
1621
- { messageOnly : true }
1622
- ) ,
1479
+ cwd : join ( cwdRoot , './invalid/typescript' ) ,
1480
+ ruleName : '@intlify/vue-i18n/no-unused-keys' ,
1481
+ useEslintrc : true
1482
+ } ,
1623
1483
{
1624
- errors : [
1625
- "unused 'messages.link' key" ,
1626
- "unused 'messages.nested.hello' key" ,
1627
- "unused 'hello-dio' key"
1628
- ]
1629
- }
1484
+ 'locales/en.json' : {
1485
+ errors : [
1486
+ "unused 'messages.link' key" ,
1487
+ "unused 'messages.nested.hello' key" ,
1488
+ "unused 'hello-dio' key"
1489
+ ]
1490
+ } ,
1491
+ 'locales/ja.yaml' : {
1492
+ errors : [
1493
+ "unused 'messages.link' key" ,
1494
+ "unused 'messages.nested.hello' key" ,
1495
+ "unused 'hello-dio' key"
1496
+ ]
1497
+ }
1498
+ } ,
1499
+ { messageOnly : true }
1630
1500
)
1631
1501
} )
1632
1502
} )
1633
1503
} )
1634
-
1635
- function getResult (
1636
- messages : CLIEngine . LintReport ,
1637
- path : string ,
1638
- options ?: { messageOnly ?: boolean }
1639
- ) {
1640
- const fullPath = resolve ( __dirname , path )
1641
- const result = messages . results . find ( result => result . filePath === fullPath ) !
1642
- const messageOnly = options ?. messageOnly ?? false
1643
- if ( messageOnly ) {
1644
- return {
1645
- errors : result . messages . map ( message => {
1646
- assert . equal ( message . ruleId , '@intlify/vue-i18n/no-unused-keys' )
1647
- return message . message
1648
- } )
1649
- }
1650
- }
1651
- const output = SourceCodeFixer . applyFixes ( result . source , result . messages )
1652
- . output
1653
- return {
1654
- output,
1655
- errors : result . messages . map ( message => {
1656
- assert . equal ( message . ruleId , '@intlify/vue-i18n/no-unused-keys' )
1657
-
1658
- return {
1659
- message : message . message ,
1660
- line : message . line ,
1661
- suggestions : message . suggestions ! . map ( suggest => {
1662
- const output = SourceCodeFixer . applyFixes ( result . source , [ suggest ] )
1663
- . output
1664
- return {
1665
- desc : suggest . desc ,
1666
- output
1667
- }
1668
- } )
1669
- }
1670
- } )
1671
- }
1672
- }
0 commit comments