Skip to content

Commit 371c01d

Browse files
committed
feat(3.3): fixer support
1 parent 2ed576e commit 371c01d

File tree

3 files changed

+41
-23
lines changed

3 files changed

+41
-23
lines changed

src/3.2.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,27 @@
66
「2.1.7 カタカナ複合語」を参照してください。
77
*/
88
import {isUserWrittenNode} from "./util/node-util";
9+
import {matchCaptureGroupAll} from "./util/match-index";
10+
911
export default function (context) {
1012
let {Syntax, RuleError, report, getSource} = context;
1113
return {
1214
[Syntax.Str](node){
1315
if (!isUserWrittenNode(node, context)) {
1416
return;
1517
}
16-
let text = getSource(node);
18+
const text = getSource(node);
1719
// カタカナ(カタカナ以外)カタカナ のパターンを取り出す
18-
let matchReg = /[-]([^[-])[-]/;
19-
let match = text.match(matchReg);
20-
if (match) {
20+
matchCaptureGroupAll(text, /[-]([^[-])[-]/).forEach(match => {
2121
// カタカナの間を全角スペースでは区切らない
22-
let word = match[1];
23-
if (word === " ") {
24-
report(node, new RuleError("カタカナ語間は中黒(・)または半角スペースを用いてカタカナ語を区切ります", match.index + 1));
22+
const {text} = match;
23+
if (text === " ") {
24+
report(node, new RuleError("カタカナ語間は中黒(・)または半角スペースを用いてカタカナ語を区切ります", {
25+
column: match.index
26+
}));
2527
}
26-
}
28+
});
29+
2730
}
2831
}
2932
}

src/3.3.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,50 @@
55
かっこの外側、内側ともにスペースを入れません。
66
*/
77
import {isUserWrittenNode} from "./util/node-util";
8+
import {matchCaptureGroupAll} from "./util/match-index";
9+
810
const brackets = [
9-
"[", "]", "[", "(", ")", "[", "]", "「", "」", "『", "』"
11+
"\\[", "\\]", "(", ")", "[", "]", "「", "」", "『", "』"
1012
];
1113

1214
const leftBrackets = brackets.map(bracket => {
13-
return " " + bracket;
15+
return new RegExp("\(\\s\)" + bracket, "g");
1416
});
1517
const rightBrackets = brackets.map(bracket => {
16-
return bracket + " ";
18+
return new RegExp(bracket + "\(\\s\)", "g");
1719
});
18-
export default function (context) {
19-
let {Syntax, RuleError, report, getSource} = context;
20+
function reporter(context) {
21+
let {Syntax, RuleError, report, fixer, getSource} = context;
2022
return {
2123
[Syntax.Str](node){
2224
if (!isUserWrittenNode(node, context)) {
2325
return;
2426
}
25-
let text = getSource(node);
26-
// ←にスペース
27+
const text = getSource(node);
28+
// 左にスペース
2729
leftBrackets.forEach(pattern => {
28-
var index = text.indexOf(pattern);
29-
if (index !== -1) {
30-
report(node, new RuleError("かっこの外側、内側ともにスペースを入れません。", index));
31-
}
30+
matchCaptureGroupAll(text, pattern).forEach(match => {
31+
const {index} = match;
32+
report(node, new RuleError("かっこの外側、内側ともにスペースを入れません。", {
33+
column: index,
34+
fix: fixer.replaceTextRange([index, index + 1], "")
35+
}));
36+
})
3237
});
38+
// 右にスペース
3339
rightBrackets.forEach(pattern => {
34-
var index = text.indexOf(pattern);
35-
if(index !== -1) {
36-
report(node, new RuleError("かっこの外側、内側ともにスペースを入れません。", index));
37-
}
40+
matchCaptureGroupAll(text, pattern).forEach(match => {
41+
const {index} = match;
42+
report(node, new RuleError("かっこの外側、内側ともにスペースを入れません。", {
43+
column: index,
44+
fix: fixer.replaceTextRange([index, index + 1], "")
45+
}));
46+
})
3847
})
3948
}
4049
}
50+
}
51+
export default {
52+
linter: reporter,
53+
fixer: reporter
4154
}

test/3.3-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ tester.run("3.3.かっこ類と隣接する文字の間のスペースの有無"
1111
invalid: [
1212
{
1313
text: "「 ダメ」",
14+
output: "「ダメ」",
1415
errors: [
1516
{message: "かっこの外側、内側ともにスペースを入れません。"}
1617
]
1718
},
1819
{
1920
text: "これは 「ダメ」です",
21+
output: "これは「ダメ」です",
2022
errors: [
2123
{message: "かっこの外側、内側ともにスペースを入れません。"}
2224
]

0 commit comments

Comments
 (0)