1
1
// LICENSE : MIT
2
2
"use strict" ;
3
3
import { isUserWrittenNode } from "./util/node-util" ;
4
+ import { matchAll } from "./util/match-index" ;
5
+
4
6
/*
5
7
3.1.2. 全角文字どうし
6
8
7
9
原則として、全角文字どうしの間にスペースを入れません。ただしカタカナ複合語の場合を除きます。
8
10
「2.1.7 カタカナ複合語」を参照してください。
9
11
*/
10
- export default function ( context ) {
11
- let { Syntax, RuleError, report, getSource} = context ;
12
+ function reporter ( context ) {
13
+ let { Syntax, RuleError, report, fixer , getSource} = context ;
12
14
return {
13
15
[ Syntax . Str ] ( node ) {
14
16
if ( ! isUserWrittenNode ( node , context ) ) {
15
17
return ;
16
18
}
17
- let text = getSource ( node ) ;
19
+ const text = getSource ( node ) ;
18
20
// 全角同士の間は半角スペースを入れない
19
- let matchReg = / ( [ \u3400 - \u4DBF \u4E00 - \u9FFF \uF900 - \uFAFF ] | [ \uD840 - \uD87F ] [ \uDC00 - \uDFFF ] | [ ぁ - ん ァ - ヶ ] ) ( [ \u3400 - \u4DBF \u4E00 - \u9FFF \uF900 - \uFAFF ] | [ \uD840 - \uD87F ] [ \uDC00 - \uDFFF ] | [ ぁ - ん ァ - ヶ ] ) / g;
20
- let katakakana = / [ ァ - ヶ ] [ ァ - ヶ ] / ;
21
- if ( matchReg . test ( text ) ) {
22
- var matches = text . match ( matchReg ) ;
23
- matches . forEach ( match => {
24
- // ただし、カタカナ同士は例外
25
- if ( ! katakakana . test ( match ) ) {
26
- report ( node , new RuleError ( "原則として、全角文字どうしの間にスペースを入れません。" ) )
27
- }
28
- } )
29
- }
21
+ const matchReg = / (?: [ \u3400 - \u4DBF \u4E00 - \u9FFF \uF900 - \uFAFF ] | [ \uD840 - \uD87F ] [ \uDC00 - \uDFFF ] | [ ぁ - ん ァ - ヶ ] ) ( ) (?: [ \u3400 - \u4DBF \u4E00 - \u9FFF \uF900 - \uFAFF ] | [ \uD840 - \uD87F ] [ \uDC00 - \uDFFF ] | [ ぁ - ん ァ - ヶ ] ) / g;
22
+ const katakakana = / [ ァ - ヶ ] ( ) [ ァ - ヶ ] / ;
23
+ matchAll ( text , matchReg ) . forEach ( match => {
24
+ const { input, captureGroups} = match ;
25
+ // ただしカタカナ複合語の場合を除きます。
26
+ if ( katakakana . test ( input ) ) {
27
+ return ;
28
+ }
29
+ captureGroups . forEach ( captureGroup => {
30
+ const index = captureGroup . index ;
31
+ report ( node , new RuleError ( "原則として、全角文字どうしの間にスペースを入れません。" , {
32
+ column : index ,
33
+ fix : fixer . replaceTextRange ( [ index , index + 1 ] , "" )
34
+ } ) ) ;
35
+ } ) ;
36
+ } ) ;
30
37
}
31
38
}
39
+ }
40
+ export default {
41
+ linter : reporter ,
42
+ fixer : reporter
32
43
}
0 commit comments