Skip to content

Commit

Permalink
fix: 名詞同士の比較で、括弧記号はスキップするように変更
Browse files Browse the repository at this point in the history
fix #12
  • Loading branch information
azu committed Apr 25, 2021
1 parent 4872a6d commit d3d2c68
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 4 deletions.
51 changes: 49 additions & 2 deletions src/max-ten.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,45 @@ function isSandwichedMeishi({ before, token, after }) {
return before.pos === "名詞" && after.pos === "名詞";
}

/**
* 括弧のトークンかどうか
* @param token
* @returns {boolean}
*/
function is括弧(token) {
if (token.pos === "記号" && /^/.test(token.pos_detail_1)) {
return true;
}
if (token.surface_form === "(" || token.surface_form === ")") {
return true;
}
return false;
}
/**
* 括弧などの記号的なTokenはスキップとして隣接するTokenを探す
* @see https://github.com/textlint-ja/textlint-rule-max-ten/issues/12
* @param {*[]} tokens
* @param {number} currentIndex
* @param {"prev"|"next"} direction
* @returns {undefined | *}
*/
function findSiblingMeaningToken({ tokens, currentIndex, direction }) {
const delta = direction === "prev" ? -1 : 1;
const sibilingToken = tokens[currentIndex + delta];
if (!sibilingToken) {
return;
}
// 括弧はスキップして、隣接Nodeを探す
if (is括弧(sibilingToken)) {
return findSiblingMeaningToken({
tokens,
currentIndex: currentIndex + delta,
direction
});
}
return sibilingToken;
}

/**
* @param {RuleContext} context
* @param {typeof defaultOptions} [options]
Expand Down Expand Up @@ -76,9 +115,17 @@ module.exports = function (context, options = {}) {
if (surface === touten) {
// 名詞に囲まわれている場合は例外とする
const isSandwiched = isSandwichedMeishi({
before: tokens[index - 1],
before: findSiblingMeaningToken({
tokens,
currentIndex: index,
direction: "prev"
}),
token: token,
after: tokens[index + 1]
after: findSiblingMeaningToken({
tokens,
currentIndex: index,
direction: "next"
})
});
// strictなら例外を例外としない
if (!isStrict && isSandwiched) {
Expand Down
7 changes: 5 additions & 2 deletions test/max-ten-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ tester.run("max-ten", rule, {
"名詞、名詞、名詞、名詞、名詞の場合は例外",
"ビスケットの主な材料は(1)小麦粉、(2)牛乳、(3)ショートニング、(4)バター、(5)砂糖である。",
"これは、TaskA、TaskB、TaskC、TaskDが処理するものです。",
// 括弧は無視されるため、名詞の連続として扱う
"変数の名前は、半角のアルファベットである`A`から`Z`(大文字)と`a`から`z`(小文字)、`_`(アンダースコア)、`$`(ダラー)、数字の`0`から`9`を組み合わせた名前にします。",
{
text: textIncludeTen(3)
},
Expand Down Expand Up @@ -147,15 +149,16 @@ tester.run("max-ten", rule, {
// 3行目が、の問題
text: `このパラグラフはOKです。
変数の名前は、半角のアルファベットであるAからZ(大文字)とaからz(小文字)、_(アンダースコア)、$(ダラー)、数字の0から9を組み合わせた名前にします
変数の名前は、名前のルールが決まっていて、そのルールは複雑で、たくさんのルールがあるので、箇条書きしましょう
3つめのパラグラフはもOKです。
`,
errors: [
{
message: '一つの文で"、"を4つ以上使用しています',
line: 3
line: 3,
column: 45
}
]
}
Expand Down

0 comments on commit d3d2c68

Please sign in to comment.