diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b35a187..c274cbe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,14 +4,18 @@ jobs: test: name: "Test on Node.js ${{ matrix.node-version }}" runs-on: ubuntu-latest + permissions: + contents: read strategy: matrix: node-version: [ 16, 18 ] steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 + with: + persist-credentials: false - name: setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@7c12f8017d5436eb855f1ed4399f037a36fbd9e8 # v2.5.2 with: node-version: ${{ matrix.node-version }} - name: Install diff --git a/README.md b/README.md index b165e47..34129de 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,77 @@ english only 絵文字が末尾にある。😆 ``` +## なぜ句点「。」が必要なのか + +日本語の文章では、文末に句点「。」をつけることで: +- **文の区切りが明確になる**: 読み手が文の終わりを認識しやすい +- **読みやすさが向上**: 文章構造が明確になり理解しやすい +- **誤読を防ぐ**: 文と文の境界がはっきりし、意味の取り違えを防ぐ + +このルールは、文末の句点の統一性をチェックし、読みやすい文章作成を支援します。 + +## エラーメッセージと修正方法 + +### 句点の付け忘れ + +**エラーメッセージ:** +``` +文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など +``` + +**修正例:** +``` +❌ これは問題ありません +✅ これは問題ありません。 + +❌ 説明を追加しました +✅ 説明を追加しました。 +``` + +### 末尾の不要なスペース + +**エラーメッセージ:** +``` +文末が"。"で終わっていません。 +理由: 末尾の不要な空白が句点の代わりになっていません +修正: 空白を削除してください +``` + +**修正例:** +``` +❌ 文末に空白がある。 +✅ 文末に空白がある。 +``` + +### ピリオドの使用 + +**エラーメッセージ:** +``` +文末が"。"で終わっていません。 +理由: 日本語文章では"。"を使用します +修正: "."を"。"に置き換えてください +``` + +**修正例:** +``` +❌ これはピリオドで終わっています. +✅ これはピリオドで終わっています。 +``` + +### 自動修正 + +`--fix` オプションで以下が自動修正されます: +- 末尾の空白削除 +- ピリオドから句点への変換(`.` → `。`) +- 句点の追加(`forceAppendPeriod: true` 設定時) + +```bash +textlint --fix --rule ja-no-mixed-period README.md +``` + ## Options - `periodMark`: `string`: diff --git a/src/textlint-rule-ja-no-mixed-period.ts b/src/textlint-rule-ja-no-mixed-period.ts index 3c43135..6facf8d 100644 --- a/src/textlint-rule-ja-no-mixed-period.ts +++ b/src/textlint-rule-ja-no-mixed-period.ts @@ -100,10 +100,15 @@ const reporter: TextlintRuleReporter = (context, options = {}) => { if (/\s/.test(periodMark)) { report( lastNode, - new RuleError(`文末が"${preferPeriodMark}"で終わっていません。末尾に不要なスペースがあります。`, { - index, - fix: fixer.replaceTextRange([index, index + periodMark.length], "") - }) + new RuleError( + `文末が"${preferPeriodMark}"で終わっていません。 +理由: 末尾の不要な空白が句点の代わりになっていません +修正: 空白を削除してください`, + { + index, + fix: fixer.replaceTextRange([index, index + periodMark.length], "") + } + ) ); return; } @@ -112,10 +117,15 @@ const reporter: TextlintRuleReporter = (context, options = {}) => { if (classicPeriodMarkPattern.test(periodMark)) { report( lastNode, - new RuleError(`文末が"${preferPeriodMark}"で終わっていません。`, { - index: index, - fix: fixer.replaceTextRange([index, index + preferPeriodMark.length], preferPeriodMark) - }) + new RuleError( + `文末が"${preferPeriodMark}"で終わっていません。 +理由: 日本語文章では"${preferPeriodMark}"を使用します +修正: "${periodMark}"を"${preferPeriodMark}"に置き換えてください`, + { + index: index, + fix: fixer.replaceTextRange([index, index + preferPeriodMark.length], preferPeriodMark) + } + ) ); } else { // 句点を忘れているパターン @@ -123,17 +133,29 @@ const reporter: TextlintRuleReporter = (context, options = {}) => { // `forceAppendPeriod`のオプションがtrueならば、自動で句点を追加する。 report( lastNode, - new RuleError(`文末が"${preferPeriodMark}"で終わっていません。`, { - index: index, - fix: fixer.replaceTextRange([index + 1, index + 1], preferPeriodMark) - }) + new RuleError( + `文末が"${preferPeriodMark}"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です${preferPeriodMark}」「〜ます${preferPeriodMark}」「〜でした${preferPeriodMark}」など`, + { + index: index, + fix: fixer.replaceTextRange([index + 1, index + 1], preferPeriodMark) + } + ) ); } else { report( lastNode, - new RuleError(`文末が"${preferPeriodMark}"で終わっていません。`, { - index: index - }) + new RuleError( + `文末が"${preferPeriodMark}"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です${preferPeriodMark}」「〜ます${preferPeriodMark}」「〜でした${preferPeriodMark}」など`, + { + index: index + } + ) ); } } diff --git a/test/textlint-rule-ja-no-mixed-period-test.ts b/test/textlint-rule-ja-no-mixed-period-test.ts index 0e399a1..dd98f9c 100644 --- a/test/textlint-rule-ja-no-mixed-period-test.ts +++ b/test/textlint-rule-ja-no-mixed-period-test.ts @@ -121,7 +121,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, { }, errors: [ { - message: `文末が"。"で終わっていません。`, + message: `文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など`, line: 1, column: 11 } @@ -136,12 +139,18 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, { }, errors: [ { - message: `文末が"。"で終わっていません。`, + message: `文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など`, line: 1, column: 11 }, { - message: `文末が"。"で終わっていません。`, + message: `文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など`, line: 3, column: 11 } @@ -179,7 +188,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, { }, errors: [ { - message: `文末が"。"で終わっていません。`, + message: `文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など`, line: 1, column: 23 } @@ -195,7 +207,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, { }, errors: [ { - message: `文末が"."で終わっていません。`, + message: `文末が"."で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です.」「〜ます.」「〜でした.」など`, line: 1, column: 5 } @@ -206,7 +221,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, { text: "絵文字が末尾にある。😆", errors: [ { - message: `文末が"。"で終わっていません。`, + message: `文末が"。"で終わっていません。 +理由: 句点は文の境界を明確にし、読み手の理解を助けます +修正: 適切な文末表現で文を完結させ、句点を追加してください +例: 「〜です。」「〜ます。」「〜でした。」など`, line: 1, column: 11 }