@doujinreviewers/textlint-rule-for-creation 0.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 レヴューちゃん
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # textlint-rule-for-creation
2
+ 日本語の明確な誤りのみを検出するtextlintルール
3
+
4
+ 創作での使用を想定し、クリエイターの邪魔をしないことを目指す
5
+
6
+ ## 誤りとするもの
7
+ - 誤字脱字
8
+ - 助詞の連続
9
+ - サ抜き言葉、サ入れ言葉、れ足す言葉
10
+
11
+ ## 表現の範疇として許容するもの
12
+ - 誤りとするもの以外の全て
13
+
14
+ 例えば、文章の形式、スタイル、文体、文の冗長さ、二重否定、二重助詞、表記ゆれ、送り仮名のゆれ、記号や三点リーダーの使い方など
15
+
16
+ - ら抜き言葉
17
+
18
+ これで喋るキャラがいるかもしれないし、作品の雰囲気に必要かもしれない
19
+
20
+ ## インストール
21
+
22
+ npm install textlint-rule-for-creation
23
+
24
+ ## 使い方
25
+
26
+ `.textlintrc`に設定して使う
27
+
28
+ ```json
29
+ {
30
+ "rules": {
31
+ "for-creation": true
32
+ }
33
+ }
34
+ ```
35
+
36
+ コマンドラインで使う
37
+
38
+ ```
39
+ textlint --rule for-creation README.md
40
+ ```
41
+
42
+ ### Build
43
+
44
+ `src/` 以下がソースコード
45
+
46
+ ビルド後のコードは `lib` フォルダーに入る
47
+
48
+ npm run build
49
+
50
+ ### Test
51
+
52
+ [textlint-tester](https://github.com/textlint/textlint-tester)で `test` フォルダのコードを実行
53
+
54
+ npm test
55
+
56
+ ## License
57
+
58
+ MIT
59
+
60
+ ## 特記
61
+ [script-compiler](https://github.com/textlint/editor/tree/master/packages/%40textlint/script-compiler)でworkerにコンパイルして使いたいが、
62
+
63
+ 2022年1月の時点では外部ファイルのロードに問題がある(nodeのfsモジュールがブラウザで動作しないため)
64
+
65
+ そのため、本ルールではfsモジュールを使用しなくても良いようにしている
66
+
67
+ 問題が修正されるまではこの設計を維持する
68
+
69
+ ## 参考
70
+ ### worker
71
+
72
+ [textlint 12リリース、ブラウザで動くtextlint editorをベータリリース](https://efcl.info/2021/05/27/textlint-12-editor/)
73
+
74
+ ### ルール
75
+ []()
76
+ []()
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ message: "\"\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD$1\"\u306F\u5197\u9577\u306A\u8868\u73FE\u3067\u3059\u3002\"\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD\"\u3092\u7701\u304D\u7C21\u6F54\u306A\u8868\u73FE\u306B\u3059\u308B\u3068\u6587\u7AE0\u304C\u660E\u77AD\u306B\u306A\u308A\u307E\u3059\u3002",
5
+ tokens: [{
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
+ //# sourceMappingURL=dict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dict.js"],"names":["module","exports","message","tokens"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACIC,EAAAA,OAAO,kSADX;AAEIC,EAAAA,MAAM,EAAE,CACJ;AACI,oBAAgB,IADpB;AAEI,WAAO,IAFX;AAGI,oBAAgB,IAHpB;AAII,oBAAgB,GAJpB;AAKI,oBAAgB,GALpB;AAMI,uBAAmB,OANvB;AAOI,uBAAmB,KAPvB;AAQI,kBAAc,IARlB;AASI,eAAW,IATf;AAUI,qBAAiB;AAVrB,GADI,EAYD;AACC,oBAAgB,IADjB;AAEC,WAAO,IAFR;AAGC,oBAAgB,KAHjB;AAIC,oBAAgB,IAJjB;AAKC,oBAAgB,GALjB;AAMC,uBAAmB,GANpB;AAOC,uBAAmB,GAPpB;AAQC,kBAAc,IARf;AASC,eAAW,IATZ;AAUC,qBAAiB;AAVlB,GAZC,EAuBD;AACC,oBAAgB,GADjB;AAEC,WAAO,IAFR;AAGC,oBAAgB,KAHjB;AAIC,oBAAgB,IAJjB;AAKC,oBAAgB,GALjB;AAMC,uBAAmB,GANpB;AAOC,uBAAmB,GAPpB;AAQC,kBAAc,GARf;AASC,eAAW,GATZ;AAUC,qBAAiB;AAVlB,GAvBC,EAkCD;AACC,oBAAgB,IADjB;AAEC,WAAO,IAFR;AAGC,oBAAgB,QAHjB;AAIC,oBAAgB,GAJjB;AAKC,oBAAgB,GALjB;AAMC,uBAAmB,GANpB;AAOC,uBAAmB,GAPpB;AAQC,kBAAc,IARf;AASC,eAAW,KATZ;AAUC,qBAAiB;AAVlB,GAlCC,EA6CD;AACC,WAAO,KADR;AAEC,gBAAY;AAFb,GA7CC;AAFZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n message: `\"することが可能$1\"は冗長な表現です。\"することが可能\"を省き簡潔な表現にすると文章が明瞭になります。`,\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 \"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 \"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 \"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 \"pos\": \"助動詞\",\n \"_capture\": \"$1\"\n }\n ]\n },\n];"],"file":"dict.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=dict2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dict2.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":"dict2.js"}
@@ -0,0 +1,60 @@
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 loadDictionaries = () => {
13
+ // unavoidable
14
+ var dict1 = require('./dict/dict');
15
+
16
+ var dict2 = require('./dict/dict2');
17
+
18
+ return dict1.concat(dict2);
19
+ };
20
+
21
+ var reporter = context => {
22
+ var {
23
+ Syntax,
24
+ RuleError,
25
+ fixer,
26
+ report,
27
+ getSource
28
+ } = context;
29
+ var matchAll = (0, _morphemeMatchTextlint.createTextlintMatcher)({
30
+ tokenize: _kuromojin.tokenize,
31
+ dictionaries: loadDictionaries()
32
+ });
33
+ return {
34
+ [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
+ }));
47
+ }
48
+ });
49
+ });
50
+ }
51
+
52
+ };
53
+ };
54
+
55
+ var _default = {
56
+ linter: reporter,
57
+ fixer: reporter
58
+ };
59
+ exports.default = _default;
60
+ //# 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","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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "version": "0.0.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,55 @@
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
+ ];
@@ -0,0 +1,32 @@
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
+ ];
@@ -0,0 +1,41 @@
1
+ import { createTextlintMatcher } from "morpheme-match-textlint";
2
+ import { tokenize } from "kuromojin";
3
+
4
+ const loadDictionaries = () => {
5
+ // unavoidable
6
+ let dict1 = require('./dict/dict');
7
+ let dict2 = require('./dict/dict2');
8
+ return dict1.concat(dict2)
9
+ }
10
+
11
+ 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
+ });
34
+ }
35
+ };
36
+ };
37
+
38
+ export default {
39
+ linter: reporter,
40
+ fixer: reporter
41
+ };