Skip to content

Commit 6bcb496

Browse files
committed
feat: 「〜でます」→「〜でいます」と「〜てない」→「〜ていない」を検知できるように
1 parent d5d60bd commit 6bcb496

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
| --- | --- |
77
| 開発しています。 | 開発してます。 |
88
| 見学している。 | 見学してる。 |
9+
| 勉強していない。 | 勉強してない。 |
910
| 遊んでいる。 | 遊んでる。 |
1011

1112
## Installation

src/no-dropping-i.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,29 @@ import { RuleHelper } from "textlint-rule-helper";
44
import { tokenize } from "kuromojin";
55

66
function isMasuTargetWord(token) {
7-
return token.pos === "助詞" && token.pos_detail_1 === "接続助詞" && token.basic_form === "て";
7+
return token.pos === "助詞" && token.pos_detail_1 === "接続助詞" && (token.basic_form === "て" || token.basic_form === "で");
88
}
99

1010
function isMasuWord(token) {
1111
return token.pos === "助動詞" && token.pos_detail_1 === "*" && token.basic_form === "ます";
1212
}
1313

14-
function isTeruTargetWord(token){
14+
function isTeruTargetWord(token) {
1515
return token.pos === "動詞" && token.pos_detail_1 === "自立";
1616
}
1717

1818
function isTeruWord(token) {
1919
return token.pos === "動詞" && token.pos_detail_1 === "非自立" && (token.basic_form === "てる" || token.basic_form === "でる");
2020
}
2121

22+
function isTenaiTargetWord(token) {
23+
return token.pos === "動詞" && token.pos_detail_1 === "非自立" && (token.basic_form === "て" || token.basic_form === "で");
24+
}
25+
26+
function isTenaiWord(token) {
27+
return token.pos === "助動詞" && token.conjugated_type === "特殊・ナイ" && token.basic_form === "ない";
28+
}
29+
2230
module.exports = function(context) {
2331
const helper = new RuleHelper(context);
2432
const { Syntax, report, getSource, RuleError } = context;
@@ -32,10 +40,16 @@ module.exports = function(context) {
3240
tokens.forEach((token, index) => {
3341
const current = token;
3442
const prev = tokens[index - 1];
43+
3544
if (!prev || !current) {
3645
return;
3746
}
38-
if ((isMasuTargetWord(prev) && isMasuWord(current)) || (isTeruTargetWord(prev) && isTeruWord(current))) {
47+
48+
const isMasuPattern = isMasuTargetWord(prev) && isMasuWord(current);
49+
const isTeruPattern = isTeruTargetWord(prev) && isTeruWord(current);
50+
const isTenaiPattern = isTenaiTargetWord(prev) && isTenaiWord(current);
51+
52+
if (isMasuPattern || isTeruPattern || isTenaiPattern) {
3953
report(
4054
node,
4155
new RuleError("い抜き言葉を使用しています。", {

test/test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ tester.run("no-dropping-i", rule, {
66
valid: [
77
"見ています",
88
"開発しています。",
9+
"休んでいました。",
910
"笑っている。",
1011
"見学している。",
1112
"遊んでいる。",
13+
"勉強していない。",
14+
"困っていません。"
1215
],
1316
invalid: [
1417
{
@@ -31,6 +34,16 @@ tester.run("no-dropping-i", rule, {
3134
}
3235
]
3336
},
37+
{
38+
text: "休んでました。",
39+
errors: [
40+
{
41+
message: "い抜き言葉を使用しています。",
42+
line: 1,
43+
column: 4
44+
}
45+
]
46+
},
3447
{
3548
text: "笑ってる。",
3649
errors: [
@@ -61,5 +74,25 @@ tester.run("no-dropping-i", rule, {
6174
}
6275
]
6376
},
77+
{
78+
text: "勉強してない。",
79+
errors: [
80+
{
81+
message: "い抜き言葉を使用しています。",
82+
line: 1,
83+
column: 4
84+
}
85+
]
86+
},
87+
{
88+
text: "困ってません。",
89+
errors: [
90+
{
91+
message: "い抜き言葉を使用しています。",
92+
line: 1,
93+
column: 4
94+
}
95+
]
96+
},
6497
]
6598
});

0 commit comments

Comments
 (0)