Skip to content

Commit 98fff73

Browse files
authored
fix: update to kuromojin@3 (#5)
* CI: move to GitHub Actions * fix: support "ないこともないでしょう" "特殊・ナイ"のパターンもサポート
1 parent 6d334c6 commit 98fff73

File tree

8 files changed

+105
-36
lines changed

8 files changed

+105
-36
lines changed

.github/workflows/test.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: test
2+
on: [push, pull_request]
3+
jobs:
4+
test:
5+
name: "Test on Node.js ${{ matrix.node-version }}"
6+
runs-on: ubuntu-latest
7+
strategy:
8+
matrix:
9+
node-version: [12, 14]
10+
steps:
11+
- name: checkout
12+
uses: actions/checkout@v2
13+
- name: setup Node.js ${{ matrix.node-version }}
14+
uses: actions/setup-node@v2
15+
with:
16+
node-version: ${{ matrix.node-version }}
17+
- name: Install
18+
run: yarn install
19+
- name: Test
20+
run: yarn test

.travis.yml

Lines changed: 0 additions & 3 deletions
This file was deleted.

README.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
# textlint-rule-no-double-negative-ja [![Build Status](https://travis-ci.org/textlint-ja/textlint-rule-no-double-negative-ja.svg?branch=master)](https://travis-ci.org/textlint-ja/textlint-rule-no-double-negative-ja)
1+
# textlint-rule-no-double-negative-ja [![Actions Status: test](https://github.com/textlint-ja/textlint-rule-no-double-negative-ja/workflows/test/badge.svg)](https://github.com/textlint-ja/textlint-rule-no-double-negative-ja/actions?query=workflow%3A"test")
22

3-
[二重否定](https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%87%8D%E5%90%A6%E5%AE%9A_(%E8%A8%80%E8%AA%9E%E5%AD%A6) "二重否定")を検出する[textlint](https://github.com/textlint/textlint "textlint")ルールです。
3+
[二重否定](https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%87%8D%E5%90%A6%E5%AE%9A_(%E8%A8%80%E8%AA%9E%E5%AD%A6) "二重否定")
4+
を検出する[textlint](https://github.com/textlint/textlint "textlint")ルールです。
45

56
> ✘ それが事件の発端だったといえなくもない。
67
@@ -12,7 +13,7 @@
1213

1314
などの二重否定を検出することができます。
1415

15-
二重否定の用法については[<研究論文>二重否定表現「~なくは/ もない」「~ないでも/ はない」「~ないことは/ もない」「~ないものでは/ もない」の使い分けを巡って](http://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/187059/1/Ronko3_043.pdf "Ronko3_043.pdf")を参照してください。
16+
二重否定の用法については[<研究論文>二重否定表現「~なくは/もない」「~ないでも/はない」「~ないことは/もない」「~ないものでは/もない」の使い分けを巡って](https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/187059/1/Ronko3_043.pdf)を参照してください。
1617

1718
## Installation
1819

@@ -24,23 +25,26 @@
2425

2526
```js
2627
{
27-
"rules": {
28-
"no-double-negative-ja": true
28+
"rules"
29+
:
30+
{
31+
"no-double-negative-ja"
32+
:
33+
true
2934
}
3035
}
3136
```
3237

3338
## Tests
34-
39+
3540
npm test
3641

3742
## 参考文献
3843

39-
- http://repository.kulib.kyoto-u.ac.jp/dspace/bitastream/2433/187059/1/Ronko3_043.pdf
44+
- [<研究論文>二重否定表現「~なくは/もない」「~ないでも/はない」「~ないことは/もない」「~ないものでは/もない」の使い分けを巡って](https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/187059/1/Ronko3_043.pdf)
4045
- http://www.asahi-net.or.jp/~wd2y-kkb/n.htm#%E4%BA%8C%E9%87%8D%E5%90%A6%E5%AE%9A
4146
- https://github.com/redpen-cc/redpen/blob/master/redpen-core/src/main/resources/default-resources/double-negative/double-negative-expression-ja.dat
4247

43-
4448
## Contributing
4549

4650
1. Fork it!
@@ -51,4 +55,4 @@
5155

5256
## License
5357

54-
MIT
58+
MIT

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@
3535
"textlint-scripts": "^3.0.0"
3636
},
3737
"dependencies": {
38-
"kuromojin": "^2.0.0"
38+
"kuromojin": "^3.0.0"
3939
}
4040
}

src/matchTokenStream.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
// LICENSE : MIT
22
"use strict";
3+
4+
/**
5+
* expectShape
6+
* [expectShape | expectShape]
7+
* にどれかにマッチするならtrueを返す
8+
* @param {*} token
9+
* @param {*|*[]} expectShape
10+
* orでマッチしたい場合は配列を渡す
11+
* @returns {boolean}
12+
*/
313
function matchToken(token, expectShape) {
14+
if (Array.isArray(expectShape)) {
15+
return expectShape.some(singleExpectShape => matchToken(token, singleExpectShape));
16+
}
417
return Object.keys(expectShape).every(key => {
518
const actualValue = token[key];
619
// 値は複数の場合もある
@@ -10,6 +23,7 @@ function matchToken(token, expectShape) {
1023
});
1124
})
1225
}
26+
1327
export default function expectTokenStream(tokenStream) {
1428
let currentTokenPosition = 0;
1529
const tokenCount = tokenStream.length;
@@ -29,4 +43,4 @@ export default function expectTokenStream(tokenStream) {
2943
}
3044
return false;
3145
}
32-
}
46+
}

