@doujinreviewers/textlint-rule-for-creation 0.0.1 → 1.1.1

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.

Potentially problematic release.


This version of @doujinreviewers/textlint-rule-for-creation might be problematic. Click here for more details.

package/README.md CHANGED
@@ -13,13 +13,13 @@
13
13
 
14
14
  例えば、文章の形式、スタイル、文体、文の冗長さ、二重否定、二重助詞、表記ゆれ、送り仮名のゆれ、記号や三点リーダーの使い方など
15
15
 
16
- - ら抜き言葉
16
+ - ら抜き言葉、い抜き言葉
17
17
 
18
18
  これで喋るキャラがいるかもしれないし、作品の雰囲気に必要かもしれない
19
19
 
20
20
  ## インストール
21
21
 
22
- npm install textlint-rule-for-creation
22
+ npm install @doujinreviewers/textlint-rule-for-creation
23
23
 
24
24
  ## 使い方
25
25
 
@@ -28,7 +28,7 @@
28
28
  ```json
29
29
  {
30
30
  "rules": {
31
- "for-creation": true
31
+ "@doujinreviewers/textlint-rule-for-creation": true
32
32
  }
33
33
  }
34
34
  ```
@@ -36,7 +36,7 @@
36
36
  コマンドラインで使う
37
37
 
38
38
  ```
39
- textlint --rule for-creation README.md
39
+ textlint --rule @doujinreviewers/textlint-rule-for-creation README.md
40
40
  ```
41
41
 
42
42
  ### Build
