Skip to content

Commit 72a617a

Browse files
committed
chore: rename rule
1 parent 4abc9ab commit 72a617a

File tree

11 files changed

+128
-128
lines changed

11 files changed

+128
-128
lines changed

packages/textlint-rule-ja-no-space-between-full-and-full-width/src/index.js

Lines changed: 0 additions & 46 deletions
This file was deleted.

packages/textlint-rule-ja-no-space-between-full-and-full-width/test/index-test.js

Lines changed: 0 additions & 35 deletions
This file was deleted.

packages/textlint-rule-ja-no-space-between-full-width/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# textlint-rule-ja-no-space-between-half-and-full-width
1+
# textlint-rule-ja-no-space-between-full-and-full-width
22

3-
半角文字と全角文字のスペースについてのtextlintルール
3+
全角文字同士の間のスペースについてのtextlintルール
44

55
## Install
66

77
Install with [npm](https://www.npmjs.com/):
88

9-
npm install textlint-rule-ja-no-space-between-half-and-full-width
9+
npm install textlint-rule-ja-no-space-between-full-and-full-width
1010

1111
## Usage
1212

@@ -15,15 +15,15 @@ Via `.textlintrc`(Recommended)
1515
```json
1616
{
1717
"rules": {
18-
"ja-no-space-between-half-and-full-width": true
18+
"ja-no-space-between-full-and-full-width": true
1919
}
2020
}
2121
```
2222

2323
Via CLI
2424

2525
```
26-
textlint --rule ja-no-space-between-half-and-full-width README.md
26+
textlint --rule ja-no-space-between-full-and-full-width README.md
2727
```
2828

2929

packages/textlint-rule-ja-no-space-between-full-width/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "textlint-rule-ja-no-space-between-full-width",
33
"version": "1.0.0",
4-
"description": "半角文字と全角文字のスペースについてのtextlintルール",
4+
"description": "全角文字同士の間のスペースについてのtextlintルール",
55
"main": "lib/index.js",
66
"repository": {
77
"type": "git",
@@ -31,6 +31,7 @@
3131
},
3232
"dependencies": {
3333
"match-index": "^1.0.1",
34+
"regx": "^1.0.4",
3435
"textlint-rule-helper": "^2.0.0"
3536
}
3637
}

packages/textlint-rule-ja-no-space-between-full-width/src/index.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
ただしカタカナ複合語の場合を除きます。
77
*/
88
import {RuleHelper} from "textlint-rule-helper";
9-
import {matchCaptureGroupAll} from "match-index";
9+
import {matchAll} from "match-index";
10+
import regx from "regx";
11+
const rx = regx("g");
12+
const japaneseRegExp = /(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[--])/;
13+
1014
function reporter(context) {
1115
const {Syntax, RuleError, report, fixer, getSource} = context;
1216
const helper = new RuleHelper();
@@ -16,22 +20,27 @@ function reporter(context) {
1620
return;
1721
}
1822
const text = getSource(node);
19-
// アルファベットと全角の間は半角スペースではない
20-
const betweenHanAndZen = matchCaptureGroupAll(text, /[A-Za-z0-9]([  ])(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[--])/);
21-
const betweenZenAndHan = matchCaptureGroupAll(text, /(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[--])([  ])[A-Za-z0-9]/);
22-
const reportMatch = (match) => {
23-
const {index} = match;
24-
report(node, new RuleError("原則として、全角文字と半角文字の間にスペースを入れません。", {
25-
index: match.index,
26-
fix: fixer.replaceTextRange([index, index + 1], "")
27-
}));
28-
};
29-
betweenHanAndZen.forEach(reportMatch);
30-
betweenZenAndHan.forEach(reportMatch);
23+
// 全角同士の間は半角スペースを入れない
24+
const matchReg = rx`${japaneseRegExp}( )${japaneseRegExp}`;
25+
const katakakana = /[-]( )[-]/;
26+
matchAll(text, matchReg).forEach(match => {
27+
const {input, captureGroups} = match;
28+
// ただしカタカナ複合語の場合を除きます。
29+
if (katakakana.test(input)) {
30+
return;
31+
}
32+
captureGroups.forEach(captureGroup => {
33+
const index = captureGroup.index;
34+
report(node, new RuleError("原則として、全角文字どうしの間にスペースを入れません。", {
35+
index: index,
36+
fix: fixer.replaceTextRange([index, index + 1], "")
37+
}));
38+
});
39+
});
3140
}
32-
}
41+
};
3342
}
3443
module.exports = {
3544
linter: reporter,
3645
fixer: reporter
37-
};
46+
};

