Skip to content

Commit b65188d

Browse files
committed
feat(rule): 名詞同士に囲まれた、はカウントしない
箇条書きの、を判別するという目的 close #2
1 parent 110b303 commit b65188d

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

src/max-ten.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ import {getTokenizer} from "kuromojin";
66
import splitSentences from "sentence-splitter";
77
import Source from "structured-source";
88
const defaultOptions = {max: 3};
9+
10+
function isSandwichedMeishi({
11+
before,
12+
token,
13+
after
14+
}) {
15+
if (before === undefined || after === undefined || token === undefined) {
16+
return false;
17+
}
18+
return before.pos === "名詞" && after.pos === "名詞";
19+
}
920
/**
1021
* @param {RuleContext} context
1122
* @param {object} options
@@ -37,9 +48,18 @@ export default function (context, options = {}) {
3748
let currentTenCount = 0;
3849
let tokens = tokenizer.tokenizeForSentence(text);
3950
let lastToken = null;
40-
tokens.forEach(token => {
51+
tokens.forEach((token, index) => {
4152
let surface = token.surface_form;
4253
if (surface === "、") {
54+
// 名詞に過去まわれている場合は例外とする
55+
let isSandwiched = isSandwichedMeishi({
56+
before: tokens[index - 1],
57+
token: token,
58+
after: tokens[index + 1]
59+
});
60+
if (isSandwiched) {
61+
return;
62+
}
4363
currentTenCount++;
4464
lastToken = token;
4565
}
@@ -51,8 +71,8 @@ export default function (context, options = {}) {
5171
if (currentTenCount >= maxLen) {
5272
let position = source.indexToPosition(lastToken.word_position - 1);
5373
let ruleError = new context.RuleError(`一つの文で"、"を${maxLen}つ以上使用しています`, {
54-
line: position.line-1,
55-
column:position.column
74+
line: position.line - 1,
75+
column: position.column
5676
});
5777
report(node, ruleError);
5878
currentTenCount = 0;

test/max-ten-test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var tester = new TextLintTester();
88
tester.run("max-ten", rule, {
99
// default max:3
1010
valid: [
11+
"名詞、名詞、名詞、名詞の場合は例外",
1112
{
1213
text: textIncludeTen(3 - 1)
1314
},
@@ -47,15 +48,15 @@ tester.run("max-ten", rule, {
4748
]
4849
},
4950
{
50-
text: `これは、長文、columnがちゃんと計算、されてるはずです。`,
51+
text: `これは、長文の例ですが、columnがちゃんと計算、されてるはずです。`,
5152
options: {
5253
"max": 3
5354
},
5455
errors: [
5556
{
5657
message: `一つの文で"、"を3つ以上使用しています`,
5758
line: 1,
58-
column: 21
59+
column: 26
5960
}
6061
]
6162
},

0 commit comments

Comments
 (0)