@@ -72,5 +72,8 @@ MIT
72
72
  [textlint 12リリース、ブラウザで動くtextlint editorをベータリリース](https://efcl.info/2021/05/27/textlint-12-editor/)
73
73
 
74
74
  ### ルール
75
- []()
76
- []()
75
+ [textlint-rule-ja-no-abusage](https://github.com/textlint-ja/textlint-rule-ja-no-abusage)
76
+
77
+ [textlint-rule-no-insert-re](https://github.com/textlint-ja/textlint-rule-no-insert-re)
78
+
79
+ [textlint-rule-no-insert-dropping-sa](https://github.com/textlint-ja/textlint-rule-no-insert-dropping-sa)
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ module.exports = {
4
+ "jidousi_tadousi": ["開け", "あけ"],
5
+ "zyosi": ["こそは", "こそを", "からが", "からは", "をこそ", "とやら", "やらが", "までも", "までもが", "ばかりか", "ばかりが", "ばかりは", "ばかりを", "ばっかりか", "ばっかりが", "ばっかりは", "ばっかりを", "などばかり", "などばっかり", "などが", "なども", "などは", "などを", "とかが", "とかも", "とかは", "とかを", "とかばかり", "とかばっかり", "にも", "ばかりに", "にだって", "とかだって", "などだって", "にも", "のかも", "にかも", "とが", "とも", "とは", "さえも", "にさえ", "とさえ", "すらも", "にすら", "とすら", "だけが", "だけを", "ほども", "ほどを", "でも", "てでも", "たりも", "たりが", "たりは", "たりさえ", "たりすら", "たりなど", "ながらも", "つつも", "なりが", "なりを", "になんて", "もなんて", "ばかりなんて", "ばっかりなんて", "だけを", "だけが", "だけは", "だけかも", "だけかも"]
6
+ };
7
+ //# sourceMappingURL=arrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/arrow.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB;AACf,qBAAmB,CACjB,IADiB,EAEjB,IAFiB,CADJ;AAKf,WAAS,CACP,KADO,EAEP,KAFO,EAGP,KAHO,EAIP,KAJO,EAKP,KALO,EAMP,KANO,EAOP,KAPO,EAQP,KARO,EASP,MATO,EAUP,MAVO,EAWP,MAXO,EAYP,MAZO,EAaP,MAbO,EAcP,OAdO,EAeP,OAfO,EAgBP,OAhBO,EAiBP,OAjBO,EAkBP,OAlBO,EAmBP,QAnBO,EAoBP,KApBO,EAqBP,KArBO,EAsBP,KAtBO,EAuBP,KAvBO,EAwBP,KAxBO,EAyBP,KAzBO,EA0BP,KA1BO,EA2BP,KA3BO,EA4BP,OA5BO,EA6BP,QA7BO,EA8BP,IA9BO,EA+BP,MA/BO,EAgCP,MAhCO,EAiCP,OAjCO,EAkCP,OAlCO,EAmCP,IAnCO,EAoCP,KApCO,EAqCP,KArCO,EAsCP,IAtCO,EAuCP,IAvCO,EAwCP,IAxCO,EAyCP,KAzCO,EA0CP,KA1CO,EA2CP,KA3CO,EA4CP,KA5CO,EA6CP,KA7CO,EA8CP,KA9CO,EA+CP,KA/CO,EAgDP,KAhDO,EAiDP,KAjDO,EAkDP,KAlDO,EAmDP,IAnDO,EAoDP,KApDO,EAqDP,KArDO,EAsDP,KAtDO,EAuDP,KAvDO,EAwDP,MAxDO,EAyDP,MAzDO,EA0DP,MA1DO,EA2DP,MA3DO,EA4DP,KA5DO,EA6DP,KA7DO,EA8DP,KA9DO,EA+DP,MA/DO,EAgEP,MAhEO,EAiEP,QAjEO,EAkEP,SAlEO,EAmEP,KAnEO,EAoEP,KApEO,EAqEP,KArEO,EAsEP,MAtEO,EAuEP,MAvEO;AALM,CAAjB","sourcesContent":["module.exports = {\n \"jidousi_tadousi\": [\n \"開け\",\n \"あけ\",\n ],\n \"zyosi\": [\n \"こそは\",\n \"こそを\",\n \"からが\",\n \"からは\",\n \"をこそ\",\n \"とやら\",\n \"やらが\",\n \"までも\",\n \"までもが\",\n \"ばかりか\",\n \"ばかりが\",\n \"ばかりは\",\n \"ばかりを\",\n \"ばっかりか\",\n \"ばっかりが\",\n \"ばっかりは\",\n \"ばっかりを\",\n \"などばかり\",\n \"などばっかり\",\n \"などが\",\n \"なども\",\n \"などは\",\n \"などを\",\n \"とかが\",\n \"とかも\",\n \"とかは\",\n \"とかを\",\n \"とかばかり\",\n \"とかばっかり\",\n \"にも\",\n \"ばかりに\",\n \"にだって\",\n \"とかだって\",\n \"などだって\",\n \"にも\",\n \"のかも\",\n \"にかも\",\n \"とが\",\n \"とも\",\n \"とは\",\n \"さえも\",\n \"にさえ\",\n \"とさえ\",\n \"すらも\",\n \"にすら\",\n \"とすら\",\n \"だけが\",\n \"だけを\",\n \"ほども\",\n \"ほどを\",\n \"でも\",\n \"てでも\",\n \"たりも\",\n \"たりが\",\n \"たりは\",\n \"たりさえ\",\n \"たりすら\",\n \"たりなど\",\n \"ながらも\",\n \"つつも\",\n \"なりが\",\n \"なりを\",\n \"になんて\",\n \"もなんて\",\n \"ばかりなんて\",\n \"ばっかりなんて\",\n \"だけを\",\n \"だけが\",\n \"だけは\",\n \"だけかも\",\n \"だけかも\",\n ]\n};"],"file":"arrow.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=dictAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dictAA.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACI,aAAW,+BADf;AAEI,cAAY,KAFhB;AAGI,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHd,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"dictAA.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=dict_miss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dict_miss.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"dict_miss.js"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }, {
30
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
31
+ "expected": "$1づらい",
32
+ "tokens": [{
33
+ "pos": "動詞",
34
+ "pos_detail_1": "自立",
35
+ "conjugated_form": "連用形",
36
+ "_capture": "$1"
37
+ }, {
38
+ "surface_form": "ず"
39
+ }, {
40
+ "surface_form": "らい"
41
+ }]
42
+ }, {
43
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
44
+ "expected": "$1づらい",
45
+ "tokens": [{
46
+ "pos": "動詞",
47
+ "pos_detail_1": "自立",
48
+ "conjugated_form": "連用形",
49
+ "_capture": "$1"
50
+ }, {
51
+ "surface_form": "ずら"
52
+ }, {
53
+ "surface_form": "い"
54
+ }]
55
+ }];
56
+ //# sourceMappingURL=gozidatuzi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/gozidatuzi.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,EA+Bf;AACE,aAAW,yCADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,uBAAmB,KAHrB;AAIE,gBAAY;AAJd,GADQ,EAOR;AACE,oBAAgB;AADlB,GAPQ,EAUR;AACE,oBAAgB;AADlB,GAVQ;AAHZ,CA/Be,EAiDf;AACE,aAAW,yCADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,uBAAmB,KAHrB;AAIE,gBAAY;AAJd,GADQ,EAOR;AACE,oBAAgB;AADlB,GAPQ,EAUR;AACE,oBAAgB;AADlB,GAVQ;AAHZ,CAjDe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n {\n \"message\": \"動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。\",\n \"expected\": \"$1づらい\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"自立\",\n \"conjugated_form\": \"連用形\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"ず\",\n },\n {\n \"surface_form\": \"らい\",\n }\n ]\n },\n {\n \"message\": \"動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。\",\n \"expected\": \"$1づらい\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"自立\",\n \"conjugated_form\": \"連用形\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"ずら\",\n },\n {\n \"surface_form\": \"い\",\n }\n ]\n }\n];"],"file":"gozidatuzi.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=miss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/miss.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"miss.js"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "れ足す言葉の可能性があります",
5
+ "tokens": [{
6
+ "pos": "動詞",
7
+ "conjugated_type": "一段"
8
+ }, {
9
+ "pos": "動詞",
10
+ "pos_detail_1": "接尾",
11
+ "basic_form": "れる"
12
+ }]
13
+ }];
14
+ //# sourceMappingURL=retasu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/retasu.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,gBADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,uBAAmB;AAFrB,GADQ,EAKR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,kBAAc;AAHhB,GALQ;AAFZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"れ足す言葉の可能性があります\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"conjugated_type\": \"一段\",\n },\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"接尾\",\n \"basic_form\": \"れる\",\n }\n ]\n },\n];"],"file":"retasu.js"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "不要な「さ」が挿入されています。",
5
+ "expected": "$2$3",
6
+ "tokens": [{
7
+ "conjugated_form": "ガル接続",
8
+ "basic_form": ["辛い", "美味しい", "寒い"],
9
+ "_capture": "$2"
10
+ }, {
11
+ "surface_form": "さ",
12
+ "_index": true
13
+ }, {
14
+ "basic_form": "そう",
15
+ "pos_detail_1": ["接尾", "助詞類接続"],
16
+ "_capture": "$3"
17
+ }]
18
+ }, {
19
+ "message": "不要な「さ」が挿入されています。",
20
+ "expected": "$1$2$3",
21
+ "tokens": [{
22
+ "pos": "動詞",
23
+ "_capture": "$1"
24
+ }, {
25
+ "surface_form": "た",
26
+ "pos": "助動詞",
27
+ "_capture": "$2"
28
+ }, {
29
+ "surface_form": "さ",
30
+ "_index": true
31
+ }, {
32
+ "basic_form": "そう",
33
+ "pos_detail_1": ["接尾", "助詞類接続"],
34
+ "_capture": "$3"
35
+ }]
36
+ }];
37
+ //# sourceMappingURL=saire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/saire.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,kBADb;AAEE,cAAY,MAFd;AAGE,YAAU,CACR;AACE,uBAAmB,MADrB;AAEE,kBAAc,CAAC,IAAD,EAAO,MAAP,EAAe,IAAf,CAFhB;AAGE,gBAAY;AAHd,GADQ,EAMR;AACE,oBAAgB,GADlB;AAEE,cAAU;AAFZ,GANQ,EAUR;AACE,kBAAc,IADhB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GAVQ;AAHZ,CADe,EAqBf;AACE,aAAW,kBADb;AAEE,cAAY,QAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,gBAAY;AAFd,GADQ,EAKR;AACE,oBAAgB,GADlB;AAEE,WAAO,KAFT;AAGE,gBAAY;AAHd,GALQ,EAUR;AACE,oBAAgB,GADlB;AAEE,cAAU;AAFZ,GAVQ,EAcR;AACE,kBAAc,IADhB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GAdQ;AAHZ,CArBe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"不要な「さ」が挿入されています。\",\n \"expected\": \"$2$3\",\n \"tokens\": [\n {\n \"conjugated_form\": \"ガル接続\",\n \"basic_form\": [\"辛い\", \"美味しい\", \"寒い\"],\n \"_capture\": \"$2\"\n },\n {\n \"surface_form\": \"さ\",\n \"_index\": true\n },\n {\n \"basic_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$3\"\n }\n ]\n },\n {\n \"message\": \"不要な「さ」が挿入されています。\",\n \"expected\": \"$1$2$3\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"た\",\n \"pos\": \"助動詞\",\n \"_capture\": \"$2\"\n },\n {\n \"surface_form\": \"さ\",\n \"_index\": true\n },\n {\n \"basic_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$3\"\n }\n ]\n },\n];"],"file":"saire.js"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "「さ」が抜けています。",
5
+ "expected": "$1さ$2",
6
+ "tokens": [{
7
+ "basic_form": ["良い", "無", "無い"],
8
+ "_capture": "$1"
9
+ }, {
10
+ "surface_form": "そう",
11
+ "pos_detail_1": ["接尾", "助詞類接続"],
12
+ "_capture": "$2"
13
+ }]
14
+ }];
15
+ //# sourceMappingURL=sanuki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/sanuki.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,aADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,kBAAc,CAAC,IAAD,EAAO,GAAP,EAAY,IAAZ,CADhB;AAEE,gBAAY;AAFd,GADQ,EAKR;AACE,oBAAgB,IADlB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GALQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"「さ」が抜けています。\",\n \"expected\": \"$1さ$2\",\n \"tokens\": [\n {\n \"basic_form\": [\"良い\", \"無\", \"無い\"],\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$2\"\n }\n ]\n },\n];"],"file":"sanuki.js"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "助詞の連続",
5
+ "tokens": [{
6
+ "pos": "助詞"
7
+ }, {
8
+ "pos": "助詞",
9
+ "pos_detail_2": ["一般", "*"] //引用や連語ならスルー
10
+
11
+ }]
12
+ }, {
13
+ "message": '接続助詞と接続詞の連続',
14
+ "tokens": [{
15
+ "pos": "助詞",
16
+ "pos_detail_1": "接続助詞"
17
+ }, {
18
+ "pos": "接続詞"
19
+ }]
20
+ }, {
21
+ "message": '接続助詞と助動詞の連続',
22
+ "tokens": [{
23
+ "pos": "助詞",
24
+ "pos_detail_1": "接続助詞"
25
+ }, {
26
+ "pos": "助動詞"
27
+ }]
28
+ }];
29
+ //# sourceMappingURL=zyosi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/zyosi.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,OADb;AAEE,YAAU,CACR;AACE,WAAO;AADT,GADQ,EAGN;AACA,WAAO,IADP;AAEA,oBAAgB,CAAC,IAAD,EAAO,GAAP,CAFhB,CAE2B;;AAF3B,GAHM;AAFZ,CADe,EAYf;AACE,aAAW,aADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB;AAFlB,GADQ,EAIN;AACA,WAAO;AADP,GAJM;AAFZ,CAZe,EAuBf;AACE,aAAW,aADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB;AAFlB,GADQ,EAIN;AACA,WAAO;AADP,GAJM;AAFZ,CAvBe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"助詞の連続\",\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n },{\n \"pos\": \"助詞\",\n \"pos_detail_2\": [\"一般\", \"*\"]//引用や連語ならスルー\n }\n ]\n },\n {\n \"message\": '接続助詞と接続詞の連続',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n },{\n \"pos\": \"接続詞\",\n }\n ]\n },\n {\n \"message\": '接続助詞と助動詞の連続',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n },{\n \"pos\": \"助動詞\",\n }\n ]\n },\n];"],"file":"zyosi.js"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
+
10
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
11
+
12
+ var arrow = require('./dict/arrow');
13
+
14
+ class EnhancedEngine {
15
+ constructor() {}
16
+
17
+ checkRetasu(tokenizer, text) {
18
+ return _asyncToGenerator(function* () {
19
+ if (/れ$/.test(text)) {
20
+ text += "る";
21
+ }
22
+
23
+ var tokens = yield tokenizer(text);
24
+ var meirei = yield tokenizer(tokens[0].surface_form + "。");
25
+
26
+ if (meirei[0].conjugated_form == "命令e" || /五段/.test(meirei[0].conjugated_type)) {
27
+ // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉
28
+ if (!arrow.jidousi_tadousi.includes(meirei[0].surface_form)) {
29
+ // 許可リストにもない
30
+ return true;
31
+ }
32
+ }
33
+
34
+ return false;
35
+ })();
36
+ }
37
+
38
+ checkZyosi(tokenizer, text) {
39
+ return _asyncToGenerator(function* () {
40
+ var tokens = yield tokenizer(text);
41
+
42
+ if (!/終助詞/.test(tokens[1].pos_detail_1) && !(tokens[0].surface_form == "のみ" && /格助詞/.test(tokens[1].pos_detail_1)) && !/連体化/.test(tokens[1].pos_detail_1)) {
43
+ if (!arrow.zyosi.includes(tokens[0].surface_form + tokens[1].surface_form)) {
44
+ return true;
45
+ }
46
+ }
47
+
48
+ return false;
49
+ })();
50
+ }
51
+
52
+ }
53
+
54
+ var _default = new EnhancedEngine();
55
+
56
+ exports.default = _default;
57
+ //# sourceMappingURL=enhanced-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/enhanced-engine.js"],"names":["arrow","require","EnhancedEngine","constructor","checkRetasu","tokenizer","text","test","tokens","meirei","surface_form","conjugated_form","conjugated_type","jidousi_tadousi","includes","checkZyosi","pos_detail_1","zyosi"],"mappings":";;;;;;;;;;;AAAA,IAAMA,KAAK,GAAGC,OAAO,CAAC,cAAD,CAArB;;AAEA,MAAMC,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG,CACb;;AAEKC,EAAAA,WAAW,CAACC,SAAD,EAAYC,IAAZ,EAAiB;AAAA;AAChC,UAAG,KAAKC,IAAL,CAAUD,IAAV,CAAH,EAAmB;AACjBA,QAAAA,IAAI,IAAI,GAAR;AACD;;AACD,UAAIE,MAAM,SAASH,SAAS,CAACC,IAAD,CAA5B;AACA,UAAIG,MAAM,SAASJ,SAAS,CAACG,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,GAA1B,CAA5B;;AACA,UAAGD,MAAM,CAAC,CAAD,CAAN,CAAUE,eAAV,IAA6B,KAA7B,IAAsC,KAAKJ,IAAL,CAAUE,MAAM,CAAC,CAAD,CAAN,CAAUG,eAApB,CAAzC,EAA8E;AAC5E;AACA,YAAG,CAACZ,KAAK,CAACa,eAAN,CAAsBC,QAAtB,CAA+BL,MAAM,CAAC,CAAD,CAAN,CAAUC,YAAzC,CAAJ,EAA2D;AACzD;AACA,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AAbgC;AAcjC;;AAEKK,EAAAA,UAAU,CAACV,SAAD,EAAYC,IAAZ,EAAiB;AAAA;AAC/B,UAAIE,MAAM,SAASH,SAAS,CAACC,IAAD,CAA5B;;AACA,UAAG,CAAC,MAAMC,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUQ,YAArB,CAAD,IACE,EAAER,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,IAA0B,IAA1B,IAAkC,MAAMH,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUQ,YAArB,CAApC,CADF,IAEE,CAAC,MAAMT,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUQ,YAArB,CAFN,EAGG;AACD,YAAG,CAAChB,KAAK,CAACiB,KAAN,CAAYH,QAAZ,CAAqBN,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyBF,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAxD,CAAJ,EAA0E;AACxE,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AAV+B;AAWhC;;AAhCkB;;eAoCN,IAAIR,cAAJ,E","sourcesContent":["const arrow = require('./dict/arrow');\n\nclass EnhancedEngine {\n\n constructor() {\n }\n\n async checkRetasu(tokenizer, text){\n if(/れ$/.test(text)){\n text += \"る\";\n }\n let tokens = await tokenizer(text);\n let meirei = await tokenizer(tokens[0].surface_form + \"。\");\n if(meirei[0].conjugated_form == \"命令e\" || /五段/.test(meirei[0].conjugated_type)){\n // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉\n if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){\n // 許可リストにもない\n return true;\n }\n }\n return false;\n }\n\n async checkZyosi(tokenizer, text){\n let tokens = await tokenizer(text);\n if(!/終助詞/.test(tokens[1].pos_detail_1)\n && !(tokens[0].surface_form == \"のみ\" && /格助詞/.test(tokens[1].pos_detail_1))\n && !/連体化/.test(tokens[1].pos_detail_1)\n ){\n if(!arrow.zyosi.includes(tokens[0].surface_form + tokens[1].surface_form)){\n return true;\n }\n }\n return false;\n }\n\n}\n\nexport default new EnhancedEngine();"],"file":"enhanced-engine.js"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var Romanizer = require('js-hira-kata-romanize');
9
+
10
+ class ModifiedEngine {
11
+ constructor() {
12
+ this.romanizer = new Romanizer({
13
+ chouon: Romanizer.CHOUON_CIRCUMFLEX,
14
+ upper: Romanizer.UPPER_NONE
15
+ });
16
+ }
17
+
18
+ romanize(hiraganaOrKatakana) {
19
+ return this.romanizer.romanize(hiraganaOrKatakana);
20
+ }
21
+
22
+ }
23
+
24
+ var _default = new ModifiedEngine();
25
+
26
+ exports.default = _default;
27
+ //# sourceMappingURL=modified-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modified-engine.js"],"names":["Romanizer","require","ModifiedEngine","constructor","romanizer","chouon","CHOUON_CIRCUMFLEX","upper","UPPER_NONE","romanize","hiraganaOrKatakana"],"mappings":";;;;;;;AAAA,IAAMA,SAAS,GAAGC,OAAO,CAAC,uBAAD,CAAzB;;AAEA,MAAMC,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAIJ,SAAJ,CAAc;AAC7BK,MAAAA,MAAM,EAAEL,SAAS,CAACM,iBADW;AAE7BC,MAAAA,KAAK,EAAEP,SAAS,CAACQ;AAFY,KAAd,CAAjB;AAID;;AAEDC,EAAAA,QAAQ,CAACC,kBAAD,EAAoB;AAC1B,WAAO,KAAKN,SAAL,CAAeK,QAAf,CAAwBC,kBAAxB,CAAP;AACD;;AAXkB;;eAcN,IAAIR,cAAJ,E","sourcesContent":["const Romanizer = require('js-hira-kata-romanize');\n\nclass ModifiedEngine {\n\n constructor() {\n this.romanizer = new Romanizer({\n chouon: Romanizer.CHOUON_CIRCUMFLEX,\n upper: Romanizer.UPPER_NONE\n });\n }\n\n romanize(hiraganaOrKatakana){\n return this.romanizer.romanize(hiraganaOrKatakana);\n }\n}\n\nexport default new ModifiedEngine();"],"file":"modified-engine.js"}
@@ -9,13 +9,27 @@ var _morphemeMatchTextlint = require("morpheme-match-textlint");
9
9
 