packages/textlint-rule-ja-no-space-between-full-width/test/index-test.js

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,32 @@
33
import TextLintTester from "textlint-tester";
44
import rule from "../src/index";
55
var tester = new TextLintTester();
6-
tester.run("全角文字と半角文字の間", rule, {
6+
tester.run("全角文字どうし", rule, {
77
valid: [
8-
"JTF標準",
8+
"これは正解",
9+
"This is 大丈夫",
910
"This is a pen.",
10-
"1. `./*.*`にマッチするファイルを取得 = Readable Stream",
11-
`[CONTRIBUTING.md](./CONTRIBUTING.md)に、書籍で扱うべきプラグインアーキテクチャのProposalの書き方や
12-
Pull Request、コミットのやりかたなどが書かれています。`
11+
"ユーザー インターフェース"//カタカナは例外
1312
],
1413
invalid: [
1514
{
16-
text: "JTF 標準",
17-
output: "JTF標準",
15+
text: "これは ダメ",
16+
output: "これはダメ",
1817
errors: [
1918
{
20-
message: "原則として、全角文字と半角文字の間にスペースを入れません。",
19+
message: "原則として、全角文字どうしの間にスペースを入れません。",
2120
column: 4
2221
}
2322
]
2423
},
2524
{
26-
text: "これは Unicode",
27-
output: "これはUnicode",
25+
text: "これは どういうこと?",
26+
output: "これはどういうこと?",
2827
errors: [
29-
{message: "原則として、全角文字と半角文字の間にスペースを入れません。"}
30-
]
31-
},
32-
{
33-
text: "これは Unicode",
34-
output: "これはUnicode",
35-
errors: [
36-
{message: "原則として、全角文字と半角文字の間にスペースを入れません。"}
28+
{
29+
message: "原則として、全角文字どうしの間にスペースを入れません。",
30+
column: 4
31+
}
3732
]
3833
}
3934
]

packages/textlint-rule-ja-no-space-between-full-and-full-width/README.md renamed to packages/textlint-rule-ja-no-space-between-half-and-full-width/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# textlint-rule-ja-no-space-between-full-and-full-width
1+
# textlint-rule-ja-no-space-between-half-and-full-width
22

3-
全角文字同士の間のスペースについてのtextlintルール
3+
半角文字と全角文字のスペースについてのtextlintルール
44

55
## Install
66

77
Install with [npm](https://www.npmjs.com/):
88

9-
npm install textlint-rule-ja-no-space-between-full-and-full-width
9+
npm install textlint-rule-ja-no-space-between-half-and-full-width
1010

1111
## Usage
1212

@@ -15,15 +15,15 @@ Via `.textlintrc`(Recommended)
1515
```json
1616
{
1717
"rules": {
18-
"ja-no-space-between-full-and-full-width": true
18+
"ja-no-space-between-half-and-full-width": true
1919
}
2020
}
2121
```
2222

2323
Via CLI
2424

2525
```
26-
textlint --rule ja-no-space-between-full-and-full-width README.md
26+
textlint --rule ja-no-space-between-half-and-full-width README.md
2727
```
2828

2929

packages/textlint-rule-ja-no-space-between-full-and-full-width/package.json renamed to packages/textlint-rule-ja-no-space-between-half-and-full-width/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"name": "textlint-rule-ja-no-space-between-full-and-full-width",
2+
"name": "textlint-rule-ja-no-space-between-half-and-full-width",
33
"version": "1.0.0",
4-
"description": "全角文字同士の間のスペースについてのtextlintルール",
4+
"description": "半角文字と全角文字のスペースについてのtextlintルール",
55
"main": "lib/index.js",
66
"repository": {
77
"type": "git",
@@ -31,7 +31,6 @@
3131
},
3232
"dependencies": {
3333
"match-index": "^1.0.1",
34-
"regx": "^1.0.4",
3534
"textlint-rule-helper": "^2.0.0"
3635
}
3736
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// LICENSE : MIT
2+
"use strict";
3+
/*
4+
全角文字と半角文字の間
5+
原則として、全角文字と半角文字の間にスペースを入れません。
6+
ただしカタカナ複合語の場合を除きます。
7+
*/
8+
import {RuleHelper} from "textlint-rule-helper";
9+
import {matchCaptureGroupAll} from "match-index";
10+
function reporter(context) {
11+
const {Syntax, RuleError, report, fixer, getSource} = context;
12+
const helper = new RuleHelper();
13+
return {
14+
[Syntax.Str](node){
15+
if (helper.isChildNode(node, [Syntax.Link, Syntax.Image, Syntax.BlockQuote, Syntax.Emphasis])) {
16+
return;
17+
}
18+
const text = getSource(node);
19+
// アルファベットと全角の間は半角スペースではない
20+
const betweenHanAndZen = matchCaptureGroupAll(text, /[A-Za-z0-9]([  ])(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[--])/);
21+
const betweenZenAndHan = matchCaptureGroupAll(text, /(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[--])([  ])[A-Za-z0-9]/);
22+
const reportMatch = (match) => {
23+
const {index} = match;
24+
report(node, new RuleError("原則として、全角文字と半角文字の間にスペースを入れません。", {
25+
index: match.index,
26+
fix: fixer.replaceTextRange([index, index + 1], "")
27+
}));
28+
};
29+
betweenHanAndZen.forEach(reportMatch);
30+
betweenZenAndHan.forEach(reportMatch);
31+
}
32+
}
33+
}
34+
module.exports = {
35+
linter: reporter,
36+
fixer: reporter
37+
};

0 commit comments

Comments
 (0)