Skip to content

Commit 8696daa

Browse files
committed
feat: 機械的な段落と箇条書きの組み合わせパターンを検出する機能を追加
1 parent d31cf1d commit 8696daa

File tree

2 files changed

+65
-6
lines changed

2 files changed

+65
-6
lines changed

src/rules/ai-tech-writing-guideline.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ const rule: TextlintRuleModule<Options> = (context, options = {}) => {
187187
};
188188

189189
/**
190-
* コロン(:)で終わる段落の直後に箇条書きが続くパターンを検出
190+
* 機械的な段落と箇条書きの組み合わせパターンを検出
191191
*/
192-
const detectColonListPattern = (node: any) => {
192+
const detectMechanicalListIntroPattern = (node: any) => {
193193
const children = node.children || [];
194194

195195
for (let i = 0; i < children.length - 1; i++) {
@@ -209,8 +209,24 @@ const rule: TextlintRuleModule<Options> = (context, options = {}) => {
209209
});
210210
const paragraphText = paragraphSource.toString();
211211

212-
// 「:」で終わる段落の後にリストが続く場合を検出
212+
// 機械的なパターンを検出
213+
let isDetected = false;
214+
let message = "";
215+
216+
// パターン1: コロン(:、:)で終わる段落
213217
if (/[:][\s]*$/.test(paragraphText.trim())) {
218+
isDetected = true;
219+
message =
220+
"【構造化】コロン(:)で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような導入文を使った自然な表現を検討してください。";
221+
}
222+
// パターン2: 「例えば。」「具体的には。」など、接続表現+句点で終わる段落
223+
else if (/(?:|||||)[\s]*$/.test(paragraphText.trim())) {
224+
isDetected = true;
225+
message =
226+
"【構造化】接続表現と句点で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような自然な導入文を検討してください。";
227+
}
228+
229+
if (isDetected) {
214230
// 許可パターンのチェック
215231
if (allows.length > 0) {
216232
const matches = matchPatterns(paragraphText, allows);
@@ -223,8 +239,7 @@ const rule: TextlintRuleModule<Options> = (context, options = {}) => {
223239
hasDocumentIssues = true;
224240

225241
report(currentNode, {
226-
message:
227-
"【構造化】コロン(:)で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような導入文を使った自然な表現を検討してください。"
242+
message: message
228243
});
229244
}
230245
}
@@ -240,7 +255,7 @@ const rule: TextlintRuleModule<Options> = (context, options = {}) => {
240255
}
241256

242257
// コロン + 箇条書きパターンの検出
243-
detectColonListPattern(node);
258+
detectMechanicalListIntroPattern(node);
244259
// 将来的にここに他の文書レベルの構造化パターンを追加できます
245260
// 例:
246261
// detectExcessiveNestedLists(node);

test/rules/ai-tech-writing-guideline.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@ tester.run("ai-tech-writing-guideline", rule, {
2626
{
2727
text: "JSXはJavaScriptの中でUIを記述するため、プログラマーにとって理解しやすいです。\nたとえば、JSXの次のような点がわかりやすいと思っています。\n\n- 条件分岐やループは通常のJavaScriptの記法",
2828
options: { enableDocumentAnalysis: false }
29+
},
30+
// 自然な接続表現の例
31+
{
32+
text: "モダンフレームワークには多くの利点があります。たとえば、次のような点が挙げられます。\n\n- パフォーマンスの最適化\n- 開発効率の向上",
33+
options: { enableDocumentAnalysis: false }
34+
},
35+
{
36+
text: "データベース設計では重要な要素を考慮します。具体的には、以下の要素を検討します。\n\n- 正規化\n- インデックス設計",
37+
options: { enableDocumentAnalysis: false }
38+
},
39+
{
40+
text: "パフォーマンス改善の手法を紹介します。以下にその手法を示します。\n\n- コード最適化\n- キャッシュ活用",
41+
options: { enableDocumentAnalysis: false }
2942
}
3043
],
3144
invalid: [
@@ -135,6 +148,37 @@ tester.run("ai-tech-writing-guideline", rule, {
135148
}
136149
]
137150
},
151+
// 構造化の問題(接続表現と句点の組み合わせ)
152+
{
153+
text: "モダンフレームワークには多くの利点があります。例えば。\n\n- パフォーマンスの最適化\n- 開発効率の向上",
154+
options: { enableDocumentAnalysis: false },
155+
errors: [
156+
{
157+
message:
158+
"【構造化】接続表現と句点で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような自然な導入文を検討してください。"
159+
}
160+
]
161+
},
162+
{
163+
text: "データベース設計では重要な要素を考慮します。具体的には。\n\n- 正規化\n- インデックス設計",
164+
options: { enableDocumentAnalysis: false },
165+
errors: [
166+
{
167+
message:
168+
"【構造化】接続表現と句点で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような自然な導入文を検討してください。"
169+
}
170+
]
171+
},
172+
{
173+
text: "パフォーマンス改善の手法を紹介します。以下。\n\n- コード最適化\n- キャッシュ活用",
174+
options: { enableDocumentAnalysis: false },
175+
errors: [
176+
{
177+
message:
178+
"【構造化】接続表現と句点で終わる文の直後の箇条書きは機械的な印象を与える可能性があります。「たとえば、次のような点があります。」のような自然な導入文を検討してください。"
179+
}
180+
]
181+
},
138182
// 複数の問題が同時に存在する場合
139183
{
140184
text: "まず最初に高速なパフォーマンスの実装を実施することができます。",

0 commit comments

Comments
 (0)