10
10
  var _kuromojin = require("kuromojin");
11
11
 
12
+ var _enhancedEngine = _interopRequireDefault(require("./enhanced-engine"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
17
+
18
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
19
+
12
20
  var loadDictionaries = () => {
13
21
  // unavoidable
14
- var dict1 = require('./dict/dict');
22
+ var dict1 = require('./dict/zyosi');
23
+
24
+ var dict2 = require('./dict/gozidatuzi');
25
+
26
+ var dict3 = require('./dict/retasu');
15
27
 
16
- var dict2 = require('./dict/dict2');
28
+ var dict4 = require('./dict/sanuki');
17
29
 
18
- return dict1.concat(dict2);
30
+ var dict5 = require('./dict/saire');
31
+
32
+ return dict1.concat(dict2, dict3, dict4, dict5);
19
33
  };
20
34
 
21
35
  var reporter = context => {
@@ -30,23 +44,44 @@ var reporter = context => {
30
44
  tokenize: _kuromojin.tokenize,
31
45
  dictionaries: loadDictionaries()
32
46
  });
47
+ var engine = _enhancedEngine.default;
33
48
  return {
34
49
  [Syntax.Str](node) {
35
- var text = getSource(node);
36
- return matchAll(text).then(results => {
37
- results.forEach(result => {
38
- if (result.expected) {
39
- report(node, new RuleError(result.message, {
40
- index: result.index,
41
- fix: fixer.replaceTextRange(result.range, result.expected)
42
- }));
43
- } else {
44
- report(node, new RuleError(result.message, {
45
- index: result.index
46
- }));
50
+ return new Promise( /*#__PURE__*/function () {
51
+ var _ref = _asyncToGenerator(function* (resolve, reject) {
52
+ var text = getSource(node);
53
+ var results = yield matchAll(text);
54
+
55
+ for (var result of results) {
56
+ if (result.message == "れ足す言葉の可能性があります") {
57
+ if (!(yield engine.checkRetasu(_kuromojin.tokenize, text.slice(result.range[0], result.range[1])))) {
58
+ continue;
59
+ }
60
+ } else if (result.message == "助詞の連続") {
61
+ if (!(yield engine.checkZyosi(_kuromojin.tokenize, text.slice(result.range[0])))) {
62
+ continue;
63
+ }
64
+ }
65
+
66
+ if (result.expected) {
67
+ report(node, new RuleError(result.message, {
68
+ index: result.index,
69
+ fix: fixer.replaceTextRange(result.range, result.expected)
70
+ }));
71
+ } else {
72
+ report(node, new RuleError(result.message, {
73
+ index: result.index
74
+ }));
75
+ }
47
76
  }
77
+
78
+ resolve();
48
79
  });
49
- });
80
+
81
+ return function (_x, _x2) {
82
+ return _ref.apply(this, arguments);
83
+ };
84
+ }());
50
85
  }
51
86
 
52
87
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","Str","node","text","then","results","forEach","result","expected","message","index","fix","replaceTextRange","range","linter"],"mappings":";;;;;;;AAAA;;AACA;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC3B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,aAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,cAAD,CAAnB;;AACA,SAAOD,KAAK,CAACG,MAAN,CAAaD,KAAb,CAAP;AACH,CALD;;AAOA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC1B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACnCC,IAAAA,QAAQ,EAAEA,mBADyB;AAEnCC,IAAAA,YAAY,EAAEd,gBAAgB;AAFK,GAAtB,CAAjB;AAIA,SAAO;AACH,KAACO,MAAM,CAACQ,GAAR,EAAaC,IAAb,EAAmB;AACf,UAAMC,IAAI,GAAGN,SAAS,CAACK,IAAD,CAAtB;AACA,aAAOJ,QAAQ,CAACK,IAAD,CAAR,CAAeC,IAAf,CAAoBC,OAAO,IAAI;AAClCA,QAAAA,OAAO,CAACC,OAAR,CAAgBC,MAAM,IAAI;AACtB,cAAIA,MAAM,CAACC,QAAX,EAAqB;AACjBZ,YAAAA,MAAM,CAACM,IAAD,EAAO,IAAIR,SAAJ,CAAca,MAAM,CAACE,OAArB,EAA8B;AACvCC,cAAAA,KAAK,EAAEH,MAAM,CAACG,KADyB;AAEvCC,cAAAA,GAAG,EAAEhB,KAAK,CAACiB,gBAAN,CAAuBL,MAAM,CAACM,KAA9B,EAAqCN,MAAM,CAACC,QAA5C;AAFkC,aAA9B,CAAP,CAAN;AAIH,WALD,MAKO;AACHZ,YAAAA,MAAM,CAACM,IAAD,EAAO,IAAIR,SAAJ,CAAca,MAAM,CAACE,OAArB,EAA8B;AACvCC,cAAAA,KAAK,EAAEH,MAAM,CAACG;AADyB,aAA9B,CAAP,CAAN;AAGH;AACJ,SAXD;AAYH,OAbM,CAAP;AAcH;;AAjBE,GAAP;AAmBH,CAzBD;;eA2Be;AACXI,EAAAA,MAAM,EAAEvB,QADG;AAEXI,EAAAA,KAAK,EAAEJ;AAFI,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/dict');\n let dict2 = require('./dict/dict2');\n return dict1.concat(dict2)\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n return {\n [Syntax.Str](node) {\n const text = getSource(node);\n return matchAll(text).then(results => {\n results.forEach(result => {\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n });\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
1
+ {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","dict3","dict4","dict5","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","engine","EnhancedEngine","Str","node","Promise","resolve","reject","text","results","result","message","checkRetasu","slice","range","checkZyosi","expected","index","fix","replaceTextRange","linter"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC7B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,cAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,mBAAD,CAAnB;;AACA,MAAIE,KAAK,GAAGF,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAIG,KAAK,GAAGH,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAII,KAAK,GAAGJ,OAAO,CAAC,cAAD,CAAnB;;AACA,SAAOD,KAAK,CAACM,MAAN,CAAaJ,KAAb,EAAoBC,KAApB,EAA2BC,KAA3B,EAAkCC,KAAlC,CAAP;AACD,CARD;;AAUA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC5B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACrCC,IAAAA,QAAQ,EAAEA,mBAD2B;AAErCC,IAAAA,YAAY,EAAEjB,gBAAgB;AAFO,GAAtB,CAAjB;AAIA,MAAMkB,MAAM,GAAGC,uBAAf;AACA,SAAO;AACL,KAACT,MAAM,CAACU,GAAR,EAAaC,IAAb,EAAmB;AACjB,aAAO,IAAIC,OAAJ;AAAA,qCAAY,WAAOC,OAAP,EAAgBC,MAAhB,EAA2B;AAC5C,cAAMC,IAAI,GAAGX,SAAS,CAACO,IAAD,CAAtB;AACA,cAAIK,OAAO,SAASX,QAAQ,CAACU,IAAD,CAA5B;;AACA,eAAK,IAAME,MAAX,IAAqBD,OAArB,EAA8B;AAC5B,gBAAGC,MAAM,CAACC,OAAP,IAAkB,gBAArB,EAAsC;AACpC,kBAAG,QAAQV,MAAM,CAACW,WAAP,CAAmBb,mBAAnB,EAA6BS,IAAI,CAACK,KAAL,CAAWH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAX,EAA2BJ,MAAM,CAACI,KAAP,CAAa,CAAb,CAA3B,CAA7B,CAAR,CAAH,EAAsF;AACpF;AACD;AACF,aAJD,MAIM,IAAGJ,MAAM,CAACC,OAAP,IAAkB,OAArB,EAA6B;AACjC,kBAAG,QAAQV,MAAM,CAACc,UAAP,CAAkBhB,mBAAlB,EAA4BS,IAAI,CAACK,KAAL,CAAWH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAX,CAA5B,CAAR,CAAH,EAAqE;AACnE;AACD;AACF;;AACD,gBAAIJ,MAAM,CAACM,QAAX,EAAqB;AACnBpB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCM,gBAAAA,KAAK,EAAEP,MAAM,CAACO,KAD2B;AAEzCC,gBAAAA,GAAG,EAAEvB,KAAK,CAACwB,gBAAN,CAAuBT,MAAM,CAACI,KAA9B,EAAqCJ,MAAM,CAACM,QAA5C;AAFoC,eAA9B,CAAP,CAAN;AAID,aALD,MAKO;AACLpB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCM,gBAAAA,KAAK,EAAEP,MAAM,CAACO;AAD2B,eAA9B,CAAP,CAAN;AAGD;AACF;;AACDX,UAAAA,OAAO;AACR,SAzBM;;AAAA;AAAA;AAAA;AAAA,UAAP;AA0BD;;AA5BI,GAAP;AA8BD,CArCD;;eAuCe;AACbc,EAAAA,MAAM,EAAE7B,QADK;AAEbI,EAAAA,KAAK,EAAEJ;AAFM,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\nimport EnhancedEngine from \"./enhanced-engine\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/zyosi');\n let dict2 = require('./dict/gozidatuzi');\n let dict3 = require('./dict/retasu');\n let dict4 = require('./dict/sanuki');\n let dict5 = require('./dict/saire');\n return dict1.concat(dict2, dict3, dict4, dict5);\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n const engine = EnhancedEngine\n return {\n [Syntax.Str](node) {\n return new Promise(async (resolve, reject) => {\n const text = getSource(node);\n let results = await matchAll(text);\n for (const result of results) {\n if(result.message == \"れ足す言葉の可能性があります\"){\n if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){\n continue;\n }\n }else if(result.message == \"助詞の連続\"){\n if(!(await engine.checkZyosi(tokenize, text.slice(result.range[0])))){\n continue;\n }\n }\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n }\n resolve();\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.1",
2
+ "version": "1.1.1",
3
3
  "keywords": [
4
4
  "textlintrule"
5
5
  ],
@@ -0,0 +1,79 @@
1
+ module.exports = {
2
+ "jidousi_tadousi": [
3
+ "開け",
4
+ "あけ",
5
+ ],
6
+ "zyosi": [
7
+ "こそは",
8
+ "こそを",
9
+ "からが",
10
+ "からは",
11
+ "をこそ",
12
+ "とやら",
13
+ "やらが",
14
+ "までも",
15
+ "までもが",
16
+ "ばかりか",
17
+ "ばかりが",
18
+ "ばかりは",
19
+ "ばかりを",
20
+ "ばっかりか",
21
+ "ばっかりが",
22
+ "ばっかりは",
23
+ "ばっかりを",
24
+ "などばかり",
25
+ "などばっかり",
26
+ "などが",
27
+ "なども",
28
+ "などは",
29
+ "などを",
30
+ "とかが",
31
+ "とかも",
32
+ "とかは",
33
+ "とかを",
34
+ "とかばかり",
35
+ "とかばっかり",
36
+ "にも",
37
+ "ばかりに",
38
+ "にだって",
39
+ "とかだって",
40
+ "などだって",
41
+ "にも",
42
+ "のかも",
43
+ "にかも",
44
+ "とが",
45
+ "とも",
46
+ "とは",
47
+ "さえも",
48
+ "にさえ",
49
+ "とさえ",
50
+ "すらも",
51
+ "にすら",
52
+ "とすら",
53
+ "だけが",
54
+ "だけを",
55
+ "ほども",
56
+ "ほどを",
57
+ "でも",
58
+ "てでも",
59
+ "たりも",
60
+ "たりが",
61
+ "たりは",
62
+ "たりさえ",
63
+ "たりすら",
64
+ "たりなど",
65
+ "ながらも",
66
+ "つつも",
67
+ "なりが",
68
+ "なりを",
69
+ "になんて",
70
+ "もなんて",
71
+ "ばかりなんて",
72
+ "ばっかりなんて",
73
+ "だけを",
74
+ "だけが",
75
+ "だけは",
76
+ "だけかも",
77
+ "だけかも",
78
+ ]
79
+ };
@@ -0,0 +1,68 @@
1
+ module.exports = [
2
+ {
3
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
+ "expected": "を適用",
5
+ "tokens": [
6
+ {
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ },
18
+ {
19
+ "surface_form": "適応",
20
+ "pos": "名詞",
21
+ "pos_detail_1": "サ変接続",
22
+ "pos_detail_2": "*",
23
+ "pos_detail_3": "*",
24
+ "conjugated_type": "*",
25
+ "conjugated_form": "*",
26
+ "basic_form": "適応",
27
+ "reading": "テキオウ",
28
+ "pronunciation": "テキオー"
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
34
+ "expected": "$1づらい",
35
+ "tokens": [
36
+ {
37
+ "pos": "動詞",
38
+ "pos_detail_1": "自立",
39
+ "conjugated_form": "連用形",
40
+ "_capture": "$1"
41
+ },
42
+ {
43
+ "surface_form": "ず",
44
+ },
45
+ {
46
+ "surface_form": "らい",
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
52
+ "expected": "$1づらい",
53
+ "tokens": [
54
+ {
55
+ "pos": "動詞",
56
+ "pos_detail_1": "自立",
57
+ "conjugated_form": "連用形",
58
+ "_capture": "$1"
59
+ },
60
+ {
61
+ "surface_form": "ずら",
62
+ },
63
+ {
64
+ "surface_form": "い",
65
+ }
66
+ ]
67
+ }
68
+ ];
@@ -0,0 +1,16 @@
1
+ module.exports = [
2
+ {
3
+ "message": "れ足す言葉の可能性があります",
4
+ "tokens": [
5
+ {
6
+ "pos": "動詞",
7
+ "conjugated_type": "一段",
8
+ },
9
+ {
10
+ "pos": "動詞",
11
+ "pos_detail_1": "接尾",
12
+ "basic_form": "れる",
13
+ }
14
+ ]
15
+ },
16
+ ];
@@ -0,0 +1,46 @@
1
+ module.exports = [
2
+ {
3
+ "message": "不要な「さ」が挿入されています。",
4
+ "expected": "$2$3",
5
+ "tokens": [
6
+ {
7
+ "conjugated_form": "ガル接続",
8
+ "basic_form": ["辛い", "美味しい", "寒い"],
9
+ "_capture": "$2"
10
+ },
11
+ {
12
+ "surface_form": "さ",
13
+ "_index": true
14
+ },
15
+ {
16
+ "basic_form": "そう",
17
+ "pos_detail_1": ["接尾", "助詞類接続"],
18
+ "_capture": "$3"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "message": "不要な「さ」が挿入されています。",
24
+ "expected": "$1$2$3",
25
+ "tokens": [
26
+ {
27
+ "pos": "動詞",
28
+ "_capture": "$1"
29
+ },
30
+ {
31
+ "surface_form": "た",
32
+ "pos": "助動詞",
33
+ "_capture": "$2"
34
+ },
35
+ {
36
+ "surface_form": "さ",
37
+ "_index": true
38
+ },
39
+ {
40
+ "basic_form": "そう",
41
+ "pos_detail_1": ["接尾", "助詞類接続"],
42
+ "_capture": "$3"
43
+ }
44
+ ]
45
+ },
46
+ ];
@@ -0,0 +1,17 @@
1
+ module.exports = [
2
+ {
3
+ "message": "「さ」が抜けています。",
4
+ "expected": "$1さ$2",
5
+ "tokens": [
6
+ {
7
+ "basic_form": ["良い", "無", "無い"],
8
+ "_capture": "$1"
9
+ },
10
+ {
11
+ "surface_form": "そう",
12
+ "pos_detail_1": ["接尾", "助詞類接続"],
13
+ "_capture": "$2"
14
+ }
15
+ ]
16
+ },
17
+ ];
@@ -0,0 +1,35 @@
1
+ module.exports = [
2
+ {
3
+ "message": "助詞の連続",
4
+ "tokens": [
5
+ {
6
+ "pos": "助詞",
7
+ },{
8
+ "pos": "助詞",
9
+ "pos_detail_2": ["一般", "*"]//引用や連語ならスルー
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ "message": '接続助詞と接続詞の連続',
15
+ "tokens": [
16
+ {
17
+ "pos": "助詞",
18
+ "pos_detail_1": "接続助詞",
19
+ },{
20
+ "pos": "接続詞",
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "message": '接続助詞と助動詞の連続',
26
+ "tokens": [
27
+ {
28
+ "pos": "助詞",
29
+ "pos_detail_1": "接続助詞",
30
+ },{
31
+ "pos": "助動詞",
32
+ }
33
+ ]
34
+ },
35
+ ];
@@ -0,0 +1,39 @@
1
+ const arrow = require('./dict/arrow');
2
+
3
+ class EnhancedEngine {
4
+
5
+ constructor() {
6
+ }
7
+
8
+ async checkRetasu(tokenizer, text){
9
+ if(/れ$/.test(text)){
10
+ text += "る";
11
+ }
12
+ let tokens = await tokenizer(text);
13
+ let meirei = await tokenizer(tokens[0].surface_form + "。");
14
+ if(meirei[0].conjugated_form == "命令e" || /五段/.test(meirei[0].conjugated_type)){
15
+ // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉
16
+ if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){
17
+ // 許可リストにもない
18
+ return true;
19
+ }
20
+ }
21
+ return false;
22
+ }
23
+
24
+ async checkZyosi(tokenizer, text){
25
+ let tokens = await tokenizer(text);
26
+ if(!/終助詞/.test(tokens[1].pos_detail_1)
27
+ && !(tokens[0].surface_form == "のみ" && /格助詞/.test(tokens[1].pos_detail_1))
28
+ && !/連体化/.test(tokens[1].pos_detail_1)
29
+ ){
30
+ if(!arrow.zyosi.includes(tokens[0].surface_form + tokens[1].surface_form)){
31
+ return true;
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+
37
+ }
38
+
39
+ export default new EnhancedEngine();
@@ -1,41 +1,57 @@
1
1
  import { createTextlintMatcher } from "morpheme-match-textlint";
2
2
  import { tokenize } from "kuromojin";
3
+ import EnhancedEngine from "./enhanced-engine";
3
4
 
4
5
  const loadDictionaries = () => {
5
- // unavoidable
6
- let dict1 = require('./dict/dict');
7
- let dict2 = require('./dict/dict2');
8
- return dict1.concat(dict2)
6
+ // unavoidable
7
+ let dict1 = require('./dict/zyosi');
8
+ let dict2 = require('./dict/gozidatuzi');
9
+ let dict3 = require('./dict/retasu');
10
+ let dict4 = require('./dict/sanuki');
11
+ let dict5 = require('./dict/saire');
12
+ return dict1.concat(dict2, dict3, dict4, dict5);
9
13
  }
10
14
 
11
15
  const reporter = (context) => {
12
- const { Syntax, RuleError, fixer, report, getSource } = context;
13
- const matchAll = createTextlintMatcher({
14
- tokenize: tokenize,
15
- dictionaries: loadDictionaries()
16
- });
17
- return {
18
- [Syntax.Str](node) {
19
- const text = getSource(node);
20
- return matchAll(text).then(results => {
21
- results.forEach(result => {
22
- if (result.expected) {
23
- report(node, new RuleError(result.message, {
24
- index: result.index,
25
- fix: fixer.replaceTextRange(result.range, result.expected)
26
- }));
27
- } else {
28
- report(node, new RuleError(result.message, {
29
- index: result.index
30
- }));
31
- }
32
- });
33
- });
16
+ const { Syntax, RuleError, fixer, report, getSource } = context;
17
+ const matchAll = createTextlintMatcher({
18
+ tokenize: tokenize,
19
+ dictionaries: loadDictionaries()
20
+ });
21
+ const engine = EnhancedEngine
22
+ return {
23
+ [Syntax.Str](node) {
24
+ return new Promise(async (resolve, reject) => {
25
+ const text = getSource(node);
26
+ let results = await matchAll(text);
27
+ for (const result of results) {
28
+ if(result.message == "れ足す言葉の可能性があります"){
29
+ if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){
30
+ continue;
31
+ }
32
+ }else if(result.message == "助詞の連続"){
33
+ if(!(await engine.checkZyosi(tokenize, text.slice(result.range[0])))){
34
+ continue;
35
+ }
36
+ }
37
+ if (result.expected) {
38
+ report(node, new RuleError(result.message, {
39
+ index: result.index,
40
+ fix: fixer.replaceTextRange(result.range, result.expected)
41
+ }));
42
+ } else {
43
+ report(node, new RuleError(result.message, {
44
+ index: result.index
45
+ }));
46
+ }
34
47
  }
35
- };
48
+ resolve();
49
+ });
50
+ }
51
+ };
36
52
  };
37
53
 
38
54
  export default {
39
- linter: reporter,
40
- fixer: reporter
55
+ linter: reporter,
56
+ fixer: reporter
41
57
  };
package/src/dict/dict.js DELETED
@@ -1,55 +0,0 @@
1
- module.exports = [
2
- {
3
- message: `"することが可能$1"は冗長な表現です。"することが可能"を省き簡潔な表現にすると文章が明瞭になります。`,
4
- tokens: [
5
- {
6
- "surface_form": "する",
7
- "pos": "動詞",
8
- "pos_detail_1": "自立",
9
- "pos_detail_2": "*",
10
- "pos_detail_3": "*",
11
- "conjugated_type": "サ変・スル",
12
- "conjugated_form": "基本形",
13
- "basic_form": "する",
14
- "reading": "スル",
15
- "pronunciation": "スル"
16
- }, {
17
- "surface_form": "こと",
18
- "pos": "名詞",
19
- "pos_detail_1": "非自立",
20
- "pos_detail_2": "一般",
21
- "pos_detail_3": "*",
22
- "conjugated_type": "*",
23
- "conjugated_form": "*",
24
- "basic_form": "こと",
25
- "reading": "コト",
26
- "pronunciation": "コト"
27
- }, {
28
- "surface_form": "が",
29
- "pos": "助詞",
30
- "pos_detail_1": "格助詞",
31
- "pos_detail_2": "一般",
32
- "pos_detail_3": "*",
33
- "conjugated_type": "*",
34
- "conjugated_form": "*",
35
- "basic_form": "が",
36
- "reading": "ガ",
37
- "pronunciation": "ガ"
38
- }, {
39
- "surface_form": "可能",
40
- "pos": "名詞",
41
- "pos_detail_1": "形容動詞語幹",
42
- "pos_detail_2": "*",
43
- "pos_detail_3": "*",
44
- "conjugated_type": "*",
45
- "conjugated_form": "*",
46
- "basic_form": "可能",
47
- "reading": "カノウ",
48
- "pronunciation": "カノー"
49
- }, {
50
- "pos": "助動詞",
51
- "_capture": "$1"
52
- }
53
- ]
54
- },
55
- ];
package/src/dict/dict2.js DELETED
@@ -1,32 +0,0 @@
1
- module.exports = [
2
- {
3
- "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
- "expected": "を適用",
5
- "tokens": [
6
- {
7
- "surface_form": "を",
8
- "pos": "助詞",
9
- "pos_detail_1": "格助詞",
10
- "pos_detail_2": "一般",
11
- "pos_detail_3": "*",
12
- "conjugated_type": "*",
13
- "conjugated_form": "*",
14
- "basic_form": "を",
15
- "reading": "ヲ",
16
- "pronunciation": "ヲ"
17
- },
18
- {
19
- "surface_form": "適応",
20
- "pos": "名詞",
21
- "pos_detail_1": "サ変接続",
22
- "pos_detail_2": "*",
23
- "pos_detail_3": "*",
24
- "conjugated_type": "*",
25
- "conjugated_form": "*",
26
- "basic_form": "適応",
27
- "reading": "テキオウ",
28
- "pronunciation": "テキオー"
29
- }
30
- ]
31
- },
32
- ];