Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
71 changes: 71 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,77 @@ english only
絵文字が末尾にある。😆
```

## なぜ句点「。」が必要なのか

日本語の文章では、文末に句点「。」をつけることで:
- **文の区切りが明確になる**: 読み手が文の終わりを認識しやすい
- **読みやすさが向上**: 文章構造が明確になり理解しやすい
- **誤読を防ぐ**: 文と文の境界がはっきりし、意味の取り違えを防ぐ

このルールは、文末の句点の統一性をチェックし、読みやすい文章作成を支援します。

## エラーメッセージと修正方法

### 句点の付け忘れ

**エラーメッセージ:**
```
文末が"。"で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です。」「〜ます。」「〜でした。」など
```

**修正例:**
```
❌ これは問題ありません
✅ これは問題ありません。

❌ 説明を追加しました
✅ 説明を追加しました。
```

### 末尾の不要なスペース

**エラーメッセージ:**
```
文末が"。"で終わっていません。
理由: 末尾の不要な空白が句点の代わりになっていません
修正: 空白を削除してください
```

**修正例:**
```
❌ 文末に空白がある。
✅ 文末に空白がある。
```

### ピリオドの使用

**エラーメッセージ:**
```
文末が"。"で終わっていません。
理由: 日本語文章では"。"を使用します
修正: "."を"。"に置き換えてください
```

**修正例:**
```
❌ これはピリオドで終わっています.
✅ これはピリオドで終わっています。
```

### 自動修正

`--fix` オプションで以下が自動修正されます:
- 末尾の空白削除
- ピリオドから句点への変換(`.` → `。`)
- 句点の追加(`forceAppendPeriod: true` 設定時)

```bash
textlint --fix --rule ja-no-mixed-period README.md
```

## Options

- `periodMark`: `string`:
Expand Down
52 changes: 37 additions & 15 deletions src/textlint-rule-ja-no-mixed-period.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,15 @@ const reporter: TextlintRuleReporter<Options> = (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;
}
Expand All @@ -112,28 +117,45 @@ const reporter: TextlintRuleReporter<Options> = (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 {
// 句点を忘れているパターン
if (forceAppendPeriod) {
// `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
}
)
);
}
}
Expand Down
30 changes: 24 additions & 6 deletions test/textlint-rule-ja-no-mixed-period-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, {
},
errors: [
{
message: `文末が"。"で終わっていません。`,
message: `文末が"。"で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です。」「〜ます。」「〜でした。」など`,
line: 1,
column: 11
}
Expand All @@ -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
}
Expand Down Expand Up @@ -179,7 +188,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, {
},
errors: [
{
message: `文末が"。"で終わっていません。`,
message: `文末が"。"で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です。」「〜ます。」「〜でした。」など`,
line: 1,
column: 23
}
Expand All @@ -195,7 +207,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, {
},
errors: [
{
message: `文末が"."で終わっていません。`,
message: `文末が"."で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です.」「〜ます.」「〜でした.」など`,
line: 1,
column: 5
}
Expand All @@ -206,7 +221,10 @@ tester.run("textlint-rule-ja-no-mixed-period", rule, {
text: "絵文字が末尾にある。😆",
errors: [
{
message: `文末が"。"で終わっていません。`,
message: `文末が"。"で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です。」「〜ます。」「〜でした。」など`,
line: 1,
column: 11
}
Expand Down