Skip to content

Commit

Permalink
feat: 「〜てる」「〜でます」「〜てない」をい抜き言葉として検知できるように (#19)
Browse files Browse the repository at this point in the history
* feat: 「〜てる」→「〜ている」のい抜き言葉を検知できるように

* feat: 「〜でる」→「〜でいる」のい抜き言葉を検知できるように

* feat: 「〜でます」→「〜でいます」と「〜てない」→「〜ていない」を検知できるように
  • Loading branch information
watackeech authored Nov 19, 2024
1 parent 56aa752 commit f2b0d33
Show file tree
Hide file tree
Showing 5 changed files with 2,975 additions and 2,430 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

い抜き言葉を検出する[textlint](https://github.com/textlint/textlint "textlint")ルールです。

- ◯ 開発しています。
- ✗ 開発してます。
|| × |
| --- | --- |
| 開発しています。 | 開発してます。 |
| 見学している。 | 見学してる。 |
| 勉強していない。 | 勉強してない。 |
| 遊んでいる。 | 遊んでる。 |

## Installation

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
},
"dependencies": {
"kuromojin": "^3.0.0",
"textlint-rule-helper": "^2.1.1"
"textlint-rule-helper": "^2.3.1"
},
"description": "い抜き言葉を検出するtextlint rule",
"devDependencies": {
Expand Down
28 changes: 25 additions & 3 deletions src/no-dropping-i.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,30 @@
import { RuleHelper } from "textlint-rule-helper";
import { tokenize } from "kuromojin";

function isTargetWord(token) {
return token.pos === "助詞" && token.pos_detail_1 === "接続助詞" && token.basic_form === "て";
function isMasuTargetWord(token) {
return token.pos === "助詞" && token.pos_detail_1 === "接続助詞" && (token.basic_form === "て" || token.basic_form === "で");
}

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

function isTeruTargetWord(token) {
return token.pos === "動詞" && token.pos_detail_1 === "自立";
}

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

function isTenaiTargetWord(token) {
return token.pos === "動詞" && token.pos_detail_1 === "非自立" && (token.basic_form === "て" || token.basic_form === "で");
}

function isTenaiWord(token) {
return token.pos === "助動詞" && token.conjugated_type === "特殊・ナイ" && token.basic_form === "ない";
}

module.exports = function(context) {
const helper = new RuleHelper(context);
const { Syntax, report, getSource, RuleError } = context;
Expand All @@ -24,10 +40,16 @@ module.exports = function(context) {
tokens.forEach((token, index) => {
const current = token;
const prev = tokens[index - 1];

if (!prev || !current) {
return;
}
if (isTargetWord(prev) && isMasuWord(current)) {

const isMasuPattern = isMasuTargetWord(prev) && isMasuWord(current);
const isTeruPattern = isTeruTargetWord(prev) && isTeruWord(current);
const isTenaiPattern = isTenaiTargetWord(prev) && isTenaiWord(current);

if (isMasuPattern || isTeruPattern || isTenaiPattern) {
report(
node,
new RuleError("い抜き言葉を使用しています。", {
Expand Down
76 changes: 70 additions & 6 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,16 @@ import TextLintTester from "textlint-tester";

const tester = new TextLintTester();
tester.run("no-dropping-i", rule, {
valid: ["見ています", "開発しています。"],
valid: [
"見ています",
"開発しています。",
"休んでいました。",
"笑っている。",
"見学している。",
"遊んでいる。",
"勉強していない。",
"困っていません。"
],
invalid: [
{
text: "見てます。",
Expand All @@ -25,10 +34,65 @@ tester.run("no-dropping-i", rule, {
}
]
},
// TODO: support
// {
// text: "人が話してる",
// errors: [{}]
// }
{
text: "休んでました。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 4
}
]
},
{
text: "笑ってる。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 3
}
]
},
{
text: "見学してる。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 4
}
]
},
{
text: "遊んでる。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 3
}
]
},
{
text: "勉強してない。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 4
}
]
},
{
text: "困ってません。",
errors: [
{
message: "い抜き言葉を使用しています。",
line: 1,
column: 4
}
]
},
]
});
Loading

0 comments on commit f2b0d33

Please sign in to comment.