@doujinreviewers/textlint-rule-for-creation 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+
3
+ module.exports = [// {
4
+ // "message": "助詞の連続",
5
+ // "tokens": [
6
+ // {
7
+ // "pos": "助詞",
8
+ // },{
9
+ // "pos": "助詞",
10
+ // "pos_detail_2": ["一般", "*"]//引用や連語ならスルー
11
+ // }
12
+ // ]
13
+ // },
14
+ {
15
+ "message": "助詞の連続",
16
+ "expected": '$1',
17
+ "tokens": [{
18
+ "pos": "助詞",
19
+ "pos_detail_1": "係助詞",
20
+ "_capture": "$1"
21
+ }, {
22
+ "pos": "助詞",
23
+ "pos_detail_1": "係助詞",
24
+ "_capture": "$2"
25
+ }]
26
+ }, {
27
+ "message": "助詞の連続",
28
+ "expected": '$1',
29
+ "tokens": [{
30
+ "surface_form": ["が", "を"],
31
+ "pos": "助詞",
32
+ "pos_detail_1": "格助詞",
33
+ "_capture": "$1"
34
+ }, {
35
+ "pos": "助詞",
36
+ "pos_detail_1": "係助詞",
37
+ "_capture": "$2"
38
+ }]
39
+ }, {
40
+ "message": "助詞の連続",
41
+ "expected": '$1',
42
+ "tokens": [{
43
+ "surface_form": ["が", "を", "で", "に", "へ", "より"],
44
+ "pos": "助詞",
45
+ "pos_detail_1": "格助詞",
46
+ "_capture": "$1"
47
+ }, {
48
+ "pos": "助詞",
49
+ "pos_detail_1": "助詞",
50
+ "_capture": "$2"
51
+ }]
52
+ }, {
53
+ "message": "助詞の連続",
54
+ "expected": '$1',
55
+ "tokens": [{
56
+ "pos": "助詞",
57
+ "pos_detail_1": "格助詞",
58
+ "_capture": "$1"
59
+ }, {
60
+ "pos": "助詞",
61
+ "pos_detail_1": "格助詞",
62
+ "_capture": "$2"
63
+ }]
64
+ }, {
65
+ "message": "助詞の連続",
66
+ "expected": '$1',
67
+ "tokens": [{
68
+ "surface_form": "を",
69
+ "pos": "助詞",
70
+ "pos_detail_1": "格助詞",
71
+ "_capture": "$1"
72
+ }, {
73
+ "pos": "助詞",
74
+ "pos_detail_1": "副助詞",
75
+ "_capture": "$2"
76
+ }]
77
+ }, {
78
+ "message": "助詞の連続",
79
+ "expected": '$1',
80
+ "tokens": [{
81
+ "pos": "助詞",
82
+ "pos_detail_1": '連体化',
83
+ "_capture": "$1"
84
+ }, {
85
+ "pos": "助詞",
86
+ "pos_detail_1": '連体化',
87
+ "_capture": "$2"
88
+ }]
89
+ }, {
90
+ "message": "助詞の連続",
91
+ "expected": '$1',
92
+ "tokens": [{
93
+ "pos": "助詞",
94
+ "pos_detail_1": '格助詞',
95
+ "_capture": "$1"
96
+ }, {
97
+ "pos": "助詞",
98
+ "pos_detail_1": '連体化',
99
+ "_capture": "$2"
100
+ }]
101
+ }, {
102
+ "message": "助詞の連続",
103
+ "expected": '$1',
104
+ "tokens": [{
105
+ "pos": "助詞",
106
+ "pos_detail_1": '並立助詞',
107
+ "_capture": "$1"
108
+ }, {
109
+ "pos": "助詞",
110
+ "_capture": "$2"
111
+ }]
112
+ }, {
113
+ "message": "助詞の連続",
114
+ "expected": '$1',
115
+ "tokens": [{
116
+ "pos": "助詞",
117
+ "pos_detail_1": '副詞化',
118
+ "_capture": "$1"
119
+ }, {
120
+ "pos": "助詞",
121
+ "pos_detail_1": "格助詞",
122
+ "_capture": "$2"
123
+ }]
124
+ }, {
125
+ "message": '助詞の連続',
126
+ "expected": '$1',
127
+ "tokens": [{
128
+ "pos": "助詞",
129
+ "pos_detail_1": "接続助詞",
130
+ "_capture": "$1"
131
+ }, {
132
+ "pos": "副詞化",
133
+ "_capture": "$2"
134
+ }]
135
+ }, // {
136
+ // "message": '助動詞の連続',
137
+ // "tokens": [
138
+ // {
139
+ // "pos": "助動詞",
140
+ // },{
141
+ // "pos": "助動詞",
142
+ // }
143
+ // ]
144
+ // },
145
+ {
146
+ "message": '接続助詞と接続詞の連続',
147
+ "expected": '$1',
148
+ "tokens": [{
149
+ "pos": "助詞",
150
+ "pos_detail_1": "接続助詞",
151
+ "_capture": "$1"
152
+ }, {
153
+ "surface_form": ["で", "が", "の", "を", "へ", "や"],
154
+ "pos": "接続詞",
155
+ "_capture": "$2"
156
+ }]
157
+ }, {
158
+ "message": '接続助詞と助動詞の連続',
159
+ "expected": '$1',
160
+ "tokens": [{
161
+ "pos": "助詞",
162
+ "pos_detail_1": "接続助詞",
163
+ "_capture": "$1"
164
+ }, {
165
+ "surface_form": ["で", "が", "の", "を", "へ", "や"],
166
+ "pos": "助動詞",
167
+ "_capture": "$2"
168
+ }]
169
+ }];
170
+ //# sourceMappingURL=zyosi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/zyosi.js"],"names":["module","exports"],"mappings":"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","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 \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"係助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"係助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"surface_form\": [\"が\", \"を\"],\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"係助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"surface_form\": [\"が\", \"を\", \"で\", \"に\", \"へ\", \"より\"],\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"副助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": '連体化',\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": '連体化',\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": '格助詞',\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": '連体化',\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": '並立助詞',\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": \"助詞の連続\",\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": '副詞化',\n \"_capture\": \"$1\"\n },{\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": '助詞の連続',\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n \"_capture\": \"$1\"\n },{\n \"pos\": \"副詞化\",\n \"_capture\": \"$2\"\n }\n ]\n },\n // {\n // \"message\": '助動詞の連続',\n // \"tokens\": [\n // {\n // \"pos\": \"助動詞\",\n // },{\n // \"pos\": \"助動詞\",\n // }\n // ]\n // },\n {\n \"message\": '接続助詞と接続詞の連続',\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n \"_capture\": \"$1\"\n },{\n \"surface_form\": [\"で\",\"が\",\"の\",\"を\",\"へ\",\"や\"],\n \"pos\": \"接続詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n {\n \"message\": '接続助詞と助動詞の連続',\n \"expected\": '$1',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n \"_capture\": \"$1\"\n },{\n \"surface_form\": [\"で\",\"が\",\"の\",\"を\",\"へ\",\"や\"],\n \"pos\": \"助動詞\",\n \"_capture\": \"$2\"\n }\n ]\n },\n];"],"file":"zyosi.js"}
@@ -0,0 +1,79 @@
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, result, fulltext) {
39
+ return _asyncToGenerator(function* () {
40
+ var piece = fulltext.slice(result.range[0], result.range[1]);
41
+
42
+ if (arrow.zyosi.includes(piece)) {
43
+ return false;
44
+ }
45
+
46
+ var fulltokens = yield tokenizer(fulltext);
47
+ var tokens = [];
48
+ fulltokens.reduce((prev, current) => {
49
+ if (prev.pos == "助詞" && current.pos == "助詞") {
50
+ if (prev.surface_form + current.surface_form == piece) {
51
+ tokens = [prev, current];
52
+ }
53
+ }
54
+
55
+ return current;
56
+ });
57
+
58
+ if (new RegExp(tokens[0].surface_form.repeat(3) + "|" + tokens[0].surface_form.repeat(2) + "[~〜ー!!]").test(fulltext)) {
59
+ return false;
60
+ }
61
+
62
+ if (tokens[0].surface_form == tokens[1].surface_form) {
63
+ return true;
64
+ }
65
+
66
+ if (/終助詞/.test(tokens[0].pos_detail_1) || /終助詞/.test(tokens[1].pos_detail_1) || /接続助詞/.test(tokens[0].pos_detail_1) || /のみ|から|だけ|とか|など|まで|ばかり|ばっかり|/.test(tokens[0].surface_form) && /格助詞/.test(tokens[1].pos_detail_1) || /連体化/.test(tokens[1].pos_detail_1) || /格助詞/.test(tokens[0].pos_detail_1) && /係助詞/.test(tokens[1].pos_detail_1) && !/[をが]/.test(tokens[0].surface_form) || /特殊/.test(tokens[0].pos_detail_1) || /特殊/.test(tokens[1].pos_detail_1) || /引用/.test(tokens[0].pos_detail_2) && /接続助詞/.test(tokens[1].pos_detail_1)) {
67
+ return false;
68
+ }
69
+
70
+ return true;
71
+ })();
72
+ }
73
+
74
+ }
75
+
76
+ var _default = new EnhancedEngine();
77
+
78
+ exports.default = _default;
79
+ //# 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","result","fulltext","piece","slice","range","zyosi","fulltokens","reduce","prev","current","pos","RegExp","repeat","pos_detail_1","pos_detail_2"],"mappings":"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","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, result, fulltext){\n let piece = fulltext.slice(result.range[0], result.range[1]);\n if(arrow.zyosi.includes(piece)){\n return false;\n }\n let fulltokens = await tokenizer(fulltext);\n let tokens = [];\n fulltokens.reduce((prev, current) => {\n if (prev.pos == \"助詞\" && current.pos == \"助詞\") {\n if(prev.surface_form + current.surface_form == piece){\n tokens = [prev, current];\n }\n }\n return current;\n });\n if(new RegExp(tokens[0].surface_form.repeat(3) + \"|\" + tokens[0].surface_form.repeat(2) + \"[~〜ー!!]\").test(fulltext)){\n return false;\n }\n if(tokens[0].surface_form == tokens[1].surface_form){\n return true;\n }\n if((/終助詞/.test(tokens[0].pos_detail_1) || /終助詞/.test(tokens[1].pos_detail_1))\n || /接続助詞/.test(tokens[0].pos_detail_1)\n || (/のみ|から|だけ|とか|など|まで|ばかり|ばっかり|/.test(tokens[0].surface_form) && /格助詞/.test(tokens[1].pos_detail_1))\n || /連体化/.test(tokens[1].pos_detail_1)\n || ((/格助詞/.test(tokens[0].pos_detail_1) && /係助詞/.test(tokens[1].pos_detail_1)) && !/[をが]/.test(tokens[0].surface_form))\n || (/特殊/.test(tokens[0].pos_detail_1) || /特殊/.test(tokens[1].pos_detail_1))\n || (/引用/.test(tokens[0].pos_detail_2) && /接続助詞/.test(tokens[1].pos_detail_1))\n ){\n return false;\n }\n return true;\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"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _morphemeMatchTextlint = require("morpheme-match-textlint");
9
+
10
+ var _kuromojin = require("kuromojin");
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
+
20
+ var loadDictionaries = () => {
21
+ // unavoidable
22
+ var dict1 = require('./dict/zyosi');
23
+
24
+ var dict2 = require('./dict/gozidatuzi');
25
+
26
+ var dict3 = require('./dict/retasu');
27
+
28
+ var dict4 = require('./dict/sanuki');
29
+
30
+ var dict5 = require('./dict/saire');
31
+
32
+ return dict1.concat(dict2, dict3, dict4, dict5);
33
+ };
34
+
35
+ var reporter = context => {
36
+ var {
37
+ Syntax,
38
+ RuleError,
39
+ fixer,
40
+ report,
41
+ getSource
42
+ } = context;
43
+ var matchAll = (0, _morphemeMatchTextlint.createTextlintMatcher)({
44
+ tokenize: _kuromojin.tokenize,
45
+ dictionaries: loadDictionaries()
46
+ });
47
+ var engine = _enhancedEngine.default;
48
+ return {
49
+ [Syntax.Str](node) {
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, result, text))) {
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
+ }
76
+ }
77
+
78
+ resolve();
79
+ });
80
+
81
+ return function (_x, _x2) {
82
+ return _ref.apply(this, arguments);
83
+ };
84
+ }());
85
+ }
86
+
87
+ };
88
+ };
89
+
90
+ var _default = {
91
+ linter: reporter,
92
+ fixer: reporter
93
+ };
94
+ exports.default = _default;
95
+ //# sourceMappingURL=textlint-rule-for-creation.js.map
@@ -0,0 +1 @@
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,EAA4BW,MAA5B,EAAoCF,IAApC,CAAR,CAAH,EAAsD;AACpD;AACD;AACF;;AACD,gBAAIE,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, result, text))){\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 ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "version": "1.2.1",
3
+ "keywords": [
4
+ "textlintrule"
5
+ ],
6
+ "main": "lib/textlint-rule-for-creation.js",
7
+ "files": [
8
+ "lib/",
9
+ "src/"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/doujinreviewers/textlint-rule-for-creation.git"
14
+ },
15
+ "homepage": "https://github.com/doujinreviewers/textlint-rule-for-creation",
16
+ "bugs": {
17
+ "url": "https://github.com/doujinreviewers/textlint-rule-for-creation/issues"
18
+ },
19
+ "scripts": {
20
+ "test": "textlint-scripts test",
21
+ "build": "textlint-scripts build",
22
+ "prepublish": "npm run --if-present build"
23
+ },
24
+ "devDependencies": {
25
+ "textlint-scripts": "^12.0.2",
26
+ "textlint-tester": "^12.0.2"
27
+ },
28
+ "name": "@doujinreviewers/textlint-rule-for-creation",
29
+ "author": "同人Reviewers",
30
+ "license": "MIT",
31
+ "description": "日本語の明確な誤りのみを検出するクリエイター向けtextlintルール",
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "dependencies": {
36
+ "kuromojin": "^3.0.0",
37
+ "morpheme-match-textlint": "^2.0.6"
38
+ }
39
+ }
@@ -0,0 +1,93 @@
1
+ module.exports = {
2
+ "jidousi_tadousi": [
3
+ "開け",
4
+ "あけ",
5
+ ],
6
+ // 整理する気はない
7
+ "zyosi": [
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
+ "もなんて",
80
+ "ばかりなんて",
81
+ "ばっかりなんて",
82
+ "だけを",
83
+ "だけが",
84
+ "だけは",
85
+ "だけに",
86
+ "だけかも",
87
+ "だけかも",
88
+ "なと",
89
+ "てから",
90
+ "では",
91
+ "なんかに",
92
+ ]
93
+ };
@@ -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
+ ];