src/rules/naikotoha-nai.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
~ない(否定助動詞 / 否定形容詞の連体形) + 形式名詞「こと」+ とりたて助詞「は / も」+ 形容詞「ない」
66
*/
77
import matchTokenStream from "./../matchTokenStream";
8+
89
export default function (context) {
9-
const {RuleError} = context;
10+
const { RuleError } = context;
1011
const matchPatternないことはない = matchTokenStream([
1112
{
1213
"basic_form": ["ない", "無い"]
@@ -36,10 +37,18 @@ export default function (context) {
3637
"surface_form": "も",
3738
"pos": "助詞"
3839
},
39-
{
40-
"basic_form": ["ない", "無い"],
41-
"pos": "形容詞"
42-
}
40+
[
41+
// ないこともないでしょう。
42+
{
43+
"basic_form": ["ない", "無い"],
44+
"conjugated_type": ["特殊・ナイ"]
45+
},
46+
// ないこともない。
47+
{
48+
"basic_form": ["ない", "無い"],
49+
"pos": "形容詞"
50+
}
51+
]
4352
]);
4453
return (token) => {
4554
if (matchPatternないことはない(token)) {
@@ -53,4 +62,4 @@ export default function (context) {
5362
});
5463
}
5564
};
56-
}
65+
}

test/no-doubled-negative-ja-test.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,15 @@ tester.run("no-doubled-negative", rule, {
135135
}
136136
]
137137
},
138+
{
139+
text: "そういう話なら、ないこともないでしょう。",
140+
errors: [
141+
{
142+
message: "二重否定: 〜ないこともない",
143+
column: 14
144+
}
145+
]
146+
},
138147
// e
139148
{
140149
text: "ないわけでもないですが",
@@ -209,6 +218,16 @@ tester.run("no-doubled-negative", rule, {
209218
column: 9
210219
}
211220
]
212-
}
221+
},
222+
// 3重否定
223+
{
224+
text: "憂鬱でないこともないこともない。",
225+
errors: [
226+
{
227+
message: "二重否定: 〜ないこともない",
228+
column: 9
229+
}
230+
]
231+
},
213232
]
214-
});
233+
});

yarn.lock

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2250,21 +2250,22 @@ kind-of@^6.0.0, kind-of@^6.0.2:
22502250
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
22512251
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
22522252

2253-
kuromoji@0.1.1:
2254-
version "0.1.1"
2255-
resolved "https://registry.yarnpkg.com/kuromoji/-/kuromoji-0.1.1.tgz#4aabf39bcced8b8ad92d007a04a26be6da8477c9"
2256-
integrity sha1-Sqvzm8zti4rZLQB6BKJr5tqEd8k=
2253+
kuromoji@0.1.2:
2254+
version "0.1.2"
2255+
resolved "https://registry.yarnpkg.com/kuromoji/-/kuromoji-0.1.2.tgz#293f0d6706df006112137980588d5daac26d0790"
2256+
integrity sha512-V0dUf+C2LpcPEXhoHLMAop/bOht16Dyr+mDiIE39yX3vqau7p80De/koFqpiTcL1zzdZlc3xuHZ8u5gjYRfFaQ==
22572257
dependencies:
22582258
async "^2.0.1"
22592259
doublearray "0.0.2"
2260-
zlibjs "^0.2.0"
2260+
zlibjs "^0.3.1"
22612261

2262-
kuromojin@^2.0.0:
2263-
version "2.0.0"
2264-
resolved "https://registry.yarnpkg.com/kuromojin/-/kuromojin-2.0.0.tgz#23e74a5ed2578432c9703ae75a69ba0a09ccb12d"
2265-
integrity sha512-60j/yLkFSc4t4roj8tI8ZNNSiAFnrkgXw8SqXz/9nakfs6mkCvPbrd7S8LDr4YNwEt1IyLys5JQTR9EnYyGHhA==
2262+
kuromojin@^3.0.0:
2263+
version "3.0.0"
2264+
resolved "https://registry.yarnpkg.com/kuromojin/-/kuromojin-3.0.0.tgz#54a1a6643110f49f741c4beb82fef400d1cd498b"
2265+
integrity sha512-3h3qnn/NVVhqoKFP4oc7e6apO2B01Atc056oiVlIY7Uoup4rhrnBe28g3y9lK1HTmLDQEejvXB+3I3qxAneF7A==
22662266
dependencies:
2267-
kuromoji "0.1.1"
2267+
kuromoji "0.1.2"
2268+
lru_map "^0.4.1"
22682269

22692270
leven@^3.1.0:
22702271
version "3.1.0"
@@ -2357,6 +2358,11 @@ loud-rejection@^1.0.0:
23572358
currently-unhandled "^0.4.1"
23582359
signal-exit "^3.0.0"
23592360

2361+
lru_map@^0.4.1:
2362+
version "0.4.1"
2363+
resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.4.1.tgz#f7b4046283c79fb7370c36f8fca6aee4324b0a98"
2364+
integrity sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==
2365+
23602366
make-dir@^2.0.0, make-dir@^2.1.0:
23612367
version "2.1.0"
23622368
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@@ -3811,7 +3817,7 @@ yargs@13.3.2, yargs@^13.3.0:
38113817
y18n "^4.0.0"
38123818
yargs-parser "^13.1.2"
38133819

3814-
zlibjs@^0.2.0:
3815-
version "0.2.0"
3816-
resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.2.0.tgz#ae20f06243293d85c255563189f9b12f5b3ba1a0"
3817-
integrity sha1-riDwYkMpPYXCVVYxifmxL1s7oaA=
3820+
zlibjs@^0.3.1:
3821+
version "0.3.1"
3822+
resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554"
3823+
integrity sha1-UBl+2yihxCymWcyLTmqd3W1ERVQ=

0 commit comments

Comments
 